Changeset 456
- Timestamp:
- 03/04/2008 22:29:38 (6 months ago)
- Location:
- trunk/shoes
- Files:
-
- 6 modified
Legend:
- Unmodified
- Added
- Removed
-
trunk/shoes/app.c
r455 r456 27 27 rb_gc_mark_maybe(app->timers); 28 28 rb_gc_mark_maybe(app->styles); 29 rb_gc_mark_maybe(app->owner); 29 30 } 30 31 … … 41 42 SHOE_MEMZERO(app, shoes_app, 1); 42 43 app->started = FALSE; 44 app->owner = Qnil; 43 45 app->location = Qnil; 44 46 app->canvas = shoes_canvas_new(cShoes, app); … … 61 63 62 64 VALUE 63 shoes_app_new( )64 { 65 VALUE app = shoes_app_alloc( cApp);65 shoes_app_new(VALUE klass) 66 { 67 VALUE app = shoes_app_alloc(klass); 66 68 rb_ary_push(shoes_world->apps, app); 67 69 return app; … … 1356 1358 1357 1359 VALUE 1358 shoes_app_ main(int argc, VALUE *argv, VALUE self)1360 shoes_app_window(int argc, VALUE *argv, VALUE self, VALUE owner) 1359 1361 { 1360 1362 VALUE attr, block; 1361 VALUE app = shoes_app_new( );1363 VALUE app = shoes_app_new(self == cDialog ? cDialog : cApp); 1362 1364 shoes_app *app_t; 1363 1365 Data_Get_Struct(app, shoes_app, app_t); … … 1366 1368 rb_iv_set(app, "@main_app", block); 1367 1369 1370 app_t->owner = owner; 1368 1371 app_t->title = ATTR(attr, title); 1369 1372 app_t->resizable = (ATTR(attr, resizable) != Qfalse); … … 1374 1377 shoes_app_open(app_t, "/"); 1375 1378 return self; 1379 } 1380 1381 VALUE 1382 shoes_app_main(int argc, VALUE *argv, VALUE self) 1383 { 1384 return shoes_app_window(argc, argv, self, Qnil); 1376 1385 } 1377 1386 … … 1477 1486 { 1478 1487 shoes_code code = SHOES_OK; 1488 int dialog = (rb_obj_class(app->self) == cDialog); 1479 1489 1480 1490 #ifdef SHOES_GTK … … 1586 1596 1587 1597 app->slot.window = CreateWindowEx( 1588 WS_EX_CLIENTEDGE, SHOES_SHORTNAME, SHOES_APPNAME, 1598 dialog ? WS_EX_WINDOWEDGE : WS_EX_CLIENTEDGE, 1599 SHOES_SHORTNAME, SHOES_APPNAME, 1589 1600 WINDOW_STYLE | WS_CLIPCHILDREN | 1590 1601 (app->resizable ? (WS_THICKFRAME | WS_MAXIMIZEBOX) : WS_DLGFRAME) | … … 1624 1635 { 1625 1636 #ifdef SHOES_WIN32 1637 // TODO: disable parent windows of dialogs 1638 // if (dialog && !NIL_P(app->owner)) 1639 // { 1640 // shoes_app *owner; 1641 // Data_Get_Struct(app->owner, shoes_app, owner); 1642 // EnableWindow(owner->slot.window, FALSE); 1643 // } 1626 1644 ShowWindow(app->slot.window, SW_SHOWNORMAL); 1627 1645 #endif … … 2018 2036 2019 2037 VALUE 2038 shoes_app_contents(VALUE self) 2039 { 2040 shoes_app *app; 2041 Data_Get_Struct(self, shoes_app, app); 2042 return shoes_canvas_contents(app->canvas); 2043 } 2044 2045 VALUE 2020 2046 shoes_app_quit(VALUE self) 2021 2047 { -
trunk/shoes/app.h
r447 r456 41 41 VALUE title; 42 42 VALUE location; 43 VALUE owner; 43 44 } shoes_app; 44 45 -
trunk/shoes/canvas.c
r455 r456 158 158 cairo_save(cr); 159 159 return cr; 160 } 161 162 VALUE 163 shoes_canvas_owner(VALUE self) 164 { 165 SETUP(); 166 return canvas->app->owner; 160 167 } 161 168 … … 2198 2205 2199 2206 if (rb_block_given_p()) 2200 return shoes_app_ main(argc, argv, self);2207 return shoes_app_window(argc, argv, cApp, self); 2201 2208 2202 2209 rb_scan_args(argc, argv, "02&", &uri, &attr, &block); … … 2212 2219 // TODO: do I send back an array of created App objects I guess? 2213 2220 return Qnil; 2221 } 2222 2223 VALUE 2224 shoes_canvas_dialog(int argc, VALUE *argv, VALUE self) 2225 { 2226 return shoes_app_window(argc, argv, cDialog, self); 2214 2227 } 2215 2228 … … 2235 2248 #endif 2236 2249 } 2250 2251 VALUE 2252 shoes_canvas_dialog_plain(VALUE self) 2253 { 2254 SETUP(); 2255 #ifdef SHOES_GTK 2256 GtkStyle *style = gtk_widget_get_style(GTK_WIDGET(APP_WINDOW(canvas->app))); 2257 GdkColor bg = style->bg[GTK_STATE_NORMAL]; 2258 return shoes_color_new(bg.red / 257, bg.green / 257, bg.blue / 257 , SHOES_COLOR_OPAQUE); 2259 #endif 2260 #ifdef SHOES_QUARTZ 2261 ThemeBrush bg; 2262 RGBColor _color; 2263 HIWindowGetThemeBackground(canvas->app->os.window, &bg); 2264 GetThemeBrushAsColor(bg, 32, true, &_color); 2265 return shoes_color_new(_color.red/256, _color.green/256, _color.blue/256, SHOES_COLOR_OPAQUE); 2266 #endif 2267 #ifdef SHOES_WIN32 2268 DWORD winc = GetSysColor(COLOR_3DFACE); 2269 return shoes_color_new(GetRValue(winc), GetGValue(winc), GetBValue(winc), SHOES_COLOR_OPAQUE); 2270 #endif 2271 } -
trunk/shoes/canvas.h
r454 r456 244 244 245 245 VALUE shoes_app_main(int, VALUE *, VALUE); 246 VALUE shoes_app_window(int, VALUE *, VALUE, VALUE); 247 VALUE shoes_app_contents(VALUE); 248 246 249 VALUE shoes_canvas_alloc(VALUE); 247 250 VALUE shoes_canvas_new(VALUE, struct _shoes_app *); … … 251 254 void shoes_canvas_shape_do(shoes_canvas *, double, double, double, double, unsigned char); 252 255 VALUE shoes_canvas_style(int, VALUE *, VALUE); 256 VALUE shoes_canvas_owner(VALUE); 253 257 VALUE shoes_canvas_close(VALUE); 254 258 VALUE shoes_canvas_get_top(VALUE); … … 348 352 VALUE shoes_canvas_set_clipboard(VALUE, VALUE); 349 353 VALUE shoes_canvas_window(int, VALUE *, VALUE); 354 VALUE shoes_canvas_dialog(int, VALUE *, VALUE); 350 355 VALUE shoes_canvas_window_plain(VALUE); 356 VALUE shoes_canvas_dialog_plain(VALUE); 351 357 352 358 VALUE shoes_slot_new(VALUE, VALUE, VALUE); -
trunk/shoes/ruby.c
r452 r456 12 12 #include <math.h> 13 13 14 VALUE cShoes, cApp, c ShoesWindow, cMouse, cCanvas, cFlow, cStack, cMask, cShape, cImage, cVideo, cTimerBase, cTimer, cEvery, cAnim, cPattern, cBorder, cBackground, cTextBlock, cPara, cBanner, cTitle, cSubtitle, cTagline, cCaption, cInscription, cTextClass, cSpan, cDel, cStrong, cSub, cSup, cCode, cEm, cIns, cLinkUrl, cNative, cButton, cCheck, cRadio, cEditLine, cEditBox, cListBox, cProgress, cColor, cColors, cLink, cLinkHover;14 VALUE cShoes, cApp, cDialog, cShoesWindow, cMouse, cCanvas, cFlow, cStack, cMask, cShape, cImage, cVideo, cTimerBase, cTimer, cEvery, cAnim, cPattern, cBorder, cBackground, cTextBlock, cPara, cBanner, cTitle, cSubtitle, cTagline, cCaption, cInscription, cTextClass, cSpan, cDel, cStrong, cSub, cSup, cCode, cEm, cIns, cLinkUrl, cNative, cButton, cCheck, cRadio, cEditLine, cEditBox, cListBox, cProgress, cColor, cColors, cLink, cLinkHover; 15 15 VALUE eVlcError, eImageError, eNotImpl; 16 16 VALUE reHEX_SOURCE, reHEX3_SOURCE, reRGB_SOURCE, reRGBA_SOURCE, reGRAY_SOURCE, reGRAYA_SOURCE; … … 3803 3803 s_secret = rb_intern("secret"); 3804 3804 3805 cApp = rb_define_class("App", rb_cObject);3806 rb_define_alloc_func(cApp, shoes_app_alloc);3807 rb_define_method(cApp, "location", CASTHOOK(shoes_app_location), 0);3808 3809 3805 cShoesWindow = rb_define_class("Window", rb_cObject); 3810 3806 cMouse = rb_define_class("Mouse", rb_cObject); … … 3818 3814 rb_const_set(cShoes, rb_intern("RELEASE_ID"), INT2NUM(SHOES_RELEASE_ID)); 3819 3815 rb_const_set(cShoes, rb_intern("REVISION"), INT2NUM(SHOES_REVISION)); 3816 3817 cApp = rb_define_class_under(cShoes, "App", rb_cObject); 3818 rb_define_alloc_func(cApp, shoes_app_alloc); 3819 rb_define_method(cApp, "location", CASTHOOK(shoes_app_location), 0); 3820 rb_define_method(cApp, "children", CASTHOOK(shoes_app_contents), 0); 3821 cDialog = rb_define_class_under(cShoes, "Dialog", cApp); 3820 3822 3821 3823 eNotImpl = rb_define_class_under(cShoes, "NotImplementedError", rb_eStandardError); -
trunk/shoes/ruby.h
r454 r456 24 24 #endif 25 25 26 extern VALUE cShoes, cApp, c ShoesWindow, cMouse, cCanvas, cFlow, cStack, cMask, cNative, cShape, cVideo, cImage, cEvery, cTimer, cAnim, cPattern, cBorder, cBackground, cPara, cBanner, cTitle, cSubtitle, cTagline, cCaption, cInscription, cLinkText, cTextBlock, cTextClass, cSpan, cStrong, cSub, cSup, cCode, cDel, cEm, cIns, cButton, cEditLine, cEditBox, cListBox, cProgress, cCheck, cRadio, cColor, cColors, cLink, cLinkHover;26 extern VALUE cShoes, cApp, cDialog, cShoesWindow, cMouse, cCanvas, cFlow, cStack, cMask, cNative, cShape, cVideo, cImage, cEvery, cTimer, cAnim, cPattern, cBorder, cBackground, cPara, cBanner, cTitle, cSubtitle, cTagline, cCaption, cInscription, cLinkText, cTextBlock, cTextClass, cSpan, cStrong, cSub, cSup, cCode, cDel, cEm, cIns, cButton, cEditLine, cEditBox, cListBox, cProgress, cCheck, cRadio, cColor, cColors, cLink, cLinkHover; 27 27 extern VALUE eNotImpl, eImageError; 28 28 extern VALUE reHEX_SOURCE, reHEX3_SOURCE, reRGB_SOURCE, reRGBA_SOURCE, reGRAY_SOURCE, reGRAYA_SOURCE; … … 190 190 f("clipboard", get_clipboard, 0); \ 191 191 f("clipboard=", set_clipboard, 1); \ 192 f("owner", owner, 0); \ 192 193 f("window", window, -1); \ 193 f("window_plain", window_plain, 0) 194 f("dialog", dialog, -1); \ 195 f("window_plain", window_plain, 0); \ 196 f("dialog_plain", dialog_plain, 0) 194 197 195 198 #endif
