--- a/WinWorkstation.st Thu Jul 22 18:32:24 2010 +0200
+++ b/WinWorkstation.st Thu Jul 22 18:54:52 2010 +0200
@@ -11346,967 +11346,961 @@
eB = __INST(eventBuffer);
if (__isByteArray(eB)) {
- ev = (struct queuedEvent *)(__ByteArrayInstPtr(eB)->ba_element);
+ ev = (struct queuedEvent *)(__ByteArrayInstPtr(eB)->ba_element);
} else {
- console_fprintf(stderr, "WinWorkstation [error]: no eventBuffer\n");
- RETURN (false);
+ console_fprintf(stderr, "WinWorkstation [error]: no eventBuffer\n");
+ RETURN (false);
}
if (ev) {
- _ev_buf = *ev;
- ev = &_ev_buf;
+ _ev_buf = *ev;
+ ev = &_ev_buf;
}
hWnd = ev->ev_hWnd;
if (!(hWnd /*&& IsWindow(hWnd)*/)) {
- DPRINTF(("wrong hWnd in event in dispatchLastEvent\n"));
- RETURN (false);
+ DPRINTF(("wrong hWnd in event in dispatchLastEvent\n"));
+ RETURN (false);
}
{
- OBJ t;
-
- /*
- * very often, its another event for the same view ...
- * avoid creation & lookup then.
- */
+ OBJ t;
+
+ /*
+ * very often, its another event for the same view ...
+ * avoid creation & lookup then.
+ */
#if 1
- if ((t = __INST(lastId)) != nil) {
- if (__isExternalAddress(t)) {
- if (_HWNDVal(t) == hWnd) {
- theView = __INST(lastView);
- if (__isNonNilObject(theView)) {
- if (__qClass(theView) == nil) {
- theView = nil;
- }
- }
- }
- }
- }
-#endif
- if (theView == nil) {
- windowID = __MKOBJ(ev->ev_hWnd);
- theView = (*vid.ilc_func)(self, @symbol(viewFromId:), nil, &vid, windowID);
- }
+ if ((t = __INST(lastId)) != nil) {
+ if (__isExternalAddress(t)) {
+ if (_HWNDVal(t) == hWnd) {
+ theView = __INST(lastView);
+ if (__isNonNilObject(theView)) {
+ if (__qClass(theView) == nil) {
+ theView = nil;
+ }
+ }
+ }
+ }
+ }
+#endif
+ if (theView == nil) {
+ windowID = __MKOBJ(ev->ev_hWnd);
+ theView = (*vid.ilc_func)(self, @symbol(viewFromId:), nil, &vid, windowID);
+ }
}
if (theView == nil) {
- DPRINTF(("nil view [hWnd=%x msg=0x%x] in dispatchEvent\n",
- ev->ev_hWnd, ev->ev_message));
-
- RETURN (false);
+ DPRINTF(("nil view [hWnd=%x msg=0x%x] in dispatchEvent\n",
+ ev->ev_hWnd, ev->ev_message));
+
+ RETURN (false);
}
switch (ev->ev_message) {
- case WM_WINDOWPOSCHANGED:
- {
- RECT rct;
-
- x = ev->ev_x;
- y = ev->ev_y;
- w = ev->ev_w;
- h = ev->ev_h;
-
- DPRINTF((">>> WM_WINDOWPOSCHANGED -> configure %d/%d , %d/%d\n", x,y,w,h));
-
- (*conf.ilc_func)(self,
- @symbol(configureX:y:width:height:view:),
- nil, &conf,
- __MKSMALLINT(x),
- __MKSMALLINT(y),
- __MKSMALLINT(w),
- __MKSMALLINT(h),
- theView);
- }
- break;
-
- case WM_DROPFILES:
- {
- HDROP hDrop = (HDROP) ev->ev_wParam;
- int count = DragQueryFile( hDrop,0xffffffff,0,0 );
-
- DPRINTFIF(__debug_WM_DROPFILES__ , ("count=%d hDrop=%x\n", count, hDrop));
- if (count > 0) {
- OBJ dropHandle, files, position;
- char buf[MAXPATH];
- int i;
-
- dropHandle = __MKOBJ(hDrop);
- __PROTECT__(dropHandle);
- files = __ARRAY_NEW_INT( count );
- __UNPROTECT__(dropHandle);
-
- for (i = 0;i < count;i++) {
- OBJ s;
-
- DragQueryFile(hDrop,i,buf,sizeof(buf));
- __PROTECT__(dropHandle);
- __PROTECT__(files);
- __PROTECT__(theView);
- s = __MKSTRING(buf);
- __UNPROTECT__(theView);
- __UNPROTECT__(files);
- __UNPROTECT__(dropHandle);
- __ArrayInstPtr(files)->a_element[i] = s; __STORE(files, s);
- }
-
- {
- POINT pos;
-
- DragQueryPoint(hDrop, &pos);
-
- __PROTECT__(dropHandle);
- __PROTECT__(files);
- __PROTECT__(theView);
- position = __MKPOINT_INT(pos.x, pos.y);
- __UNPROTECT__(theView);
- __UNPROTECT__(files);
- __UNPROTECT__(dropHandle);
- }
-
- (*dropFiles.ilc_func)
- ( self
- , @symbol(dropFiles:view:position:handle:)
- , nil, &dropFiles,
- files, theView, position, dropHandle
- );
- }
- }
- break;
-
- case WM_SHOWWINDOW:
- if (ev->ev_wParam == TRUE) {
- DPRINTF((">>> WM_SHOWWINDOW -> mappedView:\n"));
- arg = @symbol(unobscured);
- (*vis.ilc_func)(theView,
- @symbol(visibilityChange:),
- nil, &vis, arg);
- (*map.ilc_func)(self,
- @symbol(mappedView:),
- nil, &map, theView);
- } else {
- DPRINTF((">>> WM_SHOWWINDOW -> unMappedView:\n"));
+ case WM_WINDOWPOSCHANGED:
+ {
+ RECT rct;
+
+ x = ev->ev_x;
+ y = ev->ev_y;
+ w = ev->ev_w;
+ h = ev->ev_h;
+
+ DPRINTF((">>> WM_WINDOWPOSCHANGED -> configure %d/%d , %d/%d\n", x,y,w,h));
+
+ (*conf.ilc_func)(self,
+ @symbol(configureX:y:width:height:view:),
+ nil, &conf,
+ __MKSMALLINT(x),
+ __MKSMALLINT(y),
+ __MKSMALLINT(w),
+ __MKSMALLINT(h),
+ theView);
+ }
+ break;
+
+ case WM_DROPFILES:
+ {
+ HDROP hDrop = (HDROP) ev->ev_wParam;
+ int count = DragQueryFile( hDrop,0xffffffff,0,0 );
+
+ DPRINTFIF(__debug_WM_DROPFILES__ , ("count=%d hDrop=%x\n", count, hDrop));
+ if (count > 0) {
+ OBJ dropHandle, files, position;
+ char buf[MAXPATH];
+ int i;
+
+ dropHandle = __MKOBJ(hDrop);
+ __PROTECT__(dropHandle);
+ files = __ARRAY_NEW_INT( count );
+ __UNPROTECT__(dropHandle);
+
+ for (i = 0;i < count;i++) {
+ OBJ s;
+
+ DragQueryFile(hDrop,i,buf,sizeof(buf));
+ __PROTECT__(dropHandle);
+ __PROTECT__(files);
+ s = __MKSTRING(buf);
+ __UNPROTECT__(files);
+ __UNPROTECT__(dropHandle);
+ __ArrayInstPtr(files)->a_element[i] = s; __STORE(files, s);
+ }
+
+ {
+ POINT pos;
+
+ DragQueryPoint(hDrop, &pos);
+
+ __PROTECT__(dropHandle);
+ __PROTECT__(files);
+ position = __MKPOINT_INT(pos.x, pos.y);
+ __UNPROTECT__(files);
+ __UNPROTECT__(dropHandle);
+ }
+
+ (*dropFiles.ilc_func)
+ ( self
+ , @symbol(dropFiles:view:position:handle:)
+ , nil, &dropFiles,
+ files, theView, position, dropHandle
+ );
+ }
+ }
+ break;
+
+ case WM_SHOWWINDOW:
+ if (ev->ev_wParam == TRUE) {
+ DPRINTF((">>> WM_SHOWWINDOW -> mappedView:\n"));
+ arg = @symbol(unobscured);
+ (*vis.ilc_func)(theView,
+ @symbol(visibilityChange:),
+ nil, &vis, arg);
+ (*map.ilc_func)(self,
+ @symbol(mappedView:),
+ nil, &map, theView);
+ } else {
+ DPRINTF((">>> WM_SHOWWINDOW -> unMappedView:\n"));
#if 0
- arg = @symbol(fullyObscured);
- (*vis.ilc_func)(theView,
- @symbol(visibilityChange:),
- nil, &vis, arg);
-#endif
- (*unmap.ilc_func)(self,
- @symbol(unmappedView:),
- nil, &unmap, theView);
- }
- break;
-
- case __WM_ICONIFIED:
- if (ev->ev_wParam) {
- DPRINTF((">>> __WM_ICONIFIED -> unMappedView:\n"));
+ arg = @symbol(fullyObscured);
+ (*vis.ilc_func)(theView,
+ @symbol(visibilityChange:),
+ nil, &vis, arg);
+#endif
+ (*unmap.ilc_func)(self,
+ @symbol(unmappedView:),
+ nil, &unmap, theView);
+ }
+ break;
+
+ case __WM_ICONIFIED:
+ if (ev->ev_wParam) {
+ DPRINTF((">>> __WM_ICONIFIED -> unMappedView:\n"));
#if 0
- arg = @symbol(fullyObscured);
- (*vis.ilc_func)(theView,
- @symbol(visibilityChange:),
- nil, &vis, arg);
-#endif
- (*unmap.ilc_func)(self,
- @symbol(unmappedView:),
- nil, &unmap, theView);
- } else {
- DPRINTF((">>> __WM_DEICONIFIED -> mappedView:\n"));
- arg = @symbol(unobscured);
- (*vis.ilc_func)(theView,
- @symbol(visibilityChange:),
- nil, &vis, arg);
- (*map.ilc_func)(self,
- @symbol(mappedView:),
- nil, &map, theView);
- }
- break;
-
- case WM_CLOSE:
- DPRINTF((">>> WM_CLOSE -> terminateView:\n"));
- (*termS.ilc_func)(self,
- @symbol(terminateView:),
- nil, &termS, theView);
- break;
-
- case WM_DESTROY:
- DPRINTF((">>> WM_DESTROY -> destroyedView\n"));
- (*destr.ilc_func)(self,
- @symbol(destroyedView:),
- nil, &destr, theView);
- break;
-
- case WM_ACTIVATE:
-
- switch (LOWORD(ev->ev_wParam)) {
- case WA_INACTIVE:
- DPRINTF((">>> WM_ACTIVATE inactive h=%x\n", ev->ev_hWnd));
- (*act.ilc_func)(self,
- @symbol(activate:view:),
- nil, &act,
- false, theView);
- break;
-
- case WA_ACTIVE:
- case WA_CLICKACTIVE:
- DPRINTF((">>> WM_ACTIVATE active h=%x\n", ev->ev_hWnd));
- (*act.ilc_func)(self,
- @symbol(activate:view:),
- nil, &act,
- true, theView);
- break;
-
- default:
- break;
- }
- break;
-
- case WM_MOUSEACTIVATE:
- if (__debug_WM_MOUSEACTIVATE__) {
- PRINTF((">>> WM_MOUSEACTIVATE h=%x -> focusInView:\n", ev->ev_hWnd));
- }
-
- (*focIn.ilc_func)(self,
- @symbol(focusInView:),
- nil, &focIn, theView);
- break;
-
- case WM_SETFOCUS:
- DPRINTF((">>> WM_SETFOCUS h=%x -> focusInView:\n", ev->ev_hWnd));
- (*focIn.ilc_func)(self,
- @symbol(focusInView:),
- nil, &focIn, theView);
- break;
-
- case WM_KILLFOCUS:
- DPRINTF((">>> WM_KILLFOCUS h=%x -> focusOutOfView\n", ev->ev_hWnd));
- (*focOut.ilc_func)(self,
- @symbol(focusOutView:),
- nil, &focOut, theView);
- break;
-
- case __WM_GEXPOSE:
- x = ev->ev_x;
- y = ev->ev_y;
- w = ev->ev_w;
- h = ev->ev_h;
- DPRINTF((">>> __WM_GEXPOSE -> gExpose %d/%d -> %d/%d\n", x, y, w, h));
+ arg = @symbol(fullyObscured);
+ (*vis.ilc_func)(theView,
+ @symbol(visibilityChange:),
+ nil, &vis, arg);
+#endif
+ (*unmap.ilc_func)(self,
+ @symbol(unmappedView:),
+ nil, &unmap, theView);
+ } else {
+ DPRINTF((">>> __WM_DEICONIFIED -> mappedView:\n"));
+ arg = @symbol(unobscured);
+ (*vis.ilc_func)(theView,
+ @symbol(visibilityChange:),
+ nil, &vis, arg);
+ (*map.ilc_func)(self,
+ @symbol(mappedView:),
+ nil, &map, theView);
+ }
+ break;
+
+ case WM_CLOSE:
+ DPRINTF((">>> WM_CLOSE -> terminateView:\n"));
+ (*termS.ilc_func)(self,
+ @symbol(terminateView:),
+ nil, &termS, theView);
+ break;
+
+ case WM_DESTROY:
+ DPRINTF((">>> WM_DESTROY -> destroyedView\n"));
+ (*destr.ilc_func)(self,
+ @symbol(destroyedView:),
+ nil, &destr, theView);
+ break;
+
+ case WM_ACTIVATE:
+
+ switch (LOWORD(ev->ev_wParam)) {
+ case WA_INACTIVE:
+ DPRINTF((">>> WM_ACTIVATE inactive h=%x\n", ev->ev_hWnd));
+ (*act.ilc_func)(self,
+ @symbol(activate:view:),
+ nil, &act,
+ false, theView);
+ break;
+
+ case WA_ACTIVE:
+ case WA_CLICKACTIVE:
+ DPRINTF((">>> WM_ACTIVATE active h=%x\n", ev->ev_hWnd));
+ (*act.ilc_func)(self,
+ @symbol(activate:view:),
+ nil, &act,
+ true, theView);
+ break;
+
+ default:
+ break;
+ }
+ break;
+
+ case WM_MOUSEACTIVATE:
+ if (__debug_WM_MOUSEACTIVATE__) {
+ PRINTF((">>> WM_MOUSEACTIVATE h=%x -> focusInView:\n", ev->ev_hWnd));
+ }
+
+ (*focIn.ilc_func)(self,
+ @symbol(focusInView:),
+ nil, &focIn, theView);
+ break;
+
+ case WM_SETFOCUS:
+ DPRINTF((">>> WM_SETFOCUS h=%x -> focusInView:\n", ev->ev_hWnd));
+ (*focIn.ilc_func)(self,
+ @symbol(focusInView:),
+ nil, &focIn, theView);
+ break;
+
+ case WM_KILLFOCUS:
+ DPRINTF((">>> WM_KILLFOCUS h=%x -> focusOutOfView\n", ev->ev_hWnd));
+ (*focOut.ilc_func)(self,
+ @symbol(focusOutView:),
+ nil, &focOut, theView);
+ break;
+
+ case __WM_GEXPOSE:
+ x = ev->ev_x;
+ y = ev->ev_y;
+ w = ev->ev_w;
+ h = ev->ev_h;
+ DPRINTF((">>> __WM_GEXPOSE -> gExpose %d/%d -> %d/%d\n", x, y, w, h));
#if 0
- if (GetWindow_unmapping(hWnd)) {
- console_fprintf(stderr, "oops - __WM_GEXPOSE for unmapping\n");
- }
-#endif
- (*gexpS.ilc_func)(self,
- @symbol(graphicsExposeX:y:width:height:final:view:),
- nil, &gexpS,
- __MKSMALLINT(x),
- __MKSMALLINT(y),
- __MKSMALLINT(w),
- __MKSMALLINT(h),
- ev->ev_wParam ? true : false,
- theView);
- break;
-
- case __WM_NOGEXPOSE:
- DPRINTFIF(__debug_WM_EXPOSE__, (">>> __WM_NOGEXPOSE -> noExpose\n"));
+ if (GetWindow_unmapping(hWnd)) {
+ console_fprintf(stderr, "oops - __WM_GEXPOSE for unmapping\n");
+ }
+#endif
+ (*gexpS.ilc_func)(self,
+ @symbol(graphicsExposeX:y:width:height:final:view:),
+ nil, &gexpS,
+ __MKSMALLINT(x),
+ __MKSMALLINT(y),
+ __MKSMALLINT(w),
+ __MKSMALLINT(h),
+ ev->ev_wParam ? true : false,
+ theView);
+ break;
+
+ case __WM_NOGEXPOSE:
+ DPRINTFIF(__debug_WM_EXPOSE__, (">>> __WM_NOGEXPOSE -> noExpose\n"));
#if 0
- if (GetWindow_unmapping(hWnd)) {
- console_fprintf(stderr, "oops - __WM_NOGEXPOSE for unmapping\n");
- }
-#endif
- (*nexpS.ilc_func)(self,
- @symbol(noExposeView:), nil, &nexpS,
- theView);
- break;
+ if (GetWindow_unmapping(hWnd)) {
+ console_fprintf(stderr, "oops - __WM_NOGEXPOSE for unmapping\n");
+ }
+#endif
+ (*nexpS.ilc_func)(self,
+ @symbol(noExposeView:), nil, &nexpS,
+ theView);
+ break;
# ifdef LATE_GENERATE_EXPOSE
- case __WM_PAINT:
- {
- PAINTSTRUCT ps;
-
- AQUIRE_DRAW_MUTEX
- __generateExposes(hWnd, NULL, WM_PAINT, 0);
- RELEASE_DRAW_MUTEX
+ case __WM_PAINT:
+ {
+ PAINTSTRUCT ps;
+
+ AQUIRE_DRAW_MUTEX
+ __generateExposes(hWnd, NULL, WM_PAINT, 0);
+ RELEASE_DRAW_MUTEX
# if 0
- BeginPaint(hWnd, &ps);
- EndPaint(hWnd, &ps);
+ BeginPaint(hWnd, &ps);
+ EndPaint(hWnd, &ps);
# endif
- }
- break;
+ }
+ break;
# endif
- case WM_PAINT:
- x = ev->ev_x;
- y = ev->ev_y;
- w = ev->ev_w;
- h = ev->ev_h;
+ case WM_PAINT:
+ x = ev->ev_x;
+ y = ev->ev_y;
+ w = ev->ev_w;
+ h = ev->ev_h;
#if 0
- if (GetWindow_unmapping(hWnd)) {
- console_fprintf(stderr, "oops - WM_PAINT for unmapping\n");
- }
+ if (GetWindow_unmapping(hWnd)) {
+ console_fprintf(stderr, "oops - WM_PAINT for unmapping\n");
+ }
#endif
#ifndef PRE_21_NOV
- __clearWindow(hWnd, x, y, w, h);
+ __clearWindow(hWnd, x, y, w, h);
#else
# if WM_PAINT_CLEAR_LATE
- __clearWindow(hWnd, x, y, w, h);
+ __clearWindow(hWnd, x, y, w, h);
# endif
#endif
#ifdef DEBUG_COLORIZE_WM_PAINT_RECTS2
- {
- HDC hDC;
- HBRUSH hBrush;
- RECT rect;
-
- hBrush = CreateSolidBrush(BlackPixel);
- hDC = GetWindowDC(hWnd);
- SelectClipRgn(hDC, NULL);
- rect.left = x;
- rect.top = y;
- rect.right = x+w;
- rect.bottom = y+h;
-
- FillRect(hDC, &rect, hBrush);
- _DeleteBrush(hBrush, __LINE__);
- ReleaseDC(hWnd, hDC);
- }
-#endif
- if (__debug_WM_PAINT__) {
- PRINTF((">>> WM_PAINT -> expose %d/%d -> %d/%d\n", x, y, w, h));
- }
- (*exp.ilc_func)(self,
- @symbol(exposeX:y:width:height:view:),
- nil, &exp,
- __MKSMALLINT(x),
- __MKSMALLINT(y),
- __MKSMALLINT(w),
- __MKSMALLINT(h),
- theView);
- break;
-
- case WM_LBUTTONDBLCLK:
- isDoubleClick = 1;
- butt = __MKSMALLINT(Button1);
- goto commonButtonDown;
-
- case WM_LBUTTONUP:
- isDown = 0;
- butt = __MKSMALLINT(Button1);
- goto commonButtonDown;
-
- case WM_LBUTTONDOWN:
- butt = __MKSMALLINT(Button1);
- goto commonButtonDown;
-
- case WM_MBUTTONDBLCLK:
- isDoubleClick = 1;
- butt = __MKSMALLINT(Button2);
- goto commonButtonDown;
-
- case WM_MBUTTONUP:
- isDown = 0;
- butt = __MKSMALLINT(Button2);
- goto commonButtonDown;
-
- case WM_MBUTTONDOWN:
- butt = __MKSMALLINT(Button2);
- goto commonButtonDown;
-
- case WM_RBUTTONDBLCLK:
- isDoubleClick = 1;
- butt = __MKSMALLINT(Button3);
- goto commonButtonDown;
-
- case WM_RBUTTONUP:
- isDown = 0;
- butt = __MKSMALLINT(Button3);
- goto commonButtonDown;
-
- case WM_RBUTTONDOWN:
- butt = __MKSMALLINT(Button3);
- goto commonButtonDown;
-
- commonButtonDown:
- x = ev->ev_x;
- y = ev->ev_y;
- modifiers = ev->ev_modifiers;
-
- if (__INST(buttonTranslation) != nil) {
- butt = __AT_(__INST(buttonTranslation), butt);
- }
- arg = butt;
-
- __INST(altDown) = (modifiers & AltMask) ? true : false;
- __INST(metaDown) = (modifiers & MetaMask) ? true : false;
- __INST(shiftDown) = (modifiers & ShiftMask) ? true : false;
- __INST(ctrlDown) = (modifiers & ControlMask) ? true : false;
-
- if (deltaDoubleClickX == -999) {
- deltaDoubleClickX = GetSystemMetrics(SM_CXDOUBLECLK);
- deltaDoubleClickY = GetSystemMetrics(SM_CYDOUBLECLK);
- }
-
- if (isDoubleClick) {
- multiClickCount = 2;
- ipS = &bmp;
- symS = @symbol(buttonMultiPress:x:y:view:);
- nextMultiClickTime = ev->ev_time + __intVal(__INST(multiClickTimeDelta));
- } else {
- if (isDown) {
- if (multiClickCount
- && (ev->ev_time < nextMultiClickTime)
- && (butt == lastButton)
- && (x >= (lastClickX - (deltaDoubleClickX / 2)))
- && (x <= (lastClickX + (deltaDoubleClickX / 2)))
- && (y >= (lastClickY - (deltaDoubleClickY / 2)))
- && (y <= (lastClickY + (deltaDoubleClickY / 2)))
- ) {
- ipS = &bmp;
- symS = @symbol(buttonMultiPress:x:y:view:);
- } else {
- ipS = &bp;
- symS = @symbol(buttonPress:x:y:view:);
- multiClickCount = 0;
- }
- multiClickCount = multiClickCount + 1;
- nextMultiClickTime = ev->ev_time + __intVal(__INST(multiClickTimeDelta));
- } else {
- ipS = &br;
- symS = @symbol(buttonRelease:x:y:view:);
- }
- }
-
- if (isDown || isDoubleClick) {
- lastClickX = x;
- lastClickY = y;
- lastButton = butt;
- }
-
- if (__debug_WM_BUTTONUP__ | __debug_WM_BUTTONDOWN__) {
- if (__isSymbol(arg)) {
- PRINTF(("buttonPress/buttonRelease: %s %d/%d\n",
- __stringVal(arg), x, y));
- } else {
- PRINTF(("buttonPress/buttonRelease: %d %d/%d\n",
- __intVal(arg), x, y));
- }
- }
-
- (*(*ipS).ilc_func)(self, symS, nil, ipS,
- arg,
- __MKSMALLINT(x),
- __MKSMALLINT(y),
- theView);
- break;
-
- case __WM_MOUSEENTER:
- x = ev->ev_x;
- y = ev->ev_y;
- state = ev->ev_modifiers;
-
- if (__debug_WM_MOUSEENTER__) {
- PRINTF((">>> WM_MOUSEENTER: %x %d/%d state:%x\n", ev->ev_hWnd, x, y, state));
- }
+ {
+ HDC hDC;
+ HBRUSH hBrush;
+ RECT rect;
+
+ hBrush = CreateSolidBrush(BlackPixel);
+ hDC = GetWindowDC(hWnd);
+ SelectClipRgn(hDC, NULL);
+ rect.left = x;
+ rect.top = y;
+ rect.right = x+w;
+ rect.bottom = y+h;
+
+ FillRect(hDC, &rect, hBrush);
+ _DeleteBrush(hBrush, __LINE__);
+ ReleaseDC(hWnd, hDC);
+ }
+#endif
+ if (__debug_WM_PAINT__) {
+ PRINTF((">>> WM_PAINT -> expose %d/%d -> %d/%d\n", x, y, w, h));
+ }
+ (*exp.ilc_func)(self,
+ @symbol(exposeX:y:width:height:view:),
+ nil, &exp,
+ __MKSMALLINT(x),
+ __MKSMALLINT(y),
+ __MKSMALLINT(w),
+ __MKSMALLINT(h),
+ theView);
+ break;
+
+ case WM_LBUTTONDBLCLK:
+ isDoubleClick = 1;
+ butt = __MKSMALLINT(Button1);
+ goto commonButtonDown;
+
+ case WM_LBUTTONUP:
+ isDown = 0;
+ butt = __MKSMALLINT(Button1);
+ goto commonButtonDown;
+
+ case WM_LBUTTONDOWN:
+ butt = __MKSMALLINT(Button1);
+ goto commonButtonDown;
+
+ case WM_MBUTTONDBLCLK:
+ isDoubleClick = 1;
+ butt = __MKSMALLINT(Button2);
+ goto commonButtonDown;
+
+ case WM_MBUTTONUP:
+ isDown = 0;
+ butt = __MKSMALLINT(Button2);
+ goto commonButtonDown;
+
+ case WM_MBUTTONDOWN:
+ butt = __MKSMALLINT(Button2);
+ goto commonButtonDown;
+
+ case WM_RBUTTONDBLCLK:
+ isDoubleClick = 1;
+ butt = __MKSMALLINT(Button3);
+ goto commonButtonDown;
+
+ case WM_RBUTTONUP:
+ isDown = 0;
+ butt = __MKSMALLINT(Button3);
+ goto commonButtonDown;
+
+ case WM_RBUTTONDOWN:
+ butt = __MKSMALLINT(Button3);
+ goto commonButtonDown;
+
+ commonButtonDown:
+ x = ev->ev_x;
+ y = ev->ev_y;
+ modifiers = ev->ev_modifiers;
+
+ if (__INST(buttonTranslation) != nil) {
+ butt = __AT_(__INST(buttonTranslation), butt);
+ }
+ arg = butt;
+
+ __INST(altDown) = (modifiers & AltMask) ? true : false;
+ __INST(metaDown) = (modifiers & MetaMask) ? true : false;
+ __INST(shiftDown) = (modifiers & ShiftMask) ? true : false;
+ __INST(ctrlDown) = (modifiers & ControlMask) ? true : false;
+
+ if (deltaDoubleClickX == -999) {
+ deltaDoubleClickX = GetSystemMetrics(SM_CXDOUBLECLK);
+ deltaDoubleClickY = GetSystemMetrics(SM_CYDOUBLECLK);
+ }
+
+ if (isDoubleClick) {
+ multiClickCount = 2;
+ ipS = &bmp;
+ symS = @symbol(buttonMultiPress:x:y:view:);
+ nextMultiClickTime = ev->ev_time + __intVal(__INST(multiClickTimeDelta));
+ } else {
+ if (isDown) {
+ if (multiClickCount
+ && (ev->ev_time < nextMultiClickTime)
+ && (butt == lastButton)
+ && (x >= (lastClickX - (deltaDoubleClickX / 2)))
+ && (x <= (lastClickX + (deltaDoubleClickX / 2)))
+ && (y >= (lastClickY - (deltaDoubleClickY / 2)))
+ && (y <= (lastClickY + (deltaDoubleClickY / 2)))
+ ) {
+ ipS = &bmp;
+ symS = @symbol(buttonMultiPress:x:y:view:);
+ } else {
+ ipS = &bp;
+ symS = @symbol(buttonPress:x:y:view:);
+ multiClickCount = 0;
+ }
+ multiClickCount = multiClickCount + 1;
+ nextMultiClickTime = ev->ev_time + __intVal(__INST(multiClickTimeDelta));
+ } else {
+ ipS = &br;
+ symS = @symbol(buttonRelease:x:y:view:);
+ }
+ }
+
+ if (isDown || isDoubleClick) {
+ lastClickX = x;
+ lastClickY = y;
+ lastButton = butt;
+ }
+
+ if (__debug_WM_BUTTONUP__ | __debug_WM_BUTTONDOWN__) {
+ if (__isSymbol(arg)) {
+ PRINTF(("buttonPress/buttonRelease: %s %d/%d\n",
+ __stringVal(arg), x, y));
+ } else {
+ PRINTF(("buttonPress/buttonRelease: %d %d/%d\n",
+ __intVal(arg), x, y));
+ }
+ }
+
+ (*(*ipS).ilc_func)(self, symS, nil, ipS,
+ arg,
+ __MKSMALLINT(x),
+ __MKSMALLINT(y),
+ theView);
+ break;
+
+ case __WM_MOUSEENTER:
+ x = ev->ev_x;
+ y = ev->ev_y;
+ state = ev->ev_modifiers;
+
+ if (__debug_WM_MOUSEENTER__) {
+ PRINTF((">>> WM_MOUSEENTER: %x %d/%d state:%x\n", ev->ev_hWnd, x, y, state));
+ }
#if 0
- if (GetWindow_unmapping(hWnd)) {
- console_fprintf(stderr, "oops - WM_MOUSEENTER for unmapping\n");
- }
-#endif
- (*pe.ilc_func)(self, @symbol(pointerEnter:x:y:view:),
- nil, &pe,
- __MKSMALLINT(state),
- __MKSMALLINT(x),
- __MKSMALLINT(y),
- theView);
- break;
-
- case __WM_MOUSELEAVE:
- state = ev->ev_modifiers;
- if (__debug_WM_MOUSELEAVE__) {
- PRINTF((">>> WM_MOUSELEAVE: %x state:%x\n", ev->ev_hWnd, state));
- }
+ if (GetWindow_unmapping(hWnd)) {
+ console_fprintf(stderr, "oops - WM_MOUSEENTER for unmapping\n");
+ }
+#endif
+ (*pe.ilc_func)(self, @symbol(pointerEnter:x:y:view:),
+ nil, &pe,
+ __MKSMALLINT(state),
+ __MKSMALLINT(x),
+ __MKSMALLINT(y),
+ theView);
+ break;
+
+ case __WM_MOUSELEAVE:
+ state = ev->ev_modifiers;
+ if (__debug_WM_MOUSELEAVE__) {
+ PRINTF((">>> WM_MOUSELEAVE: %x state:%x\n", ev->ev_hWnd, state));
+ }
#if 0
- if (GetWindow_unmapping(hWnd)) {
- console_fprintf(stderr, "oops - WM_MOUSELEAVE for unmapping\n");
- }
-#endif
- (*pl.ilc_func)(self, @symbol(pointerLeave:view:),
- nil, &pl,
- __MKSMALLINT(state),
- theView);
- break;
-
- case WM_MOUSEMOVE:
- x = ev->ev_x;
- y = ev->ev_y;
- state = ev->ev_modifiers;
- if (__debug_WM_MOUSEMOVE__) {
- PRINTF((">>> WM_MOUSEMOVE: %d/%d %x\n", x, y, state));
- }
- (*mot.ilc_func)(self, @symbol(buttonMotion:x:y:view:),
- nil, &mot,
- __MKSMALLINT(state),
- __MKSMALLINT(x),
- __MKSMALLINT(y),
- theView);
- break;
+ if (GetWindow_unmapping(hWnd)) {
+ console_fprintf(stderr, "oops - WM_MOUSELEAVE for unmapping\n");
+ }
+#endif
+ (*pl.ilc_func)(self, @symbol(pointerLeave:view:),
+ nil, &pl,
+ __MKSMALLINT(state),
+ theView);
+ break;
+
+ case WM_MOUSEMOVE:
+ x = ev->ev_x;
+ y = ev->ev_y;
+ state = ev->ev_modifiers;
+ if (__debug_WM_MOUSEMOVE__) {
+ PRINTF((">>> WM_MOUSEMOVE: %d/%d %x\n", x, y, state));
+ }
+ (*mot.ilc_func)(self, @symbol(buttonMotion:x:y:view:),
+ nil, &mot,
+ __MKSMALLINT(state),
+ __MKSMALLINT(x),
+ __MKSMALLINT(y),
+ theView);
+ break;
#ifdef WM_MOUSEWHEEL
- case WM_MOUSEWHEEL:
- x = ev->ev_x;
- y = ev->ev_y;
- state = ev->ev_modifiers;
- dir = ev->ev_wParam;
- DPRINTF((">>> WM_MOUSEWHEEL: %d %x\n", dir, state));
- {
- OBJ tim;
-
- __PROTECT__(theView);
- tim = __MKUINT(ev->ev_time);
- __UNPROTECT__(theView);
- (*mwh.ilc_func)(self, @symbol(mouseWheelMotion:x:y:amount:deltaTime:view:),
- nil, &mwh,
- __MKSMALLINT(state),
- __MKSMALLINT(x),
- __MKSMALLINT(y),
- __MKSMALLINT(dir),
- tim,
- theView);
- }
- break;
-#endif
-
- case WM_CHAR:
- DPRINTFIF(__debug_WM_CHAR__ , ("WM_CHAR %x %d/%d\n", ev->ev_keyCode, ev->ev_x, ev->ev_y));
- DPRINTF((">>> WM_CHAR: %d/%d\n", x, y));
- symS = @symbol(keyPress:x:y:view:);
- ipS = &skp;
- upDown = true;
- goto keyPressAndRelease;
-
- case WM_SYSKEYUP:
- case WM_KEYUP:
- DPRINTFIF(__debug_WM_KEYUP__ , (">>> WM_KEYUP / SYSKEYUP: %x %d/%d\n", ev->ev_keyCode, ev->ev_x, ev->ev_y));
- symS = @symbol(keyRelease:x:y:view:);
- ipS = &skr;
- upDown = false;
- goto keyPressAndRelease;
-
- case WM_SYSKEYDOWN:
- case WM_KEYDOWN:
- DPRINTFIF(__debug_WM_KEYUP__ , (">>> WM_KEYDOWN / SYSKEYDOWN: %x %d/%d\n", ev->ev_keyCode, ev->ev_x, ev->ev_y));
- symS = @symbol(keyPress:x:y:view:);
- ipS = &skp;
- upDown = true;
- /* FALL INTO */
-
- keyPressAndRelease: ;
-
- x = ev->ev_x;
- y = ev->ev_y;
+ case WM_MOUSEWHEEL:
+ x = ev->ev_x;
+ y = ev->ev_y;
+ state = ev->ev_modifiers;
+ dir = ev->ev_wParam;
+ DPRINTF((">>> WM_MOUSEWHEEL: %d %x\n", dir, state));
+ {
+ OBJ tim;
+
+ __PROTECT__(theView);
+ tim = __MKUINT(ev->ev_time);
+ __UNPROTECT__(theView);
+ (*mwh.ilc_func)(self, @symbol(mouseWheelMotion:x:y:amount:deltaTime:view:),
+ nil, &mwh,
+ __MKSMALLINT(state),
+ __MKSMALLINT(x),
+ __MKSMALLINT(y),
+ __MKSMALLINT(dir),
+ tim,
+ theView);
+ }
+ break;
+#endif
+
+ case WM_CHAR:
+ DPRINTFIF(__debug_WM_CHAR__ , ("WM_CHAR %x %d/%d\n", ev->ev_keyCode, ev->ev_x, ev->ev_y));
+ DPRINTF((">>> WM_CHAR: %d/%d\n", x, y));
+ symS = @symbol(keyPress:x:y:view:);
+ ipS = &skp;
+ upDown = true;
+ goto keyPressAndRelease;
+
+ case WM_SYSKEYUP:
+ case WM_KEYUP:
+ DPRINTFIF(__debug_WM_KEYUP__ , (">>> WM_KEYUP / SYSKEYUP: %x %d/%d\n", ev->ev_keyCode, ev->ev_x, ev->ev_y));
+ symS = @symbol(keyRelease:x:y:view:);
+ ipS = &skr;
+ upDown = false;
+ goto keyPressAndRelease;
+
+ case WM_SYSKEYDOWN:
+ case WM_KEYDOWN:
+ DPRINTFIF(__debug_WM_KEYUP__ , (">>> WM_KEYDOWN / SYSKEYDOWN: %x %d/%d\n", ev->ev_keyCode, ev->ev_x, ev->ev_y));
+ symS = @symbol(keyPress:x:y:view:);
+ ipS = &skp;
+ upDown = true;
+ /* FALL INTO */
+
+ keyPressAndRelease: ;
+
+ x = ev->ev_x;
+ y = ev->ev_y;
#ifdef NOTDEF
- {
- BYTE vKeyState[256];
- char buff[5];
-
- GetKeyboardState(vKeyState);
- ToAscii(ev->ev_keyCode, ev->ev_scanCode, vKeyState, &buff; 0);
- }
-#endif
-
- keyCode = ev->ev_keyCode;
- modifiers = ev->ev_modifiers;
-
- if (modifiers & TRANSLATED_KEY) {
+ {
+ BYTE vKeyState[256];
+ char buff[5];
+
+ GetKeyboardState(vKeyState);
+ ToAscii(ev->ev_keyCode, ev->ev_scanCode, vKeyState, &buff; 0);
+ }
+#endif
+
+ keyCode = ev->ev_keyCode;
+ modifiers = ev->ev_modifiers;
+
+ if (modifiers & TRANSLATED_KEY) {
#if 1
- if (modifiers & ControlMask) {
- if (keyCode < 0x20) {
- keyCode = keyCode + 'a' - 1;
- if (modifiers & ShiftMask) {
- keyCode = keyCode - 'a' + 'A';
- }
- }
- } else if (modifiers & (MetaMask | AltMask)) {
- if (! (modifiers & ShiftMask)) {
- if ((keyCode >= 'A') && (keyCode <= 'Z')) {
- keyCode = keyCode - 'A' + 'a';
- }
- }
- }
-#endif
- arg = __MKSMALLINT(keyCode & 0xFFFF);
- } else {
- switch (keyCode) {
- case VK_F1:
- arg = @symbol(F1);
- break;
- case VK_F2:
- arg = @symbol(F2);
- break;
- case VK_F3:
- arg = @symbol(F3);
- break;
- case VK_F4:
- arg = @symbol(F4);
- break;
- case VK_F5:
- arg = @symbol(F5);
- break;
- case VK_F6:
- arg = @symbol(F6);
- break;
- case VK_F7:
- arg = @symbol(F7);
- break;
- case VK_F8:
- arg = @symbol(F8);
- break;
- case VK_F9:
- arg = @symbol(F9);
- break;
- case VK_F10:
- arg = @symbol(F10);
- break;
- case VK_F11:
- arg = @symbol(F11);
- break;
- case VK_F12:
- arg = @symbol(F12);
- break;
- case VK_PRIOR:
- arg = @symbol(Prior);
- break;
- case VK_NEXT:
- arg = @symbol(Next);
- break;
- case VK_END:
- arg = @symbol(End);
- break;
- case VK_HOME:
- arg = @symbol(Home);
- break;
- case VK_LEFT:
- arg = @symbol(CursorLeft);
- break;
- case VK_RIGHT:
- arg = @symbol(CursorRight);
- break;
- case VK_UP:
- arg = @symbol(CursorUp);
- break;
- case VK_DOWN:
- arg = @symbol(CursorDown);
- break;
- case VK_MENU: /*alt key with w95 ???*/
- arg = @symbol(Menu);
- break;
- case VK_LMENU:
- arg = @symbol(Menu_L);
- break;
- case VK_RMENU:
- arg = @symbol(Menu_R);
- break;
- case VK_PAUSE:
- arg = @symbol(Pause);
- break;
- case VK_HELP:
- arg = @symbol(Help);
- break;
- case VK_EXECUTE:
- arg = @symbol(Execute);
- break;
- case VK_CANCEL:
- arg = @symbol(Cancel);
- break;
- case VK_SELECT:
- arg = @symbol(Select);
- break;
- case VK_PRINT:
- arg = @symbol(Print);
- break;
- case VK_SNAPSHOT:
- arg = @symbol(Snapshot);
- break;
- case VK_INSERT:
- arg = @symbol(Insert);
- break;
- case VK_DELETE:
- arg = @symbol(Delete);
- break;
- case VK_BACK:
- arg = @symbol(BackSpace);
- break;
- case VK_LWIN:
- arg = @symbol(Win_L);
- break;
- case VK_RWIN:
- arg = @symbol(Win_R);
- break;
- case VK_APPS:
- arg = @symbol(Appl);
- break;
- case VK_NUMPAD0:
- arg = @symbol(KeyPad0);
- break;
- case VK_NUMPAD1:
- arg = @symbol(KeyPad1);
- break;
- case VK_NUMPAD2:
- arg = @symbol(KeyPad2);
- break;
- case VK_NUMPAD3:
- arg = @symbol(KeyPad3);
- break;
- case VK_NUMPAD4:
- arg = @symbol(KeyPad4);
- break;
- case VK_NUMPAD5:
- arg = @symbol(KeyPad5);
- break;
- case VK_NUMPAD6:
- arg = @symbol(KeyPad6);
- break;
- case VK_NUMPAD7:
- arg = @symbol(KeyPad7);
- break;
- case VK_NUMPAD8:
- arg = @symbol(KeyPad8);
- break;
- case VK_NUMPAD9:
- arg = @symbol(KeyPad9);
- break;
- case VK_LSHIFT:
- arg = @symbol(Shift_L);
- break;
- case VK_RSHIFT:
- arg = @symbol(Shift_R);
- break;
- case VK_LCONTROL:
- arg = @symbol(Ctrl_L);
- break;
- case VK_RCONTROL:
- arg = @symbol(Ctrl_R);
- break;
- case VK_CONTROL:
- arg = @symbol(Ctrl);
- break;
- case VK_SHIFT:
- arg = @symbol(Shift);
- break;
- case VK_TAB:
- arg = @symbol(Tab);
- break;
- case VK_ESCAPE:
- arg = @symbol(Escape);
- break;
- case VK_NUMLOCK:
- arg = @symbol(NumLock);
- break;
- case VK_SCROLL:
- arg = @symbol(ScrollLock);
- break;
- case VK_RETURN:
- arg = @symbol(Return);
- break;
-
- default:
+ if (modifiers & ControlMask) {
+ if (keyCode < 0x20) {
+ keyCode = keyCode + 'a' - 1;
+ if (modifiers & ShiftMask) {
+ keyCode = keyCode - 'a' + 'A';
+ }
+ }
+ } else if (modifiers & (MetaMask | AltMask)) {
+ if (! (modifiers & ShiftMask)) {
+ if ((keyCode >= 'A') && (keyCode <= 'Z')) {
+ keyCode = keyCode - 'A' + 'a';
+ }
+ }
+ }
+#endif
+ arg = __MKSMALLINT(keyCode & 0xFFFF);
+ } else {
+ switch (keyCode) {
+ case VK_F1:
+ arg = @symbol(F1);
+ break;
+ case VK_F2:
+ arg = @symbol(F2);
+ break;
+ case VK_F3:
+ arg = @symbol(F3);
+ break;
+ case VK_F4:
+ arg = @symbol(F4);
+ break;
+ case VK_F5:
+ arg = @symbol(F5);
+ break;
+ case VK_F6:
+ arg = @symbol(F6);
+ break;
+ case VK_F7:
+ arg = @symbol(F7);
+ break;
+ case VK_F8:
+ arg = @symbol(F8);
+ break;
+ case VK_F9:
+ arg = @symbol(F9);
+ break;
+ case VK_F10:
+ arg = @symbol(F10);
+ break;
+ case VK_F11:
+ arg = @symbol(F11);
+ break;
+ case VK_F12:
+ arg = @symbol(F12);
+ break;
+ case VK_PRIOR:
+ arg = @symbol(Prior);
+ break;
+ case VK_NEXT:
+ arg = @symbol(Next);
+ break;
+ case VK_END:
+ arg = @symbol(End);
+ break;
+ case VK_HOME:
+ arg = @symbol(Home);
+ break;
+ case VK_LEFT:
+ arg = @symbol(CursorLeft);
+ break;
+ case VK_RIGHT:
+ arg = @symbol(CursorRight);
+ break;
+ case VK_UP:
+ arg = @symbol(CursorUp);
+ break;
+ case VK_DOWN:
+ arg = @symbol(CursorDown);
+ break;
+ case VK_MENU: /*alt key with w95 ???*/
+ arg = @symbol(Menu);
+ break;
+ case VK_LMENU:
+ arg = @symbol(Menu_L);
+ break;
+ case VK_RMENU:
+ arg = @symbol(Menu_R);
+ break;
+ case VK_PAUSE:
+ arg = @symbol(Pause);
+ break;
+ case VK_HELP:
+ arg = @symbol(Help);
+ break;
+ case VK_EXECUTE:
+ arg = @symbol(Execute);
+ break;
+ case VK_CANCEL:
+ arg = @symbol(Cancel);
+ break;
+ case VK_SELECT:
+ arg = @symbol(Select);
+ break;
+ case VK_PRINT:
+ arg = @symbol(Print);
+ break;
+ case VK_SNAPSHOT:
+ arg = @symbol(Snapshot);
+ break;
+ case VK_INSERT:
+ arg = @symbol(Insert);
+ break;
+ case VK_DELETE:
+ arg = @symbol(Delete);
+ break;
+ case VK_BACK:
+ arg = @symbol(BackSpace);
+ break;
+ case VK_LWIN:
+ arg = @symbol(Win_L);
+ break;
+ case VK_RWIN:
+ arg = @symbol(Win_R);
+ break;
+ case VK_APPS:
+ arg = @symbol(Appl);
+ break;
+ case VK_NUMPAD0:
+ arg = @symbol(KeyPad0);
+ break;
+ case VK_NUMPAD1:
+ arg = @symbol(KeyPad1);
+ break;
+ case VK_NUMPAD2:
+ arg = @symbol(KeyPad2);
+ break;
+ case VK_NUMPAD3:
+ arg = @symbol(KeyPad3);
+ break;
+ case VK_NUMPAD4:
+ arg = @symbol(KeyPad4);
+ break;
+ case VK_NUMPAD5:
+ arg = @symbol(KeyPad5);
+ break;
+ case VK_NUMPAD6:
+ arg = @symbol(KeyPad6);
+ break;
+ case VK_NUMPAD7:
+ arg = @symbol(KeyPad7);
+ break;
+ case VK_NUMPAD8:
+ arg = @symbol(KeyPad8);
+ break;
+ case VK_NUMPAD9:
+ arg = @symbol(KeyPad9);
+ break;
+ case VK_LSHIFT:
+ arg = @symbol(Shift_L);
+ break;
+ case VK_RSHIFT:
+ arg = @symbol(Shift_R);
+ break;
+ case VK_LCONTROL:
+ arg = @symbol(Ctrl_L);
+ break;
+ case VK_RCONTROL:
+ arg = @symbol(Ctrl_R);
+ break;
+ case VK_CONTROL:
+ arg = @symbol(Ctrl);
+ break;
+ case VK_SHIFT:
+ arg = @symbol(Shift);
+ break;
+ case VK_TAB:
+ arg = @symbol(Tab);
+ break;
+ case VK_ESCAPE:
+ arg = @symbol(Escape);
+ break;
+ case VK_NUMLOCK:
+ arg = @symbol(NumLock);
+ break;
+ case VK_SCROLL:
+ arg = @symbol(ScrollLock);
+ break;
+ case VK_RETURN:
+ arg = @symbol(Return);
+ break;
+
+ default:
#if 0
- nameBuffer[0] = 0;
- GetKeyNameText(ev->ev_scanCode, nameBuffer, sizeof(nameBuffer));
- if (__debug_WM_KEYUP__ | __debug_WM_KEYDOWN__ | __debug_WM_CHAR__) {
- PRINTF(("char is <%d>\n", keyCode));
- }
-#endif
- arg = __MKSMALLINT(keyCode & 0xFFFF);
- break;
- }
- }
- __INST(altDown) = (modifiers & AltMask) ? true : false;
- __INST(metaDown) = (modifiers & MetaMask) ? true : false;
- __INST(shiftDown) = (modifiers & ShiftMask) ? true : false;
- __INST(ctrlDown) = (modifiers & ControlMask) ? true : false;
-
- if (__debug_WM_CHAR__ | __debug_WM_KEYUP__ | __debug_WM_KEYDOWN__) {
- PRINTF(("%s: code=%x mod=%x ", __stringVal(symS), keyCode, modifiers));
- PRINTF((" alt=%d meta=%d ", __INST(altDown) == true , __INST(metaDown) == true));
- PRINTF((" sh=%d ctrl=%d", __INST(shiftDown) == true , __INST(ctrlDown) == true));
- PRINTF((" arg=%x\n", arg));
- }
-
- (*(*ipS).ilc_func)(self, symS, nil, ipS,
- arg,
- __MKSMALLINT(x),
- __MKSMALLINT(y),
- theView);
- break;
-
- case WM_SYSCOLORCHANGE:
- DPRINTF((">>> WM_SYSCOLORCHANGE\n"));
- (*sysClrChg.ilc_func)(self, @symbol(systemColorChange:), nil, &sysClrChg, theView);
- break;
-
- case WM_FONTCHANGE:
- DPRINTF((">>> WM_FONTCHANGE\n"));
- (*fontChg.ilc_func)(self, @symbol(fontChange), nil, &fontChg);
- break;
-
- case WM_WININICHANGE:
- DPRINTF((">>> WM_WININICHANGE\n"));
- (*settingChg.ilc_func)(self, @symbol(settingsChange), nil, &settingChg);
- break;
-
- case WM_DISPLAYCHANGE:
- DPRINTF((">>> WM_DISPLAYCHANGE\n"));
- (*fontChg.ilc_func)(self, @symbol(displayChange), nil, &fontChg);
- break;
-
- case WM_QUERYENDSESSION:
- DPRINTF((">>> WM_QUERYENDSESSION\n"));
- (*qEndSess.ilc_func)(self, @symbol(queryEndSession), nil, &qEndSess);
- break;
+ nameBuffer[0] = 0;
+ GetKeyNameText(ev->ev_scanCode, nameBuffer, sizeof(nameBuffer));
+ if (__debug_WM_KEYUP__ | __debug_WM_KEYDOWN__ | __debug_WM_CHAR__) {
+ PRINTF(("char is <%d>\n", keyCode));
+ }
+#endif
+ arg = __MKSMALLINT(keyCode & 0xFFFF);
+ break;
+ }
+ }
+ __INST(altDown) = (modifiers & AltMask) ? true : false;
+ __INST(metaDown) = (modifiers & MetaMask) ? true : false;
+ __INST(shiftDown) = (modifiers & ShiftMask) ? true : false;
+ __INST(ctrlDown) = (modifiers & ControlMask) ? true : false;
+
+ if (__debug_WM_CHAR__ | __debug_WM_KEYUP__ | __debug_WM_KEYDOWN__) {
+ PRINTF(("%s: code=%x mod=%x ", __stringVal(symS), keyCode, modifiers));
+ PRINTF((" alt=%d meta=%d ", __INST(altDown) == true , __INST(metaDown) == true));
+ PRINTF((" sh=%d ctrl=%d", __INST(shiftDown) == true , __INST(ctrlDown) == true));
+ PRINTF((" arg=%x\n", arg));
+ }
+
+ (*(*ipS).ilc_func)(self, symS, nil, ipS,
+ arg,
+ __MKSMALLINT(x),
+ __MKSMALLINT(y),
+ theView);
+ break;
+
+ case WM_SYSCOLORCHANGE:
+ DPRINTF((">>> WM_SYSCOLORCHANGE\n"));
+ (*sysClrChg.ilc_func)(self, @symbol(systemColorChange:), nil, &sysClrChg, theView);
+ break;
+
+ case WM_FONTCHANGE:
+ DPRINTF((">>> WM_FONTCHANGE\n"));
+ (*fontChg.ilc_func)(self, @symbol(fontChange), nil, &fontChg);
+ break;
+
+ case WM_WININICHANGE:
+ DPRINTF((">>> WM_WININICHANGE\n"));
+ (*settingChg.ilc_func)(self, @symbol(settingsChange), nil, &settingChg);
+ break;
+
+ case WM_DISPLAYCHANGE:
+ DPRINTF((">>> WM_DISPLAYCHANGE\n"));
+ (*fontChg.ilc_func)(self, @symbol(displayChange), nil, &fontChg);
+ break;
+
+ case WM_QUERYENDSESSION:
+ DPRINTF((">>> WM_QUERYENDSESSION\n"));
+ (*qEndSess.ilc_func)(self, @symbol(queryEndSession), nil, &qEndSess);
+ break;
#ifdef LATER
- case WM_POWER:
- DPRINTF((">>> WM_POWER\n"));
- (*power.ilc_func)(self, @symbol(powerDown), nil, &power);
- break;
-#endif
- /* native widget actions */
- case WM_COMMAND:
- DPRINTF((">>> WM_COMMAND\n"));
- (*command.ilc_func)(self, @symbol(nativeWidgetCommand:view:), nil, &command,
- __MKSMALLINT(ev->ev_wParam), theView);
- break;
-
- /* tray action */
- case WM_TRAY_MESSAGE:
- DPRINTF((">>> WM_TRAY_MESSAGE\n"));
- (*trayMessage.ilc_func)(self, @symbol(trayAction:view:), nil, &trayMessage,
- __MKSMALLINT(ev->ev_arg1), theView);
- break;
-
- /* message from another process */
- case WM_COPYDATA:
- DPRINTF((">>> WM_COPYDATA\n"));
- {
- OBJ eventData;
- void *data = (void *)(ev->ev_arg1);
- int nBytes = ev->ev_arg2;
-
- if (ev->ev_arg1) {
- __PROTECT__(theView);
- eventData = __MKBYTEARRAY(data, nBytes);
- __UNPROTECT__(theView);
- } else {
- eventData = nil;
- }
- (*copyData.ilc_func)(self, @symbol(copyDataEvent:eventData:view:), nil, ©Data,
- __MKSMALLINT(ev->ev_wParam), eventData, theView);
- }
- break;
+ case WM_POWER:
+ DPRINTF((">>> WM_POWER\n"));
+ (*power.ilc_func)(self, @symbol(powerDown), nil, &power);
+ break;
+#endif
+ /* native widget actions */
+ case WM_COMMAND:
+ DPRINTF((">>> WM_COMMAND\n"));
+ (*command.ilc_func)(self, @symbol(nativeWidgetCommand:view:), nil, &command,
+ __MKSMALLINT(ev->ev_wParam), theView);
+ break;
+
+ /* tray action */
+ case WM_TRAY_MESSAGE:
+ DPRINTF((">>> WM_TRAY_MESSAGE\n"));
+ (*trayMessage.ilc_func)(self, @symbol(trayAction:view:), nil, &trayMessage,
+ __MKSMALLINT(ev->ev_arg1), theView);
+ break;
+
+ /* message from another process */
+ case WM_COPYDATA:
+ DPRINTF((">>> WM_COPYDATA\n"));
+ {
+ OBJ eventData;
+ void *data = (void *)(ev->ev_arg1);
+ int nBytes = ev->ev_arg2;
+
+ if (ev->ev_arg1) {
+ eventData = __MKBYTEARRAY(data, nBytes);
+ } else {
+ eventData = nil;
+ }
+ (*copyData.ilc_func)(self, @symbol(copyDataEvent:eventData:view:), nil, ©Data,
+ __MKSMALLINT(ev->ev_wParam), eventData, theView);
+ }
+ break;
#ifdef LATER
- case WM_QUIT:
- DPRINTF((">>> WM_QUIT_MESSAGE\n"));
- (*quit.ilc_func)(self, @symbol(quitCommand:), nil, &quit);
- break;
-#endif
- case WM_HSCROLL:
- case WM_VSCROLL:
- {
- int scrollCode = 0;
- OBJ scrollCodeOrScrollCodeSymbol = nil, positionOrNil = nil;
- int pos = 0;
-
- scrollCode = LOWORD(ev->ev_wParam);
- scrollCodeOrScrollCodeSymbol = __MKSMALLINT(scrollCode);
- positionOrNil = nil;
- switch (scrollCode) {
- case SB_BOTTOM:
- scrollCodeOrScrollCodeSymbol = @symbol(SB_BOTTOM);
- break;
- case SB_TOP:
- scrollCodeOrScrollCodeSymbol = @symbol(SB_TOP);
- break;
- case SB_ENDSCROLL:
- scrollCodeOrScrollCodeSymbol = @symbol(SB_ENDSCROLL);
- break;
- case SB_LINEDOWN:
- if (ev->ev_message == WM_HSCROLL) {
- scrollCodeOrScrollCodeSymbol = @symbol(SB_LINERIGHT);
- } else {
- scrollCodeOrScrollCodeSymbol = @symbol(SB_LINEDOWN);
- }
- break;
- case SB_LINEUP:
- if (ev->ev_message == WM_HSCROLL) {
- scrollCodeOrScrollCodeSymbol = @symbol(SB_LINELEFT);
- } else {
- scrollCodeOrScrollCodeSymbol = @symbol(SB_LINEUP);
- }
- break;
- case SB_PAGEDOWN:
- if (ev->ev_message == WM_HSCROLL) {
- scrollCodeOrScrollCodeSymbol = @symbol(SB_PAGERIGHT);
- } else {
- scrollCodeOrScrollCodeSymbol = @symbol(SB_PAGEDOWN);
- }
- break;
- case SB_PAGEUP:
- if (ev->ev_message == WM_HSCROLL) {
- scrollCodeOrScrollCodeSymbol = @symbol(SB_PAGELEFT);
- } else {
- scrollCodeOrScrollCodeSymbol = @symbol(SB_PAGEUP);
- }
- break;
- case SB_THUMBPOSITION:
- if (ev->ev_message == WM_HSCROLL) {
- scrollCodeOrScrollCodeSymbol = @symbol(SB_THUMBPOSITIONHORIZONTAL);
- } else {
- scrollCodeOrScrollCodeSymbol = @symbol(SB_THUMBPOSITIONVERTICAL);
- }
- pos = HIWORD(ev->ev_wParam);
- positionOrNil = __MKSMALLINT(pos);
- break;
- case SB_THUMBTRACK:
- if (ev->ev_message == WM_HSCROLL) {
- scrollCodeOrScrollCodeSymbol = @symbol(SB_THUMBTRACKHORIZONTAL);
- } else {
- scrollCodeOrScrollCodeSymbol = @symbol(SB_THUMBTRACKVERTICAL);
- }
- pos = HIWORD(ev->ev_wParam);
- positionOrNil = __MKSMALLINT(pos);
- break;
- default:
- DPRINTF((">>> WM_SCROLL: unhandled scrollCode:%d %d\n", scrollCode));
- break;
- }
- NDPRINTF((">>> WM_SCROLL: %d %d\n", scrollCode, pos));
-
- (*win32NativeScroll.ilc_func)(self, @symbol(win32NativeScroll:position:view:),
- nil, &win32NativeScroll,
- scrollCodeOrScrollCodeSymbol,
- positionOrNil,
- theView);
- }
- break;
-
- case WM_DRAWITEM:
- {
- NDPRINTF((">>> WM_DRAWITEM: wParam: %x\n", ev->ev_wParam));
- (*win32DrawItem.ilc_func)(self, @symbol(win32DrawItem:view:),
- nil, &win32DrawItem,
- __MKSMALLINT(ev->ev_wParam),
- theView);
- }
- break;
-
- default:
- UNHANDLED_EVENT_PRINTF(("WinWorkstat [info]: >>> unhandled event: %x\n", ev->ev_message));
- break;
+ case WM_QUIT:
+ DPRINTF((">>> WM_QUIT_MESSAGE\n"));
+ (*quit.ilc_func)(self, @symbol(quitCommand:), nil, &quit);
+ break;
+#endif
+ case WM_HSCROLL:
+ case WM_VSCROLL:
+ {
+ int scrollCode = 0;
+ OBJ scrollCodeOrScrollCodeSymbol = nil, positionOrNil = nil;
+ int pos = 0;
+
+ scrollCode = LOWORD(ev->ev_wParam);
+ scrollCodeOrScrollCodeSymbol = __MKSMALLINT(scrollCode);
+ positionOrNil = nil;
+ switch (scrollCode) {
+ case SB_BOTTOM:
+ scrollCodeOrScrollCodeSymbol = @symbol(SB_BOTTOM);
+ break;
+ case SB_TOP:
+ scrollCodeOrScrollCodeSymbol = @symbol(SB_TOP);
+ break;
+ case SB_ENDSCROLL:
+ scrollCodeOrScrollCodeSymbol = @symbol(SB_ENDSCROLL);
+ break;
+ case SB_LINEDOWN:
+ if (ev->ev_message == WM_HSCROLL) {
+ scrollCodeOrScrollCodeSymbol = @symbol(SB_LINERIGHT);
+ } else {
+ scrollCodeOrScrollCodeSymbol = @symbol(SB_LINEDOWN);
+ }
+ break;
+ case SB_LINEUP:
+ if (ev->ev_message == WM_HSCROLL) {
+ scrollCodeOrScrollCodeSymbol = @symbol(SB_LINELEFT);
+ } else {
+ scrollCodeOrScrollCodeSymbol = @symbol(SB_LINEUP);
+ }
+ break;
+ case SB_PAGEDOWN:
+ if (ev->ev_message == WM_HSCROLL) {
+ scrollCodeOrScrollCodeSymbol = @symbol(SB_PAGERIGHT);
+ } else {
+ scrollCodeOrScrollCodeSymbol = @symbol(SB_PAGEDOWN);
+ }
+ break;
+ case SB_PAGEUP:
+ if (ev->ev_message == WM_HSCROLL) {
+ scrollCodeOrScrollCodeSymbol = @symbol(SB_PAGELEFT);
+ } else {
+ scrollCodeOrScrollCodeSymbol = @symbol(SB_PAGEUP);
+ }
+ break;
+ case SB_THUMBPOSITION:
+ if (ev->ev_message == WM_HSCROLL) {
+ scrollCodeOrScrollCodeSymbol = @symbol(SB_THUMBPOSITIONHORIZONTAL);
+ } else {
+ scrollCodeOrScrollCodeSymbol = @symbol(SB_THUMBPOSITIONVERTICAL);
+ }
+ pos = HIWORD(ev->ev_wParam);
+ positionOrNil = __MKSMALLINT(pos);
+ break;
+ case SB_THUMBTRACK:
+ if (ev->ev_message == WM_HSCROLL) {
+ scrollCodeOrScrollCodeSymbol = @symbol(SB_THUMBTRACKHORIZONTAL);
+ } else {
+ scrollCodeOrScrollCodeSymbol = @symbol(SB_THUMBTRACKVERTICAL);
+ }
+ pos = HIWORD(ev->ev_wParam);
+ positionOrNil = __MKSMALLINT(pos);
+ break;
+ default:
+ DPRINTF((">>> WM_SCROLL: unhandled scrollCode:%d %d\n", scrollCode));
+ break;
+ }
+ NDPRINTF((">>> WM_SCROLL: %d %d\n", scrollCode, pos));
+
+ (*win32NativeScroll.ilc_func)(self, @symbol(win32NativeScroll:position:view:),
+ nil, &win32NativeScroll,
+ scrollCodeOrScrollCodeSymbol,
+ positionOrNil,
+ theView);
+ }
+ break;
+
+ case WM_DRAWITEM:
+ {
+ NDPRINTF((">>> WM_DRAWITEM: wParam: %x\n", ev->ev_wParam));
+ (*win32DrawItem.ilc_func)(self, @symbol(win32DrawItem:view:),
+ nil, &win32DrawItem,
+ __MKSMALLINT(ev->ev_wParam),
+ theView);
+ }
+ break;
+
+ default:
+ UNHANDLED_EVENT_PRINTF(("WinWorkstat [info]: >>> unhandled event: %x\n", ev->ev_message));
+ break;
}
%}.
^ true
@@ -18838,11 +18832,11 @@
!WinWorkstation class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libview/WinWorkstation.st,v 1.426 2010-07-22 16:32:24 stefan Exp $'
+ ^ '$Header: /cvs/stx/stx/libview/WinWorkstation.st,v 1.427 2010-07-22 16:54:52 stefan Exp $'
!
version_CVS
- ^ '$Header: /cvs/stx/stx/libview/WinWorkstation.st,v 1.426 2010-07-22 16:32:24 stefan Exp $'
+ ^ '$Header: /cvs/stx/stx/libview/WinWorkstation.st,v 1.427 2010-07-22 16:54:52 stefan Exp $'
! !
WinWorkstation initialize!