GUI2/Slider Base: formatting cleanup
This commit is contained in:
parent
5a2162564f
commit
3e16df795e
2 changed files with 122 additions and 129 deletions
|
@ -27,20 +27,20 @@
|
|||
#define LOG_SCOPE_HEADER get_control_type() + " [" + id() + "] " + __func__
|
||||
#define LOG_HEADER LOG_SCOPE_HEADER + ':'
|
||||
|
||||
namespace {
|
||||
int rounded_division(int value, int new_base, int old_base)
|
||||
{
|
||||
if (old_base == 0) {
|
||||
return new_base / 2;
|
||||
}
|
||||
else {
|
||||
return ::rounded_division(value * new_base, old_base);
|
||||
}
|
||||
namespace
|
||||
{
|
||||
int rounded_division(int value, int new_base, int old_base)
|
||||
{
|
||||
if(old_base == 0) {
|
||||
return new_base / 2;
|
||||
} else {
|
||||
return ::rounded_division(value * new_base, old_base);
|
||||
}
|
||||
}
|
||||
} // end anon namespace
|
||||
|
||||
namespace gui2
|
||||
{
|
||||
|
||||
slider_base::slider_base(const implementation::builder_styled_widget& builder, const std::string& control_type)
|
||||
: styled_widget(builder, control_type)
|
||||
, state_(ENABLED)
|
||||
|
@ -53,55 +53,55 @@ slider_base::slider_base(const implementation::builder_styled_widget& builder, c
|
|||
, positioner_length_(0)
|
||||
, snap_(true)
|
||||
{
|
||||
connect_signal<event::MOUSE_ENTER>(std::bind(
|
||||
&slider_base::signal_handler_mouse_enter, this, _2, _3, _4));
|
||||
connect_signal<event::MOUSE_MOTION>(std::bind(
|
||||
&slider_base::signal_handler_mouse_motion, this, _2, _3, _4, _5));
|
||||
connect_signal<event::MOUSE_LEAVE>(std::bind(
|
||||
&slider_base::signal_handler_mouse_leave, this, _2, _3));
|
||||
connect_signal<event::LEFT_BUTTON_DOWN>(std::bind(
|
||||
&slider_base::signal_handler_left_button_down, this, _2, _3));
|
||||
connect_signal<event::LEFT_BUTTON_UP>(std::bind(
|
||||
&slider_base::signal_handler_left_button_up, this, _2, _3));
|
||||
connect_signal<event::MOUSE_ENTER>(
|
||||
std::bind(&slider_base::signal_handler_mouse_enter, this, _2, _3, _4));
|
||||
connect_signal<event::MOUSE_MOTION>(
|
||||
std::bind(&slider_base::signal_handler_mouse_motion, this, _2, _3, _4, _5));
|
||||
connect_signal<event::MOUSE_LEAVE>(
|
||||
std::bind(&slider_base::signal_handler_mouse_leave, this, _2, _3));
|
||||
connect_signal<event::LEFT_BUTTON_DOWN>(
|
||||
std::bind(&slider_base::signal_handler_left_button_down, this, _2, _3));
|
||||
connect_signal<event::LEFT_BUTTON_UP>(
|
||||
std::bind(&slider_base::signal_handler_left_button_up, this, _2, _3));
|
||||
}
|
||||
|
||||
void slider_base::scroll(const scroll_mode scroll)
|
||||
{
|
||||
switch(scroll) {
|
||||
case BEGIN:
|
||||
set_slider_position(0);
|
||||
break;
|
||||
case BEGIN:
|
||||
set_slider_position(0);
|
||||
break;
|
||||
|
||||
case ITEM_BACKWARDS:
|
||||
set_slider_position(item_position_ - 1);
|
||||
break;
|
||||
case ITEM_BACKWARDS:
|
||||
set_slider_position(item_position_ - 1);
|
||||
break;
|
||||
|
||||
case HALF_JUMP_BACKWARDS:
|
||||
set_slider_position(item_position_ - jump_size() / 2);
|
||||
break;
|
||||
case HALF_JUMP_BACKWARDS:
|
||||
set_slider_position(item_position_ - jump_size() / 2);
|
||||
break;
|
||||
|
||||
case JUMP_BACKWARDS:
|
||||
set_slider_position(item_position_ - jump_size());
|
||||
break;
|
||||
case JUMP_BACKWARDS:
|
||||
set_slider_position(item_position_ - jump_size());
|
||||
break;
|
||||
|
||||
case END:
|
||||
set_slider_position(item_last_);
|
||||
break;
|
||||
case END:
|
||||
set_slider_position(item_last_);
|
||||
break;
|
||||
|
||||
case ITEM_FORWARD:
|
||||
set_slider_position(item_position_ + 1);
|
||||
break;
|
||||
case ITEM_FORWARD:
|
||||
set_slider_position(item_position_ + 1);
|
||||
break;
|
||||
|
||||
case HALF_JUMP_FORWARD:
|
||||
set_slider_position(item_position_ + jump_size() / 2);
|
||||
break;
|
||||
case HALF_JUMP_FORWARD:
|
||||
set_slider_position(item_position_ + jump_size() / 2);
|
||||
break;
|
||||
|
||||
case JUMP_FORWARD:
|
||||
set_slider_position(item_position_ + jump_size());
|
||||
break;
|
||||
case JUMP_FORWARD:
|
||||
set_slider_position(item_position_ + jump_size());
|
||||
break;
|
||||
|
||||
default:
|
||||
assert(false);
|
||||
default:
|
||||
assert(false);
|
||||
}
|
||||
|
||||
fire(event::NOTIFY_MODIFIED, *this, nullptr);
|
||||
|
@ -145,12 +145,11 @@ void slider_base::set_slider_position(int item_position)
|
|||
|
||||
void slider_base::update_canvas()
|
||||
{
|
||||
|
||||
for(auto & tmp : get_canvases())
|
||||
{
|
||||
for(auto& tmp : get_canvases()) {
|
||||
tmp.set_variable("positioner_offset", wfl::variant(positioner_offset_));
|
||||
tmp.set_variable("positioner_length", wfl::variant(positioner_length_));
|
||||
}
|
||||
|
||||
set_is_dirty(true);
|
||||
}
|
||||
|
||||
|
@ -169,12 +168,12 @@ void slider_base::recalculate()
|
|||
if(!get_length()) {
|
||||
return;
|
||||
}
|
||||
|
||||
assert(available_length() > 0);
|
||||
|
||||
recalculate_positioner();
|
||||
|
||||
set_slider_position(item_position_);
|
||||
|
||||
}
|
||||
|
||||
void slider_base::move_positioner(int new_offset)
|
||||
|
@ -194,13 +193,12 @@ void slider_base::move_positioner(int new_offset)
|
|||
void slider_base::update_slider_position(slider_base::slider_position_t& pos)
|
||||
{
|
||||
int new_position = rounded_division(pos.offset, item_last_, pos.max_offset);
|
||||
|
||||
|
||||
if(snap_) {
|
||||
pos.offset = rounded_division(new_position, pos.max_offset, item_last_);
|
||||
}
|
||||
|
||||
if(new_position != item_position_) {
|
||||
|
||||
item_position_ = new_position;
|
||||
|
||||
child_callback_positioner_moved();
|
||||
|
@ -209,9 +207,7 @@ void slider_base::update_slider_position(slider_base::slider_position_t& pos)
|
|||
}
|
||||
}
|
||||
|
||||
void slider_base::signal_handler_mouse_enter(const event::ui_event event,
|
||||
bool& handled,
|
||||
bool& halt)
|
||||
void slider_base::signal_handler_mouse_enter(const event::ui_event event, bool& handled, bool& halt)
|
||||
{
|
||||
DBG_GUI_E << LOG_HEADER << ' ' << event << ".\n";
|
||||
|
||||
|
@ -219,10 +215,8 @@ void slider_base::signal_handler_mouse_enter(const event::ui_event event,
|
|||
signal_handler_mouse_motion(event, handled, halt, get_mouse_position());
|
||||
}
|
||||
|
||||
void slider_base::signal_handler_mouse_motion(const event::ui_event event,
|
||||
bool& handled,
|
||||
bool& halt,
|
||||
const point& coordinate)
|
||||
void slider_base::signal_handler_mouse_motion(
|
||||
const event::ui_event event, bool& handled, bool& halt, const point& coordinate)
|
||||
{
|
||||
DBG_GUI_E << LOG_HEADER << ' ' << event << " at " << coordinate << ".\n";
|
||||
|
||||
|
@ -231,50 +225,50 @@ void slider_base::signal_handler_mouse_motion(const event::ui_event event,
|
|||
mouse.y -= get_y();
|
||||
|
||||
switch(state_) {
|
||||
case ENABLED:
|
||||
if(on_positioner(mouse)) {
|
||||
set_state(FOCUSED);
|
||||
}
|
||||
case ENABLED:
|
||||
if(on_positioner(mouse)) {
|
||||
set_state(FOCUSED);
|
||||
}
|
||||
|
||||
break;
|
||||
break;
|
||||
|
||||
case PRESSED: {
|
||||
move_positioner(get_length_difference(drag_initial_mouse_, mouse) + drag_initial_offset_);
|
||||
case PRESSED: {
|
||||
move_positioner(get_length_difference(drag_initial_mouse_, mouse) + drag_initial_offset_);
|
||||
|
||||
} break;
|
||||
} break;
|
||||
|
||||
case FOCUSED:
|
||||
if(!on_positioner(mouse)) {
|
||||
set_state(ENABLED);
|
||||
}
|
||||
break;
|
||||
case FOCUSED:
|
||||
if(!on_positioner(mouse)) {
|
||||
set_state(ENABLED);
|
||||
}
|
||||
|
||||
case DISABLED:
|
||||
// Shouldn't be possible, but seems to happen in the lobby
|
||||
// if a resize layout happens during dragging.
|
||||
halt = true;
|
||||
break;
|
||||
break;
|
||||
|
||||
default:
|
||||
assert(false);
|
||||
case DISABLED:
|
||||
// Shouldn't be possible, but seems to happen in the lobby
|
||||
// if a resize layout happens during dragging.
|
||||
halt = true;
|
||||
break;
|
||||
|
||||
default:
|
||||
assert(false);
|
||||
}
|
||||
|
||||
handled = true;
|
||||
}
|
||||
|
||||
void slider_base::signal_handler_mouse_leave(const event::ui_event event,
|
||||
bool& handled)
|
||||
void slider_base::signal_handler_mouse_leave(const event::ui_event event, bool& handled)
|
||||
{
|
||||
DBG_GUI_E << LOG_HEADER << ' ' << event << ".\n";
|
||||
|
||||
if(state_ == FOCUSED) {
|
||||
set_state(ENABLED);
|
||||
}
|
||||
|
||||
handled = true;
|
||||
}
|
||||
|
||||
|
||||
void slider_base::signal_handler_left_button_down(const event::ui_event event,
|
||||
bool& handled)
|
||||
void slider_base::signal_handler_left_button_down(const event::ui_event event, bool& handled)
|
||||
{
|
||||
DBG_GUI_E << LOG_HEADER << ' ' << event << ".\n";
|
||||
|
||||
|
@ -284,6 +278,7 @@ void slider_base::signal_handler_left_button_down(const event::ui_event event,
|
|||
|
||||
if(on_positioner(mouse)) {
|
||||
assert(get_window());
|
||||
|
||||
drag_initial_mouse_ = mouse;
|
||||
drag_initial_position_ = item_position_;
|
||||
drag_initial_offset_ = positioner_offset_ - offset_before();
|
||||
|
@ -305,8 +300,7 @@ void slider_base::signal_handler_left_button_down(const event::ui_event event,
|
|||
handled = true;
|
||||
}
|
||||
|
||||
void slider_base::signal_handler_left_button_up(const event::ui_event event,
|
||||
bool& handled)
|
||||
void slider_base::signal_handler_left_button_up(const event::ui_event event, bool& handled)
|
||||
{
|
||||
DBG_GUI_E << LOG_HEADER << ' ' << event << ".\n";
|
||||
|
||||
|
|
|
@ -21,7 +21,6 @@
|
|||
|
||||
namespace gui2
|
||||
{
|
||||
|
||||
/**
|
||||
* Base class for a scroll bar.
|
||||
*
|
||||
|
@ -52,23 +51,23 @@ public:
|
|||
* parameters for these amounts.
|
||||
*/
|
||||
enum scroll_mode {
|
||||
BEGIN, /**< Go to begin position. */
|
||||
ITEM_BACKWARDS, /**< Go one item towards the begin. */
|
||||
HALF_JUMP_BACKWARDS, /**< Go half the visible items towards the begin.
|
||||
*/
|
||||
JUMP_BACKWARDS, /**< Go the visibile items towards the begin. */
|
||||
END, /**< Go to the end position. */
|
||||
ITEM_FORWARD, /**< Go one item towards the end. */
|
||||
HALF_JUMP_FORWARD, /**< Go half the visible items towards the end. */
|
||||
JUMP_FORWARD
|
||||
}; /**< Go the visible items towards the end. */
|
||||
BEGIN, /**< Go to begin position. */
|
||||
ITEM_BACKWARDS, /**< Go one item towards the begin. */
|
||||
HALF_JUMP_BACKWARDS, /**< Go half the visible items towards the begin. */
|
||||
JUMP_BACKWARDS, /**< Go the visible items towards the begin. */
|
||||
END, /**< Go to the end position. */
|
||||
ITEM_FORWARD, /**< Go one item towards the end. */
|
||||
HALF_JUMP_FORWARD, /**< Go half the visible items towards the end. */
|
||||
JUMP_FORWARD /**< Go the visible items towards the end. */
|
||||
};
|
||||
|
||||
///container for the current position of a slider.
|
||||
/** Helper container for the slider's current position. */
|
||||
struct slider_position_t
|
||||
{
|
||||
int offset;
|
||||
int max_offset;
|
||||
};
|
||||
|
||||
/**
|
||||
* Sets the item position.
|
||||
*
|
||||
|
@ -77,6 +76,7 @@ public:
|
|||
* @param scroll 'step size' to scroll.
|
||||
*/
|
||||
void scroll(const scroll_mode scroll);
|
||||
|
||||
protected:
|
||||
/** Is the positioner at the beginning of the slider? */
|
||||
bool at_begin() const
|
||||
|
@ -115,18 +115,12 @@ public:
|
|||
/** See @ref styled_widget::get_state. */
|
||||
virtual unsigned get_state() const override;
|
||||
|
||||
/**
|
||||
/**
|
||||
* Possible states of the widget.
|
||||
*
|
||||
* Note the order of the states must be the same as defined in settings.hpp.
|
||||
*/
|
||||
enum state_t {
|
||||
ENABLED,
|
||||
DISABLED,
|
||||
PRESSED,
|
||||
FOCUSED,
|
||||
COUNT
|
||||
};
|
||||
enum state_t { ENABLED, DISABLED, PRESSED, FOCUSED, COUNT };
|
||||
|
||||
protected:
|
||||
/***** ***** ***** setters / getters for members ***** ****** *****/
|
||||
|
@ -149,7 +143,7 @@ protected:
|
|||
|
||||
/**
|
||||
* Note the position isn't guaranteed to be the wanted position
|
||||
* the step size is honored. The value will be rouded down.
|
||||
* the step size is honored. The value will be rounded down.
|
||||
*/
|
||||
void set_slider_position(int item_position);
|
||||
|
||||
|
@ -186,10 +180,14 @@ protected:
|
|||
{
|
||||
}
|
||||
|
||||
virtual int jump_size() const { return 1; }
|
||||
virtual int jump_size() const
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
private:
|
||||
void set_state(const state_t state);
|
||||
|
||||
/**
|
||||
* Current state of the widget.
|
||||
*
|
||||
|
@ -216,7 +214,7 @@ private:
|
|||
* This is used during dragging the positioner.
|
||||
*/
|
||||
int drag_initial_position_;
|
||||
|
||||
|
||||
/**
|
||||
* The offset in pixels the slider was when dragging the positioner was started.
|
||||
*/
|
||||
|
@ -233,7 +231,8 @@ private:
|
|||
|
||||
/** The current length of the positioner. */
|
||||
int positioner_length_;
|
||||
/** whether the slider shoudl 'snap' into its supported values or not */
|
||||
|
||||
/** Whether the slider should 'snap' into its supported values or not. */
|
||||
bool snap_;
|
||||
|
||||
/***** ***** ***** ***** Pure virtual functions ***** ***** ***** *****/
|
||||
|
@ -241,9 +240,15 @@ private:
|
|||
/** Get the length of the slider. */
|
||||
virtual unsigned get_length() const = 0;
|
||||
|
||||
int available_length() const { return get_length() - offset_before() - offset_after(); }
|
||||
int available_length() const
|
||||
{
|
||||
return get_length() - offset_before() - offset_after();
|
||||
}
|
||||
|
||||
int max_offset() const { return std::max(0, available_length() - positioner_length()); }
|
||||
int max_offset() const
|
||||
{
|
||||
return std::max(0, available_length() - positioner_length());
|
||||
}
|
||||
|
||||
/**
|
||||
* The number of pixels we can't use since they're used for borders.
|
||||
|
@ -290,17 +295,15 @@ private:
|
|||
* This function is used to determine how much the positioner needs to be
|
||||
* moved.
|
||||
*/
|
||||
virtual int get_length_difference(const point& original,
|
||||
const point& current) const = 0;
|
||||
virtual int get_length_difference(const point& original, const point& current) const = 0;
|
||||
|
||||
/***** ***** ***** ***** Private functions ***** ***** ***** *****/
|
||||
|
||||
/**
|
||||
* Updates the slider.
|
||||
*
|
||||
* Needs to be called when someting changes eg number of items
|
||||
* or available size. It can only be called once we have a size
|
||||
* otherwise we can't calulate a thing.
|
||||
* Needs to be called when someting changes eg number of items or available size.
|
||||
* It can only be called once we have a size otherwise we can't calculate a thing.
|
||||
*/
|
||||
void recalculate();
|
||||
|
||||
|
@ -311,7 +314,10 @@ private:
|
|||
*/
|
||||
virtual int positioner_length() const = 0;
|
||||
|
||||
void recalculate_positioner() { positioner_length_ = positioner_length(); }
|
||||
void recalculate_positioner()
|
||||
{
|
||||
positioner_length_ = positioner_length();
|
||||
}
|
||||
|
||||
/**
|
||||
* Moves the positioner.
|
||||
|
@ -322,22 +328,15 @@ private:
|
|||
|
||||
/***** ***** ***** signal handlers ***** ****** *****/
|
||||
|
||||
void signal_handler_mouse_enter(const event::ui_event event,
|
||||
bool& handled,
|
||||
bool& halt);
|
||||
void signal_handler_mouse_enter(const event::ui_event event, bool& handled, bool& halt);
|
||||
|
||||
void signal_handler_mouse_motion(const event::ui_event event,
|
||||
bool& handled,
|
||||
bool& halt,
|
||||
const point& coordinate);
|
||||
void signal_handler_mouse_motion(const event::ui_event event, bool& handled, bool& halt, const point& coordinate);
|
||||
|
||||
void signal_handler_mouse_leave(const event::ui_event event, bool& handled);
|
||||
|
||||
void signal_handler_left_button_down(const event::ui_event event,
|
||||
bool& handled);
|
||||
void signal_handler_left_button_down(const event::ui_event event, bool& handled);
|
||||
|
||||
void signal_handler_left_button_up(const event::ui_event event,
|
||||
bool& handled);
|
||||
void signal_handler_left_button_up(const event::ui_event event, bool& handled);
|
||||
};
|
||||
|
||||
} // namespace gui2
|
||||
|
|
Loading…
Add table
Reference in a new issue