Merge remote-tracking branch 'upstream/master' into improveZoomPresentation

presentation
Peter Klausing 7 years ago
commit 3aa95bda3f
  1. 46
      src/gui/toolbarMenubar/ToolZoomSlider.cpp
  2. 8
      src/gui/toolbarMenubar/ToolZoomSlider.h
  3. 1
      src/model/eraser/EraseableStroke.cpp

@ -25,24 +25,25 @@ void ToolZoomSlider::sliderChanged(GtkRange* range, ToolZoomSlider* self)
{
XOJ_CHECK_TYPE_OBJ(self, ToolZoomSlider);
if (self->ignoreChange || !self->sliderChangingByUser || self->zoom->isZoomPresentationMode())
if (!self->sliderChangingByZoomControlOrInit &&
!self->zoom->isZoomPresentationMode() &&
(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 && !self->zoom->isZoomPresentationMode())
if(!self->sliderChangingBySliderDrag && !self->zoom->isZoomPresentationMode())
{
self->sliderChangingByUser = true;
self->zoom->setZoomFitMode(false);
self->zoom->startZoomSequence(-1, -1);
self->sliderChangingBySliderDrag = true;
}
return false;
}
@ -51,11 +52,23 @@ bool ToolZoomSlider::sliderButtonRelease(GtkRange* range, GdkEvent *event, ToolZ
{
XOJ_CHECK_TYPE_OBJ(self, ToolZoomSlider);
if(self->sliderChangingByUser && !self->zoom->isZoomPresentationMode())
self->zoom->endZoomSequence();
self->sliderChangingBySliderDrag = 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->endZoomSequence();
self->sliderChangingByUser = false;
self->zoom->setZoomFitMode(false);
self->zoom->startZoomSequence(-1, -1);
}
self->sliderChangingBySliderHoverScroll = true;
self->sliderHoverScrollLastTime = now;
return false;
}
@ -68,15 +81,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 +189,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 +211,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 +228,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;

@ -385,6 +385,7 @@ GList* EraseableStroke::getStroke(Stroke* original)
s = new Stroke();
s->setColor(original->getColor());
s->setToolType(original->getToolType());
s->setLineStyle(original->getLineStyle());
s->setWidth(original->getWidth());
list = g_list_append(list, s);
}

Loading…
Cancel
Save