summaryrefslogtreecommitdiff
path: root/platform/ios/Classes/MuHitView.m
diff options
context:
space:
mode:
authorPaul Gardiner <paul@pauls-mac-mini.site>2013-09-17 15:04:13 +0100
committerPaul Gardiner <paul@pauls-mac-mini.site>2013-09-17 15:08:40 +0100
commit43bcd8a7516bfbd455d81de7e00d5e139abce438 (patch)
tree71efd1fe71fb8dfd6dd4399547f9e10fa2b24d5d /platform/ios/Classes/MuHitView.m
parent0f6711fd4db36602034734b063cdaf30a396126c (diff)
downloadmupdf-43bcd8a7516bfbd455d81de7e00d5e139abce438.tar.xz
iOS: split the classes into separate files
Diffstat (limited to 'platform/ios/Classes/MuHitView.m')
-rw-r--r--platform/ios/Classes/MuHitView.m94
1 files changed, 94 insertions, 0 deletions
diff --git a/platform/ios/Classes/MuHitView.m b/platform/ios/Classes/MuHitView.m
new file mode 100644
index 00000000..be67601a
--- /dev/null
+++ b/platform/ios/Classes/MuHitView.m
@@ -0,0 +1,94 @@
+//
+// MuHitView.m
+// MuPDF
+//
+// Copyright (c) 2013 Artifex Software, Inc. All rights reserved.
+//
+
+#import "common.h"
+#import "MuHitView.h"
+
+@implementation MuHitView
+
+- (id) initWithSearchResults: (int)n forDocument: (fz_document *)doc
+{
+ self = [super initWithFrame: CGRectMake(0,0,100,100)];
+ if (self) {
+ [self setOpaque: NO];
+
+ color = [[UIColor colorWithRed: 0x25/255.0 green: 0x72/255.0 blue: 0xAC/255.0 alpha: 0.5] retain];
+
+ pageSize = CGSizeMake(100,100);
+
+ for (int i = 0; i < n && i < nelem(hitRects); i++) {
+ fz_rect bbox = search_result_bbox(doc, i); // this is thread-safe enough
+ hitRects[i].origin.x = bbox.x0;
+ hitRects[i].origin.y = bbox.y0;
+ hitRects[i].size.width = bbox.x1 - bbox.x0;
+ hitRects[i].size.height = bbox.y1 - bbox.y0;
+ }
+ hitCount = n;
+ }
+ return self;
+}
+
+- (id) initWithLinks: (fz_link*)link forDocument: (fz_document *)doc
+{
+ self = [super initWithFrame: CGRectMake(0,0,100,100)];
+ if (self) {
+ [self setOpaque: NO];
+
+ color = [[UIColor colorWithRed: 0xAC/255.0 green: 0x72/255.0 blue: 0x25/255.0 alpha: 0.5] retain];
+
+ pageSize = CGSizeMake(100,100);
+
+ while (link && hitCount < nelem(hitRects)) {
+ if (link->dest.kind == FZ_LINK_GOTO || link->dest.kind == FZ_LINK_URI) {
+ fz_rect bbox = link->rect;
+ hitRects[hitCount].origin.x = bbox.x0;
+ hitRects[hitCount].origin.y = bbox.y0;
+ hitRects[hitCount].size.width = bbox.x1 - bbox.x0;
+ hitRects[hitCount].size.height = bbox.y1 - bbox.y0;
+ linkPage[hitCount] = link->dest.kind == FZ_LINK_GOTO ? link->dest.ld.gotor.page : -1;
+ linkUrl[hitCount] = link->dest.kind == FZ_LINK_URI ? strdup(link->dest.ld.uri.uri) : nil;
+ hitCount++;
+ }
+ link = link->next;
+ }
+ }
+ return self;
+}
+
+- (void) setPageSize: (CGSize)s
+{
+ pageSize = s;
+ // if page takes a long time to load we may have drawn at the initial (wrong) size
+ [self setNeedsDisplay];
+}
+
+- (void) drawRect: (CGRect)r
+{
+ CGSize scale = fitPageToScreen(pageSize, self.bounds.size);
+
+ [color set];
+
+ for (int i = 0; i < hitCount; i++) {
+ CGRect rect = hitRects[i];
+ rect.origin.x *= scale.width;
+ rect.origin.y *= scale.height;
+ rect.size.width *= scale.width;
+ rect.size.height *= scale.height;
+ UIRectFill(rect);
+ }
+}
+
+- (void) dealloc
+{
+ int i;
+ [color release];
+ for (i = 0; i < hitCount; i++)
+ free(linkUrl[i]);
+ [super dealloc];
+}
+
+@end