Make zoomSteps configurable

presentation
Peter Klausing 7 years ago
parent 0475517f40
commit b8bc2f0a67
  1. 4
      src/control/Control.cpp
  2. 134
      src/control/zoom/ZoomControl.cpp
  3. 111
      src/control/zoom/ZoomControl.h
  4. 4
      src/gui/XournalView.cpp

@ -1719,10 +1719,10 @@ void Control::zoomCallback(ActionType type)
zoomFit();
break;
case ACTION_ZOOM_IN:
zoom->zoomIn();
zoom->zoomOneStep(ZOOM_IN);
break;
case ACTION_ZOOM_OUT:
zoom->zoomOut();
zoom->zoomOneStep(ZOOM_OUT);
break;
default:
break;

@ -6,26 +6,29 @@
#include "gui/XournalView.h"
ZoomControl::ZoomControl()
: view(NULL)
: view(NULL),
zoom(1.0),
zoomReal(1.0),
lastZoomValue(1.0),
zoomFitMode(true),
zoom100Value(1.0),
zoomFitValue(1.0),
zoomSequenceStart(-1),
zoomWidgetPosX(0),
zoomWidgetPosY(0),
scrollPositionX(0),
scrollPositionY(0),
zoomStepReal(DEFAULT_ZOOM_STEP),
zoomStepScrollReal(DEFAULT_ZOOM_STEP_SCROLL),
zoomMaxReal(DEFAULT_ZOOM_MAX),
zoomMinReal(DEFAULT_ZOOM_MIN)
{
XOJ_INIT_TYPE(ZoomControl);
this->zoom = 1.0;
this->lastZoomValue = 1.0;
this->zoom100Value = 1.0;
this->zoomFitValue = 1.0;
this->zoomFitMode = true;
this->zoomStep = DEFAULT_ZOOM_STEP;
this->zoomStep = DEFAULT_ZOOM_STEP * this->zoom100Value;
this->zoomStepScroll = DEFAULT_ZOOM_STEP_SCROLL * this->zoom100Value;
this->zoomMax = DEFAULT_ZOOM_MAX * this->zoom100Value;
this->zoomMin = DEFAULT_ZOOM_MIN * this->zoom100Value;
this->zoomSequenceStart = -1;
this->zoomWidgetPosX = 0;
this->zoomWidgetPosY = 0;
this->scrollPositionX = 0;
this->scrollPositionY = 0;
}
ZoomControl::~ZoomControl()
@ -35,6 +38,38 @@ ZoomControl::~ZoomControl()
XOJ_RELEASE_TYPE(ZoomControl);
}
void ZoomControl::zoomOneStep(bool zoomIn, double x, double y)
{
XOJ_CHECK_TYPE(ZoomControl);
startZoomSequence(x, y);
if(zoomIn)
this->zoom += this->zoomStep;
else
this->zoom -= this->zoomStep;
this->zoomFitMode = false;
fireZoomChanged();
endZoomSequence();
}
void ZoomControl::zoomScroll(bool zoomIn, double x, double y)
{
XOJ_CHECK_TYPE(ZoomControl);
startZoomSequence(x, y);
if(zoomIn)
this->zoom += this->zoomStepScroll;
else
this->zoom -= this->zoomStepScroll;
this->zoomFitMode = false;
fireZoomChanged();
endZoomSequence();
}
/**
* Call this before any zoom is done, it saves the current page and position
*
@ -197,8 +232,10 @@ void ZoomControl::setZoom100(double zoom)
XOJ_CHECK_TYPE(ZoomControl);
this->zoom100Value = zoom;
this->setZoomMax(DEFAULT_ZOOM_MAX * this->zoom100Value);
this->setZoomMin(DEFAULT_ZOOM_MIN * this->zoom100Value);
this->zoomStep = this->zoomStepReal * zoom;
this->zoomStepScroll = this->zoomStepScrollReal * zoom;
this->zoomMax = this->zoomMaxReal * zoom;
this->zoomMin = this->zoomMinReal * zoom;
fireZoomRangeValueChanged();
}
@ -256,42 +293,48 @@ void ZoomControl::zoomFit()
endZoomSequence();
}
void ZoomControl::zoomIn(double x, double y)
double ZoomControl::getZoomStep()
{
XOJ_CHECK_TYPE(ZoomControl);
startZoomSequence(x, y);
return this->zoomStep;
}
this->zoom += this->zoomStep;
this->zoomFitMode = false;
fireZoomChanged();
double ZoomControl::getZoomStepReal()
{
XOJ_CHECK_TYPE(ZoomControl);
endZoomSequence();
return this->zoomStepReal;
}
void ZoomControl::zoomOut(double x, double y)
void ZoomControl::setZoomStep(double zoomStep)
{
XOJ_CHECK_TYPE(ZoomControl);
startZoomSequence(x, y);
this->zoomStepReal = zoomStep;
this->zoomStepReal = zoomStep * this->zoom100Value;
}
this->zoom -= this->zoomStep;
this->zoomFitMode = false;
fireZoomChanged();
double ZoomControl::getZoomStepScroll()
{
XOJ_CHECK_TYPE(ZoomControl);
endZoomSequence();
return this->zoomStepScroll;
}
double ZoomControl::getZoomStep()
double ZoomControl::getZoomStepScrollReal()
{
return this->zoomStep;
XOJ_CHECK_TYPE(ZoomControl);
return this->zoomStepScrollReal;
}
void ZoomControl::setZoomStep(double zoomStep)
void ZoomControl::setZoomStepScroll(double zoomStep)
{
XOJ_CHECK_TYPE(ZoomControl);
this->zoomStep = zoomStep;
this->zoomStepScrollReal = zoomStep;
this->zoomStepScrollReal = zoomStep * this->zoom100Value;
}
double ZoomControl::getZoomMax()
@ -301,11 +344,19 @@ double ZoomControl::getZoomMax()
return this->zoomMax;
}
double ZoomControl::getZoomMaxReal()
{
XOJ_CHECK_TYPE(ZoomControl);
return this->zoomMaxReal;
}
void ZoomControl::setZoomMax(double zoomMax)
{
XOJ_CHECK_TYPE(ZoomControl);
this->zoomMax = zoomMax;
this->zoomMaxReal = zoomMax;
this->zoomMax = zoomMax * this->zoom100Value;
}
double ZoomControl::getZoomMin()
@ -315,13 +366,20 @@ double ZoomControl::getZoomMin()
return this->zoomMin;
}
void ZoomControl::setZoomMin(double zoomMin)
double ZoomControl::getZoomMinReal()
{
XOJ_CHECK_TYPE(ZoomControl);
this->zoomMin = zoomMin;
return this->zoomMinReal;
}
void ZoomControl::setZoomMin(double zoomMin)
{
XOJ_CHECK_TYPE(ZoomControl);
this->zoomMinReal = zoomMin;
this->zoomMin = zoomMin * this->zoom100Value;
}
bool ZoomControl::onScrolledwindowMainScrollEvent(GdkEventScroll* event)
{
@ -345,12 +403,12 @@ bool ZoomControl::onScrolledwindowMainScrollEvent(GdkEventScroll* event)
if (event->direction == GDK_SCROLL_UP ||
(event->direction == GDK_SCROLL_SMOOTH && event->delta_y > 0))
{
zoomOut(event->x + wx, event->y + wy);
zoomScroll(ZOOM_IN, event->x + wx, event->y + wy);
}
else if (event->direction == GDK_SCROLL_DOWN ||
(event->direction == GDK_SCROLL_SMOOTH && event->delta_y < 0))
{
zoomIn(event->x + wx, event->y + wy);
zoomScroll(ZOOM_OUT, event->x + wx, event->y + wy);
}
return true;
}

@ -19,7 +19,10 @@
#define DEFAULT_ZOOM_MAX 7
#define DEFAULT_ZOOM_MIN 0.3
#define DEFAULT_ZOOM_STEP 0.04
#define DEFAULT_ZOOM_STEP 0.1
#define DEFAULT_ZOOM_STEP_SCROLL 0.01
#define ZOOM_IN true
#define ZOOM_OUT false
class XournalView;
class XojPageView;
@ -31,20 +34,55 @@ public:
ZoomControl();
virtual ~ZoomControl();
void zoomIn(double x = -1, double y = -1);
void zoomOut(double x = -1, double y = -1);
/**
* Zoom one step
*
* @param zoomIn zoom in or out
* @param x x position of focus to zoom
* @param y y position of focus to zoom
*/
void zoomOneStep(bool zoomIn, double x = -1, double y = -1);
/**
* Zoom one step
*
* @param zoomIn zoom in or out
* @param x x position of focus to zoom
* @param y y position of focus to zoom
*/
void zoomScroll(bool zoomIn, double x, double y);
/**
* Zoom so that the page fits the current size of the window
*/
void zoomFit();
/**
* Zoom so that the displayed page on the screen has the same size as the real size
* The dpi has to be set correctly
*/
void zoom100();
/**
* @return zoom value depending zoom100Value
*/
double getZoom();
/**
* Set the current zoom, does not preserve the current page position.
* Use startZoomSequence() / zoomSequnceChange() / endZoomSequence() to preserve position
* e.g. use zoomOneStep function
*
* @param zoom zoom value depending zoom100Value
*/
void setZoom(double zoom);
/**
* Updates the when dpi is changed.
* updates zoomMax, zoomMin, zoomStepBig, zoomStepScroll
*
* @param zoom zoom value depending zoom100Value
*/
void setZoom100(double zoom);
void setZoomFit(double zoom);
@ -87,12 +125,19 @@ public:
Rectangle getVisibleRect();
double getZoomStep();
double getZoomStepReal();
void setZoomStep(double zoomStep);
double getZoomStepScroll();
double getZoomStepScrollReal();
void setZoomStepScroll(double zoomStep);
double getZoomMax();
double getZoomMaxReal();
void setZoomMax(double zoomMax);
double getZoomMin();
double getZoomMinReal();
void setZoomMin(double zoomMin);
protected:
@ -108,15 +153,35 @@ private:
std::vector<ZoomListener*> listener;
/**
* current Zoom value
* depends dpi (REAL_PERCENTAGE_VALUE * zoom100Value)
*/
double zoom;
/**
* Real current Zoom value
*/
double zoomReal;
/**
* for zoom sequence start zoom value
* depends dpi (REAL_PERCENTAGE_VALUE * zoom100Value)
*/
double lastZoomValue;
bool zoomFitMode;
/**
* Zoom value for 100% depends on the dpi
*/
double zoom100Value;
double zoomFitValue;
/**
* Base zoom on start, for relative zoom (Gesture)
*/
double zoomSequenceStart;
/**
* Zoom point on widget, will not be zoomed!
*/
@ -138,11 +203,45 @@ private:
double scrollPositionY;
/**
* Base zoom on start, for relative zoom (Gesture)
* Zoomstep value for Ctrl - and Zoom In and Out Button
* depends dpi (REAL_PERCENTAGE_VALUE * zoom100Value)
*/
double zoomSequenceStart;
double zoomStep;
/**
* Real zoomstep value for Ctrl + and Zoom In and Out Button
*/
double zoomStepReal;
/**
* Zoomstep value for Ctrl-Scroll zooming
* depends dpi (REAL_PERCENTAGE_VALUE * zoom100Value)
*/
double zoomStepScroll;
/**
* Real zoomstep value for Ctrl-Scroll zooming
*/
double zoomStepScrollReal;
/**
* Zoom maximal value
* depends dpi (REAL_PERCENTAGE_VALUE * zoom100Value)
*/
double zoomMax;
/**
* Real zoom maximal value
*/
double zoomMaxReal;
/**
* Zoom mininmal value
* depends dpi (REAL_PERCENTAGE_VALUE * zoom100Value)
*/
double zoomMin;
/**
* Real zoom mininmal value
* depends dpi (REAL_PERCENTAGE_VALUE * zoom100Value)
*/
double zoomMinReal;
};

@ -594,14 +594,14 @@ void XournalView::zoomIn()
{
XOJ_CHECK_TYPE(XournalView);
control->getZoomControl()->zoomIn();
control->getZoomControl()->zoomOneStep(ZOOM_IN);
}
void XournalView::zoomOut()
{
XOJ_CHECK_TYPE(XournalView);
control->getZoomControl()->zoomOut();
control->getZoomControl()->zoomOneStep(ZOOM_OUT);
}
void XournalView::ensureRectIsVisible(int x, int y, int width, int height)

Loading…
Cancel
Save