From e0a28c1d461d02ff536f799af14b3631d4c12327 Mon Sep 17 00:00:00 2001 From: David Capello Date: Thu, 5 Dec 2013 01:19:46 -0300 Subject: [PATCH] Minor refactor in skin properties - Add get_skin_property(ui::Widget*) function to avoid duplicating code to create a SkinProperty. - A SkinSliderProperty is not a SkinProperty: now it has its own name. --- src/app/modules/gui.cpp | 17 ++--------------- src/app/ui/color_sliders.cpp | 4 ++-- src/app/ui/skin/skin_property.cpp | 19 +++++++++++++++++-- src/app/ui/skin/skin_property.h | 11 ++++++++++- src/app/ui/skin/skin_slider_property.cpp | 5 ++++- src/app/ui/skin/skin_slider_property.h | 9 +++++++-- src/app/ui/skin/skin_theme.cpp | 13 +++++++------ 7 files changed, 49 insertions(+), 29 deletions(-) diff --git a/src/app/modules/gui.cpp b/src/app/modules/gui.cpp index e3c413e22..e1424942c 100644 --- a/src/app/modules/gui.cpp +++ b/src/app/modules/gui.cpp @@ -404,30 +404,17 @@ void setup_mini_look(Widget* widget) void setup_look(Widget* widget, LookType lookType) { - SharedPtr skinProp; - - skinProp = widget->getProperty(SkinProperty::SkinPropertyName); - if (skinProp == NULL) - skinProp.reset(new SkinProperty); - + SkinPropertyPtr skinProp = get_skin_property(widget); skinProp->setLook(lookType); - widget->setProperty(skinProp); } void setup_bevels(Widget* widget, int b1, int b2, int b3, int b4) { - SharedPtr skinProp; - - skinProp = widget->getProperty(SkinProperty::SkinPropertyName); - if (skinProp == NULL) - skinProp.reset(new SkinProperty); - + SkinPropertyPtr skinProp = get_skin_property(widget); skinProp->setUpperLeft(b1); skinProp->setUpperRight(b2); skinProp->setLowerLeft(b3); skinProp->setLowerRight(b4); - - widget->setProperty(skinProp); } // Sets the IconInterface pointer interface of the button to show the diff --git a/src/app/ui/color_sliders.cpp b/src/app/ui/color_sliders.cpp index fc4e91162..6c0c4e42c 100644 --- a/src/app/ui/color_sliders.cpp +++ b/src/app/ui/color_sliders.cpp @@ -128,7 +128,7 @@ void ColorSliders::addSlider(Channel channel, const char* labelText, int min, in m_entry.push_back(entry); m_channel.push_back(channel); - slider->setProperty(PropertyPtr(new SkinSliderProperty(new ColorSliderBgPainter(channel)))); + slider->setProperty(SkinSliderPropertyPtr(new SkinSliderProperty(new ColorSliderBgPainter(channel)))); slider->setDoubleBuffered(true); slider->Change.connect(Bind(&ColorSliders::onSliderChange, this, m_slider.size()-1)); @@ -201,7 +201,7 @@ void ColorSliders::updateSlidersBgColor(const app::Color& color) void ColorSliders::updateSliderBgColor(Slider* slider, const app::Color& color) { - SharedPtr sliderProperty(slider->getProperty("SkinProperty")); + SkinSliderPropertyPtr sliderProperty(slider->getProperty(SkinSliderProperty::Name)); static_cast(sliderProperty->getBgPainter())->setColor(color); diff --git a/src/app/ui/skin/skin_property.cpp b/src/app/ui/skin/skin_property.cpp index ee83a6186..fbb57c749 100644 --- a/src/app/ui/skin/skin_property.cpp +++ b/src/app/ui/skin/skin_property.cpp @@ -22,13 +22,15 @@ #include "app/ui/skin/skin_property.h" +#include "ui/widget.h" + namespace app { namespace skin { -const char* SkinProperty::SkinPropertyName = "SkinProperty"; +const char* SkinProperty::Name = "SkinProperty"; SkinProperty::SkinProperty() - : Property(SkinPropertyName) + : Property(Name) { m_look = NormalLook; m_upperLeft = 0; @@ -41,5 +43,18 @@ SkinProperty::~SkinProperty() { } +SkinPropertyPtr get_skin_property(ui::Widget* widget) +{ + SkinPropertyPtr skinProp; + + skinProp = widget->getProperty(SkinProperty::Name); + if (skinProp == NULL) { + skinProp.reset(new SkinProperty); + widget->setProperty(skinProp); + } + + return skinProp; +} + } // namespace skin } // namespace app diff --git a/src/app/ui/skin/skin_property.h b/src/app/ui/skin/skin_property.h index 43a93cd7f..00ad4e4dd 100644 --- a/src/app/ui/skin/skin_property.h +++ b/src/app/ui/skin/skin_property.h @@ -19,8 +19,13 @@ #ifndef APP_UI_SKIN_SKIN_PROPERTY_H_INCLUDED #define APP_UI_SKIN_SKIN_PROPERTY_H_INCLUDED +#include "base/shared_ptr.h" #include "ui/property.h" +namespace ui { + class Widget; +} + namespace app { namespace skin { @@ -35,7 +40,7 @@ namespace app { // Property to show widgets with a special look (e.g.: buttons or sliders with mini-borders) class SkinProperty : public ui::Property { public: - static const char* SkinPropertyName; + static const char* Name; SkinProperty(); ~SkinProperty(); @@ -61,6 +66,10 @@ namespace app { int m_lowerRight; }; + typedef SharedPtr SkinPropertyPtr; + + SkinPropertyPtr get_skin_property(ui::Widget* widget); + } // namespace skin } // namespace app diff --git a/src/app/ui/skin/skin_slider_property.cpp b/src/app/ui/skin/skin_slider_property.cpp index 2c6e9b390..74b9037ee 100644 --- a/src/app/ui/skin/skin_slider_property.cpp +++ b/src/app/ui/skin/skin_slider_property.cpp @@ -25,8 +25,11 @@ namespace app { namespace skin { +const char* SkinSliderProperty::Name = "SkinSliderProperty"; + SkinSliderProperty::SkinSliderProperty(ISliderBgPainter* painter) - : m_painter(painter) + : Property(Name) + , m_painter(painter) { } diff --git a/src/app/ui/skin/skin_slider_property.h b/src/app/ui/skin/skin_slider_property.h index cd618560c..3c128cb4c 100644 --- a/src/app/ui/skin/skin_slider_property.h +++ b/src/app/ui/skin/skin_slider_property.h @@ -19,8 +19,9 @@ #ifndef APP_UI_SKIN_SKIN_SLIDER_PROPERTY_H_INCLUDED #define APP_UI_SKIN_SKIN_SLIDER_PROPERTY_H_INCLUDED -#include "gfx/rect.h" #include "app/ui/skin/skin_property.h" +#include "base/shared_ptr.h" +#include "gfx/rect.h" namespace ui { class Slider; @@ -35,8 +36,10 @@ namespace app { virtual void paint(ui::Slider* slider, ui::Graphics* graphics, const gfx::Rect& rc) = 0; }; - class SkinSliderProperty : public SkinProperty { + class SkinSliderProperty : public ui::Property { public: + static const char* Name; + // The given painter is deleted automatically when this // property the destroyed. SkinSliderProperty(ISliderBgPainter* painter); @@ -48,6 +51,8 @@ namespace app { ISliderBgPainter* m_painter; }; + typedef SharedPtr SkinSliderPropertyPtr; + } // namespace skin } // namespace app diff --git a/src/app/ui/skin/skin_theme.cpp b/src/app/ui/skin/skin_theme.cpp index 72ebe2188..c2e6307ff 100644 --- a/src/app/ui/skin/skin_theme.cpp +++ b/src/app/ui/skin/skin_theme.cpp @@ -851,7 +851,7 @@ void SkinTheme::paintButton(PaintEvent& ev) // Tool buttons are smaller LookType look = NormalLook; - SharedPtr skinPropery = widget->getProperty(SkinProperty::SkinPropertyName); + SkinPropertyPtr skinPropery = widget->getProperty(SkinProperty::Name); if (skinPropery != NULL) look = skinPropery->getLook(); @@ -926,7 +926,7 @@ void SkinTheme::paintCheckBox(PaintEvent& ev) // Check box look LookType look = NormalLook; - SharedPtr skinPropery = widget->getProperty(SkinProperty::SkinPropertyName); + SkinPropertyPtr skinPropery = widget->getProperty(SkinProperty::Name); if (skinPropery != NULL) look = skinPropery->getLook(); @@ -990,7 +990,7 @@ void SkinTheme::paintEntry(PaintEvent& ev) y2 = widget->getBounds().y2()-1; bool isMiniLook = false; - SharedPtr skinPropery = widget->getProperty(SkinProperty::SkinPropertyName); + SkinPropertyPtr skinPropery = widget->getProperty(SkinProperty::Name); if (skinPropery != NULL) isMiniLook = (skinPropery->getLook() == MiniLook); @@ -1404,12 +1404,13 @@ void SkinTheme::paintSlider(PaintEvent& ev) // customized background (e.g. RGB sliders) ISliderBgPainter* bgPainter = NULL; - SharedPtr skinPropery = widget->getProperty(SkinProperty::SkinPropertyName); + SkinPropertyPtr skinPropery = widget->getProperty(SkinProperty::Name); if (skinPropery != NULL) isMiniLook = (skinPropery->getLook() == MiniLook); - if (SkinSliderProperty* sliderProperty = dynamic_cast(skinPropery.get())) - bgPainter = sliderProperty->getBgPainter(); + SkinSliderPropertyPtr skinSliderPropery = widget->getProperty(SkinSliderProperty::Name); + if (skinSliderPropery != NULL) + bgPainter = skinSliderPropery->getBgPainter(); // Draw customized background if (bgPainter) {