Changeset 268 for trunk/src/gui


Ignore:
Timestamp:
06/19/14 20:22:54 (11 years ago)
Author:
epyon
Message:
  • gui::element completely independent of object
  • gui::element is pure data
Location:
trunk/src/gui
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/gui/gui_environment.cc

    r267 r268  
    4242        element* result = new element( r );
    4343        if ( parent == nullptr ) parent = m_screen;
    44         parent->add_child( result );
     44        add_child( parent, result );
    4545        return result;
    4646}
     
    4949{
    5050        destroy_children( e );
    51         e->detach();
     51        if ( e->m_parent )
     52        {
     53                remove_child( e->m_parent, e );
     54        }
    5255        delete e;
    5356}
     
    5659{
    5760//      e->on_update( elapsed );
    58         if ( e->is_visible() )
    59         {
    60                 for ( object* i : *e )
    61                 {
    62                         update( ((element*)i), elapsed );
    63                 }
    64         }
    65         if ( e->is_dirty() || e->m_render_data == nullptr )
     61        if ( e->m_visible )
     62        {
     63                for ( element* i : e->m_children )
     64                {
     65                        update( i, elapsed );
     66                }
     67        }
     68        if ( e->m_dirty || e->m_render_data == nullptr )
    6669        {
    6770                m_renderer->redraw( e, elapsed );
    68                 e->set_dirty( false );
     71                e->m_dirty = false;
    6972        }
    7073}
     
    7275void nv::gui::environment::draw( element* e )
    7376{
    74         if ( e->is_visible() )
     77        if ( e->m_visible )
    7578        {
    7679//              e->on_draw();
    7780                m_renderer->draw( e );
    78                 for ( object* i : *e )
    79                 {
    80                         draw((element*)i);
     81                for ( element* i : e->m_children )
     82                {
     83                        draw(i);
    8184                }
    8285        }
     
    9699void nv::gui::environment::add_child( element* child )
    97100{
    98         m_screen->add_child( child );
     101        add_child( m_screen, child );
     102}
     103
     104void nv::gui::environment::add_child( element* parent, element* child )
     105{
     106        if ( child )
     107        {
     108                if ( child->m_parent )
     109                {
     110                        remove_child( child->m_parent, child );
     111                }
     112                child->m_parent = parent;
     113                parent->m_children.push_back( child );
     114                parent->m_child_count++;
     115        }
    99116}
    100117
     
    103120        while ( !e->m_children.empty() )
    104121        {
    105                 destroy_element( (element*)e->m_children.front() );
     122                destroy_element( e->m_children.front() );
    106123        }
    107124}
     
    121138bool nv::gui::environment::process_io_event( element* e, const io_event& ev )
    122139{
    123         return e->m_parent ? process_io_event( (element*)e->m_parent, ev ) : false;
     140        return e->m_parent ? process_io_event( e->m_parent, ev ) : false;
    124141}
    125142
     
    131148nv::gui::element* nv::gui::environment::get_deepest_child( element* e, const position& p )
    132149{
    133         if ( !e->is_visible() ) return nullptr;
     150        if ( !e->m_visible ) return nullptr;
    134151
    135152        element* result = nullptr;
     
    138155        while ( it != e->m_children.rend() )
    139156        {
    140                 result = get_deepest_child( (element*)(*it), p );
     157                result = get_deepest_child( *it, p );
    141158                if ( result ) return result;
    142159                ++it;
    143160        }
    144161
    145         if ( e->contains( p ) ) return e;
     162        if ( e->m_absolute.contains(p) ) return e;
    146163        return nullptr;
    147164}
     
    149166void nv::gui::environment::move_to_top( element* child )
    150167{
    151         element* parent = (element*)child->m_parent;
     168        element* parent = child->m_parent;
    152169        if ( parent )
    153170        {
    154                 auto it = std::find( parent->m_children.begin(), parent->m_children.end(), (object*)child );
     171                auto it = std::find( parent->m_children.begin(), parent->m_children.end(), child );
    155172                if ( it != parent->m_children.end() )
    156173                {
     
    164181void nv::gui::environment::move_to_bottom( element* child )
    165182{
    166         element* parent = (element*)child->m_parent;
     183        element* parent = child->m_parent;
    167184        if ( parent )
    168185        {
    169                 auto it = std::find( parent->m_children.begin(), parent->m_children.end(), (object*)child );
     186                auto it = std::find( parent->m_children.begin(), parent->m_children.end(), child );
    170187                if ( it != parent->m_children.end() )
    171188                {
     
    195212        if ( e->m_parent )
    196213        {
    197                 pabsolute = ((element*)(e->m_parent))->m_absolute;
     214                pabsolute = e->m_parent->m_absolute;
    198215        }
    199216
    200217        e->m_absolute = e->m_relative + pabsolute.ul;
    201218
    202         for ( object* o : e->m_children )
    203         {
    204                 recalculate_absolute( ((element*)o) );
    205         }
    206 }
    207 
     219        for ( element* o : e->m_children )
     220        {
     221                recalculate_absolute( o );
     222        }
     223}
     224
     225void nv::gui::environment::set_class( element* e, const string& text )
     226{
     227        e->m_class = text;
     228        e->m_dirty = true;
     229}
     230
     231void nv::gui::environment::set_text( element* e, const string& text )
     232{
     233        e->m_text = text;
     234        e->m_dirty = true;
     235}
     236
     237void nv::gui::environment::remove_child( element* parent, element* child )
     238{
     239        if ( child->m_parent != parent )
     240        {
     241                return; // signal error?
     242        }
     243        auto it = std::find( parent->m_children.begin(), parent->m_children.end(), child );
     244        if ( it != parent->m_children.end() )
     245        {
     246                (*it)->m_parent = nullptr;
     247                parent->m_children.erase(it);
     248        }       
     249
     250}
     251
  • trunk/src/gui/gui_renderer.cc

    r267 r268  
    198198
    199199        qvec.clear();
    200         rectangle abs = e->get_absolute();
    201         if ( e->get_absolute() != m_area )
     200        rectangle abs = e->m_absolute;
     201        if ( e->m_absolute != m_area )
    202202        {
    203203                int border;
     
    220220                }
    221221
    222                 text = e->get_text();
     222                text = e->m_text;
    223223                if ( !text.empty() )
    224224                {
  • trunk/src/gui/gui_style.cc

    r204 r268  
    6767{
    6868        const char* centry = entry.c_str();
    69         const char* cid    = e->get_id().c_str();
    70         const char* cclass = e->get_class().c_str();
     69        const char* cid    = e->m_id.c_str();
     70        const char* cclass = e->m_class.c_str();
    7171        lua_getglobal( m_lua, "default" );
    7272        int global = lua_gettop( m_lua );
Note: See TracChangeset for help on using the changeset viewer.