GitHub Sale: sign up for any paid plan this week and pay nothing until January 1, 2009!  [ hide ]

public
Description: a tiny graphical app kit for ruby
Homepage: http://code.whytheluckystiff.net/shoes
Clone URL: git://github.com/why/shoes.git
 * shoes/world.c: registering window classes during shoes_init().
 * shoes/app.c: pass messages to the appropriate window.  all dialogs go 
 with the main window.
why (author)
Fri Feb 29 01:49:07 -0800 2008
commit  ca1c693d48510dd7bdb91978274e7ee964a8717e
tree    65e1139261e67439326e63deab50b2fca1da88d0
parent  186eae850f1fc6fadd227805677dad0f876f1648
...
86
87
88
 
89
90
 
91
92
93
...
192
193
194
 
195
196
197
...
233
234
235
 
 
 
 
 
 
236
237
238
...
86
87
88
89
90
 
91
92
93
94
...
193
194
195
196
197
198
199
...
235
236
237
238
239
240
241
242
243
244
245
246
0
@@ -86,8 +86,9 @@ task :build => :build_os do
0
   mkdir_p "dist/ruby"
0
   cp_r "#{ext_ruby}/lib/ruby/1.8", "dist/ruby/lib"
0
   cp_r FileList["rubygems/*"], "dist/ruby/lib"
0
+ rm_f FileList["dist/ruby/lib/**/*.h"]
0
   unless ENV['STANDARD']
0
- %w[rdoc soap webrick wsdl xsd].each do |libn|
0
+ %w[cgi cgi.rb cgi-lib.rb rdoc rexml rss shell soap webrick wsdl xsd].each do |libn|
0
       rm_rf "dist/ruby/lib/#{libn}"
0
     end
0
   end
0
@@ -192,6 +193,7 @@ when /win32/
0
     /Ideps\pango\include\glib-2.0
0
     /Ideps\pango\lib\glib-2.0\include
0
     /Ideps\ruby\lib\ruby\1.8\i386-mswin32
0
+ /Ideps\curl\include
0
     /I.
0
     /O2 /GR /EHsc
0
   ].gsub(/\n\s*/, ' ')
0
@@ -233,6 +235,12 @@ when /win32/
0
       "/SUBSYSTEM:WINDOWS bin/main.obj shoes/appwin32.res lib#{SONAME}.lib #{MSVC_LIBS2}"
0
   end
0
 
0
+ task "dist/pull.exe" => ["bin/pull.obj"] do |t|
0
+ rm_f t.name
0
+ sh "link #{MSVC_LDFLAGS} /OUT:#{t.name} /LIBPATH:deps/curl/lib " +
0
+ "/SUBSYSTEM:WINDOWS bin/pull.obj libcurl.lib #{MSVC_LIBS2}"
0
+ end
0
+
0
   task "dist/lib#{SONAME}.dll" => ["shoes/version.h"] + OBJ do |t|
0
     sh "link #{MSVC_LDFLAGS} /OUT:#{t.name} /dll " +
0
       "/LIBPATH:#{ext_ruby}/lib " +
...
27
28
29
30
31
32
33
34
35
36
37
38
 
39
40
 
41
 
 
 
42
43
44
...
27
28
29
 
 
 
30
31
 
 
32
33
34
35
36
37
38
39
40
41
42
43
44
0
@@ -27,18 +27,18 @@ main(argc, argv)
0
   argc = shoes_win32_cmdvector(GetCommandLine(), &argv);
0
 #endif
0
   %DEFAULTS%
0
- code = shoes_init();
0
- if (code != SHOES_OK)
0
- goto done;
0
 
0
 #ifdef SHOES_WIN32
0
- shoes_world->os.instance = inst;
0
- shoes_world->os.style = style;
0
   path = SHOE_ALLOC_N(char, SHOES_BUFSIZE);
0
   GetModuleFileName(NULL, (LPSTR)path, SHOES_BUFSIZE);
0
+ code = shoes_init(inst, style);
0
 #else
0
   path = argv[0];
0
+ code = shoes_init();
0
 #endif
0
+ if (code != SHOES_OK)
0
+ goto done;
0
+
0
   shoes_set_argv(argc - 1, &argv[1]);
0
   code = shoes_start(path, "/");
0
   if (code != SHOES_OK)
...
59
60
61
62
63
64
 
 
 
65
66
67
...
1391
1392
1393
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1394
1395
1396
...
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
...
1580
1581
1582
 
1583
1584
1585
...
1638
1639
1640
1641
 
1642
1643
1644
1645
1646
1647
1648
 
 
 
 
 
1649
1650
1651
...
1660
1661
1662
1663
 
 
 
1664
1665
1666
...
59
60
61
 
 
 
62
63
64
65
66
67
...
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
...
1548
1549
1550
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1551
1552
1553
...
1591
1592
1593
1594
1595
1596
1597
...
1650
1651
1652
 
1653
1654
1655
1656
1657
1658
1659
 
1660
1661
1662
1663
1664
1665
1666
1667
...
1676
1677
1678
 
1679
1680
1681
1682
1683
1684
0
@@ -59,9 +59,9 @@ shoes_app_alloc(VALUE klass)
0
 VALUE
0
 shoes_app_new()
0
 {
0
- shoes_world->app = shoes_app_alloc(cApp);
0
- rb_ary_push(shoes_world->apps, shoes_world->app);
0
- return shoes_world->app;
0
+ VALUE app = shoes_app_alloc(cApp);
0
+ rb_ary_push(shoes_world->apps, app);
0
+ return app;
0
 }
0
 
0
 static gint
0
@@ -1391,6 +1391,54 @@ shoes_app_start(VALUE appobj, VALUE allapps, char *uri)
0
   return SHOES_OK;
0
 }
0
 
0
+#ifdef SHOES_WIN32
0
+shoes_code
0
+shoes_classex_init()
0
+{
0
+ shoes_code code = SHOES_OK;
0
+ shoes_world->os.classex.hInstance = shoes_world->os.instance;
0
+ shoes_world->os.classex.lpszClassName = SHOES_SHORTNAME;
0
+ shoes_world->os.classex.lpfnWndProc = shoes_app_win32proc;
0
+ shoes_world->os.classex.style = CS_HREDRAW | CS_VREDRAW;
0
+ shoes_world->os.classex.cbSize = sizeof(WNDCLASSEX);
0
+ shoes_world->os.classex.hIcon = LoadIcon(shoes_world->os.instance, IDI_APPLICATION);
0
+ shoes_world->os.classex.hIconSm = LoadIcon(shoes_world->os.instance, IDI_APPLICATION);
0
+ shoes_world->os.classex.hCursor = LoadCursor(NULL, IDC_ARROW);
0
+ shoes_world->os.classex.lpszMenuName = NULL;
0
+ shoes_world->os.classex.cbClsExtra = 0;
0
+ shoes_world->os.classex.cbWndExtra = 0;
0
+ shoes_world->os.classex.hbrBackground = 0;
0
+
0
+ if (!RegisterClassEx(&shoes_world->os.classex))
0
+ {
0
+ QUIT("Couldn't register WIN32 window class.");
0
+ }
0
+
0
+ shoes_world->os.vlclassex.hInstance = shoes_world->os.slotex.hInstance = shoes_world->os.instance;
0
+ shoes_world->os.vlclassex.lpszClassName = SHOES_VLCLASS;
0
+ shoes_world->os.slotex.lpszClassName = SHOES_SLOTCLASS;
0
+ shoes_world->os.vlclassex.style = shoes_world->os.slotex.style = CS_NOCLOSE;
0
+ shoes_world->os.vlclassex.lpfnWndProc = DefWindowProc;
0
+ shoes_world->os.slotex.lpfnWndProc = shoes_slot_win32proc;
0
+ shoes_world->os.vlclassex.cbSize = shoes_world->os.slotex.cbSize = sizeof(WNDCLASSEX);
0
+ shoes_world->os.vlclassex.hIcon = shoes_world->os.slotex.hIcon = NULL;
0
+ shoes_world->os.vlclassex.hIconSm = shoes_world->os.slotex.hIconSm = NULL;
0
+ shoes_world->os.vlclassex.hCursor = shoes_world->os.slotex.hCursor = LoadCursor(NULL, IDC_ARROW);
0
+ shoes_world->os.vlclassex.lpszMenuName = shoes_world->os.slotex.lpszMenuName = NULL;
0
+ shoes_world->os.vlclassex.cbClsExtra = shoes_world->os.slotex.cbClsExtra = 0;
0
+ shoes_world->os.vlclassex.cbWndExtra = shoes_world->os.slotex.cbWndExtra = 0;
0
+ shoes_world->os.vlclassex.hbrBackground = shoes_world->os.slotex.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
0
+
0
+ if (!RegisterClassEx(&shoes_world->os.slotex) || !RegisterClassEx(&shoes_world->os.vlclassex))
0
+ {
0
+ QUIT("Couldn't register VLC window class.");
0
+ }
0
+
0
+quit:
0
+ return code;
0
+}
0
+#endif
0
+
0
 shoes_code
0
 shoes_app_open(shoes_app *app, char *path, unsigned char is_main)
0
 {
0
@@ -1500,43 +1548,6 @@ shoes_app_open(shoes_app *app, char *path, unsigned char is_main)
0
   app->os.ctrlkey = false;
0
   app->os.altkey = false;
0
   app->os.shiftkey = false;
0
- app->os.classex.hInstance = shoes_world->os.instance;
0
- app->os.classex.lpszClassName = SHOES_SHORTNAME;
0
- app->os.classex.lpfnWndProc = shoes_app_win32proc;
0
- app->os.classex.style = CS_HREDRAW | CS_VREDRAW;
0
- app->os.classex.cbSize = sizeof(WNDCLASSEX);
0
- app->os.classex.hIcon = LoadIcon(shoes_world->os.instance, IDI_APPLICATION);
0
- app->os.classex.hIconSm = LoadIcon(shoes_world->os.instance, IDI_APPLICATION);
0
- app->os.classex.hCursor = LoadCursor(NULL, IDC_ARROW);
0
- app->os.classex.lpszMenuName = NULL;
0
- app->os.classex.cbClsExtra = 0;
0
- app->os.classex.cbWndExtra = 0;
0
- app->os.classex.hbrBackground = 0;
0
-
0
- if (!RegisterClassEx(&app->os.classex))
0
- {
0
- QUIT("Couldn't register WIN32 window class.");
0
- }
0
-
0
- app->os.vlclassex.hInstance = app->os.slotex.hInstance = shoes_world->os.instance;
0
- app->os.vlclassex.lpszClassName = SHOES_VLCLASS;
0
- app->os.slotex.lpszClassName = SHOES_SLOTCLASS;
0
- app->os.vlclassex.style = app->os.slotex.style = CS_NOCLOSE;
0
- app->os.vlclassex.lpfnWndProc = DefWindowProc;
0
- app->os.slotex.lpfnWndProc = shoes_slot_win32proc;
0
- app->os.vlclassex.cbSize = app->os.slotex.cbSize = sizeof(WNDCLASSEX);
0
- app->os.vlclassex.hIcon = app->os.slotex.hIcon = NULL;
0
- app->os.vlclassex.hIconSm = app->os.slotex.hIconSm = NULL;
0
- app->os.vlclassex.hCursor = app->os.slotex.hCursor = LoadCursor(NULL, IDC_ARROW);
0
- app->os.vlclassex.lpszMenuName = app->os.slotex.lpszMenuName = NULL;
0
- app->os.vlclassex.cbClsExtra = app->os.slotex.cbClsExtra = 0;
0
- app->os.vlclassex.cbWndExtra = app->os.slotex.cbWndExtra = 0;
0
- app->os.vlclassex.hbrBackground = app->os.slotex.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
0
-
0
- if (!RegisterClassEx(&app->os.slotex) || !RegisterClassEx(&app->os.vlclassex))
0
- {
0
- QUIT("Couldn't register VLC window class.");
0
- }
0
 
0
   // remove the menu
0
   rect.left = 0;
0
@@ -1580,6 +1591,7 @@ shoes_app_open(shoes_app *app, char *path, unsigned char is_main)
0
   if (code != SHOES_OK)
0
     return code;
0
 
0
+ INFO("ShowWindow\n");
0
 #ifdef SHOES_WIN32
0
   ShowWindow(app->slot.window, SW_SHOWNORMAL);
0
 #endif
0
@@ -1638,14 +1650,18 @@ shoes_app_loop(shoes_app *app)
0
 
0
 #ifdef SHOES_WIN32
0
   MSG msgs;
0
- while (WM_QUIT != msgs.message)
0
+ while (msgs.message != WM_QUIT)
0
   {
0
     BOOL msg = PeekMessage(&msgs, NULL, 0, 0, PM_REMOVE);
0
     if (msg)
0
     {
0
       if (msgs.message == WM_KEYDOWN || msgs.message == WM_KEYUP)
0
       {
0
- if (RARRAY_LEN(app->slot.controls) > 0)
0
+ VALUE appw = (VALUE)GetWindowLong(msgs.hwnd, GWL_USERDATA);
0
+ shoes_app *appk;
0
+ Data_Get_Struct(appw, shoes_app, appk);
0
+
0
+ if (RARRAY_LEN(appk->slot.controls) > 0)
0
         {
0
           switch (msgs.wParam)
0
           {
0
@@ -1660,7 +1676,9 @@ shoes_app_loop(shoes_app *app)
0
       }
0
       else if (msgs.message == WM_SYSCHAR || msgs.message == WM_CHAR)
0
         msg = false;
0
- if (msg) msg = IsDialogMessage(app->slot.window, &msgs);
0
+ if (msg)
0
+ msg = IsDialogMessage(app->slot.window, &msgs);
0
+
0
       if (!msg)
0
       {
0
         TranslateMessage(&msgs);
...
46
47
48
 
 
 
49
50
51
...
46
47
48
49
50
51
52
53
54
0
@@ -46,6 +46,9 @@ typedef struct _shoes_app {
0
 //
0
 VALUE shoes_app_alloc(VALUE);
0
 VALUE shoes_app_new(void);
0
+#ifdef SHOES_WIN32
0
+shoes_code shoes_classex_init();
0
+#endif
0
 shoes_code shoes_app_start(VALUE, VALUE, char *);
0
 shoes_code shoes_app_open(shoes_app *, char *, unsigned char);
0
 shoes_code shoes_app_loop(shoes_app *);
...
45
46
47
 
48
49
50
...
80
81
82
 
83
84
85
...
137
138
139
 
140
141
142
...
149
150
151
152
153
154
155
156
157
158
 
 
159
160
161
...
45
46
47
48
49
50
51
...
81
82
83
84
85
86
87
...
139
140
141
142
143
144
145
...
152
153
154
 
155
156
157
158
159
 
160
161
162
163
164
0
@@ -45,6 +45,7 @@
0
 
0
 #define SHOES_EXTERN
0
 #define SHOES_EXTERN_VAR extern
0
+#define SHOES_INIT_ARGS void
0
 
0
 typedef struct {
0
   GtkWidget *box, *canvas;
0
@@ -80,6 +81,7 @@ typedef struct {
0
 #define SHOES_CONTROL1 3045
0
 #define SHOES_EXTERN
0
 #define SHOES_EXTERN_VAR extern
0
+#define SHOES_INIT_ARGS void
0
 
0
 typedef struct {
0
   HIViewRef scrollview, view;
0
@@ -137,6 +139,7 @@ OSStatus shoes_slot_quartz_create(VALUE, SHOES_SLOT_OS *, int, int, int, int);
0
 #define SHOES_CONTROL1 3045
0
 #define SHOES_EXTERN extern "C" __declspec(dllimport)
0
 #define SHOES_EXTERN_VAR SHOES_EXTERN
0
+#define SHOES_INIT_ARGS HINSTANCE inst, int style
0
 
0
 typedef struct {
0
   HDC dc;
0
@@ -149,13 +152,13 @@ typedef struct {
0
 
0
 typedef struct {
0
   BOOL ctrlkey, altkey, shiftkey;
0
- WNDCLASSEX classex, slotex, vlclassex;
0
 } shoes_app_win32, SHOES_APP_OS;
0
 
0
 typedef struct {
0
   HINSTANCE instance;
0
   int style;
0
-} sheos_world_win32, SHOES_WORLD_OS;
0
+ WNDCLASSEX classex, slotex, vlclassex;
0
+} shoes_world_win32, SHOES_WORLD_OS;
0
 
0
 #define SHOES_CONTROL_REF HWND
0
 #define DC(slot) slot.window
...
34
35
36
37
 
38
39
40
...
48
49
50
 
 
 
 
 
51
52
53
...
34
35
36
 
37
38
39
40
...
48
49
50
51
52
53
54
55
56
57
58
0
@@ -34,7 +34,7 @@ shoes_world_free(shoes_world_t *world)
0
 }
0
 
0
 shoes_code
0
-shoes_init()
0
+shoes_init(SHOES_INIT_ARGS)
0
 {
0
 #ifdef SHOES_WIN32
0
   INITCOMMONCONTROLSEX InitCtrlEx;
0
@@ -48,6 +48,11 @@ shoes_init()
0
   shoes_slot_quartz_register();
0
 #endif
0
   shoes_world = shoes_world_alloc();
0
+#ifdef SHOES_WIN32
0
+ shoes_world->os.instance = inst;
0
+ shoes_world->os.style = style;
0
+ shoes_classex_init();
0
+#endif
0
   return SHOES_OK;
0
 }
0
 
...
32
33
34
35
 
36
37
38
...
32
33
34
 
35
36
37
38
0
@@ -32,7 +32,7 @@ void shoes_world_free(shoes_world_t *);
0
 //
0
 // Shoes
0
 //
0
-SHOES_EXTERN shoes_code shoes_init(void);
0
+SHOES_EXTERN shoes_code shoes_init(SHOES_INIT_ARGS);
0
 SHOES_EXTERN shoes_code shoes_load(char *, char *);
0
 SHOES_EXTERN shoes_code shoes_start(char *, char *);
0
 #ifdef SHOES_WIN32

Comments

    No one has commented yet.