From 916c7e8ed784d47e55479a19cc3a17c40a2ec147 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Grubbstr=C3=B6m=20=28Grubba=29?= <grubba@grubba.org> Date: Sat, 28 Jan 2012 12:14:24 +0100 Subject: [PATCH] GTK: Added GDK1 and GDK2 modules corresponding to GTK1 and GTK2. Updated the GTKSupport module accordingly. --- lib/modules/GDK.pmod | 9 +++ lib/modules/GDK1.pmod | 58 +++++++++++++++++++ lib/modules/GDK2.pmod | 58 +++++++++++++++++++ lib/modules/GTKSupport.pmod/Util.pmod | 20 +++---- lib/modules/GTKSupport.pmod/pCtree.pike | 16 ++--- lib/modules/GTKSupport.pmod/pDrawingArea.pike | 10 ++-- 6 files changed, 148 insertions(+), 23 deletions(-) create mode 100644 lib/modules/GDK1.pmod create mode 100644 lib/modules/GDK2.pmod diff --git a/lib/modules/GDK.pmod b/lib/modules/GDK.pmod index ec25e891a5..f348296335 100644 --- a/lib/modules/GDK.pmod +++ b/lib/modules/GDK.pmod @@ -4,6 +4,15 @@ #define INDEX(x) GTK[x] +//! GDK wrapper module. +//! +//! This is a convenience module that is identical to either +//! either the @[GDK2] or the @[GDK1] module depending on +//! which (if any) of them is available. +//! +//! @seealso +//! @[GDK1], @[GDK2] + //! @decl import GTK //! @decl constant Atom diff --git a/lib/modules/GDK1.pmod b/lib/modules/GDK1.pmod new file mode 100644 index 0000000000..40e75abeda --- /dev/null +++ b/lib/modules/GDK1.pmod @@ -0,0 +1,58 @@ +#pike __REAL_VERSION__ + +#if constant(GTK1) && constant(GTK1.Widget) + +#define INDEX(x) GTK1[x] + +//! @decl import GTK1 + +//! @decl constant Atom + +object Atom = class +{ + mapping atoms = ([]); + + class fake_atom + { + object ra; + string n; + object get_atom() + { + if(ra) return ra; + return ra = GTK1->Gdk_Atom( n, 0 ); + } + string get_name() + { + return get_atom()->get_name(); + } + void create(string q) + { + n = q; + } + } + + object `[](string what) + { + if(atoms[what]) + return atoms[what]; + return atoms[what] = fake_atom( what ); + } +}(); + +mixed `[](string what) +{ + if(what == "_module_value") return UNDEFINED; + if(what == "Atom") return Atom; + if(!zero_type(INDEX("Gdk"+what))) + return INDEX("Gdk"+what); + if(!zero_type(INDEX("GDK_"+what))) + return INDEX("GDK_"+what); + if(!zero_type(INDEX("GDK_"+upper_case(GTK1->unsillycaps(what))))) + return INDEX("GDK_"+upper_case(GTK1->unsillycaps(what))); + return UNDEFINED; +// return GDKSupport[what]; +} + +#else /* constant(GTK1.Widget) */ +constant this_program_does_not_exist=1; +#endif diff --git a/lib/modules/GDK2.pmod b/lib/modules/GDK2.pmod new file mode 100644 index 0000000000..8f2c02bac1 --- /dev/null +++ b/lib/modules/GDK2.pmod @@ -0,0 +1,58 @@ +#pike __REAL_VERSION__ + +#if constant(GTK2) && constant(GTK2.Widget) + +#define INDEX(x) GTK2[x] + +//! @decl import GTK2 + +//! @decl constant Atom + +object Atom = class +{ + mapping atoms = ([]); + + class fake_atom + { + object ra; + string n; + object get_atom() + { + if(ra) return ra; + return ra = GTK2->Gdk_Atom( n, 0 ); + } + string get_name() + { + return get_atom()->get_name(); + } + void create(string q) + { + n = q; + } + } + + object `[](string what) + { + if(atoms[what]) + return atoms[what]; + return atoms[what] = fake_atom( what ); + } +}(); + +mixed `[](string what) +{ + if(what == "_module_value") return UNDEFINED; + if(what == "Atom") return Atom; + if(!zero_type(INDEX("Gdk"+what))) + return INDEX("Gdk"+what); + if(!zero_type(INDEX("GDK_"+what))) + return INDEX("GDK_"+what); + if(!zero_type(INDEX("GDK_"+upper_case(GTK2->unsillycaps(what))))) + return INDEX("GDK_"+upper_case(GTK2->unsillycaps(what))); + return UNDEFINED; +// return GDKSupport[what]; +} + +#else /* constant(GTK2.Widget) */ +constant this_program_does_not_exist=1; +#endif diff --git a/lib/modules/GTKSupport.pmod/Util.pmod b/lib/modules/GTKSupport.pmod/Util.pmod index f250ac9b7b..1b7ce11e99 100644 --- a/lib/modules/GTKSupport.pmod/Util.pmod +++ b/lib/modules/GTKSupport.pmod/Util.pmod @@ -23,15 +23,15 @@ mapping low_load_image( string filename, mapping|array|void bgcol ) return Image._load( filename ); } -//! Loads and decodes an image as a @[GDK.Pixmap]. +//! Loads and decodes an image as a @[GDK1.Pixmap]. //! //! @returns //! @mapping //! @member string "format" //! The MIME content type of the image. -//! @member GDK.Bitmap "alpha" +//! @member GDK1.Bitmap "alpha" //! The alpha channel of the image, if any. Otherwise @expr{0@}. -//! @member GDK.Bitmap "img" +//! @member GDK1.Bitmap "img" //! The decoded image. //! @endmapping mapping load_image( string filename, array|void bgcol ) @@ -39,20 +39,20 @@ mapping load_image( string filename, array|void bgcol ) if(mapping a = low_load_image( filename, bgcol ) ) return ([ "format":a->format, - "alpha": a->alpha && GDK.Bitmap( a->alpha ), - "img": GDK.Pixmap( a->img ), + "alpha": a->alpha && GDK1.Bitmap( a->alpha ), + "img": GDK1.Pixmap( a->img ), ]); } -//! Decodes an image as a @[GDK.Pixmap]. +//! Decodes an image as a @[GDK1.Pixmap]. //! //! @returns //! @mapping //! @member string "format" //! The MIME content type of the image. -//! @member GDK.Bitmap "alpha" +//! @member GDK1.Bitmap "alpha" //! The alpha channel of the image, if any. Otherwise @expr{0@}. -//! @member GDK.Bitmap "img" +//! @member GDK1.Bitmap "img" //! The decoded image. //! @endmapping mapping decode_image( string data, mapping|array|void tocolor ) @@ -60,8 +60,8 @@ mapping decode_image( string data, mapping|array|void tocolor ) if(mapping a = low_decode_image( data,tocolor ) ) return ([ "format":a->format, - "alpha": a->alpha && GDK.Bitmap( a->alpha ), - "img": GDK.Pixmap( a->img ), + "alpha": a->alpha && GDK1.Bitmap( a->alpha ), + "img": GDK1.Pixmap( a->img ), ]); } diff --git a/lib/modules/GTKSupport.pmod/pCtree.pike b/lib/modules/GTKSupport.pmod/pCtree.pike index a530a42960..da69aae0c3 100644 --- a/lib/modules/GTKSupport.pmod/pCtree.pike +++ b/lib/modules/GTKSupport.pmod/pCtree.pike @@ -114,13 +114,13 @@ class Node return !!ctree::node_get_cell_type(node,cell); } - Node set_background(GDK.Color color) + Node set_background(GDK1.Color color) { ctree::node_set_background(node,color); return this; } - Node set_foreground(GDK.Color color) + Node set_foreground(GDK1.Color color) { ctree::node_set_foreground(node, color); return this; @@ -181,14 +181,14 @@ class Node return node_get_pixtext(node,column); } - Node set_pixmap(int column, GDK.Pixmap pixmap,void|object(GDK.Bitmap) mask ) + Node set_pixmap(int column, GDK1.Pixmap pixmap,void|object(GDK1.Bitmap) mask ) { ctree::node_set_pixmap(node,column,pixmap,mask); return this; } Node set_pixtext( int column, string text, int spacing, - GDK.Pixmap pixmap, object(GDK.Bitmap)|void mask) + GDK1.Pixmap pixmap, object(GDK1.Bitmap)|void mask) { ctree::node_set_pixtext(node,column,text,spacing,pixmap,mask); return this; @@ -206,10 +206,10 @@ class Node } Node set_info(string text, int spacing, - object(GDK.Pixmap)|void pixmap_closed, - object(GDK.Bitmap)|void mask_closed, - object(GDK.Pixmap)|void pixmap_opened, - object(GDK.Bitmap)|void mask_opened, + object(GDK1.Pixmap)|void pixmap_closed, + object(GDK1.Bitmap)|void mask_closed, + object(GDK1.Pixmap)|void pixmap_opened, + object(GDK1.Bitmap)|void mask_opened, int is_leaf, int expanded ) { ctree::set_node_info(node,text,spacing,pixmap_closed, diff --git a/lib/modules/GTKSupport.pmod/pDrawingArea.pike b/lib/modules/GTKSupport.pmod/pDrawingArea.pike index f1cfa8eb9b..5bf284c068 100644 --- a/lib/modules/GTKSupport.pmod/pDrawingArea.pike +++ b/lib/modules/GTKSupport.pmod/pDrawingArea.pike @@ -30,10 +30,10 @@ this_program size(int x, int y) { if(!is_realized) return this; ::size(x,y); - if(!bgc) bgc = GDK.GC( background_pix||backing_store||this ); + if(!bgc) bgc = GDK1.GC( background_pix||backing_store||this ); object nb; if((x>_xsize || y>_ysize) && x && y) - nb = GDK.Pixmap( Image.Image(max(x,_xsize),max(y,_ysize)) ); + nb = GDK1.Pixmap( Image.Image(max(x,_xsize),max(y,_ysize)) ); if(nb && backing_store) { nb->draw_pixmap( bgc, backing_store, 0,0,0,0, _xsize, _ysize ); @@ -102,9 +102,9 @@ void create() // ::set_usize( 100,100 ); } -GDK.Pixmap background_pix; -GDK.Pixmap background_color; -void set_background( GDK.Pixmap to ) +GDK1.Pixmap background_pix; +GDK1.Pixmap background_color; +void set_background( GDK1.Pixmap to ) { if(to->red) background_color = to; -- GitLab