summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/graphics/gui/tab.xml2
-rw-r--r--src/gui/widgets/tab.cpp36
-rw-r--r--src/gui/widgets/tab.h6
3 files changed, 32 insertions, 12 deletions
diff --git a/data/graphics/gui/tab.xml b/data/graphics/gui/tab.xml
index e00f7f907..be2301661 100644
--- a/data/graphics/gui/tab.xml
+++ b/data/graphics/gui/tab.xml
@@ -1,5 +1,7 @@
<skinset name="Default" image="window.png">
<widget type="Window" xpos="68" ypos="0">
+ <option name="padding" value="4" />
+
<!-- Top Row -->
<part type="top-left-corner" xpos="0" ypos="0" width="10" height="5" />
<part type="top-edge" xpos="9" ypos="0" width="8" height="5" />
diff --git a/src/gui/widgets/tab.cpp b/src/gui/widgets/tab.cpp
index ab7d5683e..af3a18560 100644
--- a/src/gui/widgets/tab.cpp
+++ b/src/gui/widgets/tab.cpp
@@ -60,7 +60,7 @@ static std::string const data[TAB_COUNT] =
"tab_unused.xml"
};
-ImageRect Tab::tabImg[TAB_COUNT];
+Skin *Tab::tabImg[TAB_COUNT];
Tab::Tab() :
gcn::BasicContainer(),
@@ -88,9 +88,9 @@ Tab::~Tab()
mInstances--;
if (mInstances == 0 && Theme::instance())
{
- const Theme *const theme = Theme::instance();
+ Theme *const theme = Theme::instance();
for (int mode = 0; mode < TAB_COUNT; mode ++)
- theme->unloadRect(tabImg[mode]);
+ theme->unload(tabImg[mode]);
}
delete mLabel;
@@ -119,7 +119,7 @@ void Tab::init()
if (theme)
{
for (int mode = 0; mode < TAB_COUNT; mode ++)
- theme->loadRect(tabImg[mode], data[mode], "tab.xml");
+ tabImg[mode] = theme->load(data[mode], "tab.xml");
}
updateAlpha();
}
@@ -140,8 +140,14 @@ void Tab::updateAlpha()
{
for (int t = 0; t < TAB_COUNT; t++)
{
- if (tabImg[t].grid[a])
- tabImg[t].grid[a]->setAlpha(mAlpha);
+ Skin *skin = tabImg[t];
+ if (skin)
+ {
+ ImageRect &rect = skin->getBorder();
+ Image *image = rect.grid[a];
+ if (image)
+ image->setAlpha(mAlpha);
+ }
}
}
}
@@ -184,8 +190,13 @@ void Tab::draw(gcn::Graphics *graphics)
}
}
+ const Skin *const skin = tabImg[mode];
+ if (!skin)
+ return;
+
updateAlpha();
+ ImageRect &rect = skin->getBorder();
// draw tab
if (mRedraw || mode != mMode
|| static_cast<Graphics*>(graphics)->getRedraw())
@@ -193,10 +204,10 @@ void Tab::draw(gcn::Graphics *graphics)
mMode = mode;
mRedraw = false;
static_cast<Graphics*>(graphics)->calcWindow(mVertexes, 0, 0,
- getWidth(), getHeight(), tabImg[mode]);
+ getWidth(), getHeight(), rect);
}
- static_cast<Graphics*>(graphics)->drawImageRect2(mVertexes, tabImg[mode]);
+ static_cast<Graphics*>(graphics)->drawImageRect2(mVertexes, rect);
// static_cast<Graphics*>(graphics)->
// drawImageRect(0, 0, getWidth(), getHeight(), tabImg[mode]);
@@ -228,8 +239,13 @@ void Tab::setLabelFont(gcn::Font *const font)
void Tab::adjustSize()
{
- setSize(mLabel->getWidth() + 8,
- mLabel->getHeight() + 8);
+ const Skin *const skin = tabImg[TAB_STANDARD];
+ if (!skin)
+ return;
+ const int padding = skin->getPadding();
+
+ setSize(mLabel->getWidth() + 2 * padding,
+ mLabel->getHeight() + 2 * padding);
if (mTabbedArea)
mTabbedArea->adjustTabPositions();
diff --git a/src/gui/widgets/tab.h b/src/gui/widgets/tab.h
index 8c6e7d115..199eefbb3 100644
--- a/src/gui/widgets/tab.h
+++ b/src/gui/widgets/tab.h
@@ -33,7 +33,9 @@
class GraphicsVertexes;
class ImageRect;
class Label;
+class Skin;
class TabbedArea;
+class Theme;
/**
* A tab, the same as the Guichan tab in 0.8, but extended to allow
@@ -138,8 +140,8 @@ class Tab : public gcn::BasicContainer,
/** Load images if no other instances exist yet */
void init();
- static ImageRect tabImg[4]; /**< Tab state graphics */
- static int mInstances; /**< Number of tab instances */
+ static Skin *tabImg[4]; /**< Tab state graphics */
+ static int mInstances; /**< Number of tab instances */
static float mAlpha;
const gcn::Color *mTabColor;