<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>images/zoom-in.png</filename>
    </added>
    <added>
      <filename>images/zoom-out.png</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -46,4 +46,7 @@
 - (IBAction)goHome:(id)sender;
 - (IBAction)goNextPage:(id)sender;
 - (IBAction)goPrevPage:(id)sender;
+- (IBAction)zoom:(id)sender;
+- (IBAction)zoomIn:(id)sender;
+- (IBAction)zoomOut:(id)sender;
 @end</diff>
      <filename>Classes/CHMBrowserController.h</filename>
    </modified>
    <modified>
      <diff>@@ -94,6 +94,17 @@
 
 // Implement viewDidLoad to do additional setup after loading the view.
 - (void)viewDidLoad {
+    UISegmentedControl *fontControl = [[UISegmentedControl alloc] initWithItems:
+                                            [NSArray arrayWithObjects:
+                                                    [UIImage imageNamed:@&quot;zoom-out.png&quot;],
+                                                    [UIImage imageNamed:@&quot;zoom-in.png&quot;],
+                                             nil]];
+    [fontControl addTarget:self action:@selector(zoom:) forControlEvents:UIControlEventValueChanged];
+    fontControl.frame = CGRectMake(0, 0, 80, 30);
+    fontControl.segmentedControlStyle = UISegmentedControlStyleBar;
+    fontControl.momentary = YES;
+    self.navigationItem.titleView = fontControl;
+    [fontControl release];
 	[self resetNavBar];
 
 	CHMDocument * doc = [CHMDocument CurrentDocument];
@@ -256,6 +267,32 @@
 	[tocStack release];
 }
 
+- (IBAction)zoom:(id)sender
+{
+    UISegmentedControl* segCtl = sender;
+	// the segmented control was clicked, handle it here
+	switch ([segCtl selectedSegmentIndex]) {
+		case 0:
+			[self zoomOut:self];
+			break;
+		case 1:
+			[self zoomIn:self];
+			break;
+	}    
+}
+
+- (IBAction)zoomIn:(id)sender
+{
+    [[CHMDocument CurrentDocument] zoomIn];
+    [webView reload];
+}
+
+- (IBAction)zoomOut:(id)sender
+{
+    [[CHMDocument CurrentDocument] zoomOut];
+    [webView reload];    
+}
+
 #pragma mark webviewdelegate
 - (void)webViewDidStartLoad:(UIWebView *)webView
 {</diff>
      <filename>Classes/CHMBrowserController.m</filename>
    </modified>
    <modified>
      <diff>@@ -28,6 +28,7 @@ struct chmFile;
 	CHMIndex *indexSource ;
 
 	NSString* encodingName;
+    float zoomFactor;
 }
 
 @property (readonly) NSString* fileName;
@@ -53,4 +54,7 @@ struct chmFile;
 - (LinkItem*)idxItems;
 
 - (BOOL)tocIsReady;
+
+- (void)zoomIn;
+- (void)zoomOut;
 @end</diff>
      <filename>Classes/CHMDocument.h</filename>
    </modified>
    <modified>
      <diff>@@ -261,11 +261,18 @@ static CHMDocument *currentDocument = nil;
 	return title;
 }
 
+- (id)init
+{
+    tocSource = nil;
+    zoomFactor = 1;
+    return self;
+}
+
 - (id)initWithoutTOCWithFileName:(NSString*)filename
 {
+    [self init];
 	fileName = filename;
 	[fileName retain];
-	tocSource = nil;
 	NSString* docDir = [NSString stringWithFormat:@&quot;%@/Documents&quot;, NSHomeDirectory()];
 	NSString* filePath = [NSString stringWithFormat:@&quot;%@/%@&quot;, docDir, filename];
 	chmFileHandle = chm_open( [filePath fileSystemRepresentation] );
@@ -276,9 +283,9 @@ static CHMDocument *currentDocument = nil;
 
 - (id)initWithFileName:(NSString *)filename
 {
+    [self init];
 	fileName = filename;
 	[fileName retain];
-	tocSource = nil;
 	NSString* docDir = [NSString stringWithFormat:@&quot;%@/Documents&quot;, NSHomeDirectory()];
 	[self readFromFile:[NSString stringWithFormat:@&quot;%@/%@&quot;, docDir, filename]];
 	return self;
@@ -364,17 +371,28 @@ static CHMDocument *currentDocument = nil;
     else {
 		path = [NSString stringWithFormat:@&quot;/%@&quot;, path];
     }
+
+    NSString *prefix = @&quot;&quot;;
+    if (([[[path pathExtension] lowercaseString] isEqualToString:@&quot;html&quot;] ||
+         [[[path pathExtension] lowercaseString] isEqualToString:@&quot;htm&quot;]))
+    {
+        prefix = [NSString stringWithFormat:@&quot;&lt;style&gt;body{-webkit-text-size-adjust: %f%%;}&lt;/style&gt;&quot;, zoomFactor * 100];
+    }
     
 	struct chmUnitInfo info;
 	void *buffer = nil;
 	@synchronized(self)
 	{
 		if (chm_resolve_object( chmFileHandle, [path UTF8String], &amp;info ) == CHM_RESOLVE_SUCCESS)
-		{    
-			buffer = malloc( info.length );
+		{
+            size_t offset = [prefix lengthOfBytesUsingEncoding:NSASCIIStringEncoding];
+            size_t len = info.length + offset;
+			buffer = malloc( len  );
+            if (offset &gt; 0)
+                memcpy(buffer, [prefix cStringUsingEncoding:NSASCIIStringEncoding], offset);
 			
 			if( buffer ) {
-				if( !chm_retrieve_object( chmFileHandle, &amp;info, buffer, 0, info.length ) ) {
+				if( !chm_retrieve_object( chmFileHandle, &amp;info, buffer + offset, 0, info.length ) ) {
 					NSLog( @&quot;Failed to load %qu bytes for %@&quot;, (long long)info.length, path );
 					free( buffer );
 					buffer = nil;
@@ -541,6 +559,17 @@ static CHMDocument *currentDocument = nil;
 	return encodingName;
 }
 
+#pragma mark zoom
+- (void)zoomIn
+{
+    zoomFactor = zoomFactor * 1.2;
+}
+
+- (void)zoomOut
+{
+    zoomFactor = zoomFactor / 1.2;
+}
+
 #pragma mark preference
 - (void)setPref:(id)object forKey:(id)key
 {</diff>
      <filename>Classes/CHMDocument.m</filename>
    </modified>
    <modified>
      <diff>@@ -68,6 +68,8 @@
 		C3EAB82E0E9DDA8300268541 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = C3EAB82D0E9DDA8300268541 /* Localizable.strings */; };
 		C3EAB9AE0E9E2F0D00268541 /* IndexController.xib in Resources */ = {isa = PBXBuildFile; fileRef = C3EAB9AD0E9E2F0D00268541 /* IndexController.xib */; };
 		C3EAB9B20E9E2F3300268541 /* IndexController.m in Sources */ = {isa = PBXBuildFile; fileRef = C3EAB9B10E9E2F3300268541 /* IndexController.m */; };
+		C3EE72BC0F544933001BAF49 /* zoom-out.png in Resources */ = {isa = PBXBuildFile; fileRef = C3EE72BA0F544933001BAF49 /* zoom-out.png */; };
+		C3EE72BD0F544933001BAF49 /* zoom-in.png in Resources */ = {isa = PBXBuildFile; fileRef = C3EE72BB0F544933001BAF49 /* zoom-in.png */; };
 		C3F11F440EA86E14004B4B46 /* FileResource.m in Sources */ = {isa = PBXBuildFile; fileRef = C3F11F430EA86E14004B4B46 /* FileResource.m */; };
 		C3F9E53F0EB1C18600DD0D7A /* jquery.js in CopyFiles */ = {isa = PBXBuildFile; fileRef = C3F9E5330EB1C05A00DD0D7A /* jquery.js */; };
 		C3FB6DC10ED82DE10043ABCF /* filemanager.jpg in CopyFiles */ = {isa = PBXBuildFile; fileRef = C3FB6DA00ED82D6C0043ABCF /* filemanager.jpg */; };
@@ -222,6 +224,8 @@
 		C3EAB9AB0E9E2F0400268541 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/IndexController.xib; sourceTree = &quot;&lt;group&gt;&quot;; };
 		C3EAB9B00E9E2F3300268541 /* IndexController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IndexController.h; sourceTree = &quot;&lt;group&gt;&quot;; };
 		C3EAB9B10E9E2F3300268541 /* IndexController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IndexController.m; sourceTree = &quot;&lt;group&gt;&quot;; };
+		C3EE72BA0F544933001BAF49 /* zoom-out.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = &quot;zoom-out.png&quot;; path = &quot;images/zoom-out.png&quot;; sourceTree = &quot;&lt;group&gt;&quot;; };
+		C3EE72BB0F544933001BAF49 /* zoom-in.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = &quot;zoom-in.png&quot;; path = &quot;images/zoom-in.png&quot;; sourceTree = &quot;&lt;group&gt;&quot;; };
 		C3F11F420EA86E14004B4B46 /* FileResource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FileResource.h; sourceTree = &quot;&lt;group&gt;&quot;; };
 		C3F11F430EA86E14004B4B46 /* FileResource.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FileResource.m; sourceTree = &quot;&lt;group&gt;&quot;; };
 		C3F9E5330EB1C05A00DD0D7A /* jquery.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; name = jquery.js; path = web/jquery.js; sourceTree = &quot;&lt;group&gt;&quot;; };
@@ -399,6 +403,8 @@
 		C3EAB7D80E9DC59E00268541 /* images */ = {
 			isa = PBXGroup;
 			children = (
+				C3EE72BA0F544933001BAF49 /* zoom-out.png */,
+				C3EE72BB0F544933001BAF49 /* zoom-in.png */,
 				C3A499BA0EDC4ED300997EF0 /* spine.png */,
 				C3A4981F0EDBDF4400997EF0 /* zoomtofit.png */,
 				C36239230EDA7120003C16BF /* defullscreen.png */,
@@ -546,6 +552,8 @@
 				C36239240EDA7120003C16BF /* defullscreen.png in Resources */,
 				C3A498200EDBDF4400997EF0 /* zoomtofit.png in Resources */,
 				C3A499BB0EDC4ED300997EF0 /* spine.png in Resources */,
+				C3EE72BC0F544933001BAF49 /* zoom-out.png in Resources */,
+				C3EE72BD0F544933001BAF49 /* zoom-in.png in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};</diff>
      <filename>iChm.xcodeproj/project.pbxproj</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>43a108c3a1df88e719aaf92b704aff63e2bf4aa9</id>
    </parent>
  </parents>
  <author>
    <name>Robin Lu</name>
    <email>iamawalrus@gmail.com</email>
  </author>
  <url>http://github.com/robin/ichm-m/commit/9daf3b2939f176b696d9809904b4f0c77a756d84</url>
  <id>9daf3b2939f176b696d9809904b4f0c77a756d84</id>
  <committed-date>2009-02-24T07:35:31-08:00</committed-date>
  <authored-date>2009-02-24T07:35:31-08:00</authored-date>
  <message>change font size</message>
  <tree>6a7a7fcf9e8f17f403a8509ca7afd338aec2d319</tree>
  <committer>
    <name>Robin Lu</name>
    <email>iamawalrus@gmail.com</email>
  </committer>
</commit>
