meow-7.2.2
Rider Linden 2018-05-24 13:30:39 -07:00
commit 581869f2ca
5 changed files with 186 additions and 92 deletions

View File

@ -611,6 +611,16 @@ LLSettingsBase::ptr_t LLSettingsDay::getSettingsAtKeyframe(F32 keyframe, S32 tra
return LLSettingsBase::ptr_t();
}
F32 LLSettingsDay::getUpperBoundFrame(S32 track, F32 keyframe)
{
return get_wrapping_atafter(mDayTracks[track], keyframe)->first;
}
F32 LLSettingsDay::getLowerBoundFrame(S32 track, F32 keyframe)
{
return get_wrapping_atbefore(mDayTracks[track], keyframe)->first;
}
LLSettingsDay::TrackBound_t LLSettingsDay::getBoundingEntries(LLSettingsDay::CycleTrack_t &track, F32 keyframe)
{
return TrackBound_t(get_wrapping_atbefore(track, keyframe), get_wrapping_atafter(track, keyframe));

View File

@ -115,6 +115,9 @@ public:
static validation_list_t validationList();
virtual LLSettingsBase::ptr_t buildDerivedClone() override { return buildClone(); }
F32 getUpperBoundFrame(S32 track, F32 keyframe);
F32 getLowerBoundFrame(S32 track, F32 keyframe);
protected:
LLSettingsDay();

View File

@ -30,6 +30,7 @@
// libs
#include "llbutton.h"
#include "llcallbacklist.h"
#include "llcheckboxctrl.h"
#include "llcombobox.h"
#include "llloadingindicator.h"
@ -74,6 +75,8 @@ const std::string ACTION_APPLY_LOCAL("apply_local");
const std::string ACTION_APPLY_PARCEL("apply_parcel");
const std::string ACTION_APPLY_REGION("apply_region");
const F32 DAY_CYCLE_PLAY_TIME_SECONDS = 60;
//=========================================================================
// **RIDER**
@ -103,7 +106,9 @@ LLFloaterEditExtDayCycle::LLFloaterEditExtDayCycle(const LLSD &key):
mScratchWater()
// **RIDER**
{
mCommitCallbackRegistrar.add("DayCycle.Track", boost::bind(&LLFloaterEditExtDayCycle::onTrackSelectionCallback, this, _2));
mCommitCallbackRegistrar.add("DayCycle.Track", [this](LLUICtrl *ctrl, const LLSD &data) { onTrackSelectionCallback(data); });
mCommitCallbackRegistrar.add("DayCycle.PlayActions", [this](LLUICtrl *ctrl, const LLSD &data) { onPlayActionCallback(data); });
mScratchSky = LLSettingsVOSky::buildDefaultSky();
mScratchWater = LLSettingsVOWater::buildDefaultWater();
@ -226,6 +231,7 @@ void LLFloaterEditExtDayCycle::onClose(bool app_quitting)
{
LLEnvironment::instance().setSelectedEnvironment(LLEnvironment::ENV_LOCAL);
}
stopPlay();
}
void LLFloaterEditExtDayCycle::onVisibilityChange(BOOL new_visibility)
@ -238,6 +244,7 @@ void LLFloaterEditExtDayCycle::onVisibilityChange(BOOL new_visibility)
else
{
LLEnvironment::instance().setSelectedEnvironment(LLEnvironment::ENV_LOCAL);
stopPlay();
}
}
@ -378,6 +385,34 @@ void LLFloaterEditExtDayCycle::onTrackSelectionCallback(const LLSD& user_data)
selectTrack(track_index);
}
void LLFloaterEditExtDayCycle::onPlayActionCallback(const LLSD& user_data)
{
std::string action = user_data.asString();
F32 frame = mTimeSlider->getCurSliderValue();
if (action == "play")
{
startPlay();
}
else if (action == "pause")
{
stopPlay();
}
else if (mSliderKeyMap.size() != 0)
{
F32 new_frame = 0;
if (action == "forward")
{
new_frame = mEditDay->getUpperBoundFrame(mCurrentTrack, frame);
}
else if (action == "back")
{
new_frame = mEditDay->getLowerBoundFrame(mCurrentTrack, frame - (mTimeSlider->getIncrement() / 2));
}
selectFrame(new_frame);
stopPlay();
}
}
void LLFloaterEditExtDayCycle::onFrameSliderCallback()
{
if (mSliderKeyMap.size() == 0)
@ -453,25 +488,7 @@ void LLFloaterEditExtDayCycle::onFrameSliderCallback()
void LLFloaterEditExtDayCycle::onTimeSliderMoved()
{
mFramesSlider->resetCurSlider();
keymap_t::iterator iter = mSliderKeyMap.begin();
keymap_t::iterator end_iter = mSliderKeyMap.end();
F32 frame = mTimeSlider->getCurSliderValue();
while (iter != end_iter)
{
if (iter->second.mFrame == frame)
{
mFramesSlider->setCurSlider(iter->first);
break;
}
iter++;
}
// block or update tabs according to new selection
updateTabs();
// blending:
selectFrame(mTimeSlider->getCurSliderValue());
}
void LLFloaterEditExtDayCycle::selectTrack(U32 track_index)
@ -496,6 +513,28 @@ void LLFloaterEditExtDayCycle::selectTrack(U32 track_index)
updateSlider();
}
void LLFloaterEditExtDayCycle::selectFrame(F32 frame)
{
mFramesSlider->resetCurSlider();
mTimeSlider->setCurSliderValue(frame);
keymap_t::iterator iter = mSliderKeyMap.begin();
keymap_t::iterator end_iter = mSliderKeyMap.end();
while (iter != end_iter)
{
if (iter->second.mFrame == frame)
{
mFramesSlider->setCurSlider(iter->first);
break;
}
iter++;
}
// block or update tabs according to new selection
updateTabs();
}
void LLFloaterEditExtDayCycle::clearTabs()
{
// Note: If this doesn't look good, init panels with default settings. It might be better looking
@ -612,8 +651,9 @@ void LLFloaterEditExtDayCycle::updateButtons()
{
F32 frame = mTimeSlider->getCurSliderValue();
LLSettingsBase::ptr_t settings = mEditDay->getSettingsAtKeyframe(frame, mCurrentTrack);
mAddFrameButton->setEnabled(settings.get() == NULL ? TRUE : FALSE);
mDeleteFrameButton->setEnabled(mSliderKeyMap.size() > 0 ? TRUE : FALSE);
bool can_add = settings.get() == NULL;
mAddFrameButton->setEnabled(can_add);
mDeleteFrameButton->setEnabled(!can_add);
}
void LLFloaterEditExtDayCycle::updateSlider()
@ -738,7 +778,6 @@ void LLFloaterEditExtDayCycle::loadInventoryItem(const LLUUID &inventoryId)
void LLFloaterEditExtDayCycle::onAssetLoaded(LLUUID asset_id, LLSettingsBase::ptr_t settings, S32 status)
{
mEditDay = std::dynamic_pointer_cast<LLSettingsDay>(settings);
mOriginalDay = mEditDay->buildClone();
updateEditEnvironment();
syncronizeTabs();
refresh();
@ -753,7 +792,6 @@ void LLFloaterEditExtDayCycle::loadLiveEnvironment(LLEnvironment::EnvSelection_t
if (day)
{
mOriginalDay = day;
mEditDay = day->buildClone();
break;
}
@ -811,9 +849,9 @@ void LLFloaterEditExtDayCycle::syncronizeTabs()
LLSettingsEditPanel *panel = static_cast<LLSettingsEditPanel *>(tabs->getPanelByIndex(idx));
if (panel)
{
panel->setAllChildrenEnabled(canedit);
panel->setSettings(psettingWater);
panel->refresh();
panel->setEnabled(canedit);
panel->setAllChildrenEnabled(canedit);
}
}
@ -842,9 +880,9 @@ void LLFloaterEditExtDayCycle::syncronizeTabs()
LLSettingsEditPanel *panel = static_cast<LLSettingsEditPanel *>(tabs->getPanelByIndex(idx));
if (panel)
{
panel->setAllChildrenEnabled(canedit);
panel->setSettings(psettingSky);
panel->refresh();
panel->setEnabled(canedit);
panel->setAllChildrenEnabled(canedit);
}
}
@ -974,4 +1012,42 @@ bool LLFloaterEditExtDayCycle::canApplyParcel() const
// **RIDER**
void LLFloaterEditExtDayCycle::startPlay()
{
mPlayTimer.reset();
mPlayTimer.start();
gIdleCallbacks.addFunction(onIdlePlay, this);
mPlayStartFrame = mTimeSlider->getCurSliderValue();
getChild<LLView>("play_layout", true)->setVisible(FALSE);
getChild<LLView>("pause_layout", true)->setVisible(TRUE);
}
void LLFloaterEditExtDayCycle::stopPlay()
{
gIdleCallbacks.deleteFunction(onIdlePlay, this);
mPlayTimer.stop();
getChild<LLView>("play_layout", true)->setVisible(TRUE);
getChild<LLView>("pause_layout", true)->setVisible(FALSE);
}
//static
void LLFloaterEditExtDayCycle::onIdlePlay(void* user_data)
{
LLFloaterEditExtDayCycle* self = (LLFloaterEditExtDayCycle*)user_data;
F32 prcnt_played = self->mPlayTimer.getElapsedTimeF32() / DAY_CYCLE_PLAY_TIME_SECONDS;
F32 new_frame = fmod(self->mPlayStartFrame + prcnt_played, 1.f);
self->mTimeSlider->setCurSliderValue(new_frame); // will do the rounding
self->selectFrame(self->mTimeSlider->getCurSliderValue());
if (self->mPlayTimer.getElapsedTimeF32() > DAY_CYCLE_PLAY_TIME_SECONDS)
{
// Nothing to do anymore.
self->stopPlay();
}
}

View File

@ -87,12 +87,14 @@ private:
void onRemoveTrack();
void onCommitName(class LLLineEditor* caller, void* user_data);
void onTrackSelectionCallback(const LLSD& user_data);
void onPlayActionCallback(const LLSD& user_data);
// time slider moved
void onTimeSliderMoved();
// a frame moved or frame selection changed
void onFrameSliderCallback();
void selectTrack(U32 track_index);
void selectFrame(F32 frame);
void clearTabs();
void updateTabs();
void updateWaterTabs(const LLSettingsWaterPtr_t &p_water);
@ -126,11 +128,13 @@ private:
void reblendSettings();
// **RIDER**
// data for restoring previous displayed environment
// play functions
void startPlay();
void stopPlay();
static void onIdlePlay(void* user_data);
LLSettingsDay::ptr_t mEditDay; // edited copy
LLSettingsDay::ptr_t mOriginalDay; // the one we are editing
S64Seconds mDayLength;
U32 mCurrentTrack;
std::string mLastFrameSlider;
@ -158,6 +162,9 @@ private:
LLFlyoutComboBtnCtrl * mFlyoutControl;
LLFrameTimer mPlayTimer;
F32 mPlayStartFrame; // an env frame
edit_commit_signal_t mCommitSignal;
// For map of sliders to parameters

View File

@ -47,7 +47,7 @@
follows="top|left"
layout="topleft"
left_pad="10"
max_chars="100"
max_length_bytes="100"
name="day_cycle_name"
top="5"
width="200"
@ -74,8 +74,6 @@
<panel name="timeline_layers"
border="false"
follows="left|top"
auto_resize="false"
user_resize="true"
height="150"
width="110"
top_pad="0"
@ -150,8 +148,6 @@
<panel name="timeline"
border="true"
follows="left|top"
auto_resize="false"
user_resize="true"
height="150"
min_height="0"
width="595"
@ -205,7 +201,6 @@
value="100%[DSC]"
width="80" />
<multi_slider
can_edit_text="true"
decimal_digits="0"
draw_track="false"
follows="bottom"
@ -220,11 +215,9 @@
show_text="false"
top_pad="0"
use_triangle="true"
width="525"
min_width="525"/>
width="525" />
<multi_slider
can_edit_text="true"
decimal_digits="0"
follows="bottom"
height="10"
@ -237,8 +230,7 @@
name="WLDayCycleFrames"
show_text="false"
top_pad="15"
width="525"
min_width="525" />
width="525" />
<text
follows="left|bottom"
@ -246,7 +238,6 @@
layout="topleft"
left_pad="0"
name="current_time"
select_on_focus="true"
value="[PRCNT]%[DSC]"
top_delta="-5"
width="70" />
@ -272,25 +263,29 @@
min_width="25"
width="25">
<button
name="skip_back_btn"
follows="top"
image_overlay="SkipBackward_Off"
image_disabled="PushButton_Disabled"
image_disabled_selected="PushButton_Disabled"
image_selected="PushButton_Selected"
image_unselected="PushButton_Off"
hover_glow_amount="0.15"
auto_resize="false"
width="25"
height="25"
layout="topleft"
tool_tip="Step back"
top="0"
left="0"/>
name="skip_back_btn"
follows="top"
image_overlay="SkipBackward_Off"
image_disabled="PushButton_Disabled"
image_disabled_selected="PushButton_Disabled"
image_selected="PushButton_Selected"
image_unselected="PushButton_Off"
hover_glow_amount="0.15"
auto_resize="false"
width="25"
height="25"
layout="topleft"
tool_tip="Step back"
top="0"
left="0">
<button.commit_callback
function="DayCycle.PlayActions"
parameter="back" />
</button>
</layout_panel>
<layout_panel
name="play"
name="play_layout"
mouse_opaque="false"
auto_resize="false"
layout="topleft"
@ -312,11 +307,15 @@
height="25"
width="25"
left="0"
top="0" />
top="0">
<button.commit_callback
function="DayCycle.PlayActions"
parameter="play" />
</button>
</layout_panel>
<layout_panel
name="pause"
name="pause_layout"
mouse_opaque="false"
auto_resize="false"
layout="topleft"
@ -339,32 +338,40 @@
height="25"
width="25"
left="0"
top="0"/>
top="0">
<button.commit_callback
function="DayCycle.PlayActions"
parameter="pause" />
</button>
</layout_panel>
<layout_panel
name="skip_forward"
mouse_opaque="false"
auto_resize="false"
layout="topleft"
top="0"
height="25"
min_width="25"
width="25">
name="skip_forward"
mouse_opaque="false"
auto_resize="false"
layout="topleft"
top="0"
height="25"
min_width="25"
width="25">
<button
name="skip_forward_btn"
follows="top"
image_overlay="SkipForward_Off"
image_disabled="PushButton_Disabled"
image_disabled_selected="PushButton_Disabled"
image_selected="PushButton_Selected"
image_unselected="PushButton_Off"
hover_glow_amount="0.15"
width="25"
height="25"
layout="topleft"
tool_tip="Step forward"
top="0" />
name="skip_forward_btn"
follows="top"
image_overlay="SkipForward_Off"
image_disabled="PushButton_Disabled"
image_disabled_selected="PushButton_Disabled"
image_selected="PushButton_Selected"
image_unselected="PushButton_Off"
hover_glow_amount="0.15"
width="25"
height="25"
layout="topleft"
tool_tip="Step forward"
top="0">
<button.commit_callback
function="DayCycle.PlayActions"
parameter="forward" />
</button>
</layout_panel>
</layout_stack>
@ -505,15 +512,6 @@
name="cancel_btn"
width="100" />
<!--<button
follows="top|left"
height="23"
label="Upload"
layout="topleft"
left_pad="10"
name="upload_btn"
width="100" />-->
</layout_panel>
</layout_stack>