Ignore:
Timestamp:
09/02/14 03:38:18 (11 years ago)
Author:
epyon
Message:
  • support for basic gui element skinning (WIP)
  • window_manager fix for gui_test
File:
1 edited

Legend:

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

    r322 r328  
    3838        "}\n";
    3939
     40
    4041using namespace nv;
    4142using namespace nv::gui;
     43
     44const ivec2 atlas_size = ivec2( 1024, 1024 );
    4245
    4346struct gui_quad
     
    121124        : m_window(w)
    122125        , m_style()
    123         , m_atlas( glm::ivec2( 1024, 1024 ), 4 )
     126        , m_atlas( atlas_size, 4 )
    124127        , m_reupload( true )
    125128{
     
    164167}
    165168
    166 nv::vec4 renderer::get_image( size_t name ) const
    167 {
    168         if ( name >= m_images.size() ) return nv::vec4();
    169         return m_images[ name ];
     169const image_info* renderer::get_image( size_t name ) const
     170{
     171        if ( name >= m_images.size() ) return nullptr;
     172        return &m_images[ name ];
    170173}
    171174
     
    201204        region r = m_atlas.get_region( data->get_size() );
    202205        m_atlas.set_region( r, data->get_data() );
     206        m_images.emplace_back( vec2( r.pos ) / vec2( atlas_size ), vec2( r.size + r.pos ) / vec2( atlas_size ), r.size );
    203207        delete data;
    204208        m_reupload = true;
     
    228232        if ( e->m_absolute != m_area )
    229233        {
    230                 int border;
     234                int border = 0;
    231235                vec4 color;
    232236                std::string path;
    233237                std::string text;
    234                 if ( m_style.get( e, "border", border ) && m_style.get( e, "border_color", color ) )
     238
     239                if ( m_style.get( e, "skin", path ) )
    235240                {
    236                         rectangle inner = abs.shrinked( border );
    237                         qvec.emplace_back( abs.ul, inner.ul, inner.ur(), abs.ur(), color );
    238                         qvec.emplace_back( abs.ul, abs.ll(), inner.ll(), inner.ul, color );
    239                         qvec.emplace_back( inner.ur(), inner.lr, abs.lr, abs.ur(), color );
    240                         qvec.emplace_back( inner.ll(), abs.ll(), abs.lr, inner.lr, color );
    241                         abs = inner;
     241                        size_t image_id = load_image( path );
     242                        const image_info* image  = get_image( image_id );
     243                        if ( image )
     244                        {
     245                                color = vec4( 2, 2, 2, 1 );
     246                                ivec2 isize3  = image->size / 3;
     247                                ivec2 isize3x = ivec2( isize3.x, 0 );
     248                                ivec2 isize3y = ivec2( 0, isize3.y );
     249                                vec2 tsize    = ( image->t2 - image->t1 );
     250                                vec2 tsize3   = ( image->t2 - image->t1 ) / 3.0f;
     251                                vec2 tsize32  = ( image->t2 - image->t1 ) * ( 2.0f / 3.0f );
     252                                vec2 tsizex   = vec2( tsize.x, 0.0f );
     253                                vec2 tsizey   = vec2( 0.0f, tsize.y );
     254                                vec2 tsize3x  = vec2( tsize3.x, 0.0f );
     255                                vec2 tsize3y  = vec2( 0.0f, tsize3.y );
     256                                vec2 tsize3x2 = vec2( tsize32.x, 0.0f );
     257                                vec2 tsize3y2 = vec2( 0.0f, tsize32.y );
     258
     259                                rectangle inner = abs.shrinked( isize3 );
     260                                qvec.emplace_back( abs.ul, inner.ul, color, image->t1, image->t1+tsize3 );
     261                                qvec.emplace_back( abs.ul+isize3x, inner.ur(), color, image->t1+tsize3x, image->t1+tsize3x2+tsize3y);
     262                                qvec.emplace_back( abs.ur()-isize3x, inner.ur()+isize3x, color, image->t1+tsize3x2, image->t1+tsizex+tsize3y );
     263
     264                                qvec.emplace_back( abs.ul+isize3y, inner.ll(), color, image->t1+tsize3y, image->t1+tsize3y2+tsize3x );
     265                                qvec.emplace_back( inner.ul, inner.lr, color, image->t1+tsize3, image->t1+tsize32 );
     266                                qvec.emplace_back( inner.ur(), inner.lr+isize3x, color, image->t1+tsize3+tsize3x, image->t1+tsize32+tsize3x );
     267
     268
     269                                qvec.emplace_back( abs.ll()-isize3y, inner.ll()+isize3y, color, image->t1+tsize3y2, image->t1+tsize3y2+tsize3 );
     270                                qvec.emplace_back( inner.ll(), abs.lr-isize3x, color, image->t1+tsize3y2+tsize3x, image->t1+tsize32+tsize3y );
     271                                qvec.emplace_back( inner.lr, abs.lr, color, image->t1+tsize32, image->t1+tsize );
     272
     273       
     274//                              qvec.emplace_back( abs.ul, abs.ll(), inner.ll(), inner.ul, color );
     275//                              qvec.emplace_back( inner.ur(), inner.lr, abs.lr, abs.ur(), color );
     276//                              qvec.emplace_back( inner.ll(), abs.ll(), abs.lr, inner.lr, color );
     277                                abs = inner;
     278
     279                        }
     280
    242281                }
    243 
    244                 if ( m_style.get( e, "background_color", color ) )
     282                else
    245283                {
    246                         qvec.emplace_back( abs.ul, abs.lr, color );
     284
     285                        if ( m_style.get( e, "border", border ) && m_style.get( e, "border_color", color ) )
     286                        {
     287                                rectangle inner = abs.shrinked( border );
     288                                qvec.emplace_back( abs.ul, inner.ul, inner.ur(), abs.ur(), color );
     289                                qvec.emplace_back( abs.ul, abs.ll(), inner.ll(), inner.ul, color );
     290                                qvec.emplace_back( inner.ur(), inner.lr, abs.lr, abs.ur(), color );
     291                                qvec.emplace_back( inner.ll(), abs.ll(), abs.lr, inner.lr, color );
     292                                abs = inner;
     293                        }
     294
     295                        if ( m_style.get( e, "background_color", color ) )
     296                        {
     297                                qvec.emplace_back( abs.ul, abs.lr, color );
     298                        }
    247299                }
    248300
Note: See TracChangeset for help on using the changeset viewer.