diff options
Diffstat (limited to 'scene/gui')
| -rw-r--r-- | scene/gui/scroll_container.cpp | 10 | ||||
| -rw-r--r-- | scene/gui/tab_container.cpp | 89 | ||||
| -rw-r--r-- | scene/gui/video_player.cpp | 12 |
3 files changed, 67 insertions, 44 deletions
diff --git a/scene/gui/scroll_container.cpp b/scene/gui/scroll_container.cpp index 8f753f51bc..e5b5d531a0 100644 --- a/scene/gui/scroll_container.cpp +++ b/scene/gui/scroll_container.cpp @@ -195,11 +195,19 @@ void ScrollContainer::_notification(int p_what) { Rect2 r = Rect2(-scroll,minsize); if (!scroll_h) { r.pos.x=0; - r.size.width=size.width; + if (c->get_h_size_flags()&SIZE_EXPAND) + r.size.width=MAX(size.width,minsize.width); + else + r.size.width=minsize.width; } if (!scroll_v) { r.pos.y=0; r.size.height=size.height; + if (c->get_v_size_flags()&SIZE_EXPAND) + r.size.height=MAX(size.height,minsize.height); + else + r.size.height=minsize.height; + } fit_child_in_rect(c,r); } diff --git a/scene/gui/tab_container.cpp b/scene/gui/tab_container.cpp index 3ed182c017..6fa701340d 100644 --- a/scene/gui/tab_container.cpp +++ b/scene/gui/tab_container.cpp @@ -229,6 +229,18 @@ void TabContainer::_notification(int p_what) { int w=0; int idx=0; + Vector<int> offsets; + Vector<Control*> controls; + int from=0; + int limit=get_size().width; + if (popup) { + top_size.width-=menu->get_width(); + limit-=menu->get_width(); + } + + bool notdone=false; + last_tab_cache=-1; + for(int i=0;i<get_child_count();i++) { Control *c = get_child(i)->cast_to<Control>(); @@ -236,7 +248,20 @@ void TabContainer::_notification(int p_what) { continue; if (c->is_set_as_toplevel()) continue; + if (idx<tab_display_ofs) { + idx++; + from=idx; + continue; + } + if (w>=get_size().width) { + buttons_visible_cache=true; + notdone=true; + break; + } + + offsets.push_back(w); + controls.push_back(c); String s = c->has_meta("_tab_name")?String(XL_MESSAGE(String(c->get_meta("_tab_name")))):String(c->get_name()); w+=font->get_string_size(s).width; @@ -257,55 +282,46 @@ void TabContainer::_notification(int p_what) { w+=tab_bg->get_minimum_size().width; } - idx++; - } + if (idx<tab_display_ofs) { + } + last_tab_cache=idx; - int ofs; - int limit=get_size().width; - if (popup) { - top_size.width-=menu->get_width(); - limit-=menu->get_width(); + idx++; } - if (w<=limit) { - switch(align) { + int ofs; - case ALIGN_LEFT: ofs = side_margin; break; - case ALIGN_CENTER: ofs = (int(limit) - w)/2; break; - case ALIGN_RIGHT: ofs = int(limit) - w - side_margin; break; - }; + switch(align) { - tab_display_ofs=0; - buttons_visible_cache=false; - } else { + case ALIGN_LEFT: ofs = side_margin; break; + case ALIGN_CENTER: ofs = (int(limit) - w)/2; break; + case ALIGN_RIGHT: ofs = int(limit) - w - side_margin; break; + }; - ofs=0; - limit-=incr->get_width()+decr->get_width(); - buttons_visible_cache=true; - } + tab_display_ofs=0; tabs_ofs_cache=ofs; - last_tab_cache=-1; idx=0; - bool notdone=false; - for(int i=0;i<get_child_count();i++) { - Control *c = get_child(i)->cast_to<Control>(); - if (!c) - continue; - if (c->is_set_as_toplevel()) - continue; + for(int i=0;i<controls.size();i++) { - if (idx<tab_display_ofs) { - idx++; - continue; + idx=i+from; + if (current>=from && current<from+controls.size()-1) { + //current is visible! draw it last. + if (i==controls.size()-1) { + idx=current; + } else if (idx>=current) { + idx+=1; + } } + Control *c = controls[idx-from]; + String s = c->has_meta("_tab_name")?String(c->get_meta("_tab_name")):String(c->get_name()); int w=font->get_string_size(s).width; Ref<Texture> icon; @@ -336,14 +352,12 @@ void TabContainer::_notification(int p_what) { col=color_bg; } + int lofs = ofs + offsets[idx-from]; Size2i sb_ms = sb->get_minimum_size(); - Rect2 sb_rect = Rect2( ofs, 0, w+sb_ms.width, top_margin); + Rect2 sb_rect = Rect2( lofs, 0, w+sb_ms.width, top_margin); + - if (sb_ms.width+w+ofs > limit) { - notdone=true; - break; - } sb->draw(ci, sb_rect ); Point2i lpos = sb_rect.pos; @@ -357,8 +371,7 @@ void TabContainer::_notification(int p_what) { } font->draw(ci, Point2i( lpos.x, sb->get_margin(MARGIN_TOP)+((sb_rect.size.y-sb_ms.y)-font->get_height())/2+font->get_ascent() ), s, col ); - ofs+=sb_ms.x+w; - last_tab_cache=idx; + //ofs+=sb_ms.x+w; /* int sb_mw = sb->get_minimum_size().width; diff --git a/scene/gui/video_player.cpp b/scene/gui/video_player.cpp index f50552b32c..b4cd437d35 100644 --- a/scene/gui/video_player.cpp +++ b/scene/gui/video_player.cpp @@ -196,10 +196,10 @@ void VideoPlayer::set_stream(const Ref<VideoStream> &p_stream) { stream=p_stream; if (stream.is_valid()) { - stream->set_audio_track(audio_track); - playback=stream->instance_playback(); + stream->set_audio_track(audio_track); + playback=stream->instance_playback(); } else { - playback=Ref<VideoStreamPlayback>(); + playback=Ref<VideoStreamPlayback>(); } if (!playback.is_null()) { @@ -249,6 +249,8 @@ void VideoPlayer::stop() { return; playback->stop(); + AudioServer::get_singleton()->stream_set_active(stream_rid,false); + resampler.clear(); set_process(false); last_audio_time=0; }; @@ -387,8 +389,8 @@ void VideoPlayer::_bind_methods() { ADD_PROPERTY( PropertyInfo(Variant::REAL, "stream/volume_db", PROPERTY_HINT_RANGE,"-80,24,0.01"), _SCS("set_volume_db"), _SCS("get_volume_db") ); ADD_PROPERTY( PropertyInfo(Variant::BOOL, "stream/autoplay"), _SCS("set_autoplay"), _SCS("has_autoplay") ); ADD_PROPERTY( PropertyInfo(Variant::BOOL, "stream/paused"), _SCS("set_paused"), _SCS("is_paused") ); - ADD_PROPERTY( PropertyInfo(Variant::INT, "stream/audio_track",PROPERTY_HINT_RANGE,"0,128,1"), _SCS("set_audio_track"), _SCS("get_audio_track") ); - ADD_PROPERTY( PropertyInfo( Variant::BOOL, "expand" ), _SCS("set_expand"),_SCS("has_expand") ); + ADD_PROPERTY( PropertyInfo(Variant::INT, "stream/audio_track",PROPERTY_HINT_RANGE,"0,128,1"), _SCS("set_audio_track"), _SCS("get_audio_track") ); + ADD_PROPERTY( PropertyInfo( Variant::BOOL, "expand" ), _SCS("set_expand"),_SCS("has_expand") ); } |