New border element

This commit is contained in:
cnjinhao
2015-01-14 04:30:35 +08:00
parent 7496fea110
commit bb49ba651c
6 changed files with 122 additions and 48 deletions

View File

@@ -30,19 +30,17 @@ namespace nana
class element_interface
{
public:
typedef paint::graphics & graph_reference;
virtual ~element_interface()
{}
using graph_reference = paint::graphics&;
virtual ~element_interface() = default;
virtual bool draw(graph_reference, const nana::color& bgcolor, const nana::color& fgcolor, const nana::rectangle&, element_state) = 0;
};
class crook_interface
{
public:
typedef paint::graphics & graph_reference;
typedef checkstate state;
using graph_reference = paint::graphics&;
using state = checkstate;
struct data
{
@@ -50,12 +48,19 @@ namespace nana
bool radio;
};
virtual ~crook_interface()
{}
virtual ~crook_interface() = default;
virtual bool draw(graph_reference, const nana::color& bgcolor, const nana::color& fgcolor, const nana::rectangle&, element_state, const data&) = 0;
};
class border_interface
{
public:
using graph_reference = paint::graphics&;
virtual ~border_interface() = default;
virtual bool draw(graph_reference, const ::nana::color& bgcolor, const ::nana::color& fgcolor, const ::nana::rectangle&, element_state, unsigned weight) = 0;
};
class provider
{
public:
@@ -87,16 +92,27 @@ namespace nana
void add_crook(const std::string& name, const pat::cloneable<factory_interface<crook_interface>>&);
crook_interface* const * keeper_crook(const std::string& name);
void add_border(const std::string&, const pat::cloneable<factory_interface<border_interface>>&);
border_interface* const * keeper_border(const std::string&);
};
class crook;
template<typename UserElement>
void add_crook(const std::string& name)
{
typedef provider::factory<UserElement, crook_interface> factory_t;
using factory_t = provider::factory<UserElement, crook_interface>;
provider().add_crook(name, pat::cloneable<typename factory_t::interface_type>(factory_t()));
}
class crook;
class border;
template<typename BorderElement>
void add_border(const std::string& name)
{
using factory_t = provider::factory<BorderElement, border_interface>;
provider().add_border(name, pat::cloneable<typename factory_t::interface_type>(factory_t()));
}
}//end namespace element
template<typename Element> class facade;
@@ -106,8 +122,8 @@ namespace nana
: public element::element_interface
{
public:
typedef ::nana::paint::graphics & graph_reference;
typedef element::crook_interface::state state;
using graph_reference = ::nana::paint::graphics &;
using state = element::crook_interface::state;
facade();
facade(const char* name);
@@ -126,7 +142,24 @@ namespace nana
private:
element::crook_interface::data data_;
element::crook_interface* const * keeper_;
};
}; //end class facade<element::crook>
template<>
class facade<element::border>
: public element::element_interface
{
using graph_reference = ::nana::paint::graphics &;
public:
facade();
facade(const char* name);
void switch_to(const char*);
public:
//Implement element_interface
bool draw(graph_reference, const nana::color& bgcolor, const nana::color& fgcolor, const nana::rectangle&, element_state) override;
private:
element::border_interface* const * keeper_;
};//end class facade<element::border>
namespace element
{

View File

@@ -80,7 +80,6 @@ namespace nana
void typeface_changed(graph_reference) override;
private:
void _m_text_area(unsigned width, unsigned height);
void _m_draw_border(graph_reference, const ::nana::color& bgcolor);
private:
widget* widget_;
struct status_type