Merge pull request #1055 from peetCreative/fix_issue1046

fix issue #1046
presentation
peetCreative 7 years ago committed by GitHub
commit 669ad0766f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 47
      src/gui/toolbarMenubar/ToolZoomSlider.cpp
  2. 8
      src/gui/toolbarMenubar/ToolZoomSlider.h

@ -25,25 +25,26 @@ void ToolZoomSlider::sliderChanged(GtkRange* range, ToolZoomSlider* self)
{
XOJ_CHECK_TYPE_OBJ(self, ToolZoomSlider);
if (self->ignoreChange || !self->sliderChangingByUser)
if (!self->sliderChangingByZoomControlOrInit &&
(self->sliderChangingBySliderDrag ||
self->sliderChangingBySliderHoverScroll))
{
return;
double back = self->zoom->getZoom100Value() * scaleFuncInv(gtk_range_get_value(range));
self->zoom->zoomSequnceChange(back, false);
}
double back = self->zoom->getZoom100Value() * scaleFuncInv(gtk_range_get_value(range));
self->zoom->zoomSequnceChange(back, false);
self->sliderChangingBySliderHoverScroll = false;
}
bool ToolZoomSlider::sliderButtonPress(GtkRange* range, GdkEvent *event, ToolZoomSlider* self)
{
XOJ_CHECK_TYPE_OBJ(self, ToolZoomSlider);
if(!self->sliderChangingByUser)
if(!self->sliderChangingBySliderDrag)
{
self->sliderChangingByUser = true;
self->zoom->setZoomFitMode(false);
self->zoom->startZoomSequence(-1, -1);
}
self->sliderChangingBySliderDrag = true;
return false;
}
@ -51,14 +52,29 @@ bool ToolZoomSlider::sliderButtonRelease(GtkRange* range, GdkEvent *event, ToolZ
{
XOJ_CHECK_TYPE_OBJ(self, ToolZoomSlider);
if(self->sliderChangingByUser)
if(self->sliderChangingBySliderDrag)
{
self->sliderChangingBySliderDrag = false;
self->zoom->endZoomSequence();
self->sliderChangingByUser = false;
}
return false;
}
bool ToolZoomSlider::sliderHoverScroll(GtkWidget* range, GdkEventScroll* event, ToolZoomSlider* self)
{
XOJ_CHECK_TYPE_OBJ(self, ToolZoomSlider);
gint64 now = g_get_monotonic_time();
if (now > self->sliderHoverScrollLastTime + 500)
{
self->zoom->setZoomFitMode(false);
self->zoom->startZoomSequence(-1, -1);
}
self->sliderChangingBySliderHoverScroll = true;
self->sliderHoverScrollLastTime = now;
return false;
}
gchar* ToolZoomSlider::sliderFormatValue(GtkRange *range, gdouble value, ToolZoomSlider* self)
{
return g_strdup_printf("%d%%", (int) (100 * scaleFuncInv(value)));
@ -68,15 +84,15 @@ void ToolZoomSlider::zoomChanged()
{
XOJ_CHECK_TYPE(ToolZoomSlider);
if (this->slider == NULL || this->sliderChangingByUser)
if (this->slider == NULL || this->sliderChangingBySliderDrag)
{
return;
}
this->ignoreChange = true;
this->sliderChangingByZoomControlOrInit = true;
double slider_range = scaleFunc(this->zoom->getZoomReal());
gtk_range_set_value(GTK_RANGE(this->slider), slider_range);
this->ignoreChange = false;
this->sliderChangingByZoomControlOrInit = false;
}
void ToolZoomSlider::zoomRangeValuesChanged()
@ -176,6 +192,8 @@ GtkToolItem* ToolZoomSlider::newItem()
g_signal_handlers_disconnect_by_func(this->slider, (void* )(sliderChanged), this);
g_signal_handlers_disconnect_by_func(this->slider, (void* )(sliderButtonPress), this);
g_signal_handlers_disconnect_by_func(this->slider, (void* )(sliderButtonRelease), this);
g_signal_handlers_disconnect_by_func(this->slider, (void* )(sliderHoverScroll), this);
g_signal_handlers_disconnect_by_func(this->slider, (void* )(sliderFormatValue), this);
}
double sliderMin = scaleFunc(DEFAULT_ZOOM_MIN);
@ -196,6 +214,7 @@ GtkToolItem* ToolZoomSlider::newItem()
g_signal_connect(this->slider, "value-changed", G_CALLBACK(sliderChanged), this);
g_signal_connect(this->slider, "button-press-event", G_CALLBACK(sliderButtonPress), this);
g_signal_connect(this->slider, "button-release-event", G_CALLBACK(sliderButtonRelease), this);
g_signal_connect(this->slider, "scroll-event", G_CALLBACK(sliderHoverScroll), this);
g_signal_connect(this->slider, "format-value", G_CALLBACK(sliderFormatValue), this);
gtk_scale_set_draw_value(GTK_SCALE(this->slider), true);
@ -212,10 +231,10 @@ GtkToolItem* ToolZoomSlider::newItem()
gtk_container_add(GTK_CONTAINER(it), this->slider);
ignoreChange = true;
sliderChangingByZoomControlOrInit = true;
double slider_range = scaleFunc(this->zoom->getZoomReal());
gtk_range_set_value(GTK_RANGE(this->slider), slider_range);
ignoreChange = false;
sliderChangingByZoomControlOrInit = false;
updateScaleMarks();

@ -30,6 +30,7 @@ public:
static void sliderChanged(GtkRange* range, ToolZoomSlider* self);
static bool sliderButtonPress(GtkRange* range, GdkEvent *event, ToolZoomSlider* self);
static bool sliderButtonRelease(GtkRange* range, GdkEvent *event, ToolZoomSlider* self);
static bool sliderHoverScroll(GtkWidget* range, GdkEventScroll* event, ToolZoomSlider* self);
static gchar* sliderFormatValue(GtkRange *range, gdouble value, ToolZoomSlider* self);
virtual void zoomChanged();
@ -53,12 +54,15 @@ private:
private:
XOJ_TYPE_ATTRIB;
bool ignoreChange = false;
/**
* The slider is currently changing by user, do not update value
*/
bool sliderChangingByUser = false;
bool sliderChangingByZoomControlOrInit = false;
bool sliderChangingBySliderDrag = false;
bool sliderChangingBySliderHoverScroll = false;
gint64 sliderHoverScrollLastTime = 0;
GtkWidget* slider = NULL;
ZoomControl* zoom = NULL;
bool horizontal = true;

Loading…
Cancel
Save