Changeset 15
- Timestamp:
- 11/26/06 11:22:07 (2 years ago)
- Files:
-
- trunk/luigi/example1.d (modified) (4 diffs)
- trunk/luigi/gldraw.d (modified) (1 diff)
- trunk/luigi/gui.d (modified) (3 diffs)
- trunk/luigi/theme.d (modified) (17 diffs)
- trunk/luigi/themes (added)
- trunk/luigi/themes/dxut.d (added)
- trunk/luigi/themes/dxutcontrols.dds (added)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/luigi/example1.d
r13 r15 28 28 import luigui = luigi.gui; 29 29 import luigi.adaptor.glfw; 30 static import luigi.themes.dxut; 30 31 31 32 import derelict.glfw.glfw; … … 79 80 80 81 // Set the background color 81 glClearColor( 0, 0, 0, 0 );82 glClearColor( 66/255., 75/255., 121/255., 0 ); 82 83 83 84 … … 87 88 with(luigui) { 88 89 Luigi().adaptor = GLFWAdaptor(); 90 Luigi().theme = new luigi.themes.dxut.DXUTTheme(); 89 91 gui = new Overlay; 90 92 … … 275 277 glClear( GL_COLOR_BUFFER_BIT ); 276 278 279 glTranslatef(-4,14,4 ); 280 glBegin( GL_TRIANGLES ); 281 glColor3f( 1, 0, 0 ); glVertex3f( -5, 0, -4 ); 282 glColor3f( 0, 1, 0 ); glVertex3f( 5, 0, -4 ); 283 glColor3f( 0, 0, 1 ); glVertex3f( 0, 0, 6); 284 glEnd(); 285 glTranslatef( 4,-14,-4 ); 286 277 287 // Draw a rotating colorful triangle 278 288 glTranslatef( 0, 14, 0 ); trunk/luigi/gldraw.d
r10 r15 108 108 glEnd(); 109 109 } 110 111 void fill_rect(Rect r, float[4] tc) { 112 glBegin(GL_QUADS); 113 glTexCoord2f(tc[0],tc[1]); glVertex2f(r.x1,r.y1); 114 glTexCoord2f(tc[2],tc[1]); glVertex2f(r.x2,r.y1); 115 glTexCoord2f(tc[2],tc[3]); glVertex2f(r.x2,r.y2); 116 glTexCoord2f(tc[0],tc[3]); glVertex2f(r.x1,r.y2); 117 glEnd(); 118 } 119 120 void fill_rect(Rect r, int[4] tc) { 121 glBegin(GL_QUADS); 122 glTexCoord2i(tc[0],tc[1]); glVertex2f(r.x1,r.y1); 123 glTexCoord2i(tc[2],tc[1]); glVertex2f(r.x2,r.y1); 124 glTexCoord2i(tc[2],tc[3]); glVertex2f(r.x2,r.y2); 125 glTexCoord2i(tc[0],tc[3]); glVertex2f(r.x1,r.y2); 126 glEnd(); 127 } 128 110 129 void stroke_rect(Rect r) { 111 130 glBegin(GL_LINE_LOOP); trunk/luigi/gui.d
r13 r15 1028 1028 /** Sets up the drawing state for 2D GUI drawing and draws it's children. */ 1029 1029 override void draw() { 1030 // Over1031 1030 if (!shown) return; 1032 drawsys.push_graphics_state(rect); 1033 1031 Luigi().theme.begin_drawing(rect); 1034 1032 super.draw(); 1035 1036 drawsys.pop_graphics_state(); 1033 Luigi().theme.end_drawing(); 1037 1034 } 1038 1035 … … 1240 1237 1241 1238 bool depressed() { return m_depressed; } 1239 bool rollover() { return m_rollover; } 1242 1240 1243 1241 char[] label; … … 1249 1247 protected: 1250 1248 bool m_depressed = false; 1249 bool m_rollover = false; 1251 1250 } 1252 1251 trunk/luigi/theme.d
r12 r15 33 33 import luigi.bitmaps; 34 34 import luigi.gldraw; 35 import gldraw = luigi.gldraw; 35 36 import luigi.font; 36 37 import luigi.event; … … 43 44 interface Theme 44 45 { 46 /** Called before and after refreshing the gui by Overlay. 47 * This is where all common 2D GL state can be set up and restored by 48 * the theme. 49 */ 50 void begin_drawing(Rect r); 51 void end_drawing(); 45 52 46 53 /** Draws the given item */ … … 65 72 { 66 73 abstract override void draw(Widget item); 67 68 74 abstract override Size minimum_size(Widget item, Size bounds); 69 75 abstract override Size preferred_size(Widget item, Size bounds); 76 77 void begin_drawing(Rect r) {} 78 void end_drawing() {} 70 79 71 80 //============================================================================ … … 88 97 } 89 98 } 90 91 99 92 100 template FuncDispatcher(FuncT) … … 114 122 } 115 123 116 class StdTheme : AbstractTheme124 class ThemeBase : AbstractTheme 117 125 { 118 void _addFuncs(alias Class)(DrawFunc draw, SizeFunc best_sz, SizeFunc min_sz=null ) 126 alias Size delegate(Widget item, Size bounds) SizeFunc; 127 alias void delegate(Widget item) DrawFunc; 128 129 alias void delegate(Widget item, MouseButtonEvent ev) ButtonFunc; 130 alias void delegate(Widget item, MouseMoveEvent ev) MoveFunc; 131 alias void delegate(Widget item, KeyEvent ev) KeyFunc; 132 133 void addHandlers(alias Class)(DrawFunc draw, SizeFunc best_sz, SizeFunc min_sz=null ) 119 134 { 120 135 m_drawFuncs.add(Class.classinfo, draw); … … 122 137 m_minsizeFuncs.add(Class.classinfo, (min_sz is null)?best_sz : min_sz); 123 138 } 124 void _addEvFuncs(alias Class)(ButtonFunc btn, MoveFunc move)139 void addEventHandlers(alias Class)(ButtonFunc btn, MoveFunc move=null, KeyFunc key=null ) 125 140 { 126 141 m_btnFuncs.add(Class.classinfo, btn); 127 m_moveFuncs.add(Class.classinfo, move); 128 } 142 if (move !is null) 143 m_moveFuncs.add(Class.classinfo, move); 144 if (key !is null) 145 m_moveFuncs.add(Class.classinfo, move); 146 } 147 148 protected: 149 mixin FuncDispatcher!(DrawFunc) m_drawFuncs; 150 mixin FuncDispatcher!(SizeFunc) m_minsizeFuncs; 151 mixin FuncDispatcher!(SizeFunc) m_bestsizeFuncs; 152 mixin FuncDispatcher!(ButtonFunc) m_btnFuncs; 153 mixin FuncDispatcher!(MoveFunc) m_moveFuncs; 154 mixin FuncDispatcher!(KeyFunc) m_keyFuncs; 155 156 public: 157 158 override void draw(Widget item) { 159 DrawFunc f = m_drawFuncs.lookup(item); 160 if (f) f(item); 161 } 162 163 override Size minimum_size(Widget item, Size bounds) { 164 SizeFunc f = m_minsizeFuncs.lookup(item); 165 if (f) return f(item,bounds); 166 return Size(0,0); 167 } 168 169 override Size preferred_size(Widget item, Size bounds) { 170 SizeFunc f = m_bestsizeFuncs.lookup(item); 171 if (f) { 172 return f(item,bounds); 173 } 174 return Size(50,22); 175 } 176 177 //============================================================================ 178 // Event functions 179 override void on_key(Widget item, KeyEvent ev) 180 { 181 KeyFunc f = m_keyFuncs.lookup(item); 182 if (f) f(item, ev); 183 if (!f || ev.alive) { item.on_key(ev); } 184 } 185 override void on_mouse_button(Widget item, MouseButtonEvent ev) 186 { 187 ButtonFunc f = m_btnFuncs.lookup(item); 188 if (f) f(item, ev); 189 if (!f || ev.alive) { item.on_mouse_button(ev); } 190 } 191 override void on_mouse_move(Widget item, MouseMoveEvent ev) 192 { 193 MoveFunc f = m_moveFuncs.lookup(item); 194 if (f) f(item, ev); 195 if (!f || ev.alive) { item.on_mouse_move(ev); } 196 } 197 } 198 199 200 class StdTheme : ThemeBase 201 { 129 202 this() { 130 203 // Register all known size and draw functions. … … 188 261 } 189 262 190 //========================================================================191 192 void draw(Widget item) {193 DrawFunc f = m_drawFuncs.lookup(item);194 if (f) f(item);195 }196 197 Size minimum_size(Widget item, Size bounds) {198 SizeFunc f = m_minsizeFuncs.lookup(item);199 if (f) return f(item,bounds);200 return Size(0,0);201 }202 Size preferred_size(Widget item, Size bounds) {203 SizeFunc f = m_bestsizeFuncs.lookup(item);204 if (f) {205 return f(item,bounds);206 }207 return Size(50,22);208 }209 210 //============================================================================211 // Event functions212 override void on_mouse_button(Widget item, MouseButtonEvent ev)213 {214 ButtonFunc f = m_btnFuncs.lookup(item);215 if (f) f(item, ev);216 217 if (!f || ev.alive) { item.on_mouse_button(ev); }218 }219 override void on_mouse_move(Widget item, MouseMoveEvent ev)220 {221 MoveFunc f = m_moveFuncs.lookup(item);222 if (f) f(item, ev);223 224 if (!f || ev.alive) { item.on_mouse_move(ev); }225 }226 227 263 //============================================================================ 228 264 // Built-in Drawing and size routines … … 333 369 334 370 335 371 //----OVERLAY----------------------------------------------------------------- 372 void begin_drawing(Rect r) { 373 gldraw.push_graphics_state(r); 374 } 375 void end_drawing() { 376 gldraw.pop_graphics_state(); 377 } 336 378 //----PANEL------------------------------------------------------------------- 337 379 void panel_register() { … … 347 389 //----LABEL------------------------------------------------------------------- 348 390 void label_register() { 349 _addFuncs!(Label)(&label_draw, &label_best_size);391 addHandlers!(Label)(&label_draw, &label_best_size); 350 392 } 351 393 Size label_best_size(Widget widget, Size bounds) { … … 371 413 //----BUTTON------------------------------------------------------------------ 372 414 void button_register() { 373 _addFuncs!(Button)(&button_draw, &button_best_size, &button_min_size);415 addHandlers!(Button)(&button_draw, &button_best_size, &button_min_size); 374 416 } 375 417 Size button_min_size(Widget widget, Size bounds) { … … 421 463 //----CHECKBOX---------------------------------------------------------------- 422 464 void checkbox_register() { 423 _addFuncs!(Checkbox)(&checkbox_draw, &checkbox_best_size);465 addHandlers!(Checkbox)(&checkbox_draw, &checkbox_best_size); 424 466 } 425 467 //Size checkbox_min_size(Widget widget, Size bounds) { … … 487 529 //----TEXTFIELD------------------------------------------------------------- 488 530 void textfield_register() { 489 _addFuncs!(TextField)(&textfield_draw, &textfield_best_size, &textfield_min_size);490 _addEvFuncs!(TextField)(&textfield_mouse_button, &textfield_mouse_move);531 addHandlers!(TextField)(&textfield_draw, &textfield_best_size, &textfield_min_size); 532 addEventHandlers!(TextField)(&textfield_mouse_button, &textfield_mouse_move); 491 533 } 492 534 const int textfield_base_scroll = 3; … … 703 745 //----SLIDER---------------------------------------------------------------- 704 746 void slider_register() { 705 _addFuncs!(Slider)(&slider_draw, &slider_best_size, &slider_min_size);706 _addEvFuncs!(Slider)(&slider_mouse_button, &slider_mouse_move);747 addHandlers!(Slider)(&slider_draw, &slider_best_size, &slider_min_size); 748 addEventHandlers!(Slider)(&slider_mouse_button, &slider_mouse_move); 707 749 } 708 750 … … 817 859 //----SPINNER---------------------------------------------------------------- 818 860 void spinner_register() { 819 // _addFuncs!(Spinner)(&spinner_draw, &spinner_best_size);861 //addHandlers!(Spinner)(&spinner_draw, &spinner_best_size); 820 862 } 821 863 /* … … 836 878 //----RADIOGROUP---------------------------------------------------------------- 837 879 void radiogroup_register() { 838 // _addFuncs!(RadioGroup)(&radiogroup_draw, &radiogroup_best_size);880 //addHandlers!(RadioGroup)(&radiogroup_draw, &radiogroup_best_size); 839 881 } 840 882 Size radiogroup_min_size(Widget widget, Size bounds) { … … 853 895 //----RADIOBUTTON---------------------------------------------------------------- 854 896 void radiobutton_register() { 855 // _addFuncs!(RadioButton)(&radiobutton_draw, &radiobutton_best_size);897 //addHandlers!(RadioButton)(&radiobutton_draw, &radiobutton_best_size); 856 898 } 857 899 Size radiobutton_min_size(Widget widget, Size bounds) { … … 883 925 884 926 ThemeData[ClassInfo] m_classThemeData; 885 886 887 alias Size delegate(Widget item, Size bounds) SizeFunc;888 alias void delegate(Widget item) DrawFunc;889 alias void delegate(Widget item, MouseButtonEvent ev) ButtonFunc;890 alias void delegate(Widget item, MouseMoveEvent ev) MoveFunc;891 892 mixin FuncDispatcher!(DrawFunc) m_drawFuncs;893 mixin FuncDispatcher!(SizeFunc) m_minsizeFuncs;894 mixin FuncDispatcher!(SizeFunc) m_bestsizeFuncs;895 mixin FuncDispatcher!(ButtonFunc) m_btnFuncs;896 mixin FuncDispatcher!(MoveFunc) m_moveFuncs;897 927 } 898 928
