From a443eb7bcb1fdbbefb89c6f896977d2af9dc028b Mon Sep 17 00:00:00 2001 From: Ansariel Date: Thu, 7 Aug 2014 22:56:13 +0200 Subject: [PATCH] More poking at and refactoring of LGG's beams stuff --- indra/newview/lggbeamcolormapfloater.cpp | 81 ++++++------------------ indra/newview/lggbeamcolormapfloater.h | 12 ++-- indra/newview/lggbeammapfloater.cpp | 33 +++++----- indra/newview/lggbeammapfloater.h | 2 + indra/newview/lggbeammaps.cpp | 35 +++++----- indra/newview/lggbeammaps.h | 8 ++- 6 files changed, 69 insertions(+), 102 deletions(-) diff --git a/indra/newview/lggbeamcolormapfloater.cpp b/indra/newview/lggbeamcolormapfloater.cpp index b0b8f480f1..47a0cd9ba8 100644 --- a/indra/newview/lggbeamcolormapfloater.cpp +++ b/indra/newview/lggbeamcolormapfloater.cpp @@ -25,48 +25,12 @@ F32 convertXToHue(S32 place) { - return ((place-6)/396.0f)*720.0f; + return ((place - 6) / 396.0f) * 720.0f; } S32 convertHueToX(F32 place) { - return llround((place/720.0f)*396.0f)+6; -} - -F32 hueToRgb1 ( F32 val1In, F32 val2In, F32 valHUeIn ) -{ - if ( valHUeIn < 0.0f ) valHUeIn += 1.0f; - if ( valHUeIn > 1.0f ) valHUeIn -= 1.0f; - if ( ( 6.0f * valHUeIn ) < 1.0f ) return ( val1In + ( val2In - val1In ) * 6.0f * valHUeIn ); - if ( ( 2.0f * valHUeIn ) < 1.0f ) return ( val2In ); - if ( ( 3.0f * valHUeIn ) < 2.0f ) return ( val1In + ( val2In - val1In ) * ( ( 2.0f / 3.0f ) - valHUeIn ) * 6.0f ); - return ( val1In ); -} - -void hslToRgb1 ( F32 hValIn, F32 sValIn, F32 lValIn, F32& rValOut, F32& gValOut, F32& bValOut ) -{ - if ( sValIn < 0.00001f ) - { - rValOut = lValIn; - gValOut = lValIn; - bValOut = lValIn; - } - else - { - F32 interVal1; - F32 interVal2; - - if ( lValIn < 0.5f ) - interVal2 = lValIn * ( 1.0f + sValIn ); - else - interVal2 = ( lValIn + sValIn ) - ( sValIn * lValIn ); - - interVal1 = 2.0f * lValIn - interVal2; - - rValOut = hueToRgb1 ( interVal1, interVal2, hValIn + ( 1.f / 3.f ) ); - gValOut = hueToRgb1 ( interVal1, interVal2, hValIn ); - bValOut = hueToRgb1 ( interVal1, interVal2, hValIn - ( 1.f / 3.f ) ); - } + return llround((place / 720.0f) * 396.0f) + 6; } @@ -89,9 +53,8 @@ void lggBeamColorMapFloater::draw() static const std::string end_hue_label = getString("end_hue"); //set the color of the preview thing - LLColorSwatchCtrl* colorctrl = getChild("BeamColor_Preview"); LLColor4 bColor = LLColor4(lggBeamMaps::beamColorFromData(myData)); - colorctrl->set(bColor, TRUE); + mBeamColorPreview->set(bColor, TRUE); //Try draw rectangle attach beam LLRect swatch_rect; @@ -140,8 +103,8 @@ void lggBeamColorMapFloater::draw() gGL.end(); } - F32 opacity = gSavedSettings.getF32("PickerContextOpacity"); - mContextConeOpacity = lerp(mContextConeOpacity, opacity, LLCriticalDamp::getInterpolant(CONTEXT_FADE_TIME)); + static LLCachedControl opacity(gSavedSettings, "PickerContextOpacity"); + mContextConeOpacity = lerp(mContextConeOpacity, opacity(), LLCriticalDamp::getInterpolant(CONTEXT_FADE_TIME)); //Draw Base Stuff LLFloater::draw(); @@ -153,16 +116,14 @@ void lggBeamColorMapFloater::draw() for (S32 i = 0; i <= 720; ++i) { S32 hi = i % 360; - hslToRgb1((hi / 360.0f), 1.0f, 0.5f, r, g, b); + hslToRgb((hi / 360.0f), 1.0f, 0.5f, r, g, b); output.set(r, g, b); gl_line_2d( convertHueToX(i) + CORRECTION_X, 201 + CORRECTION_Y, convertHueToX(i) + CORRECTION_X, 277 + CORRECTION_Y, output); - //convertHueToX(i),161, - //convertHueToX(i),237,output); - } + S32 X1 = convertHueToX(myData.mStartHue) + CORRECTION_X; S32 X2 = convertHueToX(myData.mEndHue) + CORRECTION_X; LLFontGL* font = LLFontGL::getFontSansSerifSmall(); @@ -186,12 +147,11 @@ void lggBeamColorMapFloater::draw() font->renderUTF8( start_hue_label, 0, - X1 + CORRECTION_X, + X1 + CORRECTION_X, 212 + CORRECTION_Y, LLColor4::white, LLFontGL::HCENTER, LLFontGL::BASELINE, LLFontGL::DROP_SHADOW); - gGL.color4fv(LLColor4::white.mV); gl_circle_2d(X2 + CORRECTION_X, 238 + CORRECTION_Y, 9.0f, 30, false); @@ -211,7 +171,7 @@ void lggBeamColorMapFloater::draw() font->renderUTF8( end_hue_label, 0, - X2 + CORRECTION_X, + X2 + CORRECTION_X, 212 + CORRECTION_Y, LLColor4::white, LLFontGL::HCENTER, LLFontGL::BASELINE, LLFontGL::DROP_SHADOW); @@ -223,14 +183,14 @@ lggBeamColorMapFloater::~lggBeamColorMapFloater() { } -lggBeamColorMapFloater::lggBeamColorMapFloater(const LLSD& seed): LLFloater(seed), +lggBeamColorMapFloater::lggBeamColorMapFloater(const LLSD& seed) : LLFloater(seed), mContextConeOpacity(0.0f) { } -BOOL lggBeamColorMapFloater::postBuild(void) +BOOL lggBeamColorMapFloater::postBuild() { - setCanMinimize(false); + setCanMinimize(FALSE); getChild("BeamColor_Save")->setCommitCallback(boost::bind(&lggBeamColorMapFloater::onClickSave, this)); getChild("BeamColor_Load")->setCommitCallback(boost::bind(&lggBeamColorMapFloater::onClickLoad, this)); @@ -238,19 +198,16 @@ BOOL lggBeamColorMapFloater::postBuild(void) mColorSlider = getChild("BeamColor_Speed"); mColorSlider->setCommitCallback(boost::bind(&lggBeamColorMapFloater::onClickSlider, this)); - - // Is this still needed??? - //mColorSlider->setCallbackUserData(this); + + mBeamColorPreview = getChild("BeamColor_Preview"); fixOrder(); - return true; + return TRUE; } + BOOL lggBeamColorMapFloater::handleMouseDown(S32 x,S32 y,MASK mask) { - //6, 277 - //402 201 - if (y > (201 + CORRECTION_Y) && y < (277 + CORRECTION_Y)) { if (x < (6 + CORRECTION_X)) @@ -269,7 +226,7 @@ BOOL lggBeamColorMapFloater::handleMouseDown(S32 x,S32 y,MASK mask) fixOrder(); } - LL_INFOS() << "we got clicked at (" << x << ", " << y << " yay! " << LL_ENDL; + LL_DEBUGS() << "we got clicked at (" << x << ", " << y << " yay! " << LL_ENDL; return LLFloater::handleMouseDown(x, y, mask); } @@ -293,7 +250,7 @@ BOOL lggBeamColorMapFloater::handleRightMouseDown(S32 x, S32 y, MASK mask) fixOrder(); } - LL_INFOS() << "we got right clicked at (" << x << ", " << y << " yay! " << LL_ENDL; + LL_DEBUGS() << "we got right clicked at (" << x << ", " << y << " yay! " << LL_ENDL; return LLFloater::handleRightMouseDown(x, y, mask); } @@ -332,7 +289,7 @@ void lggBeamColorMapFloater::onClickSave() std::string path_name2(gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "beamsColors", "")); std::string filename=path_name2 + "myNewBeamColor.xml"; - if(!picker.getSaveFile( LLFilePicker::FFSAVE_BEAM, filename ) ) + if (!picker.getSaveFile(LLFilePicker::FFSAVE_BEAM, filename)) { return; } diff --git a/indra/newview/lggbeamcolormapfloater.h b/indra/newview/lggbeamcolormapfloater.h index d51056d56a..8ab5b2c07d 100644 --- a/indra/newview/lggbeamcolormapfloater.h +++ b/indra/newview/lggbeamcolormapfloater.h @@ -19,6 +19,7 @@ #include "lggbeamscolors.h" class FSPanelPrefs; +class LLColorSwatchCtrl; class LLSliderCtrl; //////////////////////////////////////////////////////////////////////////// @@ -29,7 +30,7 @@ public: lggBeamColorMapFloater(const LLSD& seed); virtual ~lggBeamColorMapFloater(); - BOOL postBuild(void); + BOOL postBuild(); BOOL handleMouseDown(S32 x,S32 y,MASK mask); BOOL handleRightMouseDown(S32 x,S32 y,MASK mask); @@ -47,10 +48,11 @@ protected: void fixOrder(); LLSD getMyDataSerialized(); - F32 mContextConeOpacity; - FSPanelPrefs* mFSPanel; - lggBeamsColors myData; - LLSliderCtrl* mColorSlider; + F32 mContextConeOpacity; + FSPanelPrefs* mFSPanel; + lggBeamsColors myData; + LLSliderCtrl* mColorSlider; + LLColorSwatchCtrl* mBeamColorPreview; }; #endif // LGG_BEAMCOLORMAPFLOATER_H diff --git a/indra/newview/lggbeammapfloater.cpp b/indra/newview/lggbeammapfloater.cpp index 3422a71e43..0cb58712ea 100644 --- a/indra/newview/lggbeammapfloater.cpp +++ b/indra/newview/lggbeammapfloater.cpp @@ -76,12 +76,11 @@ void lggBeamMapFloater::draw() gGL.end(); } - F32 opacity = gSavedSettings.getF32("PickerContextOpacity"); - mContextConeOpacity = lerp(mContextConeOpacity, opacity, LLCriticalDamp::getInterpolant(CONTEXT_FADE_TIME)); + static LLCachedControl opacity(gSavedSettings, "PickerContextOpacity"); + mContextConeOpacity = lerp(mContextConeOpacity, opacity(), LLCriticalDamp::getInterpolant(CONTEXT_FADE_TIME)); - //getChild("beamshape_draw")->setBackgroundColor(getChild("back_color_swatch")->get()); LLFloater::draw(); - LLRect rec = getChild("beamshape_draw")->getRect(); + LLRect rec = mBeamshapePanel->getRect(); gGL.pushMatrix(); gGL.color4fv(LLColor4::white.mV); @@ -115,14 +114,14 @@ lggBeamMapFloater::~lggBeamMapFloater() { } -lggBeamMapFloater::lggBeamMapFloater(const LLSD& seed): LLFloater(seed), +lggBeamMapFloater::lggBeamMapFloater(const LLSD& seed) : LLFloater(seed), mContextConeOpacity(0.0f) { } -BOOL lggBeamMapFloater::postBuild(void) +BOOL lggBeamMapFloater::postBuild() { - setCanMinimize(false); + setCanMinimize(FALSE); getChild("beamshape_save")->setCommitCallback(boost::bind(&lggBeamMapFloater::onClickSave, this)); getChild("beamshape_clear")->setCommitCallback(boost::bind(&lggBeamMapFloater::onClickClear, this)); @@ -131,23 +130,25 @@ BOOL lggBeamMapFloater::postBuild(void) getChild("back_color_swatch")->setCommitCallback(boost::bind(&lggBeamMapFloater::onBackgroundChange, this)); getChild("beam_color_swatch")->setColor(LLColor4::red); - return true; + mBeamshapePanel = getChild("beamshape_draw"); + + return TRUE; } -BOOL lggBeamMapFloater::handleMouseDown(S32 x,S32 y,MASK mask) +BOOL lggBeamMapFloater::handleMouseDown(S32 x, S32 y, MASK mask) { if (y > 39 && x > 16 && x < 394 && y < 317) { lggPoint a; a.x = x; a.y = y; - a.c= getChild("beam_color_swatch")->get(); + a.c = getChild("beam_color_swatch")->get(); mDots.push_back(a); - LL_INFOS() << "we got clicked at (" << x << ", " << y << " and color was " << a.c << LL_ENDL; + LL_DEBUGS() << "we got clicked at (" << x << ", " << y << " and color was " << a.c << LL_ENDL; } - return LLFloater::handleMouseDown(x,y,mask); + return LLFloater::handleMouseDown(x, y, mask); } void lggBeamMapFloater::setData(void* data) @@ -178,13 +179,13 @@ BOOL lggBeamMapFloater::handleRightMouseDown(S32 x, S32 y, MASK mask) void lggBeamMapFloater::onBackgroundChange() { - getChild("beamshape_draw")->setBackgroundColor(getChild("back_color_swatch")->get()); + mBeamshapePanel->setBackgroundColor(getChild("back_color_swatch")->get()); } LLSD lggBeamMapFloater::getMyDataSerialized() { LLSD out; - LLRect r = getChild("beamshape_draw")->getRect(); + LLRect r = mBeamshapePanel->getRect(); for (S32 i = 0; i < mDots.size(); ++i) { LLSD point; @@ -202,7 +203,7 @@ LLSD lggBeamMapFloater::getMyDataSerialized() void lggBeamMapFloater::onClickSave() { - LLRect r = getChild("beamshape_draw")->getRect(); + LLRect r = mBeamshapePanel->getRect(); LLFilePicker& picker = LLFilePicker::instance(); std::string path_name2(gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS , "beams", "")); @@ -252,7 +253,7 @@ void lggBeamMapFloater::onClickLoad() for (LLSD::array_iterator it = myPicture.beginArray(); it != myPicture.endArray(); ++it) { - LLRect rec = getChild("beamshape_draw")->getRect(); + LLRect rec = mBeamshapePanel->getRect(); LLSD beamData = *it; lggPoint p; diff --git a/indra/newview/lggbeammapfloater.h b/indra/newview/lggbeammapfloater.h index c70cb8d664..e16e52b53c 100644 --- a/indra/newview/lggbeammapfloater.h +++ b/indra/newview/lggbeammapfloater.h @@ -17,6 +17,7 @@ #include "llfloater.h" class FSPanelPrefs; +class LLPanel; class lggPoint { @@ -56,6 +57,7 @@ private: std::vector mDots; F32 mContextConeOpacity; FSPanelPrefs* mFSPanel; + LLPanel* mBeamshapePanel; }; #endif // LGG_BEAMMAPFLOATER_H diff --git a/indra/newview/lggbeammaps.cpp b/indra/newview/lggbeammaps.cpp index 9e42a99517..9fc91062a6 100644 --- a/indra/newview/lggbeammaps.cpp +++ b/indra/newview/lggbeammaps.cpp @@ -26,15 +26,6 @@ #include "message.h" lggBeamMaps gLggBeamMaps; -F32 hueToRgb ( F32 val1In, F32 val2In, F32 valHUeIn ) -{ - while ( valHUeIn < 0.0f ) valHUeIn += 1.0f; - while ( valHUeIn > 1.0f ) valHUeIn -= 1.0f; - if ( ( 6.0f * valHUeIn ) < 1.0f ) return ( val1In + ( val2In - val1In ) * 6.0f * valHUeIn ); - if ( ( 2.0f * valHUeIn ) < 1.0f ) return ( val2In ); - if ( ( 3.0f * valHUeIn ) < 2.0f ) return ( val1In + ( val2In - val1In ) * ( ( 2.0f / 3.0f ) - valHUeIn ) * 6.0f ); - return ( val1In ); -} std::string unescape_name(const std::string& name) { @@ -47,9 +38,19 @@ std::string unescape_name(const std::string& name) return unescaped_name; } -void hslToRgb ( F32 hValIn, F32 sValIn, F32 lValIn, F32& rValOut, F32& gValOut, F32& bValOut ) +F32 hueToRgb(F32 val1In, F32 val2In, F32 valHUeIn) { - if ( sValIn < 0.00001f ) + while (valHUeIn < 0.0f) valHUeIn += 1.0f; + while (valHUeIn > 1.0f) valHUeIn -= 1.0f; + if ((6.0f * valHUeIn) < 1.0f) return (val1In + (val2In - val1In) * 6.0f * valHUeIn); + if ((2.0f * valHUeIn) < 1.0f) return (val2In); + if ((3.0f * valHUeIn) < 2.0f) return (val1In + (val2In - val1In) * ((2.0f / 3.0f) - valHUeIn) * 6.0f); + return val1In; +} + +void hslToRgb(F32 hValIn, F32 sValIn, F32 lValIn, F32& rValOut, F32& gValOut, F32& bValOut) +{ + if (sValIn < 0.00001f) { rValOut = lValIn; gValOut = lValIn; @@ -60,20 +61,20 @@ void hslToRgb ( F32 hValIn, F32 sValIn, F32 lValIn, F32& rValOut, F32& gValOut, F32 interVal1; F32 interVal2; - if ( lValIn < 0.5f ) + if (lValIn < 0.5f) { - interVal2 = lValIn * ( 1.0f + sValIn ); + interVal2 = lValIn * (1.0f + sValIn); } else { - interVal2 = ( lValIn + sValIn ) - ( sValIn * lValIn ); + interVal2 = (lValIn + sValIn) - (sValIn * lValIn); } interVal1 = 2.0f * lValIn - interVal2; - rValOut = hueToRgb ( interVal1, interVal2, hValIn + ( 1.f / 3.f ) ); - gValOut = hueToRgb ( interVal1, interVal2, hValIn ); - bValOut = hueToRgb ( interVal1, interVal2, hValIn - ( 1.f / 3.f ) ); + rValOut = hueToRgb(interVal1, interVal2, hValIn + (1.f / 3.f)); + gValOut = hueToRgb(interVal1, interVal2, hValIn); + bValOut = hueToRgb(interVal1, interVal2, hValIn - (1.f / 3.f)); } } diff --git a/indra/newview/lggbeammaps.h b/indra/newview/lggbeammaps.h index d12aef1e05..00bc92e2f5 100644 --- a/indra/newview/lggbeammaps.h +++ b/indra/newview/lggbeammaps.h @@ -14,9 +14,13 @@ #ifndef LGG_BEAMMAPS_H #define LGG_BEAMMAPS_H +#include "llfontregistry.h" #include "llhudeffecttrail.h" #include "lggbeamscolors.h" +F32 hueToRgb(F32 val1In, F32 val2In, F32 valHUeIn); +void hslToRgb(F32 hValIn, F32 sValIn, F32 lValIn, F32& rValOut, F32& gValOut, F32& bValOut); + class lggBeamData { public: @@ -43,8 +47,8 @@ public: void updateBeamChat(const LLVector3d& currentPos); static LLColor4U beamColorFromData(const lggBeamsColors& data); LLColor4U getCurrentColor(const LLColor4U& agentColor); - std::vector getFileNames(); - std::vector getColorsFileNames(); + string_vec_t getFileNames(); + string_vec_t getColorsFileNames(); private: LLSD getPic(const std::string& filename);