void LLFloaterColorPicker::showUI () { setVisible ( TRUE ); setFocus ( TRUE ); openFloater(getKey()); // HACK: if system color picker is required - close the SL one we made and use default system dialog if ( gSavedSettings.getBOOL ( "UseDefaultColorPicker" ) ) { LLColorSwatchCtrl* swatch = getSwatch (); setVisible ( FALSE ); // code that will get switched in for default system color picker if ( swatch ) { LLColor4 curCol = swatch->get (); send_agent_pause(); getWindow()->dialogColorPicker( &curCol [ 0 ], &curCol [ 1 ], &curCol [ 2 ] ); send_agent_resume(); setOrigRgb ( curCol [ 0 ], curCol [ 1 ], curCol [ 2 ] ); setCurRgb( curCol [ 0 ], curCol [ 1 ], curCol [ 2 ] ); LLColorSwatchCtrl::onColorChanged ( swatch, LLColorSwatchCtrl::COLOR_CHANGE ); } closeFloater(); } }
void LLFloaterColorPicker::onTextEntryChanged ( LLUICtrl* ctrl ) { // value in RGB boxes changed std::string name = ctrl->getName(); if ( ( name == "rspin" ) || ( name == "gspin" ) || ( name == "bspin" ) ) { // get current RGB F32 rVal, gVal, bVal; getCurRgb ( rVal, gVal, bVal ); // update component value with new value from text if ( name == "rspin" ) { rVal = (F32)ctrl->getValue().asReal() / 255.0f; } else if ( name == "gspin" ) { gVal = (F32)ctrl->getValue().asReal() / 255.0f; } else if ( name == "bspin" ) { bVal = (F32)ctrl->getValue().asReal() / 255.0f; } // update current RGB (and implicitly HSL) setCurRgb ( rVal, gVal, bVal ); updateTextEntry (); } else // value in HSL boxes changed if ( ( name == "hspin" ) || ( name == "sspin" ) || ( name == "lspin" ) ) { // get current HSL F32 hVal, sVal, lVal; getCurHsl ( hVal, sVal, lVal ); // update component value with new value from text if ( name == "hspin" ) hVal = (F32)ctrl->getValue().asReal() / 360.0f; else if ( name == "sspin" ) sVal = (F32)ctrl->getValue().asReal() / 100.0f; else if ( name == "lspin" ) lVal = (F32)ctrl->getValue().asReal() / 100.0f; // update current HSL (and implicitly RGB) setCurHsl ( hVal, sVal, lVal ); updateTextEntry (); } if (mApplyImmediateCheck->get()) { LLColorSwatchCtrl::onColorChanged ( getSwatch (), LLColorSwatchCtrl::COLOR_CHANGE ); } }
void LLFloaterColorPicker::onColorSelect( const LLTextureEntry& te ) { setCurRgb(te.getColor().mV[VRED], te.getColor().mV[VGREEN], te.getColor().mV[VBLUE]); if (mApplyImmediateCheck->get()) { LLColorSwatchCtrl::onColorChanged ( getSwatch (), LLColorSwatchCtrl::COLOR_CHANGE ); } }
////////////////////////////////////////////////////////////////////////////// // set current RGB and rise change event if needed. void LLFloaterColorPicker::selectCurRgb ( F32 curRIn, F32 curGIn, F32 curBIn ) { setCurRgb(curRIn, curGIn, curBIn); if (mApplyImmediateCheck->get()) { LLColorSwatchCtrl::onColorChanged ( getSwatch (), LLColorSwatchCtrl::COLOR_CHANGE ); } }
////////////////////////////////////////////////////////////////////////////// // cancel current color selection, revert to original and close picker void LLFloaterColorPicker::cancelSelection () { // restore the previous color selection setCurRgb ( getOrigR (), getOrigG (), getOrigB () ); // update in world item with original color via current swatch LLColorSwatchCtrl::onColorChanged( getSwatch(), LLColorSwatchCtrl::COLOR_CANCEL ); // hide picker dialog this->setVisible ( FALSE ); }
//Called when a hex value is entered into the Hex field - Convert and set values. void LLFloaterColorPicker::onHexCommit(const LLSD& value) { char* pStop; int num = strtol(value.asString().c_str(), &pStop, 16); int r = (num & 0xFF0000) >> 16; int g = (num & 0xFF00) >> 8; int b = num & 0xFF; setCurRgb (r / 255.0f, g / 255.0f, b / 255.0f); updateTextEntry(); if (mApplyImmediateCheck->get()) { LLColorSwatchCtrl::onColorChanged(getSwatch(), LLColorSwatchCtrl::COLOR_CHANGE); } }
void LLFloaterColorPicker::initUI ( F32 rValIn, F32 gValIn, F32 bValIn ) { // under some circumstances, we get rogue values that can be calmed by clamping... rValIn = llclamp ( rValIn, 0.0f, 1.0f ); gValIn = llclamp ( gValIn, 0.0f, 1.0f ); bValIn = llclamp ( bValIn, 0.0f, 1.0f ); // store initial value in case cancel or revert is selected setOrigRgb ( rValIn, gValIn, bValIn ); // starting point for current value to setCurRgb ( rValIn, gValIn, bValIn ); // unpdate text entry fields updateTextEntry (); }
////////////////////////////////////////////////////////////////////////////// // cancel current color selection, revert to original and close picker void LLFloaterColorPicker:: cancelSelection () { // restore the previous color selection 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 LLColorSwatchCtrl::onColorChanged( getSwatch(), LLColorSwatchCtrl::COLOR_CANCEL ); // hide picker dialog this->setVisible ( FALSE ); }
BOOL LLFloaterColorPicker::handleMouseDown ( S32 x, S32 y, MASK mask ) { // make it the frontmost gFloaterView->bringToFront(this); // rect containing RGB area LLRect rgbAreaRect ( mRGBViewerImageLeft, mRGBViewerImageTop, mRGBViewerImageLeft + mRGBViewerImageWidth, mRGBViewerImageTop - mRGBViewerImageHeight ); if ( rgbAreaRect.pointInRect ( x, y ) ) { gFocusMgr.setMouseCapture(this); // mouse button down setMouseDownInHueRegion ( TRUE ); // update all values based on initial click updateRgbHslFromPoint ( x, y ); // required by base class return TRUE; } // rect containing RGB area LLRect lumAreaRect ( mLumRegionLeft, mLumRegionTop, mLumRegionLeft + mLumRegionWidth + mLumMarkerSize, mLumRegionTop - mLumRegionHeight ); if ( lumAreaRect.pointInRect ( x, y ) ) { gFocusMgr.setMouseCapture(this); // mouse button down setMouseDownInLumRegion ( TRUE ); // required by base class return TRUE; } // rect containing swatch area LLRect swatchRect ( mSwatchRegionLeft, mSwatchRegionTop, mSwatchRegionLeft + mSwatchRegionWidth, mSwatchRegionTop - mSwatchRegionHeight ); setMouseDownInSwatch( FALSE ); if ( swatchRect.pointInRect ( x, y ) ) { setMouseDownInSwatch( TRUE ); // required - dont drag windows here. return TRUE; } // rect containing palette area LLRect paletteRect ( mPaletteRegionLeft, mPaletteRegionTop, mPaletteRegionLeft + mPaletteRegionWidth, mPaletteRegionTop - mPaletteRegionHeight ); if ( paletteRect.pointInRect ( x, y ) ) { // release keyboard focus so we can change text values if (gFocusMgr.childHasKeyboardFocus(this)) { mSelectBtn->setFocus(TRUE); } // calculate which palette index we selected S32 c = ( ( x - mPaletteRegionLeft ) * numPaletteColumns ) / mPaletteRegionWidth; S32 r = ( ( y - ( mPaletteRegionTop - mPaletteRegionHeight ) ) * numPaletteRows ) / mPaletteRegionHeight; U32 index = ( numPaletteRows - r - 1 ) * numPaletteColumns + c; if ( index <= mPalette.size () ) { LLColor4 selected = *mPalette [ index ]; setCurRgb ( selected [ 0 ], selected [ 1 ], selected [ 2 ] ); if (mApplyImmediateCheck->get()) { LLColorSwatchCtrl::onColorChanged ( getSwatch (), LLColorSwatchCtrl::COLOR_CHANGE ); } updateTextEntry (); } return TRUE; } // dispatch to base class for the rest of things return LLFloater::handleMouseDown ( x, y, mask ); }
void LLFloaterColorPicker::onTextEntryChanged ( LLUICtrl* ctrl ) { // value in RGB boxes changed std::string name = ctrl->getName(); if ( ( name == "rspin" ) || ( name == "gspin" ) || ( name == "bspin" ) ) { // get current RGB F32 rVal, gVal, bVal; getCurRgb ( rVal, gVal, bVal ); // update component value with new value from text if ( name == "rspin" ) { rVal = (F32)ctrl->getValue().asReal() / 255.0f; } else if ( name == "gspin" ) { gVal = (F32)ctrl->getValue().asReal() / 255.0f; } else if ( name == "bspin" ) { bVal = (F32)ctrl->getValue().asReal() / 255.0f; } // update current RGB (and implicitly HSL) selectCurRgb ( rVal, gVal, bVal ); updateTextEntry (); } // <FS:Zi> Add float LSL color entry widgets else if ( ( name == "rspin_lsl" ) || ( name == "gspin_lsl" ) || ( name == "bspin_lsl" ) ) { // get current RGB F32 rVal, gVal, bVal; getCurRgb ( rVal, gVal, bVal ); // update component value with new value from text if ( name == "rspin_lsl" ) { rVal = (F32)ctrl->getValue().asReal(); } else if ( name == "gspin_lsl" ) { gVal = (F32)ctrl->getValue().asReal(); } else if ( name == "bspin_lsl" ) { bVal = (F32)ctrl->getValue().asReal(); } // update current RGB (and implicitly HSL) setCurRgb ( rVal, gVal, bVal ); updateTextEntry (); } else if ( name == "hex_value" ) { // get current RGB S32 r, g, b; F32 rVal, gVal, bVal; getCurRgb ( rVal, gVal, bVal ); std::string hex_string=ctrl->getValue().asString(); if(hex_string.length()!=6) return; LLStringUtil::toLower(hex_string); if(hex_string.find_first_not_of("0123456789abcdef")!=std::string::npos) return; sscanf(hex_string.c_str(),"%02x%02x%02x", &r,&g,&b); rVal=(F32) r/255.0; gVal=(F32) g/255.0; bVal=(F32) b/255.0; // update current RGB (and implicitly HSL) setCurRgb ( rVal, gVal, bVal ); updateTextEntry (); } // </FS:Zi> else // value in HSL boxes changed if ( ( name == "hspin" ) || ( name == "sspin" ) || ( name == "lspin" ) ) { // get current HSL F32 hVal, sVal, lVal; getCurHsl ( hVal, sVal, lVal ); // update component value with new value from text if ( name == "hspin" ) hVal = (F32)ctrl->getValue().asReal() / 360.0f; else if ( name == "sspin" ) sVal = (F32)ctrl->getValue().asReal() / 100.0f; else if ( name == "lspin" ) lVal = (F32)ctrl->getValue().asReal() / 100.0f; // update current HSL (and implicitly RGB) selectCurHsl ( hVal, sVal, lVal ); updateTextEntry (); } }