impove slider
This commit is contained in:
parent
6217232a31
commit
5e33bc643f
@ -44,65 +44,65 @@ namespace nana
|
||||
bilateral, forward, backward
|
||||
};
|
||||
|
||||
class provider
|
||||
|
||||
class renderer_interface
|
||||
{
|
||||
public:
|
||||
virtual ~provider() = default;
|
||||
virtual std::string adorn_trace(unsigned vmax, unsigned vadorn) const = 0;
|
||||
};
|
||||
using graph_reference = ::nana::paint::graphics&;
|
||||
|
||||
class renderer
|
||||
{
|
||||
public:
|
||||
typedef ::nana::paint::graphics & graph_reference;
|
||||
|
||||
struct bar_t
|
||||
struct data_bar
|
||||
{
|
||||
bool horizontal;
|
||||
nana::rectangle r; //the rectangle of bar.
|
||||
unsigned border_size; //border_size of bar.
|
||||
bool vert; ///< Indicates whether the slider is vertical.
|
||||
::nana::rectangle area; ///< Position and size of bar.
|
||||
unsigned border_weight; ///< The border weight in pixels.
|
||||
};
|
||||
|
||||
struct slider_t
|
||||
struct data_slider
|
||||
{
|
||||
bool horizontal;
|
||||
int pos;
|
||||
unsigned border;
|
||||
unsigned scale;
|
||||
bool vert; ///< Indicates whether the slider is vertical.
|
||||
double pos;
|
||||
unsigned border_weight;
|
||||
unsigned weight;
|
||||
};
|
||||
|
||||
struct adorn_t
|
||||
struct data_adorn
|
||||
{
|
||||
bool horizontal;
|
||||
nana::point bound;
|
||||
bool vert; ///< Indicates whether the slider is vertical.
|
||||
::nana::point bound;
|
||||
int fixedpos;
|
||||
unsigned block;
|
||||
unsigned vcur_scale; //pixels of vcur scale.
|
||||
unsigned vcur_scale;
|
||||
};
|
||||
|
||||
virtual ~renderer() = default;
|
||||
struct data_vernier
|
||||
{
|
||||
bool vert; ///< Indicates whether the slider is vertical.
|
||||
int position;
|
||||
int end_position;
|
||||
unsigned knob_weight;
|
||||
|
||||
std::string text;
|
||||
};
|
||||
|
||||
virtual ~renderer_interface() = default;
|
||||
|
||||
virtual void background(window, graph_reference, bool isglass) = 0;
|
||||
virtual void adorn(window, graph_reference, const adorn_t&) = 0;
|
||||
virtual void adorn_textbox(window, graph_reference, const ::std::string&, const nana::rectangle&) = 0;
|
||||
virtual void bar(window, graph_reference, const bar_t&) = 0;
|
||||
virtual void slider(window, graph_reference, const slider_t&) = 0;
|
||||
virtual void adorn(window, graph_reference, const data_adorn&) = 0;
|
||||
virtual void vernier(window, graph_reference, const data_vernier&) = 0;
|
||||
virtual void bar(window, graph_reference, const data_bar&) = 0;
|
||||
virtual void slider(window, graph_reference, mouse_action, const data_slider&) = 0;
|
||||
};
|
||||
|
||||
class controller;
|
||||
|
||||
class trigger
|
||||
: public drawer_trigger
|
||||
{
|
||||
class model;
|
||||
public:
|
||||
typedef controller controller_t;
|
||||
|
||||
trigger();
|
||||
~trigger();
|
||||
controller_t* ctrl() const;
|
||||
model* get_model() const;
|
||||
private:
|
||||
void attached(widget_reference, graph_reference) override;
|
||||
void detached() override;
|
||||
void refresh(graph_reference) override;
|
||||
void mouse_down(graph_reference, const arg_mouse&) override;
|
||||
void mouse_up(graph_reference, const arg_mouse&) override;
|
||||
@ -110,18 +110,19 @@ namespace nana
|
||||
void mouse_leave(graph_reference, const arg_mouse&) override;
|
||||
void resized(graph_reference, const arg_resized&) override;
|
||||
private:
|
||||
controller_t * impl_;
|
||||
model * model_ptr_;
|
||||
};
|
||||
}//end namespace slider
|
||||
}//end namespace drawerbase
|
||||
|
||||
|
||||
/// A slider widget wich the user can drag for tracking \todo add scheme ?
|
||||
class slider
|
||||
: public widget_object<category::widget_tag, drawerbase::slider::trigger, drawerbase::slider::slider_events>
|
||||
{
|
||||
public:
|
||||
typedef drawerbase::slider::renderer renderer; ///< The interface for user-defined renderer.
|
||||
typedef drawerbase::slider::provider provider; ///< The interface for user-defined provider.
|
||||
typedef drawerbase::slider::seekdir seekdir; ///< Defines the slider seek direction.
|
||||
using renderer_interface = drawerbase::slider::renderer_interface; ///< The interface for customized renderer.
|
||||
using seekdir = drawerbase::slider::seekdir; ///< Defines the slider seek direction.
|
||||
|
||||
slider();
|
||||
slider(window, bool visible);
|
||||
@ -130,16 +131,17 @@ namespace nana
|
||||
void seek(seekdir); ///< Define the direction that user can seek by using mouse.
|
||||
void vertical(bool);
|
||||
bool vertical() const;
|
||||
void vmax(unsigned);
|
||||
unsigned vmax() const;
|
||||
void maximum(unsigned);
|
||||
unsigned maximum() const;
|
||||
void value(unsigned);
|
||||
unsigned value() const;
|
||||
unsigned move_step(bool forward); ///< Increase or decrease the value of slider.
|
||||
unsigned adorn() const;
|
||||
|
||||
pat::cloneable<renderer>& ext_renderer(); ///< Refers to the current renderer that slider is using.
|
||||
void ext_renderer(const pat::cloneable<renderer>&); ///< Set the current renderer.
|
||||
void ext_provider(const pat::cloneable<provider>&);
|
||||
const pat::cloneable<renderer_interface>& renderer(); ///< Refers to the current renderer that slider is using.
|
||||
void renderer(const pat::cloneable<renderer_interface>&); ///< Set the current renderer.
|
||||
|
||||
void vernier(std::function<std::string(unsigned maximum, unsigned cursor_value)> provider);
|
||||
void transparent(bool);
|
||||
bool transparent() const;
|
||||
};
|
||||
|
@ -72,9 +72,7 @@ namespace nana
|
||||
typedef compset_interface::item_attribute_t item_attribute_t;
|
||||
typedef compset_interface::comp_attribute_t comp_attribute_t;
|
||||
|
||||
virtual ~renderer_interface()
|
||||
{}
|
||||
|
||||
virtual ~renderer_interface() = default;
|
||||
virtual void set_color(const nana::color& bgcolor, const nana::color& fgcolor) = 0;
|
||||
|
||||
virtual void bground(graph_reference, const compset_interface *) const = 0;
|
||||
|
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user