*/
#include <iostream>
-#include <gtkmm2ext/scroomer.h>
+
+#include "gtkmm2ext/scroomer.h"
+#include "gtkmm2ext/keyboard.h"
using namespace Gtkmm2ext;
using namespace Gtk;
Scroomer::Scroomer(Gtk::Adjustment& adjustment)
: adj(adjustment)
, handle_size(0)
- , grab_comp(None) {
-
+ , grab_comp(None)
+{
position[TopBase] = 0;
position[Handle1] = 0;
position[Slider] = 0;
grab_y = ev->y;
- if (ev->state & GDK_CONTROL_MASK) {
- if (ev->state & GDK_MOD1_MASK) {
+ if (ev->state & Keyboard::PrimaryModifier) {
+ if (ev->state & Keyboard::SecondaryModifier) {
scale = 0.05;
} else {
scale = 0.1;
fract = max (-1.0, fract);
fract = -fract;
- switch(grab_comp) {
+ switch (grab_comp) {
case TopBase:
case BottomBase:
unzoomed_val += scale * fract * range;
unzoomed_val = max(unzoomed_val, adj.get_lower());
break;
case Handle1:
+
unzoomed_page += scale * fract * range;
unzoomed_page = min(unzoomed_page, adj.get_upper() - unzoomed_val);
unzoomed_page = max(unzoomed_page, min_page_size);
+
+ if (pinch){
+ temp = unzoomed_val + unzoomed_page;
+ unzoomed_val -= scale * fract * range * 0.5;
+ unzoomed_val = min(unzoomed_val, temp - min_page_size);
+ unzoomed_val = max(unzoomed_val, adj.get_lower());
+ }
+
break;
case Handle2:
temp = unzoomed_val + unzoomed_page;
unzoomed_val += scale * fract * range;
unzoomed_val = min(unzoomed_val, temp - min_page_size);
unzoomed_val = max(unzoomed_val, adj.get_lower());
-
+
unzoomed_page = temp - unzoomed_val;
+
+ if (pinch){
+
+ unzoomed_page -= scale * fract * range;
+ }
+
+ unzoomed_page = min(unzoomed_page, adj.get_upper() - unzoomed_val);
unzoomed_page = max(unzoomed_page, min_page_size);
break;
default:
val = unzoomed_val;
page = unzoomed_page;
}
-
+
adj.set_page_size(page);
+ adj.set_value(val);
+ adj.value_changed();
- if (val == adj.get_value()) {
- adj.value_changed();
- }
-
- if (val < adj.get_lower()) {
- adj.value_changed();
- } else if (val > adj.get_upper()) {
- adj.value_changed();
- } else {
- adj.set_value(val);
- }
-
return true;
}
bool
Scroomer::on_button_press_event (GdkEventButton* ev)
{
- if (ev->button == 1) {
+ if (ev->button == 1 || ev->button == 3) {
Component comp = point_in(ev->y);
if (comp == Total || comp == None) {
unzoomed_val = adj.get_value();
unzoomed_page = adj.get_page_size();
grab_window = ev->window;
+
+ if (ev->button == 3){
+ pinch = true;
+ } else {
+ pinch = false;
+ }
}
+
return false;
}
return true;
}
- if (ev->button != 1) {
+ if (ev->button != 1 && ev->button != 3) {
return true;
}
- switch(grab_comp) {
+ switch (grab_comp) {
case TopBase:
break;
case Handle1:
{
int index = (int) c;
- switch(c) {
+ switch (c) {
case None:
return;
case Total:
std::string
Scroomer::get_comp_name(Component c)
{
- switch(c) {
+ switch (c) {
case TopBase:
return "TopBase";
case Handle1: