Changeset 440 for trunk/src/gui
- Timestamp:
- 07/23/15 21:16:01 (10 years ago)
- Location:
- trunk/src/gui
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/gui/gui_ascii_renderer.cc
r406 r440 49 49 er->clear = true; 50 50 int color = 0; 51 std::string path; 52 std::string text; 51 string128 path; 53 52 const char* stext[] = { nullptr, "selected", "hover" }; 54 53 const char* selector = stext[0]; -
trunk/src/gui/gui_environment.cc
r433 r440 9 9 #include "nv/gui/gui_renderer.hh" 10 10 11 #include <algorithm> // std::find on std::list12 13 11 /* 14 12 … … 27 25 : m_renderer( r ) 28 26 { 27 r->set_environment( this ); 29 28 m_screen = create_element( handle(), m_renderer->get_area() ); 30 29 } … … 161 160 while ( !parent->m_children.empty() ) 162 161 { 163 destroy_element( parent->m_children. front() );162 destroy_element( parent->m_children.back() ); 164 163 } 165 164 } … … 196 195 } 197 196 197 nv::string_view nv::gui::environment::get_string( shash64 h ) 198 { 199 return m_strings[h]; 200 } 201 198 202 bool nv::gui::environment::set_selected( handle e ) 199 203 { … … 235 239 236 240 handle result; 237 element::list::reverse_iteratorit = el->m_children.rbegin();241 auto it = el->m_children.rbegin(); 238 242 239 243 while ( it != el->m_children.rend() ) … … 254 258 if ( e && parent ) 255 259 { 256 auto it = std::find( parent->m_children.begin(), parent->m_children.end(), child );260 auto it = find( parent->m_children.begin(), parent->m_children.end(), child ); 257 261 if ( it != parent->m_children.end() ) 258 262 { … … 264 268 } 265 269 266 void nv::gui::environment::move_to_bottom( handle child )267 {268 element* e = m_elements.get( child );269 element* parent = m_elements.get( e->m_parent );270 if ( e && parent )271 {272 auto it = std::find( parent->m_children.begin(), parent->m_children.end(), child );273 if ( it != parent->m_children.end() )274 {275 parent->m_children.erase( it );276 parent->m_children.push_front( child );277 parent->m_flags[DIRTY] = true;278 }279 }280 }281 282 270 void nv::gui::environment::set_relative( handle e, const rectangle& r ) 283 271 { … … 312 300 } 313 301 314 void nv::gui::environment::set_class( handle e, const st d::string& text )302 void nv::gui::environment::set_class( handle e, const string_view& text ) 315 303 { 316 304 element* ep = m_elements.get(e); 317 305 if ( ep != nullptr ) 318 306 { 319 ep->m_class = text;307 ep->m_class = m_strings.insert( text ); 320 308 ep->m_flags[DIRTY] = true; 321 309 } 322 310 } 323 311 324 void nv::gui::environment::set_text( handle e, const st d::string& text )312 void nv::gui::environment::set_text( handle e, const string_twine& text ) 325 313 { 326 314 element* ep = m_elements.get(e); 327 315 if ( ep != nullptr ) 328 316 { 329 ep->m_text = text;317 ep->m_text.assign( text ); 330 318 ep->m_flags[DIRTY] = true; 331 319 } … … 337 325 if ( p ) 338 326 { 339 auto it = std::find( p->m_children.begin(), p->m_children.end(), child );327 auto it = find( p->m_children.begin(), p->m_children.end(), child ); 340 328 if ( it != p->m_children.end() ) 341 329 { 342 330 element* e = m_elements.get( *it ); 343 331 e->m_parent = handle(); 344 p->m_children.erase( it);345 } 346 } 347 } 348 332 p->m_children.erase( it ); 333 } 334 } 335 } 336 -
trunk/src/gui/gui_gfx_renderer.cc
r437 r440 243 243 int border = 0; 244 244 vec4 color; 245 std::string path; 246 std::string text; 247 const char* stext[] = { nullptr, "selected", "hover" }; 245 string128 path; 246 const char* stext[] = { "", "selected", "hover" }; 248 247 const char* selector = stext[border]; 249 248 if ( e->m_flags[HOVER] ) selector = stext[2]; … … 252 251 if ( m_style.get( e, "skin", selector, path ) ) 253 252 { 254 size_t image_id = load_image( string_view( path.c_str(), path.size() ));253 size_t image_id = load_image( path ); 255 254 const image_info* image = get_image( image_id ); 256 255 if ( image ) … … 312 311 } 313 312 314 text =e->m_text;315 if ( ! text.empty() )313 e->m_text; 314 if ( !e->m_text.empty() ) 316 315 { 317 316 if ( m_style.get( e, "text_color", selector, color ) && m_style.get( e, "text_font", selector, path ) && m_style.get( e, "text_size", selector, border ) ) 318 317 { 319 size_t font_id = load_font( string_view( path.c_str(), path.size() ), size_t( border ) );318 size_t font_id = load_font( path, size_t( border ) ); 320 319 texture_font* font = get_font( font_id ); 321 320 position p = abs.ul + position( 0, border ); 322 for ( char c : text )321 for ( char c : e->m_text ) 323 322 { 324 323 const texture_glyph* g = font->get_glyph( static_cast<uint16>( c ) ); -
trunk/src/gui/gui_style.cc
r433 r440 7 7 #include "nv/gui/gui_style.hh" 8 8 9 #include "nv/gui/gui_environment.hh" 9 10 #include <nv/lua/lua_raw.hh> 10 11 … … 12 13 using namespace nv::gui; 13 14 14 style::style()15 {16 }17 18 15 void style::load_style( const string_view& filename ) 19 16 { 17 NV_ASSERT_ALWAYS( m_env, "Environment not set in style!" ); 20 18 m_lua.do_file( filename ); 21 19 } 22 20 23 bool style::get( element* e, const char* centry, const char* cselector, std::string& s )21 bool style::get( element* e, const string_view& centry, const string_view& cselector, string128& s ) 24 22 { 25 23 lua::stack_guard guard( m_lua ); 26 if ( !resolve( e->m_id.c_str(), e->m_class.c_str(), cselector, centry, LUA_TSTRING ) ) return false; 27 s = lua_tostring( m_lua, -1 ); 24 if ( !resolve( e->m_id, e->m_class, cselector, centry, LUA_TSTRING ) ) return false; 25 // TODO: create lua_tostringbuffer< size > 26 s.assign( lua_tostring( m_lua, -1 ) ); 28 27 return true; 29 28 } 30 29 31 bool style::get( element* e, const char* centry, const char*cselector, vec4& vec )30 bool style::get( element* e, const string_view& centry, const string_view& cselector, vec4& vec ) 32 31 { 33 32 lua::stack_guard guard( m_lua ); 34 if ( !resolve( e->m_id .c_str(), e->m_class.c_str(), cselector, centry, LUA_TTABLE ) ) return false;33 if ( !resolve( e->m_id, e->m_class, cselector, centry, LUA_TTABLE ) ) return false; 35 34 vec = vec4(); 36 35 for ( int i = 0; i < 4; ++i ) … … 44 43 } 45 44 46 bool style::get( element* e, const char* centry, const char*cselector, int& i )45 bool style::get( element* e, const string_view& centry, const string_view& cselector, int& i ) 47 46 { 48 47 lua::stack_guard guard( m_lua ); 49 if ( !resolve( e->m_id .c_str(), e->m_class.c_str(), cselector, centry, LUA_TNUMBER ) ) return false;48 if ( !resolve( e->m_id, e->m_class, cselector, centry, LUA_TNUMBER ) ) return false; 50 49 i = static_cast< int >( lua_tointeger( m_lua, -1 ) ); 51 50 return true; 52 51 } 53 52 54 bool style::get( element* e, const char* centry, const char*cselector, double& d )53 bool style::get( element* e, const string_view& centry, const string_view& cselector, double& d ) 55 54 { 56 55 lua::stack_guard guard( m_lua ); 57 if ( !resolve( e->m_id .c_str(), e->m_class.c_str(), cselector, centry, LUA_TNUMBER ) ) return false;56 if ( !resolve( e->m_id, e->m_class, cselector, centry, LUA_TNUMBER ) ) return false; 58 57 d = lua_tonumber( m_lua, -1 ); 59 58 return true; … … 64 63 } 65 64 66 bool style::find_entry( const char* cselector, const char*centry, int type )65 bool style::find_entry( const string_view& cselector, const string_view& centry, int type ) 67 66 { 68 67 if ( lua_istable( m_lua, -1 ) ) 69 68 { 70 if ( cselector)69 if ( !cselector.empty() ) 71 70 { 72 lua_getfield( m_lua, -1, cselector );71 lua_getfield( m_lua, -1, cselector.data() ); 73 72 if ( lua_istable( m_lua, -1 ) ) 74 73 { 75 lua_getfield( m_lua, -1, centry );74 lua_getfield( m_lua, -1, centry.data() ); 76 75 if ( lua_type( m_lua, -1 ) == type ) 77 76 { … … 83 82 } 84 83 85 lua_getfield( m_lua, -1, centry );84 lua_getfield( m_lua, -1, centry.data() ); 86 85 if ( lua_type( m_lua, -1 ) == type ) return true; 87 86 } … … 89 88 } 90 89 91 bool style::resolve( const char* cid, const char* cclass, const char* cselector, const char*centry, int type )90 bool style::resolve( shash64 cid, shash64 cclass, const string_view& cselector, const string_view& centry, int type ) 92 91 { 93 92 lua_getglobal( m_lua, "default" ); … … 95 94 96 95 // check id 97 lua_getfield( m_lua, -1, cid ); 98 if ( find_entry( cselector, centry, type ) ) return true; 99 lua_settop( m_lua, global ); 100 96 string_view id( m_env->get_string( cid ) ); 97 if ( !id.empty() ) 98 { 99 lua_getfield( m_lua, -1, id.data() ); 100 if ( find_entry( cselector, centry, type ) ) return true; 101 lua_settop( m_lua, global ); 102 } 101 103 // check class 102 lua_getfield( m_lua, -1, cclass ); 103 if ( find_entry( cselector, centry, type ) ) return true; 104 lua_settop( m_lua, global ); 104 string_view klass( m_env->get_string( cclass ) ); 105 if ( !klass.empty() ) 106 { 107 lua_getfield( m_lua, -1, klass.data() ); 108 if ( find_entry( cselector, centry, type ) ) return true; 109 lua_settop( m_lua, global ); 110 } 105 111 106 112 // check entry
Note: See TracChangeset
for help on using the changeset viewer.