Changeset 267 for trunk/src


Ignore:
Timestamp:
06/19/14 19:03:25 (11 years ago)
Author:
epyon
Message:
  • gui::element class now pure data
  • gui::element related code in environment
  • gui shaders use general library mechanism
Location:
trunk/src/gui
Files:
1 deleted
2 edited

Legend:

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

    r264 r267  
    2525#include "nv/gfx/texture_atlas.hh"
    2626
    27 #include <vector>
    28 
    29 using namespace nv;
    30 using namespace nv::gui;
    31 
    32 environment::environment( window* w, const std::string& shader_path )
     27nv::gui::environment::environment( window* w, const std::string& shader_path )
    3328        : m_renderer( nullptr ), m_window( w ), m_screen( nullptr )
    3429{
    3530        m_area.dim( dimension( w->get_width(), w->get_height() ) );
    36         m_screen = new screen( m_area );
     31        m_screen = new element( m_area );
    3732        m_renderer = new renderer( w, shader_path );
    3833}
     
    4338}
    4439
    45 element* nv::gui::environment::create_element( element* parent, const rectangle& r )
     40nv::gui::element* nv::gui::environment::create_element( element* parent, const rectangle& r )
    4641{
    4742        element* result = new element( r );
     
    5853}
    5954
    60 void environment::update( element* e, uint32 elapsed )
    61 {
    62         e->on_update( elapsed );
     55void nv::gui::environment::update( element* e, uint32 elapsed )
     56{
     57//      e->on_update( elapsed );
    6358        if ( e->is_visible() )
    6459        {
     
    7570}
    7671
    77 void environment::draw( element* e )
     72void nv::gui::environment::draw( element* e )
    7873{
    7974        if ( e->is_visible() )
    8075        {
    81                 e->on_draw();
     76//              e->on_draw();
    8277                m_renderer->draw( e );
    8378                for ( object* i : *e )
     
    8883}
    8984
    90 void environment::update()
     85void nv::gui::environment::update()
    9186{
    9287        update( m_screen, 0 );
    9388}
    9489
    95 void environment::draw()
     90void nv::gui::environment::draw()
    9691{
    9792        draw( m_screen );
     
    9994}
    10095
    101 void environment::add_child( element* child )
     96void nv::gui::environment::add_child( element* child )
    10297{
    10398        m_screen->add_child( child );
    10499}
    105100
    106 void environment::destroy_children( element* e )
     101void nv::gui::environment::destroy_children( element* e )
    107102{
    108103        while ( !e->m_children.empty() )
     
    113108
    114109
    115 environment::~environment()
     110nv::gui::environment::~environment()
    116111{
    117112        destroy_element( m_screen );
     
    119114}
    120115
     116bool nv::gui::environment::process_io_event( const io_event& )
     117{
     118        return false;
     119}
     120
     121bool nv::gui::environment::process_io_event( element* e, const io_event& ev )
     122{
     123        return e->m_parent ? process_io_event( (element*)e->m_parent, ev ) : false;
     124}
     125
     126nv::gui::element* nv::gui::environment::get_element( const position& p )
     127{
     128        return get_deepest_child( m_screen, p );
     129}
     130
     131nv::gui::element* nv::gui::environment::get_deepest_child( element* e, const position& p )
     132{
     133        if ( !e->is_visible() ) return nullptr;
     134
     135        element* result = nullptr;
     136        element::list::reverse_iterator it = e->m_children.rbegin();
     137
     138        while ( it != e->m_children.rend() )
     139        {
     140                result = get_deepest_child( (element*)(*it), p );
     141                if ( result ) return result;
     142                ++it;
     143        }
     144
     145        if ( e->contains( p ) ) return e;
     146        return nullptr;
     147}
     148
     149void nv::gui::environment::move_to_top( element* child )
     150{
     151        element* parent = (element*)child->m_parent;
     152        if ( parent )
     153        {
     154                auto it = std::find( parent->m_children.begin(), parent->m_children.end(), (object*)child );
     155                if ( it != parent->m_children.end() )
     156                {
     157                        parent->m_children.erase( it );
     158                        parent->m_children.push_back( child );
     159                        parent->m_dirty = true;
     160                }       
     161        }
     162}
     163
     164void nv::gui::environment::move_to_bottom( element* child )
     165{
     166        element* parent = (element*)child->m_parent;
     167        if ( parent )
     168        {
     169                auto it = std::find( parent->m_children.begin(), parent->m_children.end(), (object*)child );
     170                if ( it != parent->m_children.end() )
     171                {
     172                        parent->m_children.erase( it );
     173                        parent->m_children.push_front( child );
     174                        parent->m_dirty = true;
     175                }
     176        }
     177}
     178
     179void nv::gui::environment::set_relative( element* e, const rectangle& r )
     180{
     181        e->m_dirty    = true;
     182        e->m_relative = r;
     183        recalculate_absolute( e );
     184}
     185
     186void nv::gui::environment::set_relative( element* e, const position& p )
     187{
     188        set_relative( e, rectangle( p, p + e->m_relative.get_size() ) );
     189}
     190
     191void nv::gui::environment::recalculate_absolute( element* e )
     192{
     193        rectangle pabsolute;
     194
     195        if ( e->m_parent )
     196        {
     197                pabsolute = ((element*)(e->m_parent))->m_absolute;
     198        }
     199
     200        e->m_absolute = e->m_relative + pabsolute.ul;
     201
     202        for ( object* o : e->m_children )
     203        {
     204                recalculate_absolute( ((element*)o) );
     205        }
     206}
     207
  • trunk/src/gui/gui_renderer.cc

    r234 r267  
    112112        sr->varray     = m_window->get_device()->create_vertex_array();
    113113        sr->shader     = m_window->get_device()->create_program( nv::slurp( shader_path + ".vert" ), nv::slurp( shader_path + ".frag" ) );
    114         sr->shader->set_uniform( "tex", 0 );
    115         glm::mat4 projection = glm::ortho( 0.0f, float( m_window->get_width() ), float( m_window->get_height() ), 0.0f, -1.0f, 1.0f );
    116         sr->shader->set_uniform( "nv_projection", projection );
     114        m_scene_state.get_camera().set_ortho( 0.0f, float( m_window->get_width() ), float( m_window->get_height() ), 0.0f );
    117115
    118116        vertex_buffer* vb = (vertex_buffer*)sr->buffer.get_buffer();
     
    274272                sr->varray->update_vertex_buffer( nv::COLOR,    vb, false );
    275273        }
    276         sr->texture->bind( 0 );
    277         sr->shader->set_uniform( "tex", 0 );
    278         m_window->get_context()->draw( TRIANGLES, m_render_state, sr->shader, sr->varray, sr->buffer.get_size() * 6 );
     274        sr->texture->bind( nv::TEX_DIFFUSE );
     275        m_window->get_context()->draw( TRIANGLES, m_render_state, m_scene_state, sr->shader, sr->varray, sr->buffer.get_size() * 6 );
    279276}
    280277
Note: See TracChangeset for help on using the changeset viewer.