Update/Modernize LLFloaterColorPicker
Not very important, just something I did while working on the related spinner bug.. This actually fixed the crash when using the hex editor field.
This commit is contained in:
@@ -76,8 +76,6 @@ const F32 CONTEXT_FADE_TIME = 0.08f;
|
|||||||
//
|
//
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
|
||||||
// default ctor
|
|
||||||
LLFloaterColorPicker::LLFloaterColorPicker (LLColorSwatchCtrl* swatch, BOOL show_apply_immediate )
|
LLFloaterColorPicker::LLFloaterColorPicker (LLColorSwatchCtrl* swatch, BOOL show_apply_immediate )
|
||||||
: LLFloater (std::string("Color Picker Floater")),
|
: LLFloater (std::string("Color Picker Floater")),
|
||||||
mComponents ( 3 ),
|
mComponents ( 3 ),
|
||||||
@@ -113,6 +111,10 @@ LLFloaterColorPicker::LLFloaterColorPicker (LLColorSwatchCtrl* swatch, BOOL show
|
|||||||
mCanApplyImmediately ( show_apply_immediate ),
|
mCanApplyImmediately ( show_apply_immediate ),
|
||||||
mContextConeOpacity ( 0.f )
|
mContextConeOpacity ( 0.f )
|
||||||
{
|
{
|
||||||
|
// build the majority of the gui using the factory builder
|
||||||
|
LLUICtrlFactory::getInstance()->buildFloater ( this, "floater_color_picker.xml" );
|
||||||
|
setVisible ( FALSE );
|
||||||
|
|
||||||
// create user interface for this picker
|
// create user interface for this picker
|
||||||
createUI ();
|
createUI ();
|
||||||
|
|
||||||
@@ -133,10 +135,6 @@ LLFloaterColorPicker::~LLFloaterColorPicker()
|
|||||||
//
|
//
|
||||||
void LLFloaterColorPicker::createUI ()
|
void LLFloaterColorPicker::createUI ()
|
||||||
{
|
{
|
||||||
// build the majority of the gui using the factory builder
|
|
||||||
LLUICtrlFactory::getInstance()->buildFloater ( this, "floater_color_picker.xml" );
|
|
||||||
setVisible ( FALSE );
|
|
||||||
|
|
||||||
// create RGB type area (not really RGB but it's got R,G & B in it.,..
|
// create RGB type area (not really RGB but it's got R,G & B in it.,..
|
||||||
|
|
||||||
LLPointer<LLImageRaw> raw = new LLImageRaw ( mRGBViewerImageWidth, mRGBViewerImageHeight, mComponents );
|
LLPointer<LLImageRaw> raw = new LLImageRaw ( mRGBViewerImageWidth, mRGBViewerImageHeight, mComponents );
|
||||||
@@ -184,7 +182,6 @@ void LLFloaterColorPicker::showUI ()
|
|||||||
setVisible ( TRUE );
|
setVisible ( TRUE );
|
||||||
setFocus ( TRUE );
|
setFocus ( TRUE );
|
||||||
|
|
||||||
|
|
||||||
// HACK: if system color picker is required - close the SL one we made and use default system dialog
|
// HACK: if system color picker is required - close the SL one we made and use default system dialog
|
||||||
if ( gSavedSettings.getBOOL ( "UseDefaultColorPicker" ) )
|
if ( gSavedSettings.getBOOL ( "UseDefaultColorPicker" ) )
|
||||||
{
|
{
|
||||||
@@ -237,7 +234,7 @@ BOOL LLFloaterColorPicker::postBuild()
|
|||||||
childSetCommitCallback("hspin", onTextCommit, (void*)this );
|
childSetCommitCallback("hspin", onTextCommit, (void*)this );
|
||||||
childSetCommitCallback("sspin", onTextCommit, (void*)this );
|
childSetCommitCallback("sspin", onTextCommit, (void*)this );
|
||||||
childSetCommitCallback("lspin", onTextCommit, (void*)this );
|
childSetCommitCallback("lspin", onTextCommit, (void*)this );
|
||||||
childSetCommitCallback("hexval", onHexCommit, (void*)this );
|
getChild<LLUICtrl>("hexval")->setCommitCallback(boost::bind(&LLFloaterColorPicker::onHexCommit, this, _2) );
|
||||||
|
|
||||||
LLToolPipette::getInstance()->setToolSelectCallback(boost::bind(&LLFloaterColorPicker::onColorSelect, this, _1));
|
LLToolPipette::getInstance()->setToolSelectCallback(boost::bind(&LLFloaterColorPicker::onColorSelect, this, _1));
|
||||||
|
|
||||||
@@ -248,9 +245,6 @@ BOOL LLFloaterColorPicker::postBuild()
|
|||||||
//
|
//
|
||||||
void LLFloaterColorPicker::initUI ( F32 rValIn, F32 gValIn, F32 bValIn )
|
void LLFloaterColorPicker::initUI ( F32 rValIn, F32 gValIn, F32 bValIn )
|
||||||
{
|
{
|
||||||
// start catching lose-focus events from entry widgets
|
|
||||||
enableTextCallbacks ( TRUE );
|
|
||||||
|
|
||||||
// under some circumstances, we get rogue values that can be calmed by clamping...
|
// under some circumstances, we get rogue values that can be calmed by clamping...
|
||||||
rValIn = llclamp ( rValIn, 0.0f, 1.0f );
|
rValIn = llclamp ( rValIn, 0.0f, 1.0f );
|
||||||
gValIn = llclamp ( gValIn, 0.0f, 1.0f );
|
gValIn = llclamp ( gValIn, 0.0f, 1.0f );
|
||||||
@@ -360,12 +354,8 @@ void LLFloaterColorPicker::setCurRgb ( F32 curRIn, F32 curGIn, F32 curBIn )
|
|||||||
// update corresponding HSL values and
|
// update corresponding HSL values and
|
||||||
LLColor3(curRIn, curGIn, curBIn).calcHSL(&curH, &curS, &curL);
|
LLColor3(curRIn, curGIn, curBIn).calcHSL(&curH, &curS, &curL);
|
||||||
|
|
||||||
// color changed so update text fields (fixes SL-16968)
|
// color changed so update text fields
|
||||||
// HACK: turn off the call back wilst we update the text or we recurse ourselves into oblivion
|
|
||||||
// CP: this was required when I first wrote the code but this may not be necessary anymore - leaving it there just in case
|
|
||||||
enableTextCallbacks( FALSE );
|
|
||||||
updateTextEntry();
|
updateTextEntry();
|
||||||
enableTextCallbacks( TRUE );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
@@ -497,7 +487,7 @@ void LLFloaterColorPicker::draw()
|
|||||||
mSwatch->localRectToOtherView(mSwatch->getLocalRect(), &swatch_rect, this);
|
mSwatch->localRectToOtherView(mSwatch->getLocalRect(), &swatch_rect, this);
|
||||||
// draw context cone connecting color picker with color swatch in parent floater
|
// draw context cone connecting color picker with color swatch in parent floater
|
||||||
LLRect local_rect = getLocalRect();
|
LLRect local_rect = getLocalRect();
|
||||||
if (gFocusMgr.childHasKeyboardFocus(this) && mSwatch->isInVisibleChain() && mContextConeOpacity > 0.001f)
|
if (hasFocus() && mSwatch->isInVisibleChain() && mContextConeOpacity > 0.001f)
|
||||||
{
|
{
|
||||||
gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
|
gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
|
||||||
LLGLEnable(GL_CULL_FACE);
|
LLGLEnable(GL_CULL_FACE);
|
||||||
@@ -716,77 +706,36 @@ std::string RGBToHex(int rNum, int gNum, int bNum)
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Called when a hex value is entered into the Hex field - Convert and set values.
|
//Called when a hex value is entered into the Hex field - Convert and set values.
|
||||||
void LLFloaterColorPicker::onHexCommit ( LLUICtrl* ctrl, void* data )
|
void LLFloaterColorPicker::onHexCommit(const LLSD& value)
|
||||||
{
|
{
|
||||||
if ( data )
|
char* pStop;
|
||||||
{
|
int num = strtol(value.asString().c_str(), &pStop, 16);
|
||||||
LLFloaterColorPicker* self = ( LLFloaterColorPicker* )data;
|
int r = (num & 0xFF0000) >> 16;
|
||||||
if ( self )
|
int g = (num & 0xFF00) >> 8;
|
||||||
{
|
int b = num & 0xFF;
|
||||||
char* pStop;
|
setCurRgb (r / 255.0f, g / 255.0f, b / 255.0f);
|
||||||
int num = strtol(ctrl->getValue().asString().c_str(), &pStop, 16);
|
|
||||||
int r = (num & 0xFF0000) >> 16;
|
|
||||||
int g = (num & 0xFF00) >> 8;
|
|
||||||
int b = num & 0xFF;
|
|
||||||
self->setCurRgb (r / 255.0f, g / 255.0f, b / 255.0f);
|
|
||||||
|
|
||||||
// HACK: turn off the call back wilst we update the text or we recurse ourselves into oblivion
|
updateTextEntry();
|
||||||
self->enableTextCallbacks ( FALSE );
|
if (mApplyImmediateCheck->get())
|
||||||
self->updateTextEntry ();
|
{
|
||||||
self->enableTextCallbacks ( TRUE );
|
LLColorSwatchCtrl::onColorChanged(getSwatch(), LLColorSwatchCtrl::COLOR_CHANGE);
|
||||||
if (self->mApplyImmediateCheck->get())
|
|
||||||
{
|
|
||||||
LLColorSwatchCtrl::onColorChanged ( self->getSwatch (), LLColorSwatchCtrl::COLOR_CHANGE );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
// update text entry values for RGB/HSL (can't be done in ::draw () since this overwrites input
|
// update text entry values for RGB/HSL (can't be done in ::draw () since this overwrites input
|
||||||
void
|
void LLFloaterColorPicker::updateTextEntry ()
|
||||||
LLFloaterColorPicker::
|
|
||||||
updateTextEntry ()
|
|
||||||
{
|
{
|
||||||
// set values in spinners
|
// set values in spinners
|
||||||
childSetValue("rspin", ( getCurR () * 255.0f ) );
|
getChild<LLUICtrl>("rspin")->setValue(( getCurR () * 255.0f ) );
|
||||||
childSetValue("gspin", ( getCurG () * 255.0f ) );
|
getChild<LLUICtrl>("gspin")->setValue(( getCurG () * 255.0f ) );
|
||||||
childSetValue("bspin", ( getCurB () * 255.0f ) );
|
getChild<LLUICtrl>("bspin")->setValue(( getCurB () * 255.0f ) );
|
||||||
childSetValue("hspin", ( getCurH () * 360.0f ) );
|
getChild<LLUICtrl>("hspin")->setValue(( getCurH () * 360.0f ) );
|
||||||
childSetValue("sspin", ( getCurS () * 100.0f ) );
|
getChild<LLUICtrl>("sspin")->setValue(( getCurS () * 100.0f ) );
|
||||||
childSetValue("lspin", ( getCurL () * 100.0f ) );
|
getChild<LLUICtrl>("lspin")->setValue(( getCurL () * 100.0f ) );
|
||||||
childSetValue("hexval", RGBToHex(getCurR() * 255, getCurG() * 255, getCurB() * 255));
|
getChild<LLUICtrl>("hexval")->setValue(RGBToHex(getCurR() * 255, getCurG() * 255, getCurB() * 255));
|
||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
|
||||||
// turns on or off text entry commit call backs
|
|
||||||
void
|
|
||||||
LLFloaterColorPicker::
|
|
||||||
enableTextCallbacks ( BOOL stateIn )
|
|
||||||
{
|
|
||||||
if ( stateIn )
|
|
||||||
{
|
|
||||||
childSetCommitCallback("rspin", onTextCommit, (void*)this );
|
|
||||||
childSetCommitCallback("gspin", onTextCommit, (void*)this );
|
|
||||||
childSetCommitCallback("bspin", onTextCommit, (void*)this );
|
|
||||||
childSetCommitCallback("hspin", onTextCommit, (void*)this );
|
|
||||||
childSetCommitCallback("sspin", onTextCommit, (void*)this );
|
|
||||||
childSetCommitCallback("lspin", onTextCommit, (void*)this );
|
|
||||||
childSetCommitCallback("hexval", onHexCommit, (void*)this );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
childSetCommitCallback("rspin", 0, (void*)this );
|
|
||||||
childSetCommitCallback("gspin", 0, (void*)this );
|
|
||||||
childSetCommitCallback("bspin", 0, (void*)this );
|
|
||||||
childSetCommitCallback("hspin", 0, (void*)this );
|
|
||||||
childSetCommitCallback("sspin", 0, (void*)this );
|
|
||||||
childSetCommitCallback("lspin", 0, (void*)this );
|
|
||||||
childSetCommitCallback("hexval", 0, (void*)this );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
void LLFloaterColorPicker::onTextEntryChanged ( LLUICtrl* ctrl )
|
void LLFloaterColorPicker::onTextEntryChanged ( LLUICtrl* ctrl )
|
||||||
@@ -818,10 +767,7 @@ void LLFloaterColorPicker::onTextEntryChanged ( LLUICtrl* ctrl )
|
|||||||
// update current RGB (and implicitly HSL)
|
// update current RGB (and implicitly HSL)
|
||||||
setCurRgb ( rVal, gVal, bVal );
|
setCurRgb ( rVal, gVal, bVal );
|
||||||
|
|
||||||
// HACK: turn off the call back wilst we update the text or we recurse ourselves into oblivion
|
|
||||||
enableTextCallbacks ( FALSE );
|
|
||||||
updateTextEntry ();
|
updateTextEntry ();
|
||||||
enableTextCallbacks ( TRUE );
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
// value in HSL boxes changed
|
// value in HSL boxes changed
|
||||||
@@ -844,10 +790,7 @@ void LLFloaterColorPicker::onTextEntryChanged ( LLUICtrl* ctrl )
|
|||||||
// update current HSL (and implicitly RGB)
|
// update current HSL (and implicitly RGB)
|
||||||
setCurHsl ( hVal, sVal, lVal );
|
setCurHsl ( hVal, sVal, lVal );
|
||||||
|
|
||||||
// HACK: turn off the call back wilst we update the text or we recurse ourselves into oblivion
|
|
||||||
enableTextCallbacks ( FALSE );
|
|
||||||
updateTextEntry ();
|
updateTextEntry ();
|
||||||
enableTextCallbacks ( TRUE );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mApplyImmediateCheck->get())
|
if (mApplyImmediateCheck->get())
|
||||||
@@ -980,10 +923,7 @@ BOOL LLFloaterColorPicker::handleMouseDown ( S32 x, S32 y, MASK mask )
|
|||||||
LLColorSwatchCtrl::onColorChanged ( getSwatch (), LLColorSwatchCtrl::COLOR_CHANGE );
|
LLColorSwatchCtrl::onColorChanged ( getSwatch (), LLColorSwatchCtrl::COLOR_CHANGE );
|
||||||
}
|
}
|
||||||
|
|
||||||
// HACK: turn off the call back wilst we update the text or we recurse ourselves into oblivion
|
|
||||||
enableTextCallbacks ( FALSE );
|
|
||||||
updateTextEntry ();
|
updateTextEntry ();
|
||||||
enableTextCallbacks ( TRUE );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@@ -1152,9 +1092,6 @@ void LLFloaterColorPicker::cancelSelection ()
|
|||||||
// restore the previous color selection
|
// restore the previous color selection
|
||||||
setCurRgb ( getOrigR (), getOrigG (), getOrigB () );
|
setCurRgb ( getOrigR (), getOrigG (), getOrigB () );
|
||||||
|
|
||||||
// we're going away and when we do and the entry widgets lose focus, they do bad things so turn them off
|
|
||||||
enableTextCallbacks ( FALSE );
|
|
||||||
|
|
||||||
// update in world item with original color via current swatch
|
// update in world item with original color via current swatch
|
||||||
LLColorSwatchCtrl::onColorChanged( getSwatch(), LLColorSwatchCtrl::COLOR_CANCEL );
|
LLColorSwatchCtrl::onColorChanged( getSwatch(), LLColorSwatchCtrl::COLOR_CANCEL );
|
||||||
|
|
||||||
|
|||||||
@@ -126,12 +126,9 @@ class LLFloaterColorPicker
|
|||||||
void onClickPipette ( );
|
void onClickPipette ( );
|
||||||
static void onTextCommit ( LLUICtrl* ctrl, void* data );
|
static void onTextCommit ( LLUICtrl* ctrl, void* data );
|
||||||
static void onImmediateCheck ( LLUICtrl* ctrl, void* data );
|
static void onImmediateCheck ( LLUICtrl* ctrl, void* data );
|
||||||
static void onHexCommit ( LLUICtrl* ctrl, void* data );
|
void onHexCommit(const LLSD& value);
|
||||||
void onColorSelect( const LLTextureEntry& te );
|
void onColorSelect( const LLTextureEntry& te );
|
||||||
private:
|
private:
|
||||||
// turns on or off text entry commit call backs
|
|
||||||
void enableTextCallbacks ( BOOL stateIn );
|
|
||||||
|
|
||||||
// draws color selection palette
|
// draws color selection palette
|
||||||
void drawPalette ();
|
void drawPalette ();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user