Skip to content
Snippets Groups Projects
Commit 8b3957b3 authored by AndreyL ProductEngine's avatar AndreyL ProductEngine
Browse files

MAINT-8331 EEP UI control: XYVector

parent 442bbfed
No related branches found
No related tags found
No related merge requests found
......@@ -135,6 +135,7 @@ set(llui_SOURCE_FILES
llviewereventrecorder.cpp
llwindowshade.cpp
llxuiparser.cpp
llxyvector.cpp
)
set(llui_HEADER_FILES
......@@ -251,6 +252,7 @@ set(llui_HEADER_FILES
llviewquery.h
llwindowshade.h
llxuiparser.h
llxyvector.h
)
set_source_files_properties(${llui_HEADER_FILES}
......
/**
* @file llxyvector.cpp
* @author Andrey Lihatskiy
* @brief Implementation for LLXYVector
*
* $LicenseInfo:firstyear=2001&license=viewerlgpl$
* Second Life Viewer Source Code
* Copyright (C) 2018, Linden Research, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License only.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
// A control that allows to set two related vector magnitudes by manipulating a single vector on a plane.
#include "linden_common.h"
#include "llxyvector.h"
#include "llstring.h"
#include "llrect.h"
#include "lluictrlfactory.h"
#include "llrender.h"
// Globals
static LLDefaultChildRegistry::Register<LLXYVector> register_xy_vector("xy_vector");
const F32 CENTER_CIRCLE_RADIUS = 2;
const S32 ARROW_ANGLE = 30;
const S32 ARROW_LENGTH_LONG = 10;
const S32 ARROW_LENGTH_SHORT = 6;
LLXYVector::Params::Params()
: x_entry("x_entry"),
y_entry("y_entry"),
touch_area("touch_area"),
border("border"),
edit_bar_height("edit_bar_height", 18),
padding("padding", 4),
min_val_x("min_val_x", -1.0f),
max_val_x("max_val_x", 1.0f),
increment_x("increment_x", 0.05f),
min_val_y("min_val_y", -1.0f),
max_val_y("max_val_y", 1.0f),
increment_y("increment_y", 0.05f),
label_width("label_width", 16),
arrow_color("arrow_color", LLColor4::white),
ghost_color("ghost_color"),
area_color("area_color", LLColor4::grey4),
grid_color("grid_color", LLColor4::grey % 0.25f)
{
}
LLXYVector::LLXYVector(const LLXYVector::Params& p)
: LLUICtrl(p),
mArrowColor(p.arrow_color()),
mAreaColor(p.area_color),
mGridColor(p.grid_color),
mMinValueX(p.min_val_x),
mMaxValueX(p.max_val_x),
mIncrementX(p.increment_x),
mMinValueY(p.min_val_y),
mMaxValueY(p.max_val_y),
mIncrementY(p.increment_y)
{
mGhostColor = p.ghost_color.isProvided() ? p.ghost_color() % 0.3f : p.arrow_color() % 0.3f;
LLRect border_rect = getLocalRect();
LLViewBorder::Params params = p.border;
params.rect(border_rect);
mBorder = LLUICtrlFactory::create<LLViewBorder>(params);
addChild(mBorder);
LLTextBox::Params x_label_params;
x_label_params.initial_value(p.x_entry.label());
x_label_params.rect = LLRect(p.padding,
border_rect.mTop - p.padding,
p.label_width,
border_rect.getHeight() - p.edit_bar_height);
mXLabel = LLUICtrlFactory::create<LLTextBox>(x_label_params);
addChild(mXLabel);
LLLineEditor::Params x_params = p.x_entry;
x_params.rect = LLRect(p.padding + p.label_width,
border_rect.mTop - p.padding,
border_rect.getCenterX(),
border_rect.getHeight() - p.edit_bar_height);
x_params.commit_callback.function(boost::bind(&LLXYVector::onEditChange, this));
mXEntry = LLUICtrlFactory::create<LLLineEditor>(x_params);
mXEntry->setPrevalidateInput(LLTextValidate::validateFloat);
addChild(mXEntry);
LLTextBox::Params y_label_params;
y_label_params.initial_value(p.y_entry.label());
y_label_params.rect = LLRect(border_rect.getCenterX() + p.padding,
border_rect.mTop - p.padding,
border_rect.getCenterX() + p.label_width,
border_rect.getHeight() - p.edit_bar_height);
mYLabel = LLUICtrlFactory::create<LLTextBox>(y_label_params);
addChild(mYLabel);
LLLineEditor::Params y_params = p.y_entry;
y_params.rect = LLRect(border_rect.getCenterX() + p.padding + p.label_width,
border_rect.getHeight() - p.padding,
border_rect.getWidth() - p.padding,
border_rect.getHeight() - p.edit_bar_height);
y_params.commit_callback.function(boost::bind(&LLXYVector::onEditChange, this));
mYEntry = LLUICtrlFactory::create<LLLineEditor>(y_params);
mYEntry->setPrevalidateInput(LLTextValidate::validateFloat);
addChild(mYEntry);
LLPanel::Params touch_area = p.touch_area;
touch_area.rect = LLRect(p.padding,
border_rect.mTop - p.edit_bar_height - p.padding,
border_rect.getWidth() - p.padding,
p.padding);
mTouchArea = LLUICtrlFactory::create<LLPanel>(touch_area);
addChild(mTouchArea);
}
LLXYVector::~LLXYVector()
{
}
BOOL LLXYVector::postBuild()
{
return TRUE;
}
void drawArrow(S32 tailX, S32 tailY, S32 tipX, S32 tipY, LLColor4 color)
{
gl_line_2d(tailX, tailY, tipX, tipY, color);
S32 dx = tipX - tailX;
S32 dy = tipY - tailY;
S32 arrowLength = (abs(dx) < ARROW_LENGTH_LONG && abs(dy) < ARROW_LENGTH_LONG) ? ARROW_LENGTH_SHORT : ARROW_LENGTH_LONG;
F32 theta = std::atan2(dy, dx);
F32 rad = ARROW_ANGLE * std::atan(1) * 4 / 180;
F32 x = tipX - arrowLength * cos(theta + rad);
F32 y = tipY - arrowLength * sin(theta + rad);
F32 rad2 = -1 * ARROW_ANGLE * std::atan(1) * 4 / 180;
F32 x2 = tipX - arrowLength * cos(theta + rad2);
F32 y2 = tipY - arrowLength * sin(theta + rad2);
gl_triangle_2d(tipX, tipY, x, y, x2, y2, color, true);
}
void LLXYVector::draw()
{
S32 centerX = mTouchArea->getRect().getCenterX();
S32 centerY = mTouchArea->getRect().getCenterY();
S32 pointX = centerX + (mValueX * mTouchArea->getRect().getWidth() / (2 * mMaxValueX));
S32 pointY = centerY + (mValueY * mTouchArea->getRect().getHeight() / (2 * mMaxValueY));
// fill
gl_rect_2d(mTouchArea->getRect(), mAreaColor, true);
// draw grid
gl_line_2d(centerX, mTouchArea->getRect().mTop, centerX, mTouchArea->getRect().mBottom, mGridColor);
gl_line_2d(mTouchArea->getRect().mLeft, centerY, mTouchArea->getRect().mRight, centerY, mGridColor);
// draw ghost
if (hasMouseCapture())
{
drawArrow(centerX, centerY, mGhostX, mGhostY, mGhostColor);
}
else
{
mGhostX = pointX;
mGhostY = pointY;
}
if (abs(mValueX) >= mIncrementX || abs(mValueY) >= mIncrementY)
{
// draw the vector arrow
drawArrow(centerX, centerY, pointX, pointY, mArrowColor);
}
else
{
// skip the arrow, set color for center circle
gGL.color4fv(mArrowColor.get().mV);
}
// draw center circle
gl_circle_2d(centerX, centerY, CENTER_CIRCLE_RADIUS, 12, true);
LLView::draw();
}
void LLXYVector::onEditChange()
{
if (getEnabled())
{
setValueAndCommit(mXEntry->getValue().asReal(), mYEntry->getValue().asReal());
}
}
void LLXYVector::setValue(const LLSD& value)
{
if (value.isArray())
{
setValue(value[0].asReal(), value[1].asReal());
}
}
void LLXYVector::setValue(F32 x, F32 y)
{
x = llclamp(x, mMinValueX, mMaxValueX);
y = llclamp(y, mMinValueY, mMaxValueY);
// Round the values to nearest increments
x -= mMinValueX;
x += mIncrementX / 2.0001f;
x -= fmod(x, mIncrementX);
x += mMinValueX;
y -= mMinValueY;
y += mIncrementY / 2.0001f;
y -= fmod(y, mIncrementY);
y += mMinValueY;
mValueX = x;
mValueY = y;
update();
}
void LLXYVector::setValueAndCommit(F32 x, F32 y)
{
if (mValueX != x || mValueY != y)
{
setValue(x, y);
onCommit();
}
}
LLSD LLXYVector::getValue() const
{
LLSD value;
value.append(mValueX);
value.append(mValueY);
return value;
}
void LLXYVector::update()
{
mXEntry->setValue(mValueX);
mYEntry->setValue(mValueY);
}
BOOL LLXYVector::handleHover(S32 x, S32 y, MASK mask)
{
if (hasMouseCapture())
{
F32 valueX = F32(x - mTouchArea->getRect().getCenterX()) / mTouchArea->getRect().getWidth();
F32 valueY = F32(y - mTouchArea->getRect().getCenterY()) / mTouchArea->getRect().getHeight();
valueX *= 2 * mMaxValueX;
valueY *= 2 * mMaxValueY;
setValueAndCommit(valueX, valueY);
}
return TRUE;
}
BOOL LLXYVector::handleMouseUp(S32 x, S32 y, MASK mask)
{
if (hasMouseCapture())
{
gFocusMgr.setMouseCapture(NULL);
make_ui_sound("UISndClickRelease");
}
return TRUE;
}
BOOL LLXYVector::handleMouseDown(S32 x, S32 y, MASK mask)
{
if (mTouchArea->getRect().pointInRect(x, y))
{
gFocusMgr.setMouseCapture(this);
make_ui_sound("UISndClick");
}
return TRUE;
}
/**
* @file llxyvector.h
* @author Andrey Lihatskiy
* @brief Header file for LLXYVector
*
* $LicenseInfo:firstyear=2001&license=viewerlgpl$
* Second Life Viewer Source Code
* Copyright (C) 2018, Linden Research, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License only.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
// A control that allows to set two related vector magnitudes by manipulating a single vector on a plane.
#ifndef LL_LLXYVECTOR_H
#define LL_LLXYVECTOR_H
#include "lluictrl.h"
#include "llpanel.h"
#include "lltextbox.h"
#include "lllineeditor.h"
class LLXYVector
: public LLUICtrl
{
public:
struct Params
: public LLInitParam::Block<Params, LLUICtrl::Params>
{
Optional<LLLineEditor::Params> x_entry;
Optional<LLLineEditor::Params> y_entry;
Optional<LLPanel::Params> touch_area;
Optional<LLViewBorder::Params> border;
Optional<S32> edit_bar_height;
Optional<S32> padding;
Optional<S32> label_width;
Optional<F32> min_val_x;
Optional<F32> max_val_x;
Optional<F32> increment_x;
Optional<F32> min_val_y;
Optional<F32> max_val_y;
Optional<F32> increment_y;
Optional<LLUIColor> arrow_color;
Optional<LLUIColor> ghost_color;
Optional<LLUIColor> area_color;
Optional<LLUIColor> grid_color;
Params();
};
virtual ~LLXYVector();
/*virtual*/ BOOL postBuild();
virtual BOOL handleHover(S32 x, S32 y, MASK mask);
virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
virtual void draw();
virtual void setValue(const LLSD& value);
void setValue(F32 x, F32 y);
virtual LLSD getValue() const;
protected:
friend class LLUICtrlFactory;
LLXYVector(const Params&);
void onEditChange();
protected:
LLTextBox* mXLabel;
LLTextBox* mYLabel;
LLLineEditor* mXEntry;
LLLineEditor* mYEntry;
LLPanel* mTouchArea;
LLViewBorder* mBorder;
private:
void update();
void setValueAndCommit(F32 x, F32 y);
F32 mValueX;
F32 mValueY;
F32 mMinValueX;
F32 mMaxValueX;
F32 mIncrementX;
F32 mMinValueY;
F32 mMaxValueY;
F32 mIncrementY;
U32 mGhostX;
U32 mGhostY;
LLUIColor mArrowColor;
LLUIColor mGhostColor;
LLUIColor mAreaColor;
LLUIColor mGridColor;
};
#endif
......@@ -49,8 +49,7 @@ namespace
const std::string FIELD_SKY_CLOUD_COLOR("cloud_color");
const std::string FIELD_SKY_CLOUD_COVERAGE("cloud_coverage");
const std::string FIELD_SKY_CLOUD_SCALE("cloud_scale");
const std::string FIELD_SKY_CLOUD_SCROLL_X("cloud_scroll_x");
const std::string FIELD_SKY_CLOUD_SCROLL_Y("cloud_scroll_y");
const std::string FIELD_SKY_CLOUD_SCROLL_XY("cloud_scroll_xy");
const std::string FIELD_SKY_CLOUD_MAP("cloud_map");
const std::string FIELD_SKY_CLOUD_DENSITY_X("cloud_density_x");
const std::string FIELD_SKY_CLOUD_DENSITY_Y("cloud_density_y");
......@@ -194,8 +193,7 @@ BOOL LLPanelSettingsSkyCloudTab::postBuild()
getChild<LLUICtrl>(FIELD_SKY_CLOUD_COLOR)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onCloudColorChanged(); });
getChild<LLUICtrl>(FIELD_SKY_CLOUD_COVERAGE)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onCloudCoverageChanged(); });
getChild<LLUICtrl>(FIELD_SKY_CLOUD_SCALE)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onCloudScaleChanged(); });
getChild<LLUICtrl>(FIELD_SKY_CLOUD_SCROLL_X)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onCloudScrollChanged(); });
getChild<LLUICtrl>(FIELD_SKY_CLOUD_SCROLL_Y)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onCloudScrollChanged(); });
getChild<LLUICtrl>(FIELD_SKY_CLOUD_SCROLL_XY)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onCloudScrollChanged(); });
getChild<LLTextureCtrl>(FIELD_SKY_CLOUD_MAP)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onCloudMapChanged(); });
// getChild<LLTextureCtrl>(FIELD_SKY_CLOUD_MAP)->setDefaultImageAssetID(LLSettingsSky::DEFAULT_CLOUD_TEXTURE_ID);
......@@ -228,8 +226,7 @@ void LLPanelSettingsSkyCloudTab::refresh()
getChild<LLUICtrl>(FIELD_SKY_CLOUD_SCALE)->setValue(mSkySettings->getCloudScale());
LLVector2 cloudScroll(mSkySettings->getCloudScrollRate());
getChild<LLUICtrl>(FIELD_SKY_CLOUD_SCROLL_X)->setValue(cloudScroll[0]);
getChild<LLUICtrl>(FIELD_SKY_CLOUD_SCROLL_Y)->setValue(cloudScroll[1]);
getChild<LLUICtrl>(FIELD_SKY_CLOUD_SCROLL_XY)->setValue(cloudScroll.getValue());
getChild<LLTextureCtrl>(FIELD_SKY_CLOUD_MAP)->setValue(mSkySettings->getCloudNoiseTextureId());
......@@ -262,8 +259,7 @@ void LLPanelSettingsSkyCloudTab::onCloudScaleChanged()
void LLPanelSettingsSkyCloudTab::onCloudScrollChanged()
{
LLVector2 scroll(getChild<LLUICtrl>(FIELD_SKY_CLOUD_SCROLL_X)->getValue().asReal(),
getChild<LLUICtrl>(FIELD_SKY_CLOUD_SCROLL_Y)->getValue().asReal());
LLVector2 scroll(getChild<LLUICtrl>(FIELD_SKY_CLOUD_SCROLL_XY)->getValue());
mSkySettings->setCloudScrollRate(scroll);
}
......
......@@ -31,6 +31,7 @@
#include "llslider.h"
#include "lltexturectrl.h"
#include "llcolorswatch.h"
#include "llxyvector.h"
namespace
{
......@@ -39,11 +40,8 @@ namespace
const std::string FIELD_WATER_UNDERWATER_MOD("water_underwater_mod");
const std::string FIELD_WATER_NORMAL_MAP("water_normal_map");
const std::string FIELD_WATER_WAVE1_X("water_wave1_x");
const std::string FIELD_WATER_WAVE1_Y("water_wave1_y");
const std::string FIELD_WATER_WAVE2_X("water_wave2_x");
const std::string FIELD_WATER_WAVE2_Y("water_wave2_y");
const std::string FIELD_WATER_WAVE1_XY("water_wave1_xy");
const std::string FIELD_WATER_WAVE2_XY("water_wave2_xy");
const std::string FIELD_WATER_NORMAL_SCALE_X("water_normal_scale_x");
const std::string FIELD_WATER_NORMAL_SCALE_Y("water_normal_scale_y");
......@@ -82,6 +80,8 @@ BOOL LLPanelSettingsWaterMainTab::postBuild()
mClrFogColor = getChild<LLColorSwatchCtrl>(FIELD_WATER_FOG_COLOR);
mTxtNormalMap = getChild<LLTextureCtrl>(FIELD_WATER_NORMAL_MAP);
getChild<LLXYVector>(FIELD_WATER_WAVE1_XY)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onLargeWaveChanged(); });
mClrFogColor->setCommitCallback([this](LLUICtrl *, const LLSD &) { onFogColorChanged(); });
getChild<LLUICtrl>(FIELD_WATER_FOG_DENSITY)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onFogDensityChanged(); });
// getChild<LLUICtrl>(FIELD_WATER_FOG_DENSITY)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onFogDensityChanged(getChild<LLUICtrl>(FIELD_WATER_FOG_DENSITY)->getValue().asReal()); });
......@@ -90,11 +90,7 @@ BOOL LLPanelSettingsWaterMainTab::postBuild()
mTxtNormalMap->setDefaultImageAssetID(LLSettingsWater::GetDefaultWaterNormalAssetId());
mTxtNormalMap->setCommitCallback([this](LLUICtrl *, const LLSD &) { onNormalMapChanged(); });
getChild<LLUICtrl>(FIELD_WATER_WAVE1_X)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onLargeWaveChanged(); });
getChild<LLUICtrl>(FIELD_WATER_WAVE1_Y)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onLargeWaveChanged(); });
getChild<LLUICtrl>(FIELD_WATER_WAVE2_X)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onSmallWaveChanged(); });
getChild<LLUICtrl>(FIELD_WATER_WAVE2_Y)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onSmallWaveChanged(); });
getChild<LLUICtrl>(FIELD_WATER_WAVE2_XY)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onSmallWaveChanged(); });
getChild<LLUICtrl>(FIELD_WATER_NORMAL_SCALE_X)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onNormalScaleChanged(); });
getChild<LLUICtrl>(FIELD_WATER_NORMAL_SCALE_Y)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onNormalScaleChanged(); });
......@@ -128,11 +124,9 @@ void LLPanelSettingsWaterMainTab::refresh()
getChild<LLUICtrl>(FIELD_WATER_UNDERWATER_MOD)->setValue(mWaterSettings->getFogMod());
mTxtNormalMap->setValue(mWaterSettings->getNormalMapID());
LLVector2 vect2 = mWaterSettings->getWave1Dir();
getChild<LLUICtrl>(FIELD_WATER_WAVE1_X)->setValue(vect2[0]);
getChild<LLUICtrl>(FIELD_WATER_WAVE1_Y)->setValue(vect2[1]);
getChild<LLUICtrl>(FIELD_WATER_WAVE1_XY)->setValue(vect2.getValue());
vect2 = mWaterSettings->getWave2Dir();
getChild<LLUICtrl>(FIELD_WATER_WAVE2_X)->setValue(vect2[0]);
getChild<LLUICtrl>(FIELD_WATER_WAVE2_Y)->setValue(vect2[1]);
getChild<LLUICtrl>(FIELD_WATER_WAVE2_XY)->setValue(vect2.getValue());
LLVector3 vect3 = mWaterSettings->getNormalScale();
getChild<LLUICtrl>(FIELD_WATER_NORMAL_SCALE_X)->setValue(vect3[0]);
getChild<LLUICtrl>(FIELD_WATER_NORMAL_SCALE_Y)->setValue(vect3[1]);
......@@ -169,14 +163,14 @@ void LLPanelSettingsWaterMainTab::onNormalMapChanged()
void LLPanelSettingsWaterMainTab::onLargeWaveChanged()
{
LLVector2 vect(getChild<LLUICtrl>(FIELD_WATER_WAVE1_X)->getValue().asReal(), getChild<LLUICtrl>(FIELD_WATER_WAVE1_Y)->getValue().asReal());
LLVector2 vect(getChild<LLUICtrl>(FIELD_WATER_WAVE1_XY)->getValue());
LL_WARNS("LAPRAS") << "Changing Large Wave from " << mWaterSettings->getWave1Dir() << " -> " << vect << LL_ENDL;
mWaterSettings->setWave1Dir(vect);
}
void LLPanelSettingsWaterMainTab::onSmallWaveChanged()
{
LLVector2 vect(getChild<LLUICtrl>(FIELD_WATER_WAVE2_X)->getValue().asReal(), getChild<LLUICtrl>(FIELD_WATER_WAVE2_Y)->getValue().asReal());
LLVector2 vect(getChild<LLUICtrl>(FIELD_WATER_WAVE2_XY)->getValue());
LL_WARNS("LAPRAS") << "Changing Small Wave from " << mWaterSettings->getWave2Dir() << " -> " << vect << LL_ENDL;
mWaterSettings->setWave2Dir(vect);
}
......
......@@ -36,6 +36,7 @@
class LLSlider;
class LLColorSwatchCtrl;
class LLTextureCtrl;
class LLXYVector;
//=========================================================================
class LLPanelSettingsWater : public LLSettingsEditPanel
......@@ -76,23 +77,6 @@ class LLPanelSettingsWaterMainTab : public LLPanelSettingsWater
// LLSlider * mSldUnderWaterMod;
LLTextureCtrl * mTxtNormalMap;
// // Temp until XY control
// LLSlider * mSldWave1X;
// LLSlider * mSldWave1Y;
//
// // Temp until XY control
// LLSlider * mSldWave2X;
// LLSlider * mSldWave2Y;
//
// LLSlider * mSldNormalScaleX;
// LLSlider * mSldNormalScaleY;
// LLSlider * mSldNormalScaleZ;
// LLSlider * mSldFresnelScale;
// LLSlider * mSldFresnelOffset;
// LLSlider * mSldScaleAbove;
// LLSlider * mSldScaleBelow;
// LLSlider * mSldBlurMultip;
void onFogColorChanged();
void onFogDensityChanged();
void onFogUnderWaterChanged();
......
......@@ -6,7 +6,8 @@
help_topic="day_presets"
save_rect="true"
title="Edit Day Cycle"
width="705">
width="705"
can_resize="true">
<!-- obsolete?, add as hint for 'save' button? -->
<string name="title_new">Create a New Day Cycle</string>
......@@ -434,16 +435,16 @@
tool_tip="Replace frame with settings from inventory"/>
</layout_panel>
<layout_panel name="frame_settings_water"
auto_resize="false"
auto_resize="true"
user_resize="true"
height="351"
height="450"
width="700"
min_height="0"
visible="false">
<tab_container
follows="all"
halign="left"
height="386"
height="420"
layout="topleft"
left="0"
name="water_tabs"
......@@ -466,7 +467,7 @@
<layout_panel name="frame_settings_sky"
auto_resize="false"
user_resize="true"
height="351"
height="450"
width="700"
min_height="0"
visible="true">
......
......@@ -95,51 +95,24 @@
width="200">
Cloud Scroll:
</text>
<panel
<xy_vector
follows="left|top"
border="true"
bg_alpha_color="red"
background_visible="true"
width="100"
height="100"
left_delta="5"
top_delta="21">
<text>
placeholder
</text>
<slider
decimal_digits="1"
follows="left|top"
increment="0.01"
initial_value="0"
layout="topleft"
label="X:"
left_delta="10"
max_val="10"
min_val="-10"
name="cloud_scroll_x"
top_pad="5"
width="100"/>
<slider
decimal_digits="1"
follows="left|top"
increment="0.01"
initial_value="0"
layout="topleft"
label="Y:"
left_delta="0"
max_val="10"
min_val="-10"
name="cloud_scroll_y"
top_pad="5"
orientation="vertical"
height="70"/>
</panel>
name="cloud_scroll_xy"
width="120"
height="145"
visible="true"
left_delta="0"
top_delta="21"
min_val_x="-10"
max_val_x="10"
min_val_y="-10"
max_val_y="10" />
<text
follows="left|top"
height="10"
layout="topleft"
left_delta="115"
left_delta="160"
top_delta="-20"
width="200">
Cloud Image:
......
......@@ -7,7 +7,7 @@
left="0"
help_topic="land_general_tab"
name="panel_settings_water"
top="0">
top="0">
<layout_stack name="water_stack1"
follows="all"
layout="topleft"
......@@ -109,7 +109,7 @@
auto_resize="true"
user_resize="true"
visible="true"
min_width="375"
min_width="460"
width="50">
<text
follows="left|top"
......@@ -143,98 +143,46 @@
height="16"
layout="topleft"
top_delta="-20"
left_delta="120">
left_delta="130">
Large Wave Speed
</text>
<panel
follows="left|top"
border="true"
bg_alpha_color="red"
background_visible="true"
width="100"
height="100"
left_delta="0"
top_delta="21">
<text>
placeholder
</text>
<slider
decimal_digits="1"
follows="left|top"
increment="0.01"
initial_value="0"
layout="topleft"
label="X:"
left_delta="10"
max_val="4"
min_val="-4"
name="water_wave1_x"
top_pad="5"
width="100"/>
<slider
decimal_digits="1"
follows="left|top"
increment="0.01"
initial_value="0"
layout="topleft"
label="Y:"
left_delta="0"
max_val="4"
min_val="-4"
name="water_wave1_y"
top_pad="5"
orientation="vertical"
height="70"/>
</panel>
<xy_vector
follows="top|left"
name="water_wave1_xy"
width="120"
height="145"
visible="true"
left_delta="0"
top_delta="21"
min_val_x="-4"
max_val_x="4"
increment_x="0.5f"
min_val_y="-4"
max_val_y="4"
increment_y="0.5f"
arrow_color="red"/>
<text
follows="left|top"
height="16"
layout="topleft"
top_delta="-20"
left_delta="120">
left_delta="160">
Small Wave Speed
</text>
<panel
follows="left|top"
border="true"
bg_alpha_color="red"
background_visible="true"
width="100"
height="100"
left_delta="0"
top_delta="21"
>
<text>
placeholder
</text>
<slider
decimal_digits="1"
follows="left|top"
increment="0.01"
initial_value="0"
layout="topleft"
label="X:"
left_delta="10"
max_val="4"
min_val="-4"
name="water_wave2_x"
top_pad="5"
width="100"/>
<slider
decimal_digits="1"
follows="left|top"
increment="0.01"
initial_value="0"
layout="topleft"
label="Y:"
left_delta="0"
max_val="4"
min_val="-4"
name="water_wave2_y"
top_pad="5"
orientation="vertical"
height="70"/>
</panel>
<xy_vector
follows="top|left"
name="water_wave2_xy"
width="120"
height="145"
visible="true"
left_delta="0"
top_delta="21"
min_val_x="-4"
max_val_x="4"
min_val_y="-4"
max_val_y="4"
arrow_color="green"/>
<text
follows="left|top|right"
......
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<xy_vector
name="xyvector"
width="120"
height="140"
decimal_digits="1"
label_width="16"
padding="4"
edit_bar_height="18"
user_resize="false">
<xy_vector.border
visible="true"/>
<xy_vector.x_entry
name="XEntry"
tab_stop="true"
label="X:"/>
<xy_vector.y_entry
name="YEntry"
tab_stop="true"
label="Y:"/>
<xy_vector.touch_area
name="TouchArea"
bevel_style="in"
border_visible="true"/>
</xy_vector>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment