You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

51 lines
1.4 KiB

#ifndef UIELEMENTSKIN_H
#define UIELEMENTSKIN_H
#include <global.h>
#include <graphics/image.h>
#include <ui/uiconstants.h>
#include <graphics/font.h>
#include <otml/otmlnode.h>
class UIElement;
class UIElementSkin
{
public:
UIElementSkin(const std::string& name, UI::ElementType elementType) :
m_name(name),
m_elementType(elementType) { }
UIElementSkin() : m_elementType(UI::Element) { }
virtual ~UIElementSkin() { }
/// Load the skin from a FML node
virtual void load(OTMLNode* node);
/// Apply the skin to an element
virtual void apply(UIElement *element);
/// Draw the skinned element
virtual void draw(UIElement *element);
const std::string& getName() const { return m_name; }
const Size& getDefaultSize() const { return m_defaultSize; }
UI::ElementType getElementType() const { return m_elementType; }
ImagePtr getDefaultImage() const { return m_defaultImage; }
FontPtr getFont() const { return m_font; }
Color getFontColor() const { return m_fontColor; }
protected:
ImagePtr loadImage(OTMLNode* node);
FontPtr loadFont(OTMLNode* node);
private:
std::string m_name;
UI::ElementType m_elementType;
Size m_defaultSize;
ImagePtr m_defaultImage;
FontPtr m_font;
Color m_fontColor;
};
typedef boost::shared_ptr<UIElementSkin> UIElementSkinPtr;
#endif // UIELEMENTSKIN_H