Changeset 444


Ignore:
Timestamp:
07/29/15 16:24:01 (10 years ago)
Author:
epyon
Message:
  • slowly fixing up gui
Location:
trunk
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/nv/gui/gui_ascii_renderer.hh

    r406 r444  
    3333                        virtual void draw( element* e );
    3434                        virtual void draw();
    35                         virtual void on_hover_change( element* e, bool hover );
    36                         virtual void on_select_change( element* e, bool select );
     35                        virtual void on_style_change( element* e );
     36                        virtual void on_hover_change( element* e );
     37                        virtual void on_select_change( element* e );
    3738                        virtual rectangle get_area() const;
    3839                        virtual ~ascii_renderer();
  • trunk/nv/gui/gui_common.hh

    r395 r444  
    2929                        SELECTED, //!< GUI element selected
    3030                        HOVER,    //!< GUI element in hover zone
     31
     32                        DIRTY_SELECT,
     33                        DIRTY_HOVER,
    3134                };
    3235
  • trunk/nv/gui/gui_gfx_renderer.hh

    r433 r444  
    4848                        virtual void draw( element* e );
    4949                        virtual void draw();
    50                         virtual void on_hover_change( element* e, bool hover );
    51                         virtual void on_select_change( element* e, bool select );
     50                        virtual void on_style_change( element* e );
     51                        virtual void on_hover_change( element* e );
     52                        virtual void on_select_change( element* e );
    5253                        virtual rectangle get_area() const { return m_area; }
    5354                        virtual ~gfx_renderer();
  • trunk/nv/gui/gui_renderer.hh

    r440 r444  
    3333                        virtual void draw( element* e ) = 0;
    3434                        virtual void draw() = 0;
    35                         virtual void on_hover_change( element* e, bool hover ) = 0;
    36                         virtual void on_select_change( element* e, bool select ) = 0;
     35                        virtual void on_style_change( element* e ) = 0;
     36                        virtual void on_hover_change( element* e ) = 0;
     37                        virtual void on_select_change( element* e ) = 0;
    3738                        virtual rectangle get_area() const = 0;
    3839                        virtual ~renderer() {}
  • trunk/nv/gui/gui_style.hh

    r440 r444  
    3333                        bool get( element* e, const string_view& centry, const string_view& cselector, int& i );
    3434                        bool get( element* e, const string_view& centry, const string_view& cselector, double& d );
     35                        void load_flags( element* e );
    3536                        ~style();
    3637                protected:
     38                        void add_flags( element* e );
    3739                        bool find_entry( const string_view& cselector, const string_view& centry, int type );
    3840                        bool resolve( shash64 cid, shash64 cclass, const string_view& cselector, const string_view& centry, int type );
  • trunk/src/gui/gui_ascii_renderer.cc

    r440 r444  
    6666                        if ( m_style.get( e, "ascii_border_color", selector, border_color ) )
    6767                                er->border_color = uint32( border_color );
    68                         for ( uint32 i = 0; i < 8 && i < path.length(); )
     68                        for ( uint32 i = 0; i < 8 && i < path.length(); i++ )
    6969                                er->border_chars[i] = static_cast< uchar8 >( path[i] );
    7070                }
     
    8181                for ( int x = 0; x < abs.get_width(); ++x )
    8282                {
    83                         m_terminal->print( position( abs.ul.y, abs.ul.x + x ), er->border_color, er->border_chars[0] );
    84                         m_terminal->print( position( abs.lr.y, abs.ul.x + x ), er->border_color, er->border_chars[1] );
     83                        m_terminal->print( position( abs.ul.x + x, abs.ul.y ), er->border_color, er->border_chars[0] );
     84                        m_terminal->print( position( abs.ul.x + x, abs.lr.y ), er->border_color, er->border_chars[1] );
    8585                }
    8686
    8787                for ( int y = 0; y < abs.get_height(); ++y )
    8888                {
    89                         m_terminal->print( position( abs.ul.y + y, abs.ul.x ), er->border_color, er->border_chars[2] );
    90                         m_terminal->print( position( abs.ul.y + y, abs.lr.x ), er->border_color, er->border_chars[3] );
     89                        m_terminal->print( position( abs.ul.x, abs.ul.y + y ), er->border_color, er->border_chars[2] );
     90                        m_terminal->print( position( abs.lr.x, abs.ul.y + y ), er->border_color, er->border_chars[3] );
    9191                }
    9292
     
    9595                m_terminal->print( abs.ll(), er->border_color, er->border_chars[6] );
    9696                m_terminal->print( abs.lr,   er->border_color, er->border_chars[7] );
     97                m_terminal->update();
    9798        }
    9899        if ( !e->m_text.empty() )
     
    112113}
    113114
    114 void nv::gui::ascii_renderer::on_hover_change( element* e, bool /*hover*/ )
     115void nv::gui::ascii_renderer::on_style_change( element* e )
    115116{
    116         // TODO: FIX
    117         int fix_me;
    118         NV_LOG_DEBUG( "on_hover_change" );
    119         e->m_flags[DIRTY] = true;
     117        m_style.load_flags( e );
    120118}
    121119
    122 void nv::gui::ascii_renderer::on_select_change( element* e, bool /*select*/ )
     120void nv::gui::ascii_renderer::on_hover_change( element* e )
    123121{
    124         // TODO: FIX
    125         int fix_me;
    126         NV_LOG_DEBUG( "on_select_change" );
    127         e->m_flags[DIRTY] = true;
     122        if ( e->m_flags[DIRTY_HOVER] ) e->m_flags[DIRTY] = true;
     123}
     124
     125void nv::gui::ascii_renderer::on_select_change( element* e )
     126{
     127        if ( e->m_flags[DIRTY_SELECT] ) e->m_flags[DIRTY] = true;
    128128}
    129129
  • trunk/src/gui/gui_environment.cc

    r440 r444  
    6161        if ( !parent.is_nil() ) // screen creation
    6262                add_child( parent, result );
     63
    6364        return result;
    6465}
     
    9192                        el->m_flags[HOVER] = new_hover;
    9293                        // gain lose hover event
    93                         m_renderer->on_hover_change( el, hover );
     94                        m_renderer->on_hover_change( el );
    9495                }
    9596        }
     
    209210                {
    210211                        eold->m_flags[SELECTED] = false;
    211                         m_renderer->on_select_change( eold, false );
     212                        m_renderer->on_select_change( eold );
    212213                }
    213214                if ( el )
    214215                {
    215216                        el->m_flags[SELECTED] = true;
    216                         m_renderer->on_select_change( el, true );
     217                        m_renderer->on_select_change( el );
    217218                }
    218219                m_selected = e;
     
    307308                ep->m_class        = m_strings.insert( text );
    308309                ep->m_flags[DIRTY] = true;
     310                m_renderer->on_style_change( ep );
    309311        }
    310312}
     
    315317        if ( ep != nullptr )
    316318        {
     319                // TODO : implement twine == operator
    317320                ep->m_text.assign( text );
    318321                ep->m_flags[DIRTY] = true;
  • trunk/src/gui/gui_gfx_renderer.cc

    r440 r444  
    248248                if ( e->m_flags[HOVER] )    selector = stext[2];
    249249                if ( e->m_flags[SELECTED] ) selector = stext[1];
     250                NV_LOG_INFO( "redraw" );
    250251
    251252                if ( m_style.get( e, "skin", selector, path ) )
     
    340341}
    341342
    342 void gfx_renderer::on_hover_change( element* e, bool /*hover*/ )
    343 {
    344         // TODO: FIX
    345         int fix_me;
    346         NV_LOG_DEBUG( "on_hover_change" );
    347         e->m_flags[DIRTY] = true;
    348 }
    349 
    350 void gfx_renderer::on_select_change( element* e, bool /*select*/ )
    351 {
    352         // TODO: FIX
    353         int fix_me;
    354         NV_LOG_DEBUG( "on_select_change" );
    355         e->m_flags[DIRTY] = true;
     343void gfx_renderer::on_hover_change( element* e )
     344{
     345        if ( e->m_flags[DIRTY_HOVER] )
     346        {
     347                NV_LOG_DEBUG( "on_hover_change" );
     348                e->m_flags[DIRTY] = true;
     349        }
     350}
     351
     352void gfx_renderer::on_select_change( element* e )
     353{
     354        if ( e->m_flags[DIRTY_SELECT] )
     355        {
     356                NV_LOG_DEBUG( "on_select_change" );
     357                e->m_flags[DIRTY] = true;
     358        }
    356359}
    357360
     
    394397        }
    395398}
     399
     400void nv::gui::gfx_renderer::on_style_change( element* e )
     401{
     402        m_style.load_flags( e );
     403}
  • trunk/src/gui/gui_style.cc

    r440 r444  
    114114        return false;
    115115}
     116
     117void nv::gui::style::load_flags( element* e )
     118{
     119        lua::stack_guard guard( m_lua );
     120        lua_getglobal( m_lua, "default" );
     121        int global = lua_gettop( m_lua );
     122
     123        // check id
     124        string_view id( m_env->get_string( e->m_id ) );
     125        if ( !id.empty() )
     126        {
     127                lua_getfield( m_lua, -1, id.data() );
     128                add_flags( e );
     129                lua_pop( m_lua, -1 );
     130        }
     131        // check class
     132        string_view klass( m_env->get_string( e->m_class ) );
     133        if ( !klass.empty() )
     134        {
     135                lua_getfield( m_lua, -1, klass.data() );
     136                add_flags( e );
     137                lua_pop( m_lua, -1 );
     138        }
     139        add_flags( e );
     140}
     141
     142void nv::gui::style::add_flags( element* e )
     143{
     144        if ( lua_istable( m_lua, -1 ) )
     145        {
     146                lua_getfield( m_lua, -1, "hover" );
     147                if ( lua_istable( m_lua, -1 ) )
     148                {
     149                        e->m_flags[DIRTY_HOVER] = true;
     150                }
     151                lua_pop( m_lua, 1 );
     152
     153                lua_getfield( m_lua, -1, "selected" );
     154                if ( lua_istable( m_lua, -1 ) )
     155                {
     156                        e->m_flags[DIRTY_SELECT] = true;
     157                }
     158                lua_pop( m_lua, 1 );
     159        }
     160}
Note: See TracChangeset for help on using the changeset viewer.