summaryrefslogtreecommitdiff
path: root/platform/ios
diff options
context:
space:
mode:
authorTor Andersson <tor.andersson@artifex.com>2016-10-17 17:13:32 +0200
committerTor Andersson <tor.andersson@artifex.com>2016-10-28 16:18:38 +0200
commit8a07b7fb14f11204a0d840792ab9f4bd54b066e5 (patch)
treee617a898c17aeb353f35d7b362ca2de290cf2b82 /platform/ios
parent4029b45e494634361a4205f8896ec429d11e990a (diff)
downloadmupdf-8a07b7fb14f11204a0d840792ab9f4bd54b066e5.tar.xz
Clean up link destination handling.
All link destinations should be URIs, and a document specific function can be called to resolve them to actual page numbers. Outlines have cached page numbers as well as string URIs.
Diffstat (limited to 'platform/ios')
-rw-r--r--platform/ios/Classes/MuDocumentController.m13
-rw-r--r--platform/ios/Classes/MuHitView.m11
2 files changed, 13 insertions, 11 deletions
diff --git a/platform/ios/Classes/MuDocumentController.m b/platform/ios/Classes/MuDocumentController.m
index 02efe1ee..1e9f954c 100644
--- a/platform/ios/Classes/MuDocumentController.m
+++ b/platform/ios/Classes/MuDocumentController.m
@@ -28,15 +28,12 @@ static void flattenOutline(NSMutableArray *titles, NSMutableArray *pages, fz_out
indent[level * 4] = 0;
while (outline)
{
- if (outline->dest.kind == FZ_LINK_GOTO)
+ int page = outline->page;
+ if (page >= 0 && outline->title)
{
- int page = outline->dest.ld.gotor.page;
- if (page >= 0 && outline->title)
- {
- NSString *title = @(outline->title);
- [titles addObject: [NSString stringWithFormat: @"%s%@", indent, title]];
- [pages addObject: @(page)];
- }
+ NSString *title = @(outline->title);
+ [titles addObject: [NSString stringWithFormat: @"%s%@", indent, title]];
+ [pages addObject: @(page)];
}
flattenOutline(titles, pages, outline->down, level + 1);
outline = outline->next;
diff --git a/platform/ios/Classes/MuHitView.m b/platform/ios/Classes/MuHitView.m
index e94ac94a..b0a1ac4a 100644
--- a/platform/ios/Classes/MuHitView.m
+++ b/platform/ios/Classes/MuHitView.m
@@ -44,14 +44,19 @@
pageSize = CGSizeMake(100,100);
while (link && hitCount < nelem(hitRects)) {
- if (link->dest.kind == FZ_LINK_GOTO || link->dest.kind == FZ_LINK_URI) {
+ if (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;
+ if (fz_is_external_link(ctx, link->uri)) {
+ linkPage[hitCount] = -1;
+ linkUrl[hitCount] = strdup(link->uri);
+ } else {
+ linkPage[hitCount] = fz_resolve_link(ctx, doc, link->uri);
+ linkUrl[hitCount] = nil;
+ }
hitCount++;
}
link = link->next;