llfloatercolorpicker.h
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:6k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llfloatercolorpicker.h
  3.  * @brief Generic system color picker
  4.  *
  5.  * $LicenseInfo:firstyear=2004&license=viewergpl$
  6.  * 
  7.  * Copyright (c) 2004-2010, Linden Research, Inc.
  8.  * 
  9.  * Second Life Viewer Source Code
  10.  * The source code in this file ("Source Code") is provided by Linden Lab
  11.  * to you under the terms of the GNU General Public License, version 2.0
  12.  * ("GPL"), unless you have obtained a separate licensing agreement
  13.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  14.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  15.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  16.  * 
  17.  * There are special exceptions to the terms and conditions of the GPL as
  18.  * it is applied to this Source Code. View the full text of the exception
  19.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  20.  * online at
  21.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  22.  * 
  23.  * By copying, modifying or distributing this software, you acknowledge
  24.  * that you have read and understood your obligations described above,
  25.  * and agree to abide by those obligations.
  26.  * 
  27.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  28.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  29.  * COMPLETENESS OR PERFORMANCE.
  30.  * $/LicenseInfo$
  31.  */
  32. #ifndef LL_LLFLOATERCOLORPICKER_H
  33. #define LL_LLFLOATERCOLORPICKER_H
  34. #include <vector>
  35. #include "llfloater.h"
  36. #include "llpointer.h"
  37. #include "llcolorswatch.h"
  38. #include "llspinctrl.h"
  39. #include "lltextureentry.h"
  40. class LLButton;
  41. class LLLineEditor;
  42. class LLCheckBoxCtrl;
  43. //////////////////////////////////////////////////////////////////////////////
  44. // floater class
  45. class LLFloaterColorPicker 
  46. : public LLFloater
  47. {
  48. public:
  49. LLFloaterColorPicker (LLColorSwatchCtrl* swatch, BOOL show_apply_immediate = FALSE);
  50. virtual ~LLFloaterColorPicker ();
  51. // overrides
  52. virtual BOOL postBuild ();
  53. virtual void draw ();
  54. virtual BOOL handleMouseDown ( S32 x, S32 y, MASK mask );
  55. virtual BOOL handleMouseUp ( S32 x, S32 y, MASK mask );
  56. virtual BOOL handleHover ( S32 x, S32 y, MASK mask );
  57. virtual void onMouseCaptureLost();
  58. // implicit methods
  59. void createUI ();
  60. void initUI ( F32 rValIn, F32 gValIn, F32 bValIn );
  61. void showUI ();
  62. void destroyUI ();
  63. void cancelSelection ();
  64. LLColorSwatchCtrl* getSwatch () { return mSwatch; };
  65. void setSwatch( LLColorSwatchCtrl* swatch) { mSwatch = swatch; }
  66. // mutator / accessor for original RGB value
  67. void setOrigRgb ( F32 origRIn, F32 origGIn, F32 origBIn );
  68. void getOrigRgb ( F32& origROut, F32& origGOut, F32& origBOut );
  69. F32 getOrigR () { return origR; };
  70. F32 getOrigG () { return origG; };
  71. F32 getOrigB () { return origB; };
  72. // mutator / accessors for currernt RGB value
  73. void setCurRgb ( F32 curRIn, F32 curGIn, F32 curBIn );
  74. void getCurRgb ( F32& curROut, F32& curGOut, F32& curBOut );
  75. F32  getCurR () { return curR; };
  76. F32  getCurG () { return curG; };
  77. F32  getCurB () { return curB; };
  78. // mutator / accessors for currernt HSL value
  79. void setCurHsl ( F32 curHIn, F32 curSIn, F32 curLIn );
  80. void getCurHsl ( F32& curHOut, F32& curSOut, F32& curLOut );
  81. F32  getCurH () { return curH; };
  82. F32  getCurS () { return  curS; };
  83. F32  getCurL () { return curL; };
  84. // updates current RGB/HSL values based on point in picker
  85. BOOL updateRgbHslFromPoint ( S32 xPosIn, S32 yPosIn );
  86. // updates text entry fields with current RGB/HSL
  87. void updateTextEntry ();
  88. void stopUsingPipette();
  89. // mutator / accessor for mouse button pressed in region
  90. void setMouseDownInHueRegion ( BOOL mouse_down_in_region );
  91. BOOL getMouseDownInHueRegion () { return mMouseDownInHueRegion; };
  92. void setMouseDownInLumRegion ( BOOL mouse_down_in_region );
  93. BOOL getMouseDownInLumRegion () { return mMouseDownInLumRegion; };
  94. void setMouseDownInSwatch (BOOL mouse_down_in_swatch);
  95. BOOL getMouseDownInSwatch () { return mMouseDownInSwatch; }
  96. // called when text entries (RGB/HSL etc.) are changed by user
  97. void onTextEntryChanged ( LLUICtrl* ctrl );
  98. // convert RGB to HSL and vice-versa
  99. void hslToRgb ( F32 hValIn, F32 sValIn, F32 lValIn, F32& rValOut, F32& gValOut, F32& bValOut );
  100. F32  hueToRgb ( F32 val1In, F32 val2In, F32 valHUeIn );
  101. void setActive(BOOL active);
  102. protected:
  103. // callbacks
  104. static void onClickCancel ( void* data );
  105. static void onClickSelect ( void* data );
  106.    void onClickPipette ( );
  107. static void onTextCommit ( LLUICtrl* ctrl, void* data );
  108. static void onImmediateCheck ( LLUICtrl* ctrl, void* data );
  109.    void onColorSelect( const LLTextureEntry& te );
  110. private:
  111. // draws color selection palette
  112. void drawPalette ();
  113. // find a complimentary color to the one passed in that can be used to highlight 
  114. const LLColor4& getComplimentaryColor ( const LLColor4& backgroundColor );
  115. // original RGB values
  116. F32 origR, origG, origB;
  117. // current RGB/HSL values
  118. F32 curR, curG, curB;
  119. F32 curH, curS, curL;
  120. const S32 mComponents;
  121. BOOL mMouseDownInLumRegion;
  122. BOOL mMouseDownInHueRegion;
  123. BOOL mMouseDownInSwatch;
  124. const S32 mRGBViewerImageLeft;
  125. const S32 mRGBViewerImageTop;
  126. const S32 mRGBViewerImageWidth;
  127. const S32 mRGBViewerImageHeight;
  128. const S32 mLumRegionLeft;
  129. const S32 mLumRegionTop;
  130. const S32 mLumRegionWidth;
  131. const S32 mLumRegionHeight;
  132. const S32 mLumMarkerSize;
  133. // Preview of the current color.
  134. const S32 mSwatchRegionLeft;
  135. const S32 mSwatchRegionTop;
  136. const S32 mSwatchRegionWidth;
  137. const S32 mSwatchRegionHeight;
  138. LLView* mSwatchView;
  139. const S32 numPaletteColumns;
  140. const S32 numPaletteRows;
  141.         std::vector < LLColor4* > mPalette;
  142. S32 highlightEntry;
  143. const S32 mPaletteRegionLeft;
  144. const S32 mPaletteRegionTop;
  145. const S32 mPaletteRegionWidth;
  146. const S32 mPaletteRegionHeight;
  147. // image used to compose color grid
  148. LLPointer<LLViewerTexture> mRGBImage;
  149. // current swatch in use
  150. LLColorSwatchCtrl* mSwatch;
  151. // are we actively tied to some output?
  152. BOOL mActive;
  153. // enable/disable immediate updates
  154. LLCheckBoxCtrl* mApplyImmediateCheck;
  155. BOOL mCanApplyImmediately;
  156. LLButton* mSelectBtn;
  157. LLButton* mCancelBtn;
  158. LLButton* mPipetteBtn;
  159. F32   mContextConeOpacity;
  160. };
  161. #endif // LL_LLFLOATERCOLORPICKER_H