public
Description: a tiny graphical app kit for ruby
Homepage: http://code.whytheluckystiff.net/shoes
Clone URL: git://github.com/why/shoes.git
 * shoes/native/windows.c: okay, mouse events have converged for all three 
 platforms now.  on windows, when mouse events happen on a lower window, they 
 get sent through the toplevel window now.  this just required some translating 
 of screen coordinates, but means that `leave` events will work right and that 
 mouse events will trickle through nested slots.
why (author)
Fri Jul 11 12:25:51 -0700 2008
commit  0d1c48287fed8bca4ab68f31d09488c9fb7ff9be
tree    1c97fcca13dc260f5bc7d8b7e89d214de098f634
parent  2228b9fb19a21c643a2dc4f99ddcdd469e3f82fa
...
1759
1760
1761
1762
1763
1764
1765
...
1767
1768
1769
1770
1771
1772
1773
...
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
...
1860
1861
1862
1863
1864
1865
1866
...
1868
1869
1870
1871
1872
1873
1874
...
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
...
1921
1922
1923
1924
1925
1926
1927
...
1929
1930
1931
1932
1933
1934
1935
...
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
...
1759
1760
1761
 
1762
1763
1764
...
1766
1767
1768
 
1769
1770
1771
...
1783
1784
1785
 
 
 
 
1786
1787
1788
...
1854
1855
1856
 
1857
1858
1859
...
1861
1862
1863
 
1864
1865
1866
...
1880
1881
1882
 
 
 
 
1883
1884
1885
...
1909
1910
1911
 
1912
1913
1914
...
1916
1917
1918
 
1919
1920
1921
...
1932
1933
1934
 
 
 
 
1935
1936
1937
0
@@ -1759,7 +1759,6 @@ shoes_canvas_send_click2(VALUE self, int button, int x, int y, VALUE *clicked)
0
   shoes_canvas *self_t;
0
   Data_Get_Struct(self, shoes_canvas, self_t);
0
 
0
-#ifndef SHOES_WIN32
0
   if (ORIGIN(self_t->place))
0
   {
0
     x -= self_t->place.ix + self_t->place.dx;
0
@@ -1767,7 +1766,6 @@ shoes_canvas_send_click2(VALUE self, int button, int x, int y, VALUE *clicked)
0
     if (y < self_t->slot.scrolly || x < 0 || y > self_t->slot.scrolly + self_t->height || x > self_t->width)
0
       return Qnil;
0
   }
0
-#endif
0
 
0
   if (ATTR(self_t->attr, hidden) != Qtrue)
0
   {
0
@@ -1785,10 +1783,6 @@ shoes_canvas_send_click2(VALUE self, int button, int x, int y, VALUE *clicked)
0
       VALUE ele = rb_ary_entry(self_t->contents, i);
0
       if (rb_obj_is_kind_of(ele, cCanvas))
0
       {
0
-#ifdef SHOES_WIN32
0
-        if (!shoes_canvas_inherits(ele, self_t))
0
-          continue;
0
-#endif
0
         v = shoes_canvas_send_click(ele, button, x, y);
0
         *clicked = ele;
0
       }
0
@@ -1860,7 +1854,6 @@ shoes_canvas_send_release(VALUE self, int button, int x, int y)
0
   long i;
0
   shoes_canvas *self_t;
0
   Data_Get_Struct(self, shoes_canvas, self_t);
0
-#ifndef SHOES_WIN32
0
   if (ORIGIN(self_t->place))
0
   {
0
     x -= (self_t->place.ix + self_t->place.dx);
0
@@ -1868,7 +1861,6 @@ shoes_canvas_send_release(VALUE self, int button, int x, int y)
0
     if (y < self_t->slot.scrolly || x < 0 || y > self_t->slot.scrolly + self_t->height || x > self_t->width)
0
       return;
0
   }
0
-#endif
0
 
0
   // INFO("release(%d, %d, %d)\n", button, x, y);
0
 
0
@@ -1888,10 +1880,6 @@ shoes_canvas_send_release(VALUE self, int button, int x, int y)
0
       VALUE ele = rb_ary_entry(self_t->contents, i);
0
       if (rb_obj_is_kind_of(ele, cCanvas))
0
       {
0
-#ifdef SHOES_WIN32
0
-        if (!shoes_canvas_inherits(ele, self_t))
0
-          continue;
0
-#endif
0
         shoes_canvas_send_release(ele, button, x, y);
0
       }
0
       else if (rb_obj_is_kind_of(ele, cTextBlock))
0
@@ -1921,7 +1909,6 @@ shoes_canvas_send_motion(VALUE self, int x, int y, VALUE url)
0
   h = IS_INSIDE(self_t, x, y);
0
   CHECK_HOVER(self_t, h, n);
0
 
0
-#ifndef SHOES_WIN32
0
   if (ORIGIN(self_t->place))
0
   {
0
     x -= (self_t->place.ix + self_t->place.dx);
0
@@ -1929,7 +1916,6 @@ shoes_canvas_send_motion(VALUE self, int x, int y, VALUE url)
0
     if (y < self_t->slot.scrolly || x < 0 || y > self_t->slot.scrolly + self_t->height || x > self_t->width)
0
       return Qnil;
0
   }
0
-#endif
0
 
0
   h = 0;
0
   if (ATTR(self_t->attr, hidden) != Qtrue)
0
@@ -1946,10 +1932,6 @@ shoes_canvas_send_motion(VALUE self, int x, int y, VALUE url)
0
       VALUE ele = rb_ary_entry(self_t->contents, i);
0
       if (rb_obj_is_kind_of(ele, cCanvas))
0
       {
0
-#ifdef SHOES_WIN32
0
-        if (!shoes_canvas_inherits(ele, self_t))
0
-          continue;
0
-#endif
0
         urll = shoes_canvas_send_motion(ele, x, y, url);
0
       }
0
       else if (rb_obj_is_kind_of(ele, cTextBlock))
...
120
121
122
123
124
 
 
 
 
 
 
 
125
126
127
...
208
209
210
211
212
 
 
213
214
215
216
217
218
219
 
 
220
221
222
223
224
225
226
 
 
227
228
229
230
231
232
233
 
 
234
235
236
237
238
239
240
 
 
241
242
243
244
245
246
247
 
 
248
249
250
251
252
253
254
 
 
255
256
 
257
258
259
...
362
363
364
365
 
366
367
368
...
371
372
373
374
 
375
376
377
...
380
381
382
383
 
384
385
386
...
389
390
391
392
 
393
394
395
...
398
399
400
401
 
402
403
404
...
407
408
409
410
 
411
412
413
...
416
417
418
419
 
420
421
 
422
423
424
...
120
121
122
 
 
123
124
125
126
127
128
129
130
131
132
...
213
214
215
 
 
216
217
218
219
220
221
222
 
 
223
224
225
226
227
228
229
 
 
230
231
232
233
234
235
236
 
 
237
238
239
240
241
242
243
 
 
244
245
246
247
248
249
250
 
 
251
252
253
254
255
256
257
 
 
258
259
260
 
261
262
263
264
...
367
368
369
 
370
371
372
373
...
376
377
378
 
379
380
381
382
...
385
386
387
 
388
389
390
391
...
394
395
396
 
397
398
399
400
...
403
404
405
 
406
407
408
409
...
412
413
414
 
415
416
417
418
...
421
422
423
 
424
425
 
426
427
428
429
0
@@ -120,8 +120,13 @@ void shoes_native_remove_item(SHOES_SLOT_OS *slot, VALUE item, char c)
0
 #define WINDOW_STYLE WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX
0
 
0
 #define WM_POINTS() \
0
-  x = LOWORD(l); \
0
-  y = HIWORD(l)
0
+  POINT p; \
0
+  p.x = LOWORD(l); \
0
+  p.y = HIWORD(l)
0
+#define WM_POINTS2() \
0
+  WM_POINTS(); \
0
+  ClientToScreen(win, &p); \
0
+  ScreenToClient(canvas->app->slot.window, &p); \
0
 
0
 #define KEY_SYM(sym)  shoes_app_keypress(app, ID2SYM(rb_intern("" # sym)))
0
 #define KEYPRESS(name, sym) \
0
@@ -208,52 +213,52 @@ shoes_slot_win32proc(
0
 
0
       case WM_LBUTTONDOWN:
0
       {
0
-        WM_POINTS();
0
-        shoes_canvas_send_click(c, 1, x, y + canvas->slot.scrolly);
0
+        WM_POINTS2();
0
+        shoes_app_click(canvas->app, 1, p.x, p.y + canvas->slot.scrolly);
0
       }
0
       break;
0
 
0
       case WM_RBUTTONDOWN:
0
       {
0
-        WM_POINTS();
0
-        shoes_canvas_send_click(c, 2, x, y + canvas->slot.scrolly);
0
+        WM_POINTS2();
0
+        shoes_app_click(canvas->app, 2, p.x, p.y + canvas->slot.scrolly);
0
       }
0
       break;
0
 
0
       case WM_MBUTTONDOWN:
0
       {
0
-        WM_POINTS();
0
-        shoes_canvas_send_click(c, 3, x, y + canvas->slot.scrolly);
0
+        WM_POINTS2();
0
+        shoes_app_click(canvas->app, 3, p.x, p.y + canvas->slot.scrolly);
0
       }
0
       break;
0
 
0
       case WM_LBUTTONUP:
0
       {
0
-        WM_POINTS();
0
-        shoes_canvas_send_release(c, 1, x, y + canvas->slot.scrolly);
0
+        WM_POINTS2();
0
+        shoes_app_release(canvas->app, 1, p.x, p.y + canvas->slot.scrolly);
0
       }
0
       break;
0
 
0
       case WM_RBUTTONUP:
0
       {
0
-        WM_POINTS();
0
-        shoes_canvas_send_release(c, 2, x, y + canvas->slot.scrolly);
0
+        WM_POINTS2();
0
+        shoes_app_release(canvas->app, 2, p.x, p.y + canvas->slot.scrolly);
0
       }
0
       break;
0
 
0
       case WM_MBUTTONUP:
0
       {
0
-        WM_POINTS();
0
-        shoes_canvas_send_release(c, 3, x, y + canvas->slot.scrolly);
0
+        WM_POINTS2();
0
+        shoes_app_release(canvas->app, 3, p.x, p.y + canvas->slot.scrolly);
0
       }
0
       break;
0
 
0
       case WM_MOUSEMOVE:
0
       {
0
-        WM_POINTS();
0
-        shoes_canvas_send_motion(c, x, y + canvas->slot.scrolly, Qnil);
0
+        WM_POINTS2();
0
+        shoes_app_motion(canvas->app, p.x, p.y + canvas->app->slot.scrolly);
0
       }
0
-      break;
0
+      return 1;
0
 
0
       case WM_ACTIVATE:
0
         if (LOWORD(w) == WA_INACTIVE)
0
@@ -362,7 +367,7 @@ shoes_app_win32proc(
0
       shoes_canvas *canvas;
0
       Data_Get_Struct(app->canvas, shoes_canvas, canvas);
0
       WM_POINTS();
0
-      shoes_app_click(app, 1, x, y + canvas->slot.scrolly);
0
+      shoes_app_click(app, 1, p.x, p.y + canvas->slot.scrolly);
0
     }
0
     break;
0
 
0
@@ -371,7 +376,7 @@ shoes_app_win32proc(
0
       shoes_canvas *canvas;
0
       Data_Get_Struct(app->canvas, shoes_canvas, canvas);
0
       WM_POINTS();
0
-      shoes_app_click(app, 2, x, y + canvas->slot.scrolly);
0
+      shoes_app_click(app, 2, p.x, p.y + canvas->slot.scrolly);
0
     }
0
     break;
0
 
0
@@ -380,7 +385,7 @@ shoes_app_win32proc(
0
       shoes_canvas *canvas;
0
       Data_Get_Struct(app->canvas, shoes_canvas, canvas);
0
       WM_POINTS();
0
-      shoes_app_click(app, 3, x, y + canvas->slot.scrolly);
0
+      shoes_app_click(app, 3, p.x, p.y + canvas->slot.scrolly);
0
     }
0
     break;
0
 
0
@@ -389,7 +394,7 @@ shoes_app_win32proc(
0
       shoes_canvas *canvas;
0
       Data_Get_Struct(app->canvas, shoes_canvas, canvas);
0
       WM_POINTS();
0
-      shoes_app_release(app, 1, x, y + canvas->slot.scrolly);
0
+      shoes_app_release(app, 1, p.x, p.y + canvas->slot.scrolly);
0
     }
0
     break;
0
 
0
@@ -398,7 +403,7 @@ shoes_app_win32proc(
0
       shoes_canvas *canvas;
0
       Data_Get_Struct(app->canvas, shoes_canvas, canvas);
0
       WM_POINTS();
0
-      shoes_app_release(app, 2, x, y + canvas->slot.scrolly);
0
+      shoes_app_release(app, 2, p.x, p.y + canvas->slot.scrolly);
0
     }
0
     break;
0
 
0
@@ -407,7 +412,7 @@ shoes_app_win32proc(
0
       shoes_canvas *canvas;
0
       Data_Get_Struct(app->canvas, shoes_canvas, canvas);
0
       WM_POINTS();
0
-      shoes_app_release(app, 3, x, y + canvas->slot.scrolly);
0
+      shoes_app_release(app, 3, p.x, p.y + canvas->slot.scrolly);
0
     }
0
     break;
0
 
0
@@ -416,9 +421,9 @@ shoes_app_win32proc(
0
       shoes_canvas *canvas;
0
       Data_Get_Struct(app->canvas, shoes_canvas, canvas);
0
       WM_POINTS();
0
-      shoes_app_motion(app, x, y + canvas->slot.scrolly);
0
+      shoes_app_motion(app, p.x, p.y + canvas->slot.scrolly);
0
     }
0
-    break;
0
+    return 1;
0
 
0
     case WM_CHAR:
0
       switch(w)

Comments