1 module mwidget;
2 
3 import des.gui;
4 
5 class MainWidget : DiWidget
6 {
7     this( DiContext ctx )
8     {
9         name = "test gui"d;
10         super( ctx );
11     }
12 
13 protected:
14 
15     override void prepare()
16     {
17         diw_attachChilds( newEMM!ChildWidget( this ) );
18     }
19 
20     override void selfUpdate()
21     {
22     }
23 
24     override bool actionOnEvent( in DiInputEvent ev )
25     {
26         switch( ev.type )
27         {
28             case SDL_KEYDOWN:
29                 if( ev.key.keysym.sym == SDLK_ESCAPE )
30                     context.quit();
31                 return true;
32             default: return false;
33         }
34     }
35 
36     override DiWidget findChildByEvent( in DiInputEvent ev )
37     {
38         switch( ev.type )
39         {
40             case SDL_MOUSEMOTION:
41                 auto e = ev.motion;
42                 foreach( ch; diw_childs )
43                     if( ch.shape.contains( ivec2( e.x, e.y ) ) )
44                         return ch;
45                 return null;
46             default: return current;
47         }
48     }
49 
50     override void selfRender()
51     {
52         glClearColor( 0,0,0,0 );
53         glClear( GL_COLOR_BUFFER_BIT );
54     }
55 }
56 
57 class ChildWidget : DiWidget
58 {
59     this( DiWidget par )
60     {
61         name = "test child"d;
62         super( par );
63     }
64 
65 protected:
66 
67     override void prepare()
68     {
69         shape.rect = DiRect( 10, 10, 40, 40 );
70     }
71 
72     override void selfUpdate()
73     {
74     }
75 
76     override DiWidget findChildByEvent( in DiInputEvent ev )
77     {
78         switch( ev.type )
79         {
80             case SDL_MOUSEBUTTONDOWN:
81                 context.quit();
82                 goto default;
83             default: return current;
84         }
85     }
86 
87     override void selfRender()
88     {
89         if( active )
90             glClearColor( 1,0,0,1 );
91         else
92             glClearColor( 1,1,0,1 );
93         glClear( GL_COLOR_BUFFER_BIT );
94     }
95 }