GUI2/Slider Base: formatting cleanup

This commit is contained in:
Charles Dang 2017-10-29 13:54:48 +11:00
parent 5a2162564f
commit 3e16df795e
2 changed files with 122 additions and 129 deletions

View file

@ -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";

View file

@ -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