aboutsummaryrefslogtreecommitdiff
path: root/src/cmd
diff options
context:
space:
mode:
authorDavid Jeannot <djeannot24@gmail.com>2012-01-16 17:07:24 -0500
committerRuss Cox <rsc@swtch.com>2012-01-16 17:07:24 -0500
commita995f469b3e412ae39a57efa4472592a55248aac (patch)
tree3e7f0b44945ac22e1a5476003df39968f1f94bf7 /src/cmd
parent68e24566b6ba442b2bdba2dfc111c5a0d333cc42 (diff)
downloadplan9port-a995f469b3e412ae39a57efa4472592a55248aac.tar.gz
plan9port-a995f469b3e412ae39a57efa4472592a55248aac.tar.bz2
plan9port-a995f469b3e412ae39a57efa4472592a55248aac.zip
devdraw: remove old OS X code
R=rsc CC=plan9port.codebot http://codereview.appspot.com/5528046
Diffstat (limited to 'src/cmd')
-rw-r--r--src/cmd/devdraw/mkfile4
-rw-r--r--src/cmd/devdraw/osx-delegate.h15
-rw-r--r--src/cmd/devdraw/osx-delegate.m282
-rw-r--r--src/cmd/devdraw/osx-screen.m680
-rw-r--r--src/cmd/devdraw/osx-srv.m454
5 files changed, 0 insertions, 1435 deletions
diff --git a/src/cmd/devdraw/mkfile b/src/cmd/devdraw/mkfile
index 1194c79a..cad244ac 100644
--- a/src/cmd/devdraw/mkfile
+++ b/src/cmd/devdraw/mkfile
@@ -40,10 +40,6 @@ $O.macargv: $MACARGV
CLEANFILES=$O.macargv $O.mklatinkbd latin1.h
-# old attempt
-devdraw-cocoa: devdraw.o latin1.o mouseswap.o winsize.o osx-screen-objc.o osx-draw.o osx-srv-objc.o osx-delegate-objc.o
- $LD -o $target $prereq
-
install: mklatinkbd.install
install:Q:
if [ $MACARGV ]; then
diff --git a/src/cmd/devdraw/osx-delegate.h b/src/cmd/devdraw/osx-delegate.h
deleted file mode 100644
index 77dde759..00000000
--- a/src/cmd/devdraw/osx-delegate.h
+++ /dev/null
@@ -1,15 +0,0 @@
-#import <Foundation/NSObject.h>
-#import <AppKit/NSMenu.h>
-
-@class NSFileHandle;
-
-@interface DevdrawDelegate : NSObject
-{
- NSFileHandle *readHandle;
-}
-+(void)populateMainMenu;
-+(void)populateApplicationMenu:(NSMenu *)aMenu;
-+(void)populateViewMenu:(NSMenu *)aMenu;
-+(void)populateWindowMenu:(NSMenu *)aMenu;
-+(void)populateHelpMenu:(NSMenu *)aMenu;
-@end
diff --git a/src/cmd/devdraw/osx-delegate.m b/src/cmd/devdraw/osx-delegate.m
deleted file mode 100644
index c4a5f5bb..00000000
--- a/src/cmd/devdraw/osx-delegate.m
+++ /dev/null
@@ -1,282 +0,0 @@
-#define Point OSXPoint
-#define Rect OSXRect
-#define Cursor OSXCursor
-#import "osx-delegate.h"
-#import <Foundation/Foundation.h>
-#import <AppKit/AppKit.h>
-#undef Cursor
-#undef Rect
-#undef Point
-
-#include <u.h>
-#include <errno.h>
-#include <sys/select.h>
-#include <libc.h>
-#include <draw.h>
-#include <memdraw.h>
-#include <memlayer.h>
-#include <keyboard.h>
-#include <mouse.h>
-#include <cursor.h>
-#include <drawfcall.h>
-
-AUTOFRAMEWORK(Foundation)
-AUTOFRAMEWORK(AppKit)
-
-extern int trace;
-
-extern void fullscreen(int);
-extern void kbdevent(NSEvent *event);
-extern void mouseevent(NSEvent *event);
-extern void eresized(int);
-
-extern void runmsg(Wsysmsg *m);
-extern void seticon();
-
-@implementation DevdrawDelegate
-+(void)populateMainMenu
-{
- NSMenu *mainMenu = [[NSMenu alloc] initWithTitle:@"MainMenu"];
- NSMenuItem *menuItem;
- NSMenu *submenu;
-
- menuItem = [mainMenu addItemWithTitle:@"Apple" action:NULL keyEquivalent:@""];
- submenu = [[NSMenu alloc] initWithTitle:@"Apple"];
- [NSApp performSelector:@selector(setAppleMenu:) withObject:submenu];
- [self populateApplicationMenu:submenu];
- [mainMenu setSubmenu:submenu forItem:menuItem];
-
- menuItem = [mainMenu addItemWithTitle:@"View" action:NULL keyEquivalent:@""];
- submenu = [[NSMenu alloc] initWithTitle:NSLocalizedString(@"View", "@The View menu")];
- [self populateViewMenu:submenu];
- [mainMenu setSubmenu:submenu forItem:menuItem];
-
- menuItem = [mainMenu addItemWithTitle:@"Window" action:NULL keyEquivalent:@""];
- submenu = [[NSMenu alloc] initWithTitle:NSLocalizedString(@"Window", @"The Window menu")];
- [self populateWindowMenu:submenu];
- [mainMenu setSubmenu:submenu forItem:menuItem];
- [NSApp setWindowsMenu:submenu];
-
- menuItem = [mainMenu addItemWithTitle:@"Help" action:NULL keyEquivalent:@""];
- submenu = [[NSMenu alloc] initWithTitle:NSLocalizedString(@"Help", @"The Help menu")];
- [self populateHelpMenu:submenu];
- [mainMenu setSubmenu:submenu forItem:menuItem];
-
- [NSApp setMainMenu:mainMenu];
-}
-
-+(void)populateApplicationMenu:(NSMenu *)aMenu
-{
- NSString *applicationName = [[NSProcessInfo processInfo] processName];
- NSMenuItem *menuItem;
-
- menuItem = [aMenu addItemWithTitle:[NSString stringWithFormat:@"%@ %@", NSLocalizedString(@"About", nil), applicationName]
- action:@selector(orderFrontStandardAboutPanel:)
- keyEquivalent:@""];
- [menuItem setTarget:NSApp];
-
- [aMenu addItem:[NSMenuItem separatorItem]];
-
- menuItem = [aMenu addItemWithTitle:NSLocalizedString(@"Preferences...", nil)
- action:NULL
- keyEquivalent:@","];
-
- [aMenu addItem:[NSMenuItem separatorItem]];
-
- menuItem = [aMenu addItemWithTitle:NSLocalizedString(@"Services", nil)
- action:NULL
- keyEquivalent:@""];
- NSMenu * servicesMenu = [[NSMenu alloc] initWithTitle:@"Services"];
- [aMenu setSubmenu:servicesMenu forItem:menuItem];
- [NSApp setServicesMenu:servicesMenu];
-
- [aMenu addItem:[NSMenuItem separatorItem]];
-
- menuItem = [aMenu addItemWithTitle:[NSString stringWithFormat:@"%@ %@", NSLocalizedString(@"Hide", nil), applicationName]
- action:@selector(hide:)
- keyEquivalent:@"h"];
- [menuItem setTarget:NSApp];
-
- menuItem = [aMenu addItemWithTitle:NSLocalizedString(@"Hide Others", nil)
- action:@selector(hideOtherApplications:)
- keyEquivalent:@"h"];
- [menuItem setKeyEquivalentModifierMask:NSCommandKeyMask | NSAlternateKeyMask];
- [menuItem setTarget:NSApp];
-
- menuItem = [aMenu addItemWithTitle:NSLocalizedString(@"Show All", nil)
- action:@selector(unhideAllApplications:)
- keyEquivalent:@""];
- [menuItem setTarget:NSApp];
-
- [aMenu addItem:[NSMenuItem separatorItem]];
-
- menuItem = [aMenu addItemWithTitle:[NSString stringWithFormat:@"%@ %@", NSLocalizedString(@"Quit", nil), applicationName]
- action:@selector(terminate:)
- keyEquivalent:@"q"];
- [menuItem setTarget:NSApp];
-}
-
-+(void)populateViewMenu:(NSMenu *)aMenu
-{
- NSMenuItem *menuItem;
- menuItem = [aMenu addItemWithTitle:NSLocalizedString(@"Full Screen", nil)
- action:@selector(fullscreen:) keyEquivalent:@"F"];
- [menuItem setTarget:NSApp];
-
- menuItem = [aMenu addItemWithTitle:NSLocalizedString(@"Cmd-F exits full screen", nil)
- action:NULL keyEquivalent:@""];
-}
-
-+(void)populateWindowMenu:(NSMenu *)aMenu
-{
-}
-
-+(void)populateHelpMenu:(NSMenu *)aMenu
-{
-}
-
-- (void)applicationWillFinishLaunching:(NSNotification *)notification
-{
- seticon();
-}
-
-- (void)applicationDidFinishLaunching:(NSNotification *)notification
-{
- [DevdrawDelegate populateMainMenu];
-
-// [NSThread detachNewThreadSelector:@selector(devdrawMain)
-// toTarget:self withObject:nil];
-// [NSApplication detachDrawingThread:@selector(devdrawMain)
-// toTarget:self withObject:nil];
- [readHandle waitForDataInBackgroundAndNotify];
-}
-
-- (id)init
-{
- if(self = [super init]){
- readHandle = [[NSFileHandle alloc] initWithFileDescriptor:3 closeOnDealloc:YES];
- [[NSNotificationCenter defaultCenter] addObserver:self
- selector:@selector(devdrawMain:)
- name:NSFileHandleDataAvailableNotification
- object:readHandle];
- [[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self
- selector:@selector(receiveWake:)
- name:NSWorkspaceDidWakeNotification
- object:NULL];
- }
- return self;
-}
-
-- (void)dealloc
-{
- [[NSNotificationCenter defaultCenter] removeObserver:self];
- [readHandle release];
- return [super dealloc];
-}
-
-- (void)devdrawMain:(NSNotification *)notification
-{
- uchar buf[4], *mbuf;
- int nmbuf, n, nn;
- Wsysmsg m;
- NSData *data;
-
- mbuf = nil;
- nmbuf = 0;
-
- data = [readHandle readDataOfLength:4];
- if([data length] == 4){
- [data getBytes:buf length:4];
- GET(buf, n);
- if(n > nmbuf){
- free(mbuf);
- mbuf = malloc(4+n);
- if(mbuf == nil)
- sysfatal("malloc: %r");
- nmbuf = n;
- }
- memmove(mbuf, buf, 4);
- data = [readHandle readDataOfLength:(n-4)];
- [data getBytes:(mbuf+4)];
- nn = [data length];
- if(nn != n-4)
- sysfatal("eof during message");
-
- /* pick off messages one by one */
- if(convM2W(mbuf, nn+4, &m) <= 0)
- sysfatal("cannot convert message");
- if(trace) fprint(2, "<- %W\n", &m);
- runmsg(&m);
- } else {
- [NSApp terminate:self];
- }
- [readHandle waitForDataInBackgroundAndNotify];
-
-return;
-
- while((n = read(3, buf, 4)) == 4){
- GET(buf, n);
- if(n > nmbuf){
- free(mbuf);
- mbuf = malloc(4+n);
- if(mbuf == nil)
- sysfatal("malloc: %r");
- nmbuf = n;
- }
- memmove(mbuf, buf, 4);
- nn = readn(3, mbuf+4, n-4);
- if(nn != n-4)
- sysfatal("eof during message");
-
- /* pick off messages one by one */
- if(convM2W(mbuf, nn+4, &m) <= 0)
- sysfatal("cannot convert message");
- if(trace) fprint(2, "<- %W\n", &m);
- runmsg(&m);
- }
-}
-
-#pragma mark Notifications
-
-- (void)fullscreen:(NSNotification *)notification
-{
- fullscreen(1);
-}
-
-- (void)windowWillClose:(NSNotification *)notification
-{
-// if(osx.window == [notification object]){
- [[NSNotificationCenter defaultCenter] removeObserver:self];
- [NSApp terminate:self];
-// }
-}
-
-- (void)windowDidResize:(NSNotification *)notification
-{
-// if(osx.window == [notification object]) {
- eresized(1);
-// }
-}
-
-- (void)receiveWake:(NSNotification *)notification
-{
- if(trace) NSLog(@"%s:%d %@", __FILE__, __LINE__, notification);
- // redraw
-}
-
-- (void)mouseDown:(NSEvent *)anEvent
-{
- mouseevent(anEvent);
-}
-
-- (void)mouseDragged:(NSEvent *)anEvent
-{
- mouseevent(anEvent);
-}
-
-- (void)keydown:(NSEvent *)anEvent
-{
- kbdevent(anEvent);
-}
-
-@end
diff --git a/src/cmd/devdraw/osx-screen.m b/src/cmd/devdraw/osx-screen.m
deleted file mode 100644
index 7b1da4f6..00000000
--- a/src/cmd/devdraw/osx-screen.m
+++ /dev/null
@@ -1,680 +0,0 @@
-#define Point OSXPoint
-#define Rect OSXRect
-#define Cursor OSXCursor
-#import <Cocoa/Cocoa.h>
-#import <AppKit/AppKit.h>
-#undef Rect
-#undef Point
-#undef Cursor
-#undef offsetof
-#undef nil
-
-#include <u.h>
-#include <libc.h>
-#include <draw.h>
-#include <memdraw.h>
-#include <keyboard.h>
-#include <mouse.h>
-#include <cursor.h>
-#include "osx-screen.h"
-#include "osx-keycodes.h"
-#include "devdraw.h"
-#include "glendapng.h"
-
-AUTOFRAMEWORK(Cocoa)
-
-#define panic sysfatal
-
-extern Rectangle mouserect;
-
-struct {
- char *label;
- char *winsize;
- QLock labellock;
-
- Rectangle fullscreenr;
- Rectangle screenr;
- Memimage *screenimage;
- int isfullscreen;
- ulong fullscreentime;
-
- Point xy;
- int buttons;
- int kbuttons;
-
- CGDataProviderRef provider;
- NSWindow *window;
- CGImageRef image;
- CGContextRef windowctx;
-
- int needflush;
- QLock flushlock;
- int active;
- int infullscreen;
- int kalting; // last keystroke was Kalt
-} osx;
-
-enum
-{
- WindowAttrs = NSClosableWindowMask |
- NSTitledWindowMask |
- NSMiniaturizableWindowMask |
- NSResizableWindowMask
-};
-
-static void screenproc(void*);
- void eresized(int);
- void fullscreen(int);
- void seticon(void);
-static void activated(int);
-
-enum
-{
- CmdFullScreen = 1,
-};
-
-@interface P9View : NSView
-{}
-@end
-
-@implementation P9View
-- (BOOL)acceptsFirstResponder
-{
- return YES;
-}
-@end
-
-void screeninit(void);
-void _flushmemscreen(Rectangle r);
-
-Memimage*
-attachscreen(char *label, char *winsize)
-{
- if(label == nil)
- label = "gnot a label";
- osx.label = strdup(label);
- osx.winsize = winsize;
- if(osx.screenimage == nil){
- screeninit();
- if(osx.screenimage == nil)
- panic("cannot create OS X screen");
- }
- return osx.screenimage;
-}
-
-void
-_screeninit(void)
-{
- CGRect cgr;
- NSRect or;
- Rectangle r;
- int havemin;
-
- memimageinit();
-
- cgr = CGDisplayBounds(CGMainDisplayID());
- osx.fullscreenr = Rect(0, 0, cgr.size.width, cgr.size.height);
-
- // Create the window.
- r = Rect(0, 0, Dx(osx.fullscreenr)*2/3, Dy(osx.fullscreenr)*2/3);
- havemin = 0;
- if(osx.winsize && osx.winsize[0]){
- if(parsewinsize(osx.winsize, &r, &havemin) < 0)
- sysfatal("%r");
- }
- if(!havemin)
- r = rectaddpt(r, Pt((Dx(osx.fullscreenr)-Dx(r))/2, (Dy(osx.fullscreenr)-Dy(r))/2));
- or = NSMakeRect(r.min.x, r.min.y, r.max.x, r.max.y);
- osx.window = [[NSWindow alloc] initWithContentRect:or styleMask:WindowAttrs
- backing:NSBackingStoreBuffered defer:NO screen:[NSScreen mainScreen]];
- [osx.window setDelegate:[NSApp delegate]];
- [osx.window setAcceptsMouseMovedEvents:YES];
-
- P9View *view = [[P9View alloc] initWithFrame:or];
- [osx.window setContentView:view];
- [view release];
-
- setlabel(osx.label);
- seticon();
-
- // Finally, put the window on the screen.
- eresized(0);
- [osx.window makeKeyAndOrderFront:nil];
-
- [NSCursor unhide];
-}
-
-static Rendez scr;
-static QLock slock;
-
-void
-screeninit(void)
-{
- scr.l = &slock;
- qlock(scr.l);
-// proccreate(screenproc, nil, 256*1024);
- screenproc(NULL);
- while(osx.window == nil)
- rsleep(&scr);
- qunlock(scr.l);
-}
-
-static void
-screenproc(void *v)
-{
- qlock(scr.l);
- _screeninit();
- rwakeup(&scr);
- qunlock(scr.l);
-}
-
-static ulong
-msec(void)
-{
- return nsec()/1000000;
-}
-
-//static void
-void
-mouseevent(NSEvent *event)
-{
- int wheel;
- NSPoint op;
-
- op = [event locationInWindow];
-
- osx.xy = subpt(Pt(op.x, op.y), osx.screenr.min);
- wheel = 0;
-
- switch([event type]){
- case NSScrollWheel:;
- CGFloat delta = [event deltaY];
- if(delta > 0)
- wheel = 8;
- else
- wheel = 16;
- break;
-
- case NSLeftMouseDown:
- case NSRightMouseDown:
- case NSOtherMouseDown:
- case NSLeftMouseUp:
- case NSRightMouseUp:
- case NSOtherMouseUp:;
- NSInteger but;
- NSUInteger mod;
- but = [event buttonNumber];
- mod = [event modifierFlags];
-
- // OS X swaps button 2 and 3
- but = (but & ~6) | ((but & 4)>>1) | ((but&2)<<1);
- but = mouseswap(but);
-
- // Apply keyboard modifiers and pretend it was a real mouse button.
- // (Modifiers typed while holding the button go into kbuttons,
- // but this one does not.)
- if(but == 1){
- if(mod & NSAlternateKeyMask) {
- // Take the ALT away from the keyboard handler.
- if(osx.kalting) {
- osx.kalting = 0;
- keystroke(Kalt);
- }
- but = 2;
- }
- else if(mod & NSCommandKeyMask)
- but = 4;
- }
- osx.buttons = but;
- break;
-
- case NSMouseMoved:
- case NSLeftMouseDragged:
- case NSRightMouseDragged:
- case NSOtherMouseDragged:
- break;
-
- default:
- return;
- }
-
- mousetrack(osx.xy.x, osx.xy.y, osx.buttons|osx.kbuttons|wheel, msec());
-}
-
-static int keycvt[] =
-{
- [QZ_IBOOK_ENTER] '\n',
- [QZ_RETURN] '\n',
- [QZ_ESCAPE] 27,
- [QZ_BACKSPACE] '\b',
- [QZ_LALT] Kalt,
- [QZ_LCTRL] Kctl,
- [QZ_LSHIFT] Kshift,
- [QZ_F1] KF+1,
- [QZ_F2] KF+2,
- [QZ_F3] KF+3,
- [QZ_F4] KF+4,
- [QZ_F5] KF+5,
- [QZ_F6] KF+6,
- [QZ_F7] KF+7,
- [QZ_F8] KF+8,
- [QZ_F9] KF+9,
- [QZ_F10] KF+10,
- [QZ_F11] KF+11,
- [QZ_F12] KF+12,
- [QZ_INSERT] Kins,
- [QZ_DELETE] 0x7F,
- [QZ_HOME] Khome,
- [QZ_END] Kend,
- [QZ_KP_PLUS] '+',
- [QZ_KP_MINUS] '-',
- [QZ_TAB] '\t',
- [QZ_PAGEUP] Kpgup,
- [QZ_PAGEDOWN] Kpgdown,
- [QZ_UP] Kup,
- [QZ_DOWN] Kdown,
- [QZ_LEFT] Kleft,
- [QZ_RIGHT] Kright,
- [QZ_KP_MULTIPLY] '*',
- [QZ_KP_DIVIDE] '/',
- [QZ_KP_ENTER] '\n',
- [QZ_KP_PERIOD] '.',
- [QZ_KP0] '0',
- [QZ_KP1] '1',
- [QZ_KP2] '2',
- [QZ_KP3] '3',
- [QZ_KP4] '4',
- [QZ_KP5] '5',
- [QZ_KP6] '6',
- [QZ_KP7] '7',
- [QZ_KP8] '8',
- [QZ_KP9] '9',
-};
-
-//static void
-void
-kbdevent(NSEvent *event)
-{
- char ch;
- UInt32 code;
- UInt32 mod;
- int k;
-
- ch = [[event characters] characterAtIndex:0];
- code = [event keyCode];
- mod = [event modifierFlags];
-
- switch([event type]){
- case NSKeyDown:
- osx.kalting = 0;
- if(mod == NSCommandKeyMask){
- if(ch == 'F' || ch == 'f'){
- if(osx.isfullscreen && msec() - osx.fullscreentime > 500)
- fullscreen(0);
- return;
- }
-
- // Pass most Cmd keys through as Kcmd + ch.
- // OS X interprets a few no matter what we do,
- // so it is useless to pass them through as keystrokes too.
- switch(ch) {
- case 'm': // minimize window
- case 'h': // hide window
- case 'H': // hide others
- case 'q': // quit
- return;
- }
- if(' ' <= ch && ch <= '~') {
- keystroke(Kcmd + ch);
- return;
- }
- return;
- }
- k = ch;
- if(code < nelem(keycvt) && keycvt[code])
- k = keycvt[code];
- if(k >= 0)
- keystroke(k);
- else{
- keystroke(ch);
- }
- break;
-
- case NSFlagsChanged:
- if(!osx.buttons && !osx.kbuttons){
- if(mod == NSAlternateKeyMask) {
- osx.kalting = 1;
- keystroke(Kalt);
- }
- break;
- }
-
- // If the mouse button is being held down, treat
- // changes in the keyboard modifiers as changes
- // in the mouse buttons.
- osx.kbuttons = 0;
- if(mod & NSAlternateKeyMask)
- osx.kbuttons |= 2;
- if(mod & NSCommandKeyMask)
- osx.kbuttons |= 4;
- mousetrack(osx.xy.x, osx.xy.y, osx.buttons|osx.kbuttons, msec());
- break;
- }
- return;
-}
-
-//static void
-void
-eresized(int new)
-{
- Memimage *m;
- NSRect or;
- ulong chan;
- Rectangle r;
- int bpl;
- CGDataProviderRef provider;
- CGImageRef image;
- CGColorSpaceRef cspace;
-
- or = [[osx.window contentView] bounds];
- r = Rect(or.origin.x, or.origin.y, or.size.width, or.size.height);
- if(Dx(r) == Dx(osx.screenr) && Dy(r) == Dy(osx.screenr)){
- // No need to make new image.
- osx.screenr = r;
- return;
- }
-
- chan = XBGR32;
- m = allocmemimage(Rect(0, 0, Dx(r), Dy(r)), chan);
- if(m == nil)
- panic("allocmemimage: %r");
- if(m->data == nil)
- panic("m->data == nil");
- bpl = bytesperline(r, 32);
- provider = CGDataProviderCreateWithData(0,
- m->data->bdata, Dy(r)*bpl, 0);
- //cspace = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB);
- cspace = CGColorSpaceCreateDeviceRGB();
- image = CGImageCreate(Dx(r), Dy(r), 8, 32, bpl,
- cspace,
- kCGImageAlphaNoneSkipLast,
- provider, 0, 0, kCGRenderingIntentDefault);
- CGColorSpaceRelease(cspace);
- CGDataProviderRelease(provider); // CGImageCreate did incref
-
- mouserect = m->r;
- if(new){
- mouseresized = 1;
- mousetrack(osx.xy.x, osx.xy.y, osx.buttons|osx.kbuttons, msec());
- }
-// termreplacescreenimage(m);
- _drawreplacescreenimage(m); // frees old osx.screenimage if any
- if(osx.image)
- CGImageRelease(osx.image);
- osx.image = image;
- osx.screenimage = m;
- osx.screenr = r;
-}
-
-void
-flushproc(void *v)
-{
- for(;;){
- if(osx.needflush && osx.windowctx && canqlock(&osx.flushlock)){
- if(osx.windowctx){
- CGContextFlush(osx.windowctx);
- osx.needflush = 0;
- }
- qunlock(&osx.flushlock);
- }
- usleep(33333);
- }
-}
-
-void
-_flushmemscreen(Rectangle r)
-{
- CGRect cgr;
- CGImageRef subimg;
-
- qlock(&osx.flushlock);
- if(osx.windowctx == nil){
- osx.windowctx = [[osx.window graphicsContext] graphicsPort];
-// [osx.window flushWindow];
-// proccreate(flushproc, nil, 256*1024);
- }
-
- cgr.origin.x = r.min.x;
- cgr.origin.y = r.min.y;
- cgr.size.width = Dx(r);
- cgr.size.height = Dy(r);
- subimg = CGImageCreateWithImageInRect(osx.image, cgr);
- cgr.origin.y = Dy(osx.screenr) - r.max.y; // XXX how does this make any sense?
- CGContextDrawImage(osx.windowctx, cgr, subimg);
- osx.needflush = 1;
- qunlock(&osx.flushlock);
- CGImageRelease(subimg);
-}
-
-void
-activated(int active)
-{
- osx.active = active;
-}
-
-void
-fullscreen(int wascmd)
-{
- NSView *view = [osx.window contentView];
-
- if(osx.isfullscreen){
- [view exitFullScreenModeWithOptions:nil];
- osx.isfullscreen = 0;
- }else{
- [view enterFullScreenMode:[osx.window screen] withOptions:nil];
- osx.isfullscreen = 1;
- osx.fullscreentime = msec();
- }
- eresized(1);
-}
-
-void
-setmouse(Point p)
-{
- CGPoint cgp;
-
- cgp.x = p.x + osx.screenr.min.x;
- cgp.y = p.y + osx.screenr.min.y;
- CGWarpMouseCursorPosition(cgp);
-}
-
-void
-setcursor(Cursor *c)
-{
- NSImage *image;
- NSBitmapImageRep *bitmap;
- NSCursor *nsc;
- unsigned char *planes[5];
- int i;
-
- if(c == nil){
- [NSCursor pop];
- return;
- }
-
- image = [[NSImage alloc] initWithSize:NSMakeSize(16.0, 16.0)];
- bitmap = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:NULL
- pixelsWide:16
- pixelsHigh:16
- bitsPerSample:1
- samplesPerPixel:2
- hasAlpha:YES
- isPlanar:YES
- colorSpaceName:NSCalibratedWhiteColorSpace
- bytesPerRow:2
- bitsPerPixel:1];
-
- [bitmap getBitmapDataPlanes:planes];
-
- for(i=0; i<16; i++){
- planes[0][i] = ((ushort*)c->set)[i];
- planes[1][i] = planes[0][i] | ((ushort*)c->clr)[i];
- }
-
- [image addRepresentation:bitmap];
-
- nsc = [[NSCursor alloc] initWithImage:image
- hotSpot:NSMakePoint(c->offset.x, c->offset.y)];
- [nsc push];
-
- [image release];
- [bitmap release];
- [nsc release];
-}
-
-void
-getcolor(ulong i, ulong *r, ulong *g, ulong *b)
-{
- ulong v;
-
- v = 0;
- *r = (v>>16)&0xFF;
- *g = (v>>8)&0xFF;
- *b = v&0xFF;
-}
-
-int
-setcolor(ulong i, ulong r, ulong g, ulong b)
-{
- /* no-op */
- return 0;
-}
-
-
-int
-hwdraw(Memdrawparam *p)
-{
- return 0;
-}
-
-struct {
- QLock lk;
- char buf[SnarfSize];
- Rune rbuf[SnarfSize];
- NSPasteboard *apple;
-} clip;
-
-char*
-getsnarf(void)
-{
- char *s, *t;
- NSArray *types;
- NSString *string;
- NSData * data;
- NSUInteger ndata;
-
-/* fprint(2, "applegetsnarf\n"); */
- qlock(&clip.lk);
-
- clip.apple = [NSPasteboard generalPasteboard];
- types = [clip.apple types];
-
- string = [clip.apple stringForType:NSStringPboardType];
- if(string == nil){
- fprint(2, "apple pasteboard get item type failed\n");
- qunlock(&clip.lk);
- return nil;
- }
-
- data = [string dataUsingEncoding:NSUnicodeStringEncoding];
- if(data != nil){
- ndata = [data length];
- qunlock(&clip.lk);
- s = smprint("%.*S", ndata/2, (Rune*)[data bytes]);
- for(t=s; *t; t++)
- if(*t == '\r')
- *t = '\n';
- return s;
- }
-
- qunlock(&clip.lk);
- return nil;
-}
-
-void
-putsnarf(char *s)
-{
- NSArray *pboardTypes;
- NSString *string;
-
-/* fprint(2, "appleputsnarf\n"); */
-
- if(strlen(s) >= SnarfSize)
- return;
- qlock(&clip.lk);
- strcpy(clip.buf, s);
- runesnprint(clip.rbuf, nelem(clip.rbuf), "%s", s);
-
- pboardTypes = [NSArray arrayWithObject:NSStringPboardType];
-
- clip.apple = [NSPasteboard generalPasteboard];
- [clip.apple declareTypes:pboardTypes owner:nil];
-
- assert(sizeof(clip.rbuf[0]) == 2);
- string = [NSString stringWithCharacters:clip.rbuf length:runestrlen(clip.rbuf)*2];
- if(string == nil){
- fprint(2, "apple pasteboard data create failed\n");
- qunlock(&clip.lk);
- return;
- }
- if(![clip.apple setString:string forType:NSStringPboardType]){
- fprint(2, "apple pasteboard putitem failed\n");
- qunlock(&clip.lk);
- return;
- }
- qunlock(&clip.lk);
-}
-
-void
-setlabel(char *label)
-{
- CFStringRef cs;
- cs = CFStringCreateWithBytes(nil, (uchar*)label, strlen(osx.label), kCFStringEncodingUTF8, false);
- [osx.window setTitle:(NSString*)cs];
- CFRelease(cs);
-}
-
-void
-kicklabel(char *label)
-{
- char *p;
-
- p = strdup(label);
- if(p == nil)
- return;
- qlock(&osx.labellock);
- free(osx.label);
- osx.label = p;
- qunlock(&osx.labellock);
-
- setlabel(label);
-}
-
-// static void
-void
-seticon(void)
-{
- NSImage *im;
- NSData *d;
-
- d = [[NSData alloc] initWithBytes:glenda_png length:(sizeof glenda_png)];
- im = [[NSImage alloc] initWithData:d];
- if(im){
- NSLog(@"here");
- [NSApp setApplicationIconImage:im];
- [[NSApp dockTile] setShowsApplicationBadge:YES];
- [[NSApp dockTile] display];
- }
- [d release];
- [im release];
-}
diff --git a/src/cmd/devdraw/osx-srv.m b/src/cmd/devdraw/osx-srv.m
deleted file mode 100644
index b7828af2..00000000
--- a/src/cmd/devdraw/osx-srv.m
+++ /dev/null
@@ -1,454 +0,0 @@
-#define Point OSXPoint
-#define Rect OSXRect
-#define Cursor OSXCursor
-#import <AppKit/AppKit.h>
-#undef Rect
-#undef Point
-#undef Cursor
-
-/*
- * Window system protocol server.
- */
-
-#include <u.h>
-#include <errno.h>
-#include <sys/select.h>
-#include <libc.h>
-#include <draw.h>
-#include <memdraw.h>
-#include <memlayer.h>
-#include <keyboard.h>
-#include <mouse.h>
-#include <cursor.h>
-#include <drawfcall.h>
-#include "osx-screen.h"
-#include "devdraw.h"
-
-AUTOFRAMEWORK(AppKit)
-
-#import "osx-delegate.h"
-
-#undef time
-
-#define MouseMask (\
- ButtonPressMask|\
- ButtonReleaseMask|\
- PointerMotionMask|\
- Button1MotionMask|\
- Button2MotionMask|\
- Button3MotionMask)
-
-#define Mask MouseMask|ExposureMask|StructureNotifyMask|KeyPressMask|EnterWindowMask|LeaveWindowMask
-
-typedef struct Kbdbuf Kbdbuf;
-typedef struct Mousebuf Mousebuf;
-typedef struct Fdbuf Fdbuf;
-typedef struct Tagbuf Tagbuf;
-
-struct Kbdbuf
-{
- Rune r[32];
- int ri;
- int wi;
- int stall;
-};
-
-struct Mousebuf
-{
- Mouse m[32];
- Mouse last;
- int ri;
- int wi;
- int stall;
-};
-
-struct Tagbuf
-{
- int t[32];
- int ri;
- int wi;
-};
-
-Kbdbuf kbd;
-Mousebuf mouse;
-Tagbuf kbdtags;
-Tagbuf mousetags;
-
-void fdslide(Fdbuf*);
-void runmsg(Wsysmsg*);
-void replymsg(Wsysmsg*);
-void matchkbd(void);
-void matchmouse(void);
-int fdnoblock(int);
-Rectangle mouserect;
-int mouseresized;
-
-
-QLock lk;
-void
-zlock(void)
-{
- qlock(&lk);
-}
-
-void
-zunlock(void)
-{
- qunlock(&lk);
-}
-
-int chatty;
-int drawsleep;
-int trace;
-
-void
-usage(void)
-{
- fprint(2, "usage: devdraw (don't run directly)\n");
- exits("usage");
-}
-
-void
-bell(void *v, char *msg)
-{
- if(strcmp(msg, "alarm") == 0)
- drawsleep = drawsleep ? 0 : 1000;
- noted(NCONT);
-}
-
-int
-main(int argc, char **argv)
-{
- NSAutoreleasePool *pool = nil;
- NSApplication *application = nil;
- DevdrawDelegate *app = nil;
- /*
- * Move the protocol off stdin/stdout so that
- * any inadvertent prints don't screw things up.
- */
- dup(0, 3);
- dup(1, 4);
- close(0);
- close(1);
- open("/dev/null", OREAD);
- open("/dev/null", OWRITE);
-
- trace = 1;
- fmtinstall('W', drawfcallfmt);
-
- ARGBEGIN{
- case 'D':
- chatty++;
- break;
- default:
- usage();
- }ARGEND
-
- /*
- * Ignore arguments. They're only for good ps -a listings.
- */
-
- notify(bell);
-
- pool = [[NSAutoreleasePool alloc] init];
- application = [NSApplication sharedApplication];
- app = [[DevdrawDelegate alloc] init];
- [application setDelegate:app];
- [application run];
- [application setDelegate:nil];
- [app release];
- [pool release];
- return 0;
-}
-
-void
-replyerror(Wsysmsg *m)
-{
- char err[256];
-
- rerrstr(err, sizeof err);
- m->type = Rerror;
- m->error = err;
- replymsg(m);
-}
-
-/*
- * Handle a single wsysmsg.
- * Might queue for later (kbd, mouse read)
- */
-void
-runmsg(Wsysmsg *m)
-{
- static uchar buf[65536];
- int n;
- Memimage *i;
-
- switch(m->type){
- case Tinit:
- memimageinit();
- i = attachscreen(m->label, m->winsize);
- _initdisplaymemimage(i);
- replymsg(m);
- break;
-
- case Trdmouse:
- // zlock();
- mousetags.t[mousetags.wi++] = m->tag;
- if(mousetags.wi == nelem(mousetags.t))
- mousetags.wi = 0;
- if(mousetags.wi == mousetags.ri)
- sysfatal("too many queued mouse reads");
- mouse.stall = 0;
- matchmouse();
- // zunlock();
- break;
-
- case Trdkbd:
- zlock();
- kbdtags.t[kbdtags.wi++] = m->tag;
- if(kbdtags.wi == nelem(kbdtags.t))
- kbdtags.wi = 0;
- if(kbdtags.wi == kbdtags.ri)
- sysfatal("too many queued keyboard reads");
- kbd.stall = 0;
- matchkbd();
- zunlock();
- break;
-
- case Tmoveto:
- setmouse(m->mouse.xy);
- replymsg(m);
- break;
-
- case Tcursor:
- if(m->arrowcursor)
- setcursor(nil);
- else
- setcursor(&m->cursor);
- replymsg(m);
- break;
-
- case Tbouncemouse:
- // _xbouncemouse(&m->mouse);
- replymsg(m);
- break;
-
- case Tlabel:
- kicklabel(m->label);
- replymsg(m);
- break;
-
- case Trdsnarf:
- m->snarf = getsnarf();
- replymsg(m);
- free(m->snarf);
- break;
-
- case Twrsnarf:
- putsnarf(m->snarf);
- replymsg(m);
- break;
-
- case Trddraw:
- n = m->count;
- if(n > sizeof buf)
- n = sizeof buf;
- n = _drawmsgread(buf, n);
- if(n < 0)
- replyerror(m);
- else{
- m->count = n;
- m->data = buf;
- replymsg(m);
- }
- break;
-
- case Twrdraw:
- if(_drawmsgwrite(m->data, m->count) < 0)
- replyerror(m);
- else
- replymsg(m);
- break;
-
- case Ttop:
- // _xtopwindow();
- replymsg(m);
- break;
-
- case Tresize:
- // _xresizewindow(m->rect);
- replymsg(m);
- break;
- }
-}
-
-/*
- * Reply to m.
- */
-QLock replylock;
-void
-replymsg(Wsysmsg *m)
-{
- int n;
- static uchar *mbuf;
- static int nmbuf;
-
- /* T -> R msg */
- if(m->type%2 == 0)
- m->type++;
-
- if(trace) fprint(2, "-> %W\n", m);
- /* copy to output buffer */
- n = sizeW2M(m);
-
- qlock(&replylock);
- if(n > nmbuf){
- free(mbuf);
- mbuf = malloc(n);
- if(mbuf == nil)
- sysfatal("out of memory");
- nmbuf = n;
- }
- convW2M(m, mbuf, n);
- if(write(4, mbuf, n) != n)
- sysfatal("write: %r");
- qunlock(&replylock);
-}
-
-/*
- * Match queued kbd reads with queued kbd characters.
- */
-void
-matchkbd(void)
-{
- Wsysmsg m;
-
- if(kbd.stall)
- return;
- while(kbd.ri != kbd.wi && kbdtags.ri != kbdtags.wi){
- m.type = Rrdkbd;
- m.tag = kbdtags.t[kbdtags.ri++];
- if(kbdtags.ri == nelem(kbdtags.t))
- kbdtags.ri = 0;
- m.rune = kbd.r[kbd.ri++];
- if(kbd.ri == nelem(kbd.r))
- kbd.ri = 0;
- replymsg(&m);
- }
-}
-
-/*
- * Match queued mouse reads with queued mouse events.
- */
-void
-matchmouse(void)
-{
- Wsysmsg m;
-
- while(mouse.ri != mouse.wi && mousetags.ri != mousetags.wi){
- m.type = Rrdmouse;
- m.tag = mousetags.t[mousetags.ri++];
- if(mousetags.ri == nelem(mousetags.t))
- mousetags.ri = 0;
- m.mouse = mouse.m[mouse.ri];
- m.resized = mouseresized;
- /*
- if(m.resized)
- fprint(2, "sending resize\n");
- */
- mouseresized = 0;
- mouse.ri++;
- if(mouse.ri == nelem(mouse.m))
- mouse.ri = 0;
- replymsg(&m);
- }
-}
-
-void
-mousetrack(int x, int y, int b, int ms)
-{
- Mouse *m;
-
- if(x < mouserect.min.x)
- x = mouserect.min.x;
- if(x > mouserect.max.x)
- x = mouserect.max.x;
- if(y < mouserect.min.y)
- y = mouserect.min.y;
- if(y > mouserect.max.y)
- y = mouserect.max.y;
-
-// zlock();
- // If reader has stopped reading, don't bother.
- // If reader is completely caught up, definitely queue.
- // Otherwise, queue only button change events.
- if(!mouse.stall)
- if(mouse.wi == mouse.ri || mouse.last.buttons != b){
- m = &mouse.last;
- m->xy.x = x;
- m->xy.y = y;
- m->buttons = b;
- m->msec = ms;
-
- mouse.m[mouse.wi] = *m;
- if(++mouse.wi == nelem(mouse.m))
- mouse.wi = 0;
- if(mouse.wi == mouse.ri){
- mouse.stall = 1;
- mouse.ri = 0;
- mouse.wi = 1;
- mouse.m[0] = *m;
- }
- matchmouse();
- }
-// zunlock();
-}
-
-void
-kputc(int c)
-{
- zlock();
- kbd.r[kbd.wi++] = c;
- if(kbd.wi == nelem(kbd.r))
- kbd.wi = 0;
- if(kbd.ri == kbd.wi)
- kbd.stall = 1;
- matchkbd();
- zunlock();
-}
-
-void
-keystroke(int c)
-{
- static Rune k[10];
- static int alting, nk;
- int i;
-
- if(c == Kalt){
- alting = !alting;
- return;
- }
- if(!alting){
- kputc(c);
- return;
- }
- if(nk >= nelem(k)) // should not happen
- nk = 0;
- k[nk++] = c;
- c = _latin1(k, nk);
- if(c > 0){
- alting = 0;
- kputc(c);
- nk = 0;
- return;
- }
- if(c == -1){
- alting = 0;
- for(i=0; i<nk; i++)
- kputc(k[i]);
- nk = 0;
- return;
- }
- // need more input
- return;
-}