Changeset 456

Show
Ignore:
Timestamp:
03/04/2008 22:29:38 (6 months ago)
Author:
why
Message:
  • shoes/canvas.c: new owner method for getting the parent window of a newly launched window. also, dialog for creating dialog style windows (still working on modal) and dialog_plain for getting the background color for dialogs on a platform.
Location:
trunk/shoes
Files:
6 modified

Legend:

Unmodified
Added
Removed
  • trunk/shoes/app.c

    r455 r456  
    2727  rb_gc_mark_maybe(app->timers); 
    2828  rb_gc_mark_maybe(app->styles); 
     29  rb_gc_mark_maybe(app->owner); 
    2930} 
    3031 
     
    4142  SHOE_MEMZERO(app, shoes_app, 1); 
    4243  app->started = FALSE; 
     44  app->owner = Qnil; 
    4345  app->location = Qnil; 
    4446  app->canvas = shoes_canvas_new(cShoes, app); 
     
    6163 
    6264VALUE 
    63 shoes_app_new() 
    64 { 
    65   VALUE app = shoes_app_alloc(cApp); 
     65shoes_app_new(VALUE klass) 
     66{ 
     67  VALUE app = shoes_app_alloc(klass); 
    6668  rb_ary_push(shoes_world->apps, app); 
    6769  return app; 
     
    13561358 
    13571359VALUE 
    1358 shoes_app_main(int argc, VALUE *argv, VALUE self) 
     1360shoes_app_window(int argc, VALUE *argv, VALUE self, VALUE owner) 
    13591361{ 
    13601362  VALUE attr, block; 
    1361   VALUE app = shoes_app_new(); 
     1363  VALUE app = shoes_app_new(self == cDialog ? cDialog : cApp); 
    13621364  shoes_app *app_t; 
    13631365  Data_Get_Struct(app, shoes_app, app_t); 
     
    13661368  rb_iv_set(app, "@main_app", block); 
    13671369 
     1370  app_t->owner = owner; 
    13681371  app_t->title = ATTR(attr, title); 
    13691372  app_t->resizable = (ATTR(attr, resizable) != Qfalse); 
     
    13741377    shoes_app_open(app_t, "/"); 
    13751378  return self; 
     1379} 
     1380 
     1381VALUE 
     1382shoes_app_main(int argc, VALUE *argv, VALUE self) 
     1383{ 
     1384  return shoes_app_window(argc, argv, self, Qnil); 
    13761385} 
    13771386 
     
    14771486{ 
    14781487  shoes_code code = SHOES_OK; 
     1488  int dialog = (rb_obj_class(app->self) == cDialog); 
    14791489 
    14801490#ifdef SHOES_GTK 
     
    15861596 
    15871597  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, 
    15891600    WINDOW_STYLE | WS_CLIPCHILDREN | 
    15901601      (app->resizable ? (WS_THICKFRAME | WS_MAXIMIZEBOX) : WS_DLGFRAME) | 
     
    16241635  { 
    16251636#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    // } 
    16261644    ShowWindow(app->slot.window, SW_SHOWNORMAL); 
    16271645#endif 
     
    20182036 
    20192037VALUE 
     2038shoes_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 
     2045VALUE 
    20202046shoes_app_quit(VALUE self) 
    20212047{ 
  • trunk/shoes/app.h

    r447 r456  
    4141  VALUE title; 
    4242  VALUE location; 
     43  VALUE owner; 
    4344} shoes_app; 
    4445 
  • trunk/shoes/canvas.c

    r455 r456  
    158158  cairo_save(cr); 
    159159  return cr; 
     160} 
     161 
     162VALUE 
     163shoes_canvas_owner(VALUE self) 
     164{ 
     165  SETUP(); 
     166  return canvas->app->owner; 
    160167} 
    161168 
     
    21982205 
    21992206  if (rb_block_given_p()) 
    2200     return shoes_app_main(argc, argv, self); 
     2207    return shoes_app_window(argc, argv, cApp, self); 
    22012208 
    22022209  rb_scan_args(argc, argv, "02&", &uri, &attr, &block); 
     
    22122219  // TODO: do I send back an array of created App objects I guess? 
    22132220  return Qnil; 
     2221} 
     2222 
     2223VALUE 
     2224shoes_canvas_dialog(int argc, VALUE *argv, VALUE self) 
     2225{ 
     2226  return shoes_app_window(argc, argv, cDialog, self); 
    22142227} 
    22152228 
     
    22352248#endif 
    22362249} 
     2250 
     2251VALUE 
     2252shoes_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  
    244244 
    245245VALUE shoes_app_main(int, VALUE *, VALUE); 
     246VALUE shoes_app_window(int, VALUE *, VALUE, VALUE); 
     247VALUE shoes_app_contents(VALUE); 
     248 
    246249VALUE shoes_canvas_alloc(VALUE); 
    247250VALUE shoes_canvas_new(VALUE, struct _shoes_app *); 
     
    251254void shoes_canvas_shape_do(shoes_canvas *, double, double, double, double, unsigned char); 
    252255VALUE shoes_canvas_style(int, VALUE *, VALUE); 
     256VALUE shoes_canvas_owner(VALUE); 
    253257VALUE shoes_canvas_close(VALUE); 
    254258VALUE shoes_canvas_get_top(VALUE); 
     
    348352VALUE shoes_canvas_set_clipboard(VALUE, VALUE); 
    349353VALUE shoes_canvas_window(int, VALUE *, VALUE); 
     354VALUE shoes_canvas_dialog(int, VALUE *, VALUE); 
    350355VALUE shoes_canvas_window_plain(VALUE); 
     356VALUE shoes_canvas_dialog_plain(VALUE); 
    351357 
    352358VALUE shoes_slot_new(VALUE, VALUE, VALUE); 
  • trunk/shoes/ruby.c

    r452 r456  
    1212#include <math.h> 
    1313 
    14 VALUE cShoes, cApp, 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; 
     14VALUE 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; 
    1515VALUE eVlcError, eImageError, eNotImpl; 
    1616VALUE reHEX_SOURCE, reHEX3_SOURCE, reRGB_SOURCE, reRGBA_SOURCE, reGRAY_SOURCE, reGRAYA_SOURCE; 
     
    38033803  s_secret = rb_intern("secret"); 
    38043804 
    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  
    38093805  cShoesWindow = rb_define_class("Window", rb_cObject); 
    38103806  cMouse = rb_define_class("Mouse", rb_cObject); 
     
    38183814  rb_const_set(cShoes, rb_intern("RELEASE_ID"), INT2NUM(SHOES_RELEASE_ID)); 
    38193815  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); 
    38203822 
    38213823  eNotImpl = rb_define_class_under(cShoes, "NotImplementedError", rb_eStandardError); 
  • trunk/shoes/ruby.h

    r454 r456  
    2424#endif 
    2525 
    26 extern VALUE cShoes, cApp, 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; 
     26extern 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; 
    2727extern VALUE eNotImpl, eImageError; 
    2828extern VALUE reHEX_SOURCE, reHEX3_SOURCE, reRGB_SOURCE, reRGBA_SOURCE, reGRAY_SOURCE, reGRAYA_SOURCE; 
     
    190190  f("clipboard", get_clipboard, 0); \ 
    191191  f("clipboard=", set_clipboard, 1); \ 
     192  f("owner", owner, 0); \ 
    192193  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) 
    194197 
    195198#endif