Revision: 4900
http://skim-app.svn.sourceforge.net/skim-app/?rev=4900&view=rev
Author: hofman
Date: 2008-10-30 23:21:13 +0000 (Thu, 30 Oct 2008)
Log Message:
-----------
More readable and modular determination of discrete scale factors in zoomable
pdf views
Modified Paths:
--------------
trunk/BDSKZoomablePDFView.m
trunk/SKSecondaryPDFView.m
Modified: trunk/BDSKZoomablePDFView.m
===================================================================
--- trunk/BDSKZoomablePDFView.m 2008-10-30 12:41:10 UTC (rev 4899)
+++ trunk/BDSKZoomablePDFView.m 2008-10-30 23:21:13 UTC (rev 4900)
@@ -223,6 +223,24 @@
}
}
+- (unsigned int)lowerIndexForScaleFactor:(float)scaleFactor {
+ unsigned int i, count = (sizeof(BDSKDefaultScaleMenuFactors) /
sizeof(float));
+ for (i = count - 1; i > 0; i--) {
+ if (scaleFactor * 1.01 > BDSKDefaultScaleMenuFactors[i])
+ return i;
+ }
+ return 1;
+}
+
+- (unsigned int)upperIndexForScaleFactor:(float)scaleFactor {
+ unsigned int i, count = (sizeof(BDSKDefaultScaleMenuFactors) /
sizeof(float));
+ for (i = 1; i < count; i++) {
+ if (scaleFactor * 0.99 < BDSKDefaultScaleMenuFactors[i])
+ return i;
+ }
+ return count - 1;
+}
+
- (void)setScaleFactor:(float)newScaleFactor {
[self setScaleFactor:newScaleFactor adjustPopup:YES];
}
@@ -233,12 +251,13 @@
if (newScaleFactor < 0.01) {
newScaleFactor = 0.0;
} else {
- unsigned cnt = 1, numberOfDefaultItems =
(sizeof(BDSKDefaultScaleMenuFactors) / sizeof(float));
-
- // We only work with some preset zoom values, so choose one of the
appropriate values
- while (cnt < numberOfDefaultItems - 1 && newScaleFactor > 0.5 *
(BDSKDefaultScaleMenuFactors[cnt] + BDSKDefaultScaleMenuFactors[cnt + 1]))
cnt++;
- [scalePopUpButton selectItemAtIndex:cnt];
- newScaleFactor = BDSKDefaultScaleMenuFactors[cnt];
+ unsigned int i = [self lowerIndexForScaleFactor:newScaleFactor],
upper = [self upperIndexForScaleFactor:newScaleFactor];
+ if (upper > i) {
+ if (newScaleFactor > 0.5 * (BDSKDefaultScaleMenuFactors[i] +
BDSKDefaultScaleMenuFactors[upper]))
+ i = upper;
+ }
+ [scalePopUpButton selectItemAtIndex:i];
+ newScaleFactor = BDSKDefaultScaleMenuFactors[i];
}
}
@@ -257,14 +276,10 @@
[super zoomIn:sender];
[self setAutoFits:NO adjustPopup:YES];
}else{
- int cnt = 1, numberOfDefaultItems =
(sizeof(BDSKDefaultScaleMenuFactors) / sizeof(float));
- float scaleFactor = [self scaleFactor];
-
- // We only work with some preset zoom values, so choose one of the
appropriate values (Fudge a little for floating point == to work)
- while (cnt < numberOfDefaultItems && scaleFactor * .99 >
BDSKDefaultScaleMenuFactors[cnt]) cnt++;
- cnt++;
- while (cnt >= numberOfDefaultItems) cnt--;
- [self setScaleFactor:BDSKDefaultScaleMenuFactors[cnt]];
+ unsigned int numberOfDefaultItems =
(sizeof(BDSKDefaultScaleMenuFactors) / sizeof(float));
+ unsigned int i = [self lowerIndexForScaleFactor:[self scaleFactor]];
+ if (i < numberOfDefaultItems - 1) i++;
+ [self setScaleFactor:BDSKDefaultScaleMenuFactors[i]];
}
}
@@ -273,35 +288,25 @@
[super zoomOut:sender];
[self setAutoFits:NO adjustPopup:YES];
}else{
- int cnt = 1, numberOfDefaultItems =
(sizeof(BDSKDefaultScaleMenuFactors) / sizeof(float));
- float scaleFactor = [self scaleFactor];
-
- // We only work with some preset zoom values, so choose one of the
appropriate values (Fudge a little for floating point == to work)
- while (cnt < numberOfDefaultItems && scaleFactor * .99 >
BDSKDefaultScaleMenuFactors[cnt]) cnt++;
- cnt--;
- while (cnt < 1) cnt++;
- [self setScaleFactor:BDSKDefaultScaleMenuFactors[cnt]];
+ unsigned int i = [self upperIndexForScaleFactor:[self scaleFactor]];
+ if (i > 1) i--;
+ [self setScaleFactor:BDSKDefaultScaleMenuFactors[i]];
}
}
- (BOOL)canZoomIn{
if ([super canZoomIn] == NO)
return NO;
- unsigned cnt = 1, numberOfDefaultItems =
(sizeof(BDSKDefaultScaleMenuFactors) / sizeof(float));
- float scaleFactor = [self scaleFactor];
- // We only work with some preset zoom values, so choose one of the
appropriate values (Fudge a little for floating point == to work)
- while (cnt < numberOfDefaultItems && scaleFactor * .99 >
BDSKDefaultScaleMenuFactors[cnt]) cnt++;
- return cnt < numberOfDefaultItems - 1;
+ unsigned int numberOfDefaultItems = (sizeof(BDSKDefaultScaleMenuFactors) /
sizeof(float));
+ unsigned int i = [self lowerIndexForScaleFactor:[self scaleFactor]];
+ return i < numberOfDefaultItems - 1;
}
- (BOOL)canZoomOut{
if ([super canZoomOut] == NO)
return NO;
- unsigned cnt = 1, numberOfDefaultItems =
(sizeof(BDSKDefaultScaleMenuFactors) / sizeof(float));
- float scaleFactor = [self scaleFactor];
- // We only work with some preset zoom values, so choose one of the
appropriate values (Fudge a little for floating point == to work)
- while (cnt < numberOfDefaultItems && scaleFactor * .99 >
BDSKDefaultScaleMenuFactors[cnt]) cnt++;
- return cnt > 1;
+ unsigned int i = [self upperIndexForScaleFactor:[self scaleFactor]];
+ return i > 1;
}
- (void)goToPage:(PDFPage *)aPage {
Modified: trunk/SKSecondaryPDFView.m
===================================================================
--- trunk/SKSecondaryPDFView.m 2008-10-30 12:41:10 UTC (rev 4899)
+++ trunk/SKSecondaryPDFView.m 2008-10-30 23:21:13 UTC (rev 4900)
@@ -346,6 +346,24 @@
switching = savedSwitching;
}
+- (unsigned int)lowerIndexForScaleFactor:(float)scaleFactor {
+ unsigned int i, count = (sizeof(SKDefaultScaleMenuFactors) /
sizeof(float));
+ for (i = count - 1; i > 1; i--) {
+ if (scaleFactor * 1.01 > SKDefaultScaleMenuFactors[i])
+ return i;
+ }
+ return 2;
+}
+
+- (unsigned int)upperIndexForScaleFactor:(float)scaleFactor {
+ unsigned int i, count = (sizeof(SKDefaultScaleMenuFactors) /
sizeof(float));
+ for (i = 2; i < count; i++) {
+ if (scaleFactor * 0.99 < SKDefaultScaleMenuFactors[i])
+ return i;
+ }
+ return count - 1;
+}
+
- (void)setScaleFactor:(float)newScaleFactor {
BOOL savedSwitching = switching;
switching = YES;
@@ -366,12 +384,13 @@
if (newScaleFactor < 0.01) {
newScaleFactor = 0.0;
} else {
- unsigned cnt = 2, numberOfDefaultItems =
(sizeof(SKDefaultScaleMenuFactors) / sizeof(float));
-
- // We only work with some preset zoom values, so choose one of the
appropriate values
- while (cnt < numberOfDefaultItems - 1 && newScaleFactor > 0.5 *
(SKDefaultScaleMenuFactors[cnt] + SKDefaultScaleMenuFactors[cnt + 1])) cnt++;
- [scalePopUpButton selectItemAtIndex:cnt];
- newScaleFactor = SKDefaultScaleMenuFactors[cnt];
+ unsigned int i = [self lowerIndexForScaleFactor:newScaleFactor],
upper = [self upperIndexForScaleFactor:newScaleFactor];
+ if (upper > i) {
+ if (newScaleFactor > 0.5 * (SKDefaultScaleMenuFactors[i] +
SKDefaultScaleMenuFactors[upper]))
+ i = upper;
+ }
+ [scalePopUpButton selectItemAtIndex:i];
+ newScaleFactor = SKDefaultScaleMenuFactors[i];
}
}
@@ -387,49 +406,31 @@
}
- (IBAction)zoomIn:(id)sender{
- int cnt = 2, numberOfDefaultItems = (sizeof(SKDefaultScaleMenuFactors) /
sizeof(float));
- float scaleFactor = [self scaleFactor];
-
- // We only work with some preset zoom values, so choose one of the
appropriate values (Fudge a little for floating point == to work)
- while (cnt < numberOfDefaultItems && scaleFactor * .99 >
SKDefaultScaleMenuFactors[cnt]) cnt++;
- cnt++;
- while (cnt >= numberOfDefaultItems) cnt--;
- [self setScaleFactor:SKDefaultScaleMenuFactors[cnt] adjustPopup:YES];
+ unsigned int numberOfDefaultItems = (sizeof(SKDefaultScaleMenuFactors) /
sizeof(float));
+ unsigned int i = [self lowerIndexForScaleFactor:[self scaleFactor]];
+ if (i < numberOfDefaultItems - 1) i++;
+ [self setScaleFactor:SKDefaultScaleMenuFactors[i] adjustPopup:YES];
}
- (IBAction)zoomOut:(id)sender{
- int cnt = 2, numberOfDefaultItems = (sizeof(SKDefaultScaleMenuFactors) /
sizeof(float));
- float scaleFactor = [self scaleFactor];
-
- // We only work with some preset zoom values, so choose one of the
appropriate values (Fudge a little for floating point == to work)
- while (cnt < numberOfDefaultItems && scaleFactor * .99 >
SKDefaultScaleMenuFactors[cnt]) cnt++;
- cnt--;
- while (cnt < 2) cnt++;
- [self setScaleFactor:SKDefaultScaleMenuFactors[cnt] adjustPopup:YES];
+ unsigned int i = [self upperIndexForScaleFactor:[self scaleFactor]];
+ if (i > 2) i--;
+ [self setScaleFactor:SKDefaultScaleMenuFactors[i] adjustPopup:YES];
}
- (BOOL)canZoomIn{
if ([super canZoomIn] == NO)
return NO;
-
- unsigned cnt = 2, numberOfDefaultItems =
(sizeof(SKDefaultScaleMenuFactors) / sizeof(float));
- float scaleFactor = [self scaleFactor];
-
- // We only work with some preset zoom values, so choose one of the
appropriate values (Fudge a little for floating point == to work)
- while (cnt < numberOfDefaultItems && scaleFactor * .99 >
SKDefaultScaleMenuFactors[cnt]) cnt++;
- return cnt < numberOfDefaultItems - 1;
+ unsigned int numberOfDefaultItems = (sizeof(SKDefaultScaleMenuFactors) /
sizeof(float));
+ unsigned int i = [self lowerIndexForScaleFactor:[self scaleFactor]];
+ return i < numberOfDefaultItems - 1;
}
- (BOOL)canZoomOut{
if ([super canZoomOut] == NO)
return NO;
-
- unsigned cnt = 2, numberOfDefaultItems =
(sizeof(SKDefaultScaleMenuFactors) / sizeof(float));
- float scaleFactor = [self scaleFactor];
-
- // We only work with some preset zoom values, so choose one of the
appropriate values (Fudge a little for floating point == to work)
- while (cnt < numberOfDefaultItems && scaleFactor * .99 >
SKDefaultScaleMenuFactors[cnt]) cnt++;
- return cnt > 2;
+ unsigned int i = [self upperIndexForScaleFactor:[self scaleFactor]];
+ return i > 2;
}
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Skim-app-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/skim-app-commit