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::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::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 HSL and rise change event if needed. void LLFloaterColorPicker::selectCurHsl ( F32 curHIn, F32 curSIn, F32 curLIn ) { setCurHsl(curHIn, curSIn, curLIn); 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); } }
////////////////////////////////////////////////////////////////////////////// // 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 ); }
////////////////////////////////////////////////////////////////////////////// // reverts state once mouse button is released BOOL LLFloaterColorPicker::handleMouseUp ( S32 x, S32 y, MASK mask ) { getWindow()->setCursor ( UI_CURSOR_ARROW ); if (getMouseDownInHueRegion() || getMouseDownInLumRegion()) { if (mApplyImmediateCheck->get()) { LLColorSwatchCtrl::onColorChanged ( getSwatch (), LLColorSwatchCtrl::COLOR_CHANGE ); } } // rect containing palette area LLRect paletteRect ( mPaletteRegionLeft, mPaletteRegionTop, mPaletteRegionLeft + mPaletteRegionWidth, mPaletteRegionTop - mPaletteRegionHeight ); if ( paletteRect.pointInRect ( x, y ) ) { if ( mMouseDownInSwatch ) { S32 curEntry = 0; for ( S32 row = 0; row < numPaletteRows; ++row ) { for ( S32 column = 0; column < numPaletteColumns; ++column ) { S32 left = mPaletteRegionLeft + ( mPaletteRegionWidth * column ) / numPaletteColumns; S32 top = mPaletteRegionTop - ( mPaletteRegionHeight * row ) / numPaletteRows; S32 right = ( mPaletteRegionLeft + ( mPaletteRegionWidth * ( column + 1 ) ) / numPaletteColumns ); S32 bottom = ( mPaletteRegionTop - ( mPaletteRegionHeight * ( row + 1 ) ) / numPaletteRows ); // rect is flipped vertically when testing here LLRect dropRect ( left, top, right, bottom ); if ( dropRect.pointInRect ( x, y ) ) { if ( mPalette [ curEntry ] ) { delete mPalette [ curEntry ]; mPalette [ curEntry ] = new LLColor4 ( getCurR (), getCurG (), getCurB (), 1.0f ); // save off color std::ostringstream codec; codec << "ColorPaletteEntry" << std::setfill ( '0' ) << std::setw ( 2 ) << curEntry + 1; const std::string s ( codec.str () ); LLUIColorTable::instance().setColor(s, *mPalette [ curEntry ] ); } } ++curEntry; } } } } // mouse button not down anymore setMouseDownInHueRegion ( FALSE ); setMouseDownInLumRegion ( FALSE ); // mouse button not down in color swatch anymore mMouseDownInSwatch = false; if (hasMouseCapture()) { gFocusMgr.setMouseCapture(NULL); } // dispatch to base class for the rest of things return LLFloater::handleMouseUp ( x, y, mask ); }
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) setCurRgb ( 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) setCurHsl ( hVal, sVal, lVal ); updateTextEntry (); } if (mApplyImmediateCheck->get()) { LLColorSwatchCtrl::onColorChanged ( getSwatch (), LLColorSwatchCtrl::COLOR_CHANGE ); } }