You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
157 lines
3.7 KiB
157 lines
3.7 KiB
// zoom.cpp
|
|
//
|
|
// Part of KVIEWSHELL - A framework for multipage text/gfx viewers
|
|
//
|
|
// (C) 2002 Stefan Kebekus
|
|
// Distributed under the GPL
|
|
|
|
// Add header files alphabetically
|
|
|
|
#include <config.h>
|
|
|
|
#include <math.h>
|
|
#include <qstringlist.h>
|
|
|
|
#include <klocale.h>
|
|
|
|
#include "zoom.h"
|
|
#include "zoomlimits.h"
|
|
|
|
float zoomVals[] = {0.20, 0.33, 0.50, 0.75, 1.00, 1.25, 1.50, 2.00, 2.50, 0};
|
|
|
|
Zoom::Zoom()
|
|
{
|
|
valueNames << i18n("Fit to Page Width");
|
|
valueNames << i18n("Fit to Page Height");
|
|
valueNames << i18n("Fit to Page");
|
|
|
|
_zoomValue = 1.0;
|
|
valNo = 6; // 1.0 is 6rd entry in the list
|
|
for(int i=0; zoomVals[i] != 0; i++)
|
|
valueNames << QString("%1%").arg(zoomVals[i]);
|
|
}
|
|
|
|
|
|
void Zoom::setZoomValue(const QString &cval)
|
|
{
|
|
float fval;
|
|
|
|
// Remove a trailing '%', if any
|
|
QString val = cval.stripWhiteSpace();
|
|
if (val.right(1) == "%")
|
|
val = val.left(val.length()-1).stripWhiteSpace();
|
|
|
|
bool ok;
|
|
fval = val.toFloat(&ok)/100.0;
|
|
|
|
if (ok == true)
|
|
setZoomValue(fval);
|
|
else {
|
|
emit(zoomNamesChanged(valueNames));
|
|
emit(valNoChanged(valNo));
|
|
emit(zoomNameChanged(QString("%1%").arg((int)(_zoomValue*100.0+0.5))));
|
|
}
|
|
}
|
|
|
|
void Zoom::setZoomFitWidth(float zoom)
|
|
{
|
|
// Make sure _zoomValue is in the permissible range!
|
|
if (zoom < ZoomLimits::MinZoom/1000.0)
|
|
zoom = ZoomLimits::MinZoom/1000.0;
|
|
if (zoom > ZoomLimits::MaxZoom/1000.0)
|
|
zoom = ZoomLimits::MaxZoom/1000.0;
|
|
_zoomValue = zoom;
|
|
|
|
valNo = 0;
|
|
emit(valNoChanged(valNo));
|
|
emit(zoomNameChanged(QString("%1%").arg((int)(_zoomValue*100.0+0.5))));
|
|
}
|
|
|
|
void Zoom::setZoomFitHeight(float zoom)
|
|
{
|
|
// Make sure _zoomValue is in the permissible range!
|
|
if (zoom < ZoomLimits::MinZoom/1000.0)
|
|
zoom = ZoomLimits::MinZoom/1000.0;
|
|
if (zoom > ZoomLimits::MaxZoom/1000.0)
|
|
zoom = ZoomLimits::MaxZoom/1000.0;
|
|
_zoomValue = zoom;
|
|
|
|
valNo = 1;
|
|
emit(valNoChanged(valNo));
|
|
emit(zoomNameChanged(QString("%1%").arg((int)(_zoomValue*100.0+0.5))));
|
|
}
|
|
|
|
void Zoom::setZoomFitPage(float zoom)
|
|
{
|
|
// Make sure _zoomValue is in the permissible range!
|
|
if (zoom < ZoomLimits::MinZoom/1000.0)
|
|
zoom = ZoomLimits::MinZoom/1000.0;
|
|
if (zoom > ZoomLimits::MaxZoom/1000.0)
|
|
zoom = ZoomLimits::MaxZoom/1000.0;
|
|
_zoomValue = zoom;
|
|
|
|
valNo = 2;
|
|
emit(valNoChanged(valNo));
|
|
emit(zoomNameChanged(QString("%1%").arg((int)(_zoomValue*100.0+0.5))));
|
|
}
|
|
|
|
void Zoom::setZoomValue(float f)
|
|
{
|
|
// Make sure _zoomValue is in the permissible range!
|
|
if (f < ZoomLimits::MinZoom/1000.0)
|
|
f = ZoomLimits::MinZoom/1000.0;
|
|
if (f > ZoomLimits::MaxZoom/1000.0)
|
|
f = ZoomLimits::MaxZoom/1000.0;
|
|
_zoomValue = f;
|
|
|
|
|
|
valueNames.clear();
|
|
|
|
valueNames << i18n("Fit to Page Width");
|
|
valueNames << i18n("Fit to Page Height");
|
|
valueNames << i18n("Fit to Page");
|
|
|
|
bool flag = false;
|
|
for(int i = 0; zoomVals[i] != 0; i++) {
|
|
if ((_zoomValue <= zoomVals[i]) && (flag == false)) {
|
|
flag = true;
|
|
valNo = i + 3;
|
|
if (fabs(_zoomValue-zoomVals[i]) > 0.01)
|
|
valueNames << QString("%1%").arg((int)(_zoomValue*100.0+0.5));
|
|
}
|
|
valueNames << QString("%1%").arg((int)(zoomVals[i]*100.0+0.5));
|
|
}
|
|
|
|
if (flag == false) {
|
|
valNo = valueNames.size();
|
|
valueNames << QString("%1%").arg((int)(_zoomValue*100.0+0.5));
|
|
}
|
|
|
|
emit(zoomNamesChanged(valueNames));
|
|
emit(valNoChanged(valNo));
|
|
emit(zoomNameChanged(QString("%1%").arg((int)(_zoomValue*100.0+0.5))));
|
|
}
|
|
|
|
float Zoom::zoomIn()
|
|
{
|
|
int i;
|
|
for(i=0; zoomVals[i] != 0; i++)
|
|
if (zoomVals[i] > _zoomValue)
|
|
return zoomVals[i];
|
|
|
|
return zoomVals[i-1];
|
|
}
|
|
|
|
float Zoom::zoomOut()
|
|
{
|
|
float result = zoomVals[0];
|
|
|
|
for(int i=0; zoomVals[i] != 0; i++)
|
|
if (_zoomValue > zoomVals[i])
|
|
result = zoomVals[i];
|
|
|
|
return result;
|
|
}
|
|
|
|
#include "zoom.moc"
|