Skip to content

Commit

Permalink
stop requiring methods from templated class for SelectDragHelper
Browse files Browse the repository at this point in the history
now it doesn't need nor invalidate() neither is_valid(),
making it more flexible
  • Loading branch information
rodolforg authored and morevnaproject committed Jan 25, 2020
1 parent f6e204d commit 0f30c99
Showing 1 changed file with 12 additions and 11 deletions.
23 changes: 12 additions & 11 deletions synfig-studio/src/gui/selectdraghelper.h
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ class SelectDragHelper
bool dragging_started_by_key;

T hovered_item;
bool has_hovered_item;
std::vector<T> selected_items;
const T* active_item;

Expand Down Expand Up @@ -211,7 +212,7 @@ class SelectDragHelper

template <class T>
SelectDragHelper<T>::SelectDragHelper(const char* drag_action_name)
: drag_action_name(drag_action_name), action_group_drag(nullptr), active_item(nullptr), pointer_state(POINTER_NONE)
: drag_action_name(drag_action_name), action_group_drag(nullptr), hovered_item(), has_hovered_item(false), active_item(nullptr), pointer_state(POINTER_NONE)
{
}

Expand Down Expand Up @@ -400,8 +401,8 @@ template<class T>
bool SelectDragHelper<T>::process_button_double_press_event(GdkEventButton* event)
{
T pointed_item;
find_item_at_position(event->x, event->y, pointed_item);
if (pointed_item.is_valid()) {
bool found = find_item_at_position(event->x, event->y, pointed_item);
if (found) {
int pointer_x = std::trunc(event->x);
int pointer_y = std::trunc(event->y);
signal_item_double_clicked().emit(pointed_item, event->button, Gdk::Point(pointer_x, pointer_y));
Expand All @@ -428,8 +429,8 @@ bool SelectDragHelper<T>::process_button_press_event(GdkEventButton* event)
if (pointer_state == POINTER_NONE) {
start_tracking_pointer(event->x, event->y);
T pointed_item;
find_item_at_position(pointer_tracking_start_x, pointer_tracking_start_y, pointed_item);
if (pointed_item.is_valid()) {
bool found = find_item_at_position(pointer_tracking_start_x, pointer_tracking_start_y, pointed_item);
if (found) {
auto already_selection_it = std::find(selected_items.begin(), selected_items.end(), pointed_item);
bool is_already_selected = already_selection_it != selected_items.end();
bool using_key_modifiers = (event->state & (GDK_CONTROL_MASK|GDK_SHIFT_MASK)) != 0;
Expand Down Expand Up @@ -469,8 +470,8 @@ bool SelectDragHelper<T>::process_button_press_event(GdkEventButton* event)

{
T pointed_item;
find_item_at_position(event->x, event->y, pointed_item);
if (pointed_item.is_valid()) {
bool found = find_item_at_position(event->x, event->y, pointed_item);
if (found) {
int pointer_x = std::trunc(event->x);
int pointer_y = std::trunc(event->y);
signal_item_clicked().emit(pointed_item, event->button, Gdk::Point(pointer_x, pointer_y));
Expand Down Expand Up @@ -575,12 +576,12 @@ bool SelectDragHelper<T>::process_motion_event(GdkEventMotion* event)
{
bool processed = false;
auto previous_hovered_point = hovered_item;
hovered_item.invalidate();
has_hovered_item = false;

int pointer_x = std::trunc(event->x);
int pointer_y = std::trunc(event->y);
if (pointer_state != POINTER_DRAGGING)
find_item_at_position(pointer_x, pointer_y, hovered_item);
has_hovered_item = find_item_at_position(pointer_x, pointer_y, hovered_item);

if (previous_hovered_point != hovered_item) {
signal_hovered_item_changed().emit();
Expand Down Expand Up @@ -663,15 +664,15 @@ bool SelectDragHelper<T>::process_scroll_event(GdkEventScroll* event)

template <class T>
void SelectDragHelper<T>::refresh() {
hovered_item.invalidate();
has_hovered_item = false;
}

template <class T>
void SelectDragHelper<T>::clear() {
if (pointer_state == POINTER_DRAGGING) {
cancel_dragging();
}
hovered_item.invalidate();
has_hovered_item = false;
if (!selected_items.empty()) {
selected_items.clear();
signal_selection_changed().emit();
Expand Down

0 comments on commit 0f30c99

Please sign in to comment.