summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 8fa3bca)
raw | patch | inline | side by side (parent: 8fa3bca)
author | buliabyak <buliabyak@users.sourceforge.net> | |
Wed, 24 Oct 2007 19:37:59 +0000 (19:37 +0000) | ||
committer | buliabyak <buliabyak@users.sourceforge.net> | |
Wed, 24 Oct 2007 19:37:59 +0000 (19:37 +0000) |
src/ui/widget/rotateable.cpp | patch | blob | history |
index e434c10c568cf1cc8575b8433e5625619eeb6204..9941c10f8f46257c10f3ee5465448a29904df4b4 100644 (file)
namespace UI {
namespace Widget {
- Rotateable::Rotateable():
+Rotateable::Rotateable():
axis(-M_PI/4),
maxdecl(M_PI/4)
- {
+{
dragging = false;
working = false;
modifier = 0;
signal_button_press_event().connect(sigc::mem_fun(*this, &Rotateable::on_click));
signal_motion_notify_event().connect(sigc::mem_fun(*this, &Rotateable::on_motion));
signal_button_release_event().connect(sigc::mem_fun(*this, &Rotateable::on_release));
- }
+}
- bool Rotateable::on_click(GdkEventButton *event) {
+bool Rotateable::on_click(GdkEventButton *event) {
if (event->button == 1) {
- drag_started_x = event->x;
- drag_started_y = event->y;
- modifier = get_single_modifier(modifier, event->state);
- dragging = true;
- working = false;
- current_axis = axis;
- return true;
+ drag_started_x = event->x;
+ drag_started_y = event->y;
+ modifier = get_single_modifier(modifier, event->state);
+ dragging = true;
+ working = false;
+ current_axis = axis;
+ return true;
}
return false;
- }
+}
- guint Rotateable::get_single_modifier(guint old, guint state) {
+guint Rotateable::get_single_modifier(guint old, guint state) {
if (old == 0) {
- if (state & GDK_CONTROL_MASK)
- return 1; // ctrl
- if (state & GDK_SHIFT_MASK)
- return 2; // shift
- return 0;
+ if (state & GDK_CONTROL_MASK)
+ return 1; // ctrl
+ if (state & GDK_SHIFT_MASK)
+ return 2; // shift
+ return 0;
} else {
- if (!(state & GDK_CONTROL_MASK) && !(state & GDK_SHIFT_MASK))
- return 0; // none
- if (old == 1)
- if (state & GDK_SHIFT_MASK && !(state & GDK_CONTROL_MASK))
- return 2; // shift
- else
- return 1;
- if (old == 2)
- if (state & GDK_CONTROL_MASK && !(state & GDK_SHIFT_MASK))
- return 1; // ctrl
- else
- return 2;
- return old;
+ if (!(state & GDK_CONTROL_MASK) && !(state & GDK_SHIFT_MASK))
+ return 0; // none
+ if (old == 1)
+ if (state & GDK_SHIFT_MASK && !(state & GDK_CONTROL_MASK))
+ return 2; // shift
+ else
+ return 1;
+ if (old == 2)
+ if (state & GDK_CONTROL_MASK && !(state & GDK_SHIFT_MASK))
+ return 1; // ctrl
+ else
+ return 2;
+ return old;
}
- }
+}
- bool Rotateable::on_motion(GdkEventMotion *event) {
+bool Rotateable::on_motion(GdkEventMotion *event) {
if (dragging) {
- double dist = NR::L2(NR::Point(event->x, event->y) - NR::Point(drag_started_x, drag_started_y));
- double angle = atan2(event->y - drag_started_y, event->x - drag_started_x);
- if (dist > 20) {
- working = true;
- double force = CLAMP (-(angle - current_axis)/maxdecl, -1, 1);
- if (fabs(force) < 0.002)
- force = 0; // snap to zero
- if (modifier != get_single_modifier(modifier, event->state)) {
- // user has switched modifiers in mid drag, close past drag and start a new
- // one, redefining axis temporarily
- do_release(force, modifier);
- current_axis = angle;
- modifier = get_single_modifier(modifier, event->state);
- } else {
- do_motion(force, modifier);
- }
- }
- gobble_motion_events(GDK_BUTTON1_MASK);
- return true;
+ double dist = NR::L2(NR::Point(event->x, event->y) - NR::Point(drag_started_x, drag_started_y));
+ double angle = atan2(event->y - drag_started_y, event->x - drag_started_x);
+ if (dist > 20) {
+ working = true;
+ double force = CLAMP (-(angle - current_axis)/maxdecl, -1, 1);
+ if (fabs(force) < 0.002)
+ force = 0; // snap to zero
+ if (modifier != get_single_modifier(modifier, event->state)) {
+ // user has switched modifiers in mid drag, close past drag and start a new
+ // one, redefining axis temporarily
+ do_release(force, modifier);
+ current_axis = angle;
+ modifier = get_single_modifier(modifier, event->state);
+ } else {
+ do_motion(force, modifier);
+ }
+ }
+ gobble_motion_events(GDK_BUTTON1_MASK);
+ return true;
}
return false;
- }
+}
- bool Rotateable::on_release(GdkEventButton *event) {
+bool Rotateable::on_release(GdkEventButton *event) {
if (dragging && working) {
- double angle = atan2(event->y - drag_started_y, event->x - drag_started_x);
- double force = CLAMP (-(angle - current_axis)/maxdecl, -1, 1);
- if (fabs(force) < 0.002)
- force = 0; // snap to zero
- do_release(force, modifier);
- dragging = false;
- working = false;
- current_axis = axis;
- return true;
+ double angle = atan2(event->y - drag_started_y, event->x - drag_started_x);
+ double force = CLAMP (-(angle - current_axis)/maxdecl, -1, 1);
+ if (fabs(force) < 0.002)
+ force = 0; // snap to zero
+ do_release(force, modifier);
+ dragging = false;
+ working = false;
+ current_axis = axis;
+ return true;
}
return false;
- }
+}
- Rotateable::~Rotateable() {
- }
+Rotateable::~Rotateable() {
+}