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 }