diff options
author | Elias Fleckenstein <54945686+EliasFleckenstein03@users.noreply.github.com> | 2020-11-04 16:57:47 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-11-04 16:57:47 +0100 |
commit | 3e16c3a78fff61c20e63ba730d15e94e3bb877b4 (patch) | |
tree | c070350db219f2c4241d22bc31949685c7b42fe9 /src/gui/guiSkin.cpp | |
parent | 5d9ae5a91c544fc7fbd475decf47cef7e09ef8fc (diff) | |
parent | 6ccb5835ff55d85156be91473c598eca9d6cb9a6 (diff) | |
download | dragonfireclient-3e16c3a78fff61c20e63ba730d15e94e3bb877b4.tar.xz |
Merge branch 'master' into master
Diffstat (limited to 'src/gui/guiSkin.cpp')
-rw-r--r-- | src/gui/guiSkin.cpp | 475 |
1 files changed, 277 insertions, 198 deletions
diff --git a/src/gui/guiSkin.cpp b/src/gui/guiSkin.cpp index e2a6af5fd..8892a00b4 100644 --- a/src/gui/guiSkin.cpp +++ b/src/gui/guiSkin.cpp @@ -18,39 +18,41 @@ namespace irr namespace gui
{
-GUISkin::GUISkin(EGUI_SKIN_TYPE type, video::IVideoDriver *driver) :
- SpriteBank(0), Driver(driver), Type(type)
+GUISkin::GUISkin(EGUI_SKIN_TYPE type, video::IVideoDriver* driver)
+: SpriteBank(0), Driver(driver), Type(type)
{
-#ifdef _DEBUG
+ #ifdef _DEBUG
setDebugName("GUISkin");
-#endif
-
- if ((Type == EGST_WINDOWS_CLASSIC) || (Type == EGST_WINDOWS_METALLIC)) {
- Colors[EGDC_3D_DARK_SHADOW] = video::SColor(101, 50, 50, 50);
- Colors[EGDC_3D_SHADOW] = video::SColor(101, 130, 130, 130);
- Colors[EGDC_3D_FACE] = video::SColor(101, 210, 210, 210);
- Colors[EGDC_3D_HIGH_LIGHT] = video::SColor(101, 255, 255, 255);
- Colors[EGDC_3D_LIGHT] = video::SColor(101, 210, 210, 210);
- Colors[EGDC_ACTIVE_BORDER] = video::SColor(101, 16, 14, 115);
- Colors[EGDC_ACTIVE_CAPTION] = video::SColor(255, 255, 255, 255);
- Colors[EGDC_APP_WORKSPACE] = video::SColor(101, 100, 100, 100);
- Colors[EGDC_BUTTON_TEXT] = video::SColor(240, 10, 10, 10);
- Colors[EGDC_GRAY_TEXT] = video::SColor(240, 130, 130, 130);
- Colors[EGDC_HIGH_LIGHT] = video::SColor(101, 8, 36, 107);
- Colors[EGDC_HIGH_LIGHT_TEXT] = video::SColor(240, 255, 255, 255);
- Colors[EGDC_INACTIVE_BORDER] = video::SColor(101, 165, 165, 165);
- Colors[EGDC_INACTIVE_CAPTION] = video::SColor(255, 30, 30, 30);
- Colors[EGDC_TOOLTIP] = video::SColor(200, 0, 0, 0);
- Colors[EGDC_TOOLTIP_BACKGROUND] = video::SColor(200, 255, 255, 225);
- Colors[EGDC_SCROLLBAR] = video::SColor(101, 230, 230, 230);
- Colors[EGDC_WINDOW] = video::SColor(101, 255, 255, 255);
- Colors[EGDC_WINDOW_SYMBOL] = video::SColor(200, 10, 10, 10);
- Colors[EGDC_ICON] = video::SColor(200, 255, 255, 255);
- Colors[EGDC_ICON_HIGH_LIGHT] = video::SColor(200, 8, 36, 107);
- Colors[EGDC_GRAY_WINDOW_SYMBOL] = video::SColor(240, 100, 100, 100);
- Colors[EGDC_EDITABLE] = video::SColor(255, 255, 255, 255);
- Colors[EGDC_GRAY_EDITABLE] = video::SColor(255, 120, 120, 120);
- Colors[EGDC_FOCUSED_EDITABLE] = video::SColor(255, 240, 240, 255);
+ #endif
+
+ if ((Type == EGST_WINDOWS_CLASSIC) || (Type == EGST_WINDOWS_METALLIC))
+ {
+ Colors[EGDC_3D_DARK_SHADOW] = video::SColor(101,50,50,50);
+ Colors[EGDC_3D_SHADOW] = video::SColor(101,130,130,130);
+ Colors[EGDC_3D_FACE] = video::SColor(101,210,210,210);
+ Colors[EGDC_3D_HIGH_LIGHT] = video::SColor(101,255,255,255);
+ Colors[EGDC_3D_LIGHT] = video::SColor(101,210,210,210);
+ Colors[EGDC_ACTIVE_BORDER] = video::SColor(101,16,14,115);
+ Colors[EGDC_ACTIVE_CAPTION] = video::SColor(255,255,255,255);
+ Colors[EGDC_APP_WORKSPACE] = video::SColor(101,100,100,100);
+ Colors[EGDC_BUTTON_TEXT] = video::SColor(240,10,10,10);
+ Colors[EGDC_GRAY_TEXT] = video::SColor(240,130,130,130);
+ Colors[EGDC_HIGH_LIGHT] = video::SColor(101,8,36,107);
+ Colors[EGDC_HIGH_LIGHT_TEXT] = video::SColor(240,255,255,255);
+ Colors[EGDC_INACTIVE_BORDER] = video::SColor(101,165,165,165);
+ Colors[EGDC_INACTIVE_CAPTION] = video::SColor(255,30,30,30);
+ Colors[EGDC_TOOLTIP] = video::SColor(200,0,0,0);
+ Colors[EGDC_TOOLTIP_BACKGROUND] = video::SColor(200,255,255,225);
+ Colors[EGDC_SCROLLBAR] = video::SColor(101,230,230,230);
+ Colors[EGDC_WINDOW] = video::SColor(101,255,255,255);
+ Colors[EGDC_WINDOW_SYMBOL] = video::SColor(200,10,10,10);
+ Colors[EGDC_ICON] = video::SColor(200,255,255,255);
+ Colors[EGDC_ICON_HIGH_LIGHT] = video::SColor(200,8,36,107);
+ Colors[EGDC_GRAY_WINDOW_SYMBOL] = video::SColor(240,100,100,100);
+ Colors[EGDC_EDITABLE] = video::SColor(255,255,255,255);
+ Colors[EGDC_GRAY_EDITABLE] = video::SColor(255,120,120,120);
+ Colors[EGDC_FOCUSED_EDITABLE] = video::SColor(255,240,240,255);
+
Sizes[EGDS_SCROLLBAR_SIZE] = 14;
Sizes[EGDS_MENU_HEIGHT] = 30;
@@ -66,36 +68,36 @@ GUISkin::GUISkin(EGUI_SKIN_TYPE type, video::IVideoDriver *driver) : Sizes[EGDS_TITLEBARTEXT_DISTANCE_X] = 2;
Sizes[EGDS_TITLEBARTEXT_DISTANCE_Y] = 0;
- } else {
- // 0x80a6a8af
- Colors[EGDC_3D_DARK_SHADOW] = 0x60767982;
- // Colors[EGDC_3D_FACE] = 0xc0c9ccd4; // tab
- // background
- Colors[EGDC_3D_FACE] = 0xc0cbd2d9; // tab background
- Colors[EGDC_3D_SHADOW] =
- 0x50e4e8f1; // tab background, and left-top highlight
- Colors[EGDC_3D_HIGH_LIGHT] = 0x40c7ccdc;
- Colors[EGDC_3D_LIGHT] = 0x802e313a;
- Colors[EGDC_ACTIVE_BORDER] = 0x80404040; // window title
- Colors[EGDC_ACTIVE_CAPTION] = 0xffd0d0d0;
- Colors[EGDC_APP_WORKSPACE] = 0xc0646464; // unused
- Colors[EGDC_BUTTON_TEXT] = 0xd0161616;
- Colors[EGDC_GRAY_TEXT] = 0x3c141414;
- Colors[EGDC_HIGH_LIGHT] = 0x6c606060;
- Colors[EGDC_HIGH_LIGHT_TEXT] = 0xd0e0e0e0;
- Colors[EGDC_INACTIVE_BORDER] = 0xf0a5a5a5;
- Colors[EGDC_INACTIVE_CAPTION] = 0xffd2d2d2;
- Colors[EGDC_TOOLTIP] = 0xf00f2033;
- Colors[EGDC_TOOLTIP_BACKGROUND] = 0xc0cbd2d9;
- Colors[EGDC_SCROLLBAR] = 0xf0e0e0e0;
- Colors[EGDC_WINDOW] = 0xf0f0f0f0;
- Colors[EGDC_WINDOW_SYMBOL] = 0xd0161616;
- Colors[EGDC_ICON] = 0xd0161616;
- Colors[EGDC_ICON_HIGH_LIGHT] = 0xd0606060;
- Colors[EGDC_GRAY_WINDOW_SYMBOL] = 0x3c101010;
- Colors[EGDC_EDITABLE] = 0xf0ffffff;
- Colors[EGDC_GRAY_EDITABLE] = 0xf0cccccc;
- Colors[EGDC_FOCUSED_EDITABLE] = 0xf0fffff0;
+ }
+ else
+ {
+ //0x80a6a8af
+ Colors[EGDC_3D_DARK_SHADOW] = 0x60767982;
+ //Colors[EGDC_3D_FACE] = 0xc0c9ccd4; // tab background
+ Colors[EGDC_3D_FACE] = 0xc0cbd2d9; // tab background
+ Colors[EGDC_3D_SHADOW] = 0x50e4e8f1; // tab background, and left-top highlight
+ Colors[EGDC_3D_HIGH_LIGHT] = 0x40c7ccdc;
+ Colors[EGDC_3D_LIGHT] = 0x802e313a;
+ Colors[EGDC_ACTIVE_BORDER] = 0x80404040; // window title
+ Colors[EGDC_ACTIVE_CAPTION] = 0xffd0d0d0;
+ Colors[EGDC_APP_WORKSPACE] = 0xc0646464; // unused
+ Colors[EGDC_BUTTON_TEXT] = 0xd0161616;
+ Colors[EGDC_GRAY_TEXT] = 0x3c141414;
+ Colors[EGDC_HIGH_LIGHT] = 0x6c606060;
+ Colors[EGDC_HIGH_LIGHT_TEXT] = 0xd0e0e0e0;
+ Colors[EGDC_INACTIVE_BORDER] = 0xf0a5a5a5;
+ Colors[EGDC_INACTIVE_CAPTION] = 0xffd2d2d2;
+ Colors[EGDC_TOOLTIP] = 0xf00f2033;
+ Colors[EGDC_TOOLTIP_BACKGROUND] = 0xc0cbd2d9;
+ Colors[EGDC_SCROLLBAR] = 0xf0e0e0e0;
+ Colors[EGDC_WINDOW] = 0xf0f0f0f0;
+ Colors[EGDC_WINDOW_SYMBOL] = 0xd0161616;
+ Colors[EGDC_ICON] = 0xd0161616;
+ Colors[EGDC_ICON_HIGH_LIGHT] = 0xd0606060;
+ Colors[EGDC_GRAY_WINDOW_SYMBOL] = 0x3c101010;
+ Colors[EGDC_EDITABLE] = 0xf0ffffff;
+ Colors[EGDC_GRAY_EDITABLE] = 0xf0cccccc;
+ Colors[EGDC_FOCUSED_EDITABLE] = 0xf0fffff0;
Sizes[EGDS_SCROLLBAR_SIZE] = 14;
Sizes[EGDS_MENU_HEIGHT] = 48;
@@ -158,16 +160,18 @@ GUISkin::GUISkin(EGUI_SKIN_TYPE type, video::IVideoDriver *driver) : Icons[EGDI_FILE] = 245;
Icons[EGDI_DIRECTORY] = 246;
- for (u32 i = 0; i < EGDF_COUNT; ++i)
+ for (u32 i=0; i<EGDF_COUNT; ++i)
Fonts[i] = 0;
- UseGradient = (Type == EGST_WINDOWS_METALLIC) || (Type == EGST_BURNING_SKIN);
+ UseGradient = (Type == EGST_WINDOWS_METALLIC) || (Type == EGST_BURNING_SKIN) ;
}
+
//! destructor
GUISkin::~GUISkin()
{
- for (u32 i = 0; i < EGDF_COUNT; ++i) {
+ for (u32 i=0; i<EGDF_COUNT; ++i)
+ {
if (Fonts[i])
Fonts[i]->drop();
}
@@ -176,6 +180,7 @@ GUISkin::~GUISkin() SpriteBank->drop();
}
+
//! returns default color
video::SColor GUISkin::getColor(EGUI_DEFAULT_COLOR color) const
{
@@ -185,6 +190,7 @@ video::SColor GUISkin::getColor(EGUI_DEFAULT_COLOR color) const return video::SColor();
}
+
//! sets a default color
void GUISkin::setColor(EGUI_DEFAULT_COLOR which, video::SColor newColor)
{
@@ -192,6 +198,7 @@ void GUISkin::setColor(EGUI_DEFAULT_COLOR which, video::SColor newColor) Colors[which] = newColor;
}
+
//! returns size for the given size type
s32 GUISkin::getSize(EGUI_DEFAULT_SIZE size) const
{
@@ -201,6 +208,7 @@ s32 GUISkin::getSize(EGUI_DEFAULT_SIZE size) const return 0;
}
+
//! sets a default size
void GUISkin::setSize(EGUI_DEFAULT_SIZE which, s32 size)
{
@@ -208,8 +216,9 @@ void GUISkin::setSize(EGUI_DEFAULT_SIZE which, s32 size) Sizes[which] = size;
}
+
//! returns the default font
-IGUIFont *GUISkin::getFont(EGUI_DEFAULT_FONT which) const
+IGUIFont* GUISkin::getFont(EGUI_DEFAULT_FONT which) const
{
if (((u32)which < EGDF_COUNT) && Fonts[which])
return Fonts[which];
@@ -217,13 +226,15 @@ IGUIFont *GUISkin::getFont(EGUI_DEFAULT_FONT which) const return Fonts[EGDF_DEFAULT];
}
+
//! sets a default font
-void GUISkin::setFont(IGUIFont *font, EGUI_DEFAULT_FONT which)
+void GUISkin::setFont(IGUIFont* font, EGUI_DEFAULT_FONT which)
{
if ((u32)which >= EGDF_COUNT)
return;
- if (font) {
+ if (font)
+ {
font->grab();
if (Fonts[which])
Fonts[which]->drop();
@@ -232,14 +243,16 @@ void GUISkin::setFont(IGUIFont *font, EGUI_DEFAULT_FONT which) }
}
+
//! gets the sprite bank stored
-IGUISpriteBank *GUISkin::getSpriteBank() const
+IGUISpriteBank* GUISkin::getSpriteBank() const
{
return SpriteBank;
}
+
//! set a new sprite bank or remove one by passing 0
-void GUISkin::setSpriteBank(IGUISpriteBank *bank)
+void GUISkin::setSpriteBank(IGUISpriteBank* bank)
{
if (bank)
bank->grab();
@@ -250,6 +263,7 @@ void GUISkin::setSpriteBank(IGUISpriteBank *bank) SpriteBank = bank;
}
+
//! Returns a default icon
u32 GUISkin::getIcon(EGUI_DEFAULT_ICON icon) const
{
@@ -259,6 +273,7 @@ u32 GUISkin::getIcon(EGUI_DEFAULT_ICON icon) const return 0;
}
+
//! Sets a default icon
void GUISkin::setIcon(EGUI_DEFAULT_ICON icon, u32 index)
{
@@ -266,9 +281,10 @@ void GUISkin::setIcon(EGUI_DEFAULT_ICON icon, u32 index) Icons[icon] = index;
}
+
//! Returns a default text. For example for Message box button captions:
//! "OK", "Cancel", "Yes", "No" and so on.
-const wchar_t *GUISkin::getDefaultText(EGUI_DEFAULT_TEXT text) const
+const wchar_t* GUISkin::getDefaultText(EGUI_DEFAULT_TEXT text) const
{
if ((u32)text < EGDT_COUNT)
return Texts[text].c_str();
@@ -276,14 +292,16 @@ const wchar_t *GUISkin::getDefaultText(EGUI_DEFAULT_TEXT text) const return Texts[0].c_str();
}
+
//! Sets a default text. For example for Message box button captions:
//! "OK", "Cancel", "Yes", "No" and so on.
-void GUISkin::setDefaultText(EGUI_DEFAULT_TEXT which, const wchar_t *newText)
+void GUISkin::setDefaultText(EGUI_DEFAULT_TEXT which, const wchar_t* newText)
{
if ((u32)which < EGDT_COUNT)
Texts[which] = newText;
}
+
//! draws a standard 3d button pane
/** Used for drawing for example buttons in normal state.
It uses the colors EGDC_3D_DARK_SHADOW, EGDC_3D_HIGH_LIGHT, EGDC_3D_SHADOW and
@@ -294,9 +312,10 @@ EGDC_3D_FACE for this. See EGUI_DEFAULT_COLOR for details. is usually not used by ISkin, but can be used for example by more complex
implementations to find out how to draw the part exactly. */
// PATCH
-void GUISkin::drawColored3DButtonPaneStandard(IGUIElement *element,
- const core::rect<s32> &r, const core::rect<s32> *clip,
- const video::SColor *colors)
+void GUISkin::drawColored3DButtonPaneStandard(IGUIElement* element,
+ const core::rect<s32>& r,
+ const core::rect<s32>* clip,
+ const video::SColor* colors)
{
if (!Driver)
return;
@@ -306,14 +325,15 @@ void GUISkin::drawColored3DButtonPaneStandard(IGUIElement *element, core::rect<s32> rect = r;
- if (Type == EGST_BURNING_SKIN) {
+ if ( Type == EGST_BURNING_SKIN )
+ {
rect.UpperLeftCorner.X -= 1;
rect.UpperLeftCorner.Y -= 1;
rect.LowerRightCorner.X += 1;
rect.LowerRightCorner.Y += 1;
draw3DSunkenPane(element,
- colors[EGDC_WINDOW].getInterpolated(0xFFFFFFFF, 0.9f),
- false, true, rect, clip);
+ colors[ EGDC_WINDOW ].getInterpolated( 0xFFFFFFFF, 0.9f )
+ ,false, true, rect, clip);
return;
}
@@ -330,17 +350,20 @@ void GUISkin::drawColored3DButtonPaneStandard(IGUIElement *element, rect.LowerRightCorner.X -= 1;
rect.LowerRightCorner.Y -= 1;
- if (!UseGradient) {
+ if (!UseGradient)
+ {
Driver->draw2DRectangle(colors[EGDC_3D_FACE], rect, clip);
- } else {
+ }
+ else
+ {
const video::SColor c1 = colors[EGDC_3D_FACE];
- const video::SColor c2 =
- c1.getInterpolated(colors[EGDC_3D_DARK_SHADOW], 0.4f);
+ const video::SColor c2 = c1.getInterpolated(colors[EGDC_3D_DARK_SHADOW], 0.4f);
Driver->draw2DRectangle(rect, c1, c1, c2, c2, clip);
}
}
// END PATCH
+
//! draws a pressed 3d button pane
/** Used for drawing for example buttons in pressed state.
It uses the colors EGDC_3D_DARK_SHADOW, EGDC_3D_HIGH_LIGHT, EGDC_3D_SHADOW and
@@ -351,9 +374,10 @@ EGDC_3D_FACE for this. See EGUI_DEFAULT_COLOR for details. is usually not used by ISkin, but can be used for example by more complex
implementations to find out how to draw the part exactly. */
// PATCH
-void GUISkin::drawColored3DButtonPanePressed(IGUIElement *element,
- const core::rect<s32> &r, const core::rect<s32> *clip,
- const video::SColor *colors)
+void GUISkin::drawColored3DButtonPanePressed(IGUIElement* element,
+ const core::rect<s32>& r,
+ const core::rect<s32>* clip,
+ const video::SColor* colors)
{
if (!Driver)
return;
@@ -375,17 +399,20 @@ void GUISkin::drawColored3DButtonPanePressed(IGUIElement *element, rect.UpperLeftCorner.X += 1;
rect.UpperLeftCorner.Y += 1;
- if (!UseGradient) {
+ if (!UseGradient)
+ {
Driver->draw2DRectangle(colors[EGDC_3D_FACE], rect, clip);
- } else {
+ }
+ else
+ {
const video::SColor c1 = colors[EGDC_3D_FACE];
- const video::SColor c2 =
- c1.getInterpolated(colors[EGDC_3D_DARK_SHADOW], 0.4f);
+ const video::SColor c2 = c1.getInterpolated(colors[EGDC_3D_DARK_SHADOW], 0.4f);
Driver->draw2DRectangle(rect, c1, c1, c2, c2, clip);
}
}
// END PATCH
+
//! draws a sunken 3d pane
/** Used for drawing the background of edit, combo or check boxes.
\param element: Pointer to the element which wishes to draw this. This parameter
@@ -397,9 +424,11 @@ deep into the ground. \param rect: Defining area where to draw.
\param clip: Clip area. */
// PATCH
-void GUISkin::drawColored3DSunkenPane(IGUIElement *element, video::SColor bgcolor,
- bool flat, bool fillBackGround, const core::rect<s32> &r,
- const core::rect<s32> *clip, const video::SColor *colors)
+void GUISkin::drawColored3DSunkenPane(IGUIElement* element, video::SColor bgcolor,
+ bool flat, bool fillBackGround,
+ const core::rect<s32>& r,
+ const core::rect<s32>* clip,
+ const video::SColor* colors)
{
if (!Driver)
return;
@@ -412,31 +441,34 @@ void GUISkin::drawColored3DSunkenPane(IGUIElement *element, video::SColor bgcolo if (fillBackGround)
Driver->draw2DRectangle(bgcolor, rect, clip);
- if (flat) {
+ if (flat)
+ {
// draw flat sunken pane
rect.LowerRightCorner.Y = rect.UpperLeftCorner.Y + 1;
- Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], rect, clip); // top
+ Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], rect, clip); // top
++rect.UpperLeftCorner.Y;
rect.LowerRightCorner.Y = r.LowerRightCorner.Y;
rect.LowerRightCorner.X = rect.UpperLeftCorner.X + 1;
- Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], rect, clip); // left
+ Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], rect, clip); // left
rect = r;
++rect.UpperLeftCorner.Y;
rect.UpperLeftCorner.X = rect.LowerRightCorner.X - 1;
- Driver->draw2DRectangle(colors[EGDC_3D_HIGH_LIGHT], rect, clip); // right
+ Driver->draw2DRectangle(colors[EGDC_3D_HIGH_LIGHT], rect, clip); // right
rect = r;
++rect.UpperLeftCorner.X;
rect.UpperLeftCorner.Y = r.LowerRightCorner.Y - 1;
--rect.LowerRightCorner.X;
- Driver->draw2DRectangle(colors[EGDC_3D_HIGH_LIGHT], rect, clip); // bottom
- } else {
+ Driver->draw2DRectangle(colors[EGDC_3D_HIGH_LIGHT], rect, clip); // bottom
+ }
+ else
+ {
// draw deep sunken pane
rect.LowerRightCorner.Y = rect.UpperLeftCorner.Y + 1;
- Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], rect, clip); // top
+ Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], rect, clip); // top
++rect.UpperLeftCorner.X;
++rect.UpperLeftCorner.Y;
--rect.LowerRightCorner.X;
@@ -444,10 +476,10 @@ void GUISkin::drawColored3DSunkenPane(IGUIElement *element, video::SColor bgcolo Driver->draw2DRectangle(colors[EGDC_3D_DARK_SHADOW], rect, clip);
rect.UpperLeftCorner.X = r.UpperLeftCorner.X;
- rect.UpperLeftCorner.Y = r.UpperLeftCorner.Y + 1;
+ rect.UpperLeftCorner.Y = r.UpperLeftCorner.Y+1;
rect.LowerRightCorner.X = rect.UpperLeftCorner.X + 1;
rect.LowerRightCorner.Y = r.LowerRightCorner.Y;
- Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], rect, clip); // left
+ Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], rect, clip); // left
++rect.UpperLeftCorner.X;
++rect.UpperLeftCorner.Y;
++rect.LowerRightCorner.X;
@@ -457,7 +489,7 @@ void GUISkin::drawColored3DSunkenPane(IGUIElement *element, video::SColor bgcolo rect = r;
rect.UpperLeftCorner.X = rect.LowerRightCorner.X - 1;
++rect.UpperLeftCorner.Y;
- Driver->draw2DRectangle(colors[EGDC_3D_HIGH_LIGHT], rect, clip); // right
+ Driver->draw2DRectangle(colors[EGDC_3D_HIGH_LIGHT], rect, clip); // right
--rect.UpperLeftCorner.X;
++rect.UpperLeftCorner.Y;
--rect.LowerRightCorner.X;
@@ -468,7 +500,7 @@ void GUISkin::drawColored3DSunkenPane(IGUIElement *element, video::SColor bgcolo ++rect.UpperLeftCorner.X;
rect.UpperLeftCorner.Y = r.LowerRightCorner.Y - 1;
--rect.LowerRightCorner.X;
- Driver->draw2DRectangle(colors[EGDC_3D_HIGH_LIGHT], rect, clip); // bottom
+ Driver->draw2DRectangle(colors[EGDC_3D_HIGH_LIGHT], rect, clip); // bottom
++rect.UpperLeftCorner.X;
--rect.UpperLeftCorner.Y;
--rect.LowerRightCorner.X;
@@ -481,13 +513,17 @@ void GUISkin::drawColored3DSunkenPane(IGUIElement *element, video::SColor bgcolo //! draws a window background
// return where to draw title bar text.
// PATCH
-core::rect<s32> GUISkin::drawColored3DWindowBackground(IGUIElement *element,
- bool drawTitleBar, video::SColor titleBarColor, const core::rect<s32> &r,
- const core::rect<s32> *clip, core::rect<s32> *checkClientArea,
- const video::SColor *colors)
+core::rect<s32> GUISkin::drawColored3DWindowBackground(IGUIElement* element,
+ bool drawTitleBar, video::SColor titleBarColor,
+ const core::rect<s32>& r,
+ const core::rect<s32>* clip,
+ core::rect<s32>* checkClientArea,
+ const video::SColor* colors)
{
- if (!Driver) {
- if (checkClientArea) {
+ if (!Driver)
+ {
+ if ( checkClientArea )
+ {
*checkClientArea = r;
}
return r;
@@ -500,14 +536,16 @@ core::rect<s32> GUISkin::drawColored3DWindowBackground(IGUIElement *element, // top border
rect.LowerRightCorner.Y = rect.UpperLeftCorner.Y + 1;
- if (!checkClientArea) {
+ if ( !checkClientArea )
+ {
Driver->draw2DRectangle(colors[EGDC_3D_HIGH_LIGHT], rect, clip);
}
// left border
rect.LowerRightCorner.Y = r.LowerRightCorner.Y;
rect.LowerRightCorner.X = rect.UpperLeftCorner.X + 1;
- if (!checkClientArea) {
+ if ( !checkClientArea )
+ {
Driver->draw2DRectangle(colors[EGDC_3D_HIGH_LIGHT], rect, clip);
}
@@ -516,7 +554,8 @@ core::rect<s32> GUISkin::drawColored3DWindowBackground(IGUIElement *element, rect.LowerRightCorner.X = r.LowerRightCorner.X;
rect.UpperLeftCorner.Y = r.UpperLeftCorner.Y;
rect.LowerRightCorner.Y = r.LowerRightCorner.Y;
- if (!checkClientArea) {
+ if ( !checkClientArea )
+ {
Driver->draw2DRectangle(colors[EGDC_3D_DARK_SHADOW], rect, clip);
}
@@ -525,7 +564,8 @@ core::rect<s32> GUISkin::drawColored3DWindowBackground(IGUIElement *element, rect.LowerRightCorner.X -= 1;
rect.UpperLeftCorner.Y += 1;
rect.LowerRightCorner.Y -= 1;
- if (!checkClientArea) {
+ if ( !checkClientArea )
+ {
Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], rect, clip);
}
@@ -534,7 +574,8 @@ core::rect<s32> GUISkin::drawColored3DWindowBackground(IGUIElement *element, rect.UpperLeftCorner.Y = r.LowerRightCorner.Y - 1;
rect.LowerRightCorner.Y = r.LowerRightCorner.Y;
rect.LowerRightCorner.X = r.LowerRightCorner.X;
- if (!checkClientArea) {
+ if ( !checkClientArea )
+ {
Driver->draw2DRectangle(colors[EGDC_3D_DARK_SHADOW], rect, clip);
}
@@ -543,31 +584,37 @@ core::rect<s32> GUISkin::drawColored3DWindowBackground(IGUIElement *element, rect.LowerRightCorner.X -= 1;
rect.UpperLeftCorner.Y -= 1;
rect.LowerRightCorner.Y -= 1;
- if (!checkClientArea) {
+ if ( !checkClientArea )
+ {
Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], rect, clip);
}
// client area for background
rect = r;
- rect.UpperLeftCorner.X += 1;
- rect.UpperLeftCorner.Y += 1;
+ rect.UpperLeftCorner.X +=1;
+ rect.UpperLeftCorner.Y +=1;
rect.LowerRightCorner.X -= 2;
rect.LowerRightCorner.Y -= 2;
- if (checkClientArea) {
+ if (checkClientArea)
+ {
*checkClientArea = rect;
}
- if (!checkClientArea) {
- if (!UseGradient) {
+ if ( !checkClientArea )
+ {
+ if (!UseGradient)
+ {
Driver->draw2DRectangle(colors[EGDC_3D_FACE], rect, clip);
- } else if (Type == EGST_BURNING_SKIN) {
- const video::SColor c1 = colors[EGDC_WINDOW].getInterpolated(
- 0xFFFFFFFF, 0.9f);
- const video::SColor c2 = colors[EGDC_WINDOW].getInterpolated(
- 0xFFFFFFFF, 0.8f);
+ }
+ else if ( Type == EGST_BURNING_SKIN )
+ {
+ const video::SColor c1 = colors[EGDC_WINDOW].getInterpolated ( 0xFFFFFFFF, 0.9f );
+ const video::SColor c2 = colors[EGDC_WINDOW].getInterpolated ( 0xFFFFFFFF, 0.8f );
Driver->draw2DRectangle(rect, c1, c1, c2, c2, clip);
- } else {
+ }
+ else
+ {
const video::SColor c2 = colors[EGDC_3D_SHADOW];
const video::SColor c1 = colors[EGDC_3D_FACE];
Driver->draw2DRectangle(rect, c1, c1, c1, c2, clip);
@@ -579,31 +626,29 @@ core::rect<s32> GUISkin::drawColored3DWindowBackground(IGUIElement *element, rect.UpperLeftCorner.X += 2;
rect.UpperLeftCorner.Y += 2;
rect.LowerRightCorner.X -= 2;
- rect.LowerRightCorner.Y =
- rect.UpperLeftCorner.Y + getSize(EGDS_WINDOW_BUTTON_WIDTH) + 2;
+ rect.LowerRightCorner.Y = rect.UpperLeftCorner.Y + getSize(EGDS_WINDOW_BUTTON_WIDTH) + 2;
- if (drawTitleBar) {
- if (checkClientArea) {
+ if (drawTitleBar )
+ {
+ if (checkClientArea)
+ {
(*checkClientArea).UpperLeftCorner.Y = rect.LowerRightCorner.Y;
- } else {
+ }
+ else
+ {
// draw title bar
- // if (!UseGradient)
+ //if (!UseGradient)
// Driver->draw2DRectangle(titleBarColor, rect, clip);
- // else
- if (Type == EGST_BURNING_SKIN) {
- const video::SColor c = titleBarColor.getInterpolated(
- video::SColor(titleBarColor.getAlpha(),
- 255, 255, 255),
- 0.8f);
- Driver->draw2DRectangle(rect, titleBarColor,
- titleBarColor, c, c, clip);
- } else {
- const video::SColor c = titleBarColor.getInterpolated(
- video::SColor(titleBarColor.getAlpha(), 0,
- 0, 0),
- 0.2f);
- Driver->draw2DRectangle(rect, titleBarColor, c,
- titleBarColor, c, clip);
+ //else
+ if ( Type == EGST_BURNING_SKIN )
+ {
+ const video::SColor c = titleBarColor.getInterpolated( video::SColor(titleBarColor.getAlpha(),255,255,255), 0.8f);
+ Driver->draw2DRectangle(rect, titleBarColor, titleBarColor, c, c, clip);
+ }
+ else
+ {
+ const video::SColor c = titleBarColor.getInterpolated(video::SColor(titleBarColor.getAlpha(),0,0,0), 0.2f);
+ Driver->draw2DRectangle(rect, titleBarColor, c, titleBarColor, c, clip);
}
}
}
@@ -612,6 +657,7 @@ core::rect<s32> GUISkin::drawColored3DWindowBackground(IGUIElement *element, }
// END PATCH
+
//! draws a standard 3d menu pane
/** Used for drawing for menus and context menus.
It uses the colors EGDC_3D_DARK_SHADOW, EGDC_3D_HIGH_LIGHT, EGDC_3D_SHADOW and
@@ -622,8 +668,9 @@ implementations to find out how to draw the part exactly. \param rect: Defining area where to draw.
\param clip: Clip area. */
// PATCH
-void GUISkin::drawColored3DMenuPane(IGUIElement *element, const core::rect<s32> &r,
- const core::rect<s32> *clip, const video::SColor *colors)
+void GUISkin::drawColored3DMenuPane(IGUIElement* element,
+ const core::rect<s32>& r, const core::rect<s32>* clip,
+ const video::SColor* colors)
{
if (!Driver)
return;
@@ -633,7 +680,8 @@ void GUISkin::drawColored3DMenuPane(IGUIElement *element, const core::rect<s32> core::rect<s32> rect = r;
- if (Type == EGST_BURNING_SKIN) {
+ if ( Type == EGST_BURNING_SKIN )
+ {
rect.UpperLeftCorner.Y -= 3;
draw3DButtonPaneStandard(element, rect, clip);
return;
@@ -679,14 +727,15 @@ void GUISkin::drawColored3DMenuPane(IGUIElement *element, const core::rect<s32> Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], rect, clip);
rect = r;
- rect.UpperLeftCorner.X += 1;
- rect.UpperLeftCorner.Y += 1;
+ rect.UpperLeftCorner.X +=1;
+ rect.UpperLeftCorner.Y +=1;
rect.LowerRightCorner.X -= 2;
rect.LowerRightCorner.Y -= 2;
if (!UseGradient)
Driver->draw2DRectangle(colors[EGDC_3D_FACE], rect, clip);
- else {
+ else
+ {
const video::SColor c1 = colors[EGDC_3D_FACE];
const video::SColor c2 = colors[EGDC_3D_SHADOW];
Driver->draw2DRectangle(rect, c1, c1, c2, c2, clip);
@@ -694,6 +743,7 @@ void GUISkin::drawColored3DMenuPane(IGUIElement *element, const core::rect<s32> }
// END PATCH
+
//! draws a standard 3d tool bar
/** Used for drawing for toolbars and menus.
\param element: Pointer to the element which wishes to draw this. This parameter
@@ -702,8 +752,10 @@ implementations to find out how to draw the part exactly. \param rect: Defining area where to draw.
\param clip: Clip area. */
// PATCH
-void GUISkin::drawColored3DToolBar(IGUIElement *element, const core::rect<s32> &r,
- const core::rect<s32> *clip, const video::SColor *colors)
+void GUISkin::drawColored3DToolBar(IGUIElement* element,
+ const core::rect<s32>& r,
+ const core::rect<s32>* clip,
+ const video::SColor* colors)
{
if (!Driver)
return;
@@ -722,15 +774,21 @@ void GUISkin::drawColored3DToolBar(IGUIElement *element, const core::rect<s32> & rect = r;
rect.LowerRightCorner.Y -= 1;
- if (!UseGradient) {
+ if (!UseGradient)
+ {
Driver->draw2DRectangle(colors[EGDC_3D_FACE], rect, clip);
- } else if (Type == EGST_BURNING_SKIN) {
+ }
+ else
+ if ( Type == EGST_BURNING_SKIN )
+ {
const video::SColor c1 = 0xF0000000 | colors[EGDC_3D_FACE].color;
const video::SColor c2 = 0xF0000000 | colors[EGDC_3D_SHADOW].color;
rect.LowerRightCorner.Y += 1;
Driver->draw2DRectangle(rect, c1, c2, c1, c2, clip);
- } else {
+ }
+ else
+ {
const video::SColor c1 = colors[EGDC_3D_FACE];
const video::SColor c2 = colors[EGDC_3D_SHADOW];
Driver->draw2DRectangle(rect, c1, c1, c2, c2, clip);
@@ -747,9 +805,9 @@ implementations to find out how to draw the part exactly. \param rect: Defining area where to draw.
\param clip: Clip area. */
// PATCH
-void GUISkin::drawColored3DTabButton(IGUIElement *element, bool active,
- const core::rect<s32> &frameRect, const core::rect<s32> *clip,
- EGUI_ALIGNMENT alignment, const video::SColor *colors)
+void GUISkin::drawColored3DTabButton(IGUIElement* element, bool active,
+ const core::rect<s32>& frameRect, const core::rect<s32>* clip, EGUI_ALIGNMENT alignment,
+ const video::SColor* colors)
{
if (!Driver)
return;
@@ -759,7 +817,8 @@ void GUISkin::drawColored3DTabButton(IGUIElement *element, bool active, core::rect<s32> tr = frameRect;
- if (alignment == EGUIA_UPPERLEFT) {
+ if ( alignment == EGUIA_UPPERLEFT )
+ {
tr.LowerRightCorner.X -= 2;
tr.LowerRightCorner.Y = tr.UpperLeftCorner.Y + 1;
tr.UpperLeftCorner.X += 1;
@@ -787,7 +846,9 @@ void GUISkin::drawColored3DTabButton(IGUIElement *element, bool active, tr.UpperLeftCorner.X += 1;
tr.UpperLeftCorner.Y += 1;
Driver->draw2DRectangle(colors[EGDC_3D_DARK_SHADOW], tr, clip);
- } else {
+ }
+ else
+ {
tr.LowerRightCorner.X -= 2;
tr.UpperLeftCorner.Y = tr.LowerRightCorner.Y - 1;
tr.UpperLeftCorner.X += 1;
@@ -810,7 +871,7 @@ void GUISkin::drawColored3DTabButton(IGUIElement *element, bool active, // draw right middle gray shadow
tr.LowerRightCorner.X += 1;
tr.UpperLeftCorner.X = tr.LowerRightCorner.X - 1;
- // tr.LowerRightCorner.Y -= 1;
+ //tr.LowerRightCorner.Y -= 1;
Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], tr, clip);
tr.LowerRightCorner.X += 1;
@@ -821,6 +882,7 @@ void GUISkin::drawColored3DTabButton(IGUIElement *element, bool active, }
// END PATCH
+
//! draws a tab control body
/** \param element: Pointer to the element which wishes to draw this. This parameter
is usually not used by ISkin, but can be used for example by more complex
@@ -830,9 +892,9 @@ implementations to find out how to draw the part exactly. \param rect: Defining area where to draw.
\param clip: Clip area. */
// PATCH
-void GUISkin::drawColored3DTabBody(IGUIElement *element, bool border, bool background,
- const core::rect<s32> &rect, const core::rect<s32> *clip, s32 tabHeight,
- EGUI_ALIGNMENT alignment, const video::SColor *colors)
+void GUISkin::drawColored3DTabBody(IGUIElement* element, bool border, bool background,
+ const core::rect<s32>& rect, const core::rect<s32>* clip, s32 tabHeight, EGUI_ALIGNMENT alignment,
+ const video::SColor* colors)
{
if (!Driver)
return;
@@ -842,12 +904,14 @@ void GUISkin::drawColored3DTabBody(IGUIElement *element, bool border, bool backg core::rect<s32> tr = rect;
- if (tabHeight == -1)
+ if ( tabHeight == -1 )
tabHeight = getSize(gui::EGDS_BUTTON_HEIGHT);
// draw border.
- if (border) {
- if (alignment == EGUIA_UPPERLEFT) {
+ if (border)
+ {
+ if ( alignment == EGUIA_UPPERLEFT )
+ {
// draw left hightlight
tr.UpperLeftCorner.Y += tabHeight + 2;
tr.LowerRightCorner.X = tr.UpperLeftCorner.X + 1;
@@ -862,7 +926,9 @@ void GUISkin::drawColored3DTabBody(IGUIElement *element, bool border, bool backg tr = rect;
tr.UpperLeftCorner.Y = tr.LowerRightCorner.Y - 1;
Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], tr, clip);
- } else {
+ }
+ else
+ {
// draw left hightlight
tr.LowerRightCorner.Y -= tabHeight + 2;
tr.LowerRightCorner.X = tr.UpperLeftCorner.X + 1;
@@ -880,25 +946,30 @@ void GUISkin::drawColored3DTabBody(IGUIElement *element, bool border, bool backg }
}
- if (background) {
- if (alignment == EGUIA_UPPERLEFT) {
+ if (background)
+ {
+ if ( alignment == EGUIA_UPPERLEFT )
+ {
tr = rect;
tr.UpperLeftCorner.Y += tabHeight + 2;
tr.LowerRightCorner.X -= 1;
tr.UpperLeftCorner.X += 1;
tr.LowerRightCorner.Y -= 1;
- } else {
+ }
+ else
+ {
tr = rect;
tr.UpperLeftCorner.X += 1;
tr.UpperLeftCorner.Y -= 1;
tr.LowerRightCorner.X -= 1;
tr.LowerRightCorner.Y -= tabHeight + 2;
- // tr.UpperLeftCorner.X += 1;
+ //tr.UpperLeftCorner.X += 1;
}
if (!UseGradient)
Driver->draw2DRectangle(colors[EGDC_3D_FACE], tr, clip);
- else {
+ else
+ {
video::SColor c1 = colors[EGDC_3D_FACE];
video::SColor c2 = colors[EGDC_3D_SHADOW];
Driver->draw2DRectangle(tr, c1, c1, c2, c2, clip);
@@ -907,6 +978,7 @@ void GUISkin::drawColored3DTabBody(IGUIElement *element, bool border, bool backg }
// END PATCH
+
//! draws an icon, usually from the skin's sprite bank
/** \param parent: Pointer to the element which wishes to draw this icon.
This parameter is usually not used by IGUISkin, but can be used for example
@@ -918,9 +990,11 @@ by more complex implementations to find out how to draw the part exactly. \param loop: Whether the animation should loop or not
\param clip: Clip area. */
// PATCH
-void GUISkin::drawColoredIcon(IGUIElement *element, EGUI_DEFAULT_ICON icon,
- const core::position2di position, u32 starttime, u32 currenttime,
- bool loop, const core::rect<s32> *clip, const video::SColor *colors)
+void GUISkin::drawColoredIcon(IGUIElement* element, EGUI_DEFAULT_ICON icon,
+ const core::position2di position,
+ u32 starttime, u32 currenttime,
+ bool loop, const core::rect<s32>* clip,
+ const video::SColor* colors)
{
if (!SpriteBank)
return;
@@ -930,71 +1004,74 @@ void GUISkin::drawColoredIcon(IGUIElement *element, EGUI_DEFAULT_ICON icon, bool gray = element && !element->isEnabled();
SpriteBank->draw2DSprite(Icons[icon], position, clip,
- colors[gray ? EGDC_GRAY_WINDOW_SYMBOL : EGDC_WINDOW_SYMBOL],
- starttime, currenttime, loop, true);
+ colors[gray? EGDC_GRAY_WINDOW_SYMBOL : EGDC_WINDOW_SYMBOL], starttime, currenttime, loop, true);
}
// END PATCH
+
EGUI_SKIN_TYPE GUISkin::getType() const
{
return Type;
}
+
//! draws a 2d rectangle.
-void GUISkin::draw2DRectangle(IGUIElement *element, const video::SColor &color,
- const core::rect<s32> &pos, const core::rect<s32> *clip)
+void GUISkin::draw2DRectangle(IGUIElement* element,
+ const video::SColor &color, const core::rect<s32>& pos,
+ const core::rect<s32>* clip)
{
Driver->draw2DRectangle(color, pos, clip);
}
+
//! Writes attributes of the object.
//! Implement this to expose the attributes of your scene node animator for
//! scripting languages, editors, debuggers or xml serialization purposes.
-void GUISkin::serializeAttributes(
- io::IAttributes *out, io::SAttributeReadWriteOptions *options) const
+void GUISkin::serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options) const
{
u32 i;
- for (i = 0; i < EGDC_COUNT; ++i)
+ for (i=0; i<EGDC_COUNT; ++i)
out->addColor(GUISkinColorNames[i], Colors[i]);
- for (i = 0; i < EGDS_COUNT; ++i)
+ for (i=0; i<EGDS_COUNT; ++i)
out->addInt(GUISkinSizeNames[i], Sizes[i]);
- for (i = 0; i < EGDT_COUNT; ++i)
+ for (i=0; i<EGDT_COUNT; ++i)
out->addString(GUISkinTextNames[i], Texts[i].c_str());
- for (i = 0; i < EGDI_COUNT; ++i)
+ for (i=0; i<EGDI_COUNT; ++i)
out->addInt(GUISkinIconNames[i], Icons[i]);
}
+
//! Reads attributes of the object.
//! Implement this to set the attributes of your scene node animator for
//! scripting languages, editors, debuggers or xml deserialization purposes.
-void GUISkin::deserializeAttributes(
- io::IAttributes *in, io::SAttributeReadWriteOptions *options)
+void GUISkin::deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options)
{
- // TODO: This is not nice code for downward compatibility, whenever new values are
- // added and users load an old skin the corresponding values will be set to 0.
+ // TODO: This is not nice code for downward compatibility, whenever new values are added and users
+ // load an old skin the corresponding values will be set to 0.
u32 i;
- for (i = 0; i < EGDC_COUNT; ++i)
+ for (i=0; i<EGDC_COUNT; ++i)
Colors[i] = in->getAttributeAsColor(GUISkinColorNames[i]);
- for (i = 0; i < EGDS_COUNT; ++i)
+ for (i=0; i<EGDS_COUNT; ++i)
Sizes[i] = in->getAttributeAsInt(GUISkinSizeNames[i]);
- for (i = 0; i < EGDT_COUNT; ++i)
+ for (i=0; i<EGDT_COUNT; ++i)
Texts[i] = in->getAttributeAsStringW(GUISkinTextNames[i]);
- for (i = 0; i < EGDI_COUNT; ++i)
+ for (i=0; i<EGDI_COUNT; ++i)
Icons[i] = in->getAttributeAsInt(GUISkinIconNames[i]);
}
+
//! gets the colors
// PATCH
-void GUISkin::getColors(video::SColor *colors)
+void GUISkin::getColors(video::SColor* colors)
{
u32 i;
- for (i = 0; i < EGDC_COUNT; ++i)
+ for (i=0; i<EGDC_COUNT; ++i)
colors[i] = Colors[i];
}
// END PATCH
@@ -1002,4 +1079,6 @@ void GUISkin::getColors(video::SColor *colors) } // end namespace gui
} // end namespace irr
+
#endif // _IRR_COMPILE_WITH_GUI_
+
|