Changeset 15

Show
Ignore:
Timestamp:
11/26/06 11:22:07 (2 years ago)
Author:
baxissimo
Message:

Made headway on a dxut texture-based theme

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/luigi/example1.d

    r13 r15  
    2828import luigui = luigi.gui; 
    2929import luigi.adaptor.glfw; 
     30static import luigi.themes.dxut; 
    3031 
    3132import derelict.glfw.glfw; 
     
    7980 
    8081    // Set the background color 
    81     glClearColor( 0, 0, 0, 0 ); 
     82    glClearColor( 66/255., 75/255., 121/255., 0 ); 
    8283 
    8384 
     
    8788    with(luigui) { 
    8889        Luigi().adaptor = GLFWAdaptor(); 
     90        Luigi().theme = new luigi.themes.dxut.DXUTTheme(); 
    8991        gui = new Overlay; 
    9092     
     
    275277        glClear( GL_COLOR_BUFFER_BIT ); 
    276278 
     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 
    277287        // Draw a rotating colorful triangle 
    278288        glTranslatef( 0, 14, 0 ); 
  • trunk/luigi/gldraw.d

    r10 r15  
    108108    glEnd(); 
    109109} 
     110 
     111void 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 
     120void 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 
    110129void stroke_rect(Rect r) { 
    111130    glBegin(GL_LINE_LOOP); 
  • trunk/luigi/gui.d

    r13 r15  
    10281028    /** Sets up the drawing state for 2D GUI drawing and draws it's children. */ 
    10291029    override void draw() { 
    1030         // Over 
    10311030        if (!shown) return; 
    1032         drawsys.push_graphics_state(rect); 
    1033  
     1031        Luigi().theme.begin_drawing(rect); 
    10341032        super.draw(); 
    1035  
    1036         drawsys.pop_graphics_state(); 
     1033        Luigi().theme.end_drawing(); 
    10371034    } 
    10381035 
     
    12401237 
    12411238    bool depressed() { return m_depressed; } 
     1239    bool rollover() { return m_rollover; } 
    12421240 
    12431241    char[] label; 
     
    12491247protected: 
    12501248    bool m_depressed = false; 
     1249    bool m_rollover = false; 
    12511250} 
    12521251 
  • trunk/luigi/theme.d

    r12 r15  
    3333import luigi.bitmaps; 
    3434import luigi.gldraw; 
     35import gldraw = luigi.gldraw; 
    3536import luigi.font; 
    3637import luigi.event; 
     
    4344interface Theme 
    4445{ 
     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(); 
    4552 
    4653    /** Draws the given item */ 
     
    6572{ 
    6673    abstract override void draw(Widget item); 
    67  
    6874    abstract override Size minimum_size(Widget item, Size bounds); 
    6975    abstract override Size preferred_size(Widget item, Size bounds); 
     76 
     77    void begin_drawing(Rect r) {} 
     78    void end_drawing() {} 
    7079 
    7180    //============================================================================ 
     
    8897    } 
    8998} 
    90  
    9199 
    92100template FuncDispatcher(FuncT) 
     
    114122} 
    115123 
    116 class StdTheme : AbstractTheme 
     124class ThemeBase : AbstractTheme 
    117125{ 
    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 ) 
    119134    { 
    120135        m_drawFuncs.add(Class.classinfo, draw); 
     
    122137        m_minsizeFuncs.add(Class.classinfo, (min_sz is null)?best_sz : min_sz); 
    123138    } 
    124     void _addEvFuncs(alias Class)(ButtonFunc btn, MoveFunc move
     139    void addEventHandlers(alias Class)(ButtonFunc btn, MoveFunc move=null, KeyFunc key=null
    125140    { 
    126141        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 
     200class StdTheme : ThemeBase 
     201
    129202    this() { 
    130203        // Register all known size and draw functions. 
     
    188261    } 
    189262 
    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 functions 
    212     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  
    227263    //============================================================================ 
    228264    // Built-in Drawing and size routines 
     
    333369 
    334370 
    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    } 
    336378    //----PANEL------------------------------------------------------------------- 
    337379    void panel_register() { 
     
    347389    //----LABEL------------------------------------------------------------------- 
    348390    void label_register() { 
    349         _addFuncs!(Label)(&label_draw, &label_best_size); 
     391        addHandlers!(Label)(&label_draw, &label_best_size); 
    350392    } 
    351393    Size label_best_size(Widget widget, Size bounds) { 
     
    371413    //----BUTTON------------------------------------------------------------------ 
    372414    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); 
    374416    } 
    375417    Size button_min_size(Widget widget, Size bounds) { 
     
    421463    //----CHECKBOX---------------------------------------------------------------- 
    422464    void checkbox_register() { 
    423         _addFuncs!(Checkbox)(&checkbox_draw, &checkbox_best_size); 
     465        addHandlers!(Checkbox)(&checkbox_draw, &checkbox_best_size); 
    424466    } 
    425467    //Size checkbox_min_size(Widget widget, Size bounds) { 
     
    487529    //----TEXTFIELD------------------------------------------------------------- 
    488530    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); 
    491533    } 
    492534    const int textfield_base_scroll = 3; 
     
    703745    //----SLIDER---------------------------------------------------------------- 
    704746    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); 
    707749    } 
    708750 
     
    817859    //----SPINNER---------------------------------------------------------------- 
    818860    void spinner_register() {  
    819         //_addFuncs!(Spinner)(&spinner_draw, &spinner_best_size); 
     861        //addHandlers!(Spinner)(&spinner_draw, &spinner_best_size); 
    820862    } 
    821863    /* 
     
    836878    //----RADIOGROUP---------------------------------------------------------------- 
    837879    void radiogroup_register() { 
    838         //_addFuncs!(RadioGroup)(&radiogroup_draw, &radiogroup_best_size); 
     880        //addHandlers!(RadioGroup)(&radiogroup_draw, &radiogroup_best_size); 
    839881    } 
    840882    Size radiogroup_min_size(Widget widget, Size bounds) { 
     
    853895    //----RADIOBUTTON---------------------------------------------------------------- 
    854896    void radiobutton_register() { 
    855         //_addFuncs!(RadioButton)(&radiobutton_draw, &radiobutton_best_size); 
     897        //addHandlers!(RadioButton)(&radiobutton_draw, &radiobutton_best_size); 
    856898    } 
    857899    Size radiobutton_min_size(Widget widget, Size bounds) { 
     
    883925 
    884926    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; 
    897927} 
    898928