summaryrefslogtreecommitdiff
path: root/platform/ios/Classes/MuPrintPageRenderer.m
diff options
context:
space:
mode:
Diffstat (limited to 'platform/ios/Classes/MuPrintPageRenderer.m')
-rw-r--r--platform/ios/Classes/MuPrintPageRenderer.m203
1 files changed, 0 insertions, 203 deletions
diff --git a/platform/ios/Classes/MuPrintPageRenderer.m b/platform/ios/Classes/MuPrintPageRenderer.m
deleted file mode 100644
index ad03f6c5..00000000
--- a/platform/ios/Classes/MuPrintPageRenderer.m
+++ /dev/null
@@ -1,203 +0,0 @@
-#include "common.h"
-#import "MuPrintPageRenderer.h"
-
-const int MaxStripPixels = 1024*1024;
-
-@implementation MuPrintPageRenderer
-{
- MuDocRef *docRef;
-}
-
--(instancetype) initWithDocRef:(MuDocRef *)aDocRef
-{
- self = [super init];
- if (self)
- {
- docRef = [aDocRef retain];
- }
- return self;
-}
-
--(void) dealloc
-{
- [docRef release];
- [super dealloc];
-}
-
--(NSInteger) numberOfPages
-{
- __block NSInteger npages = 0;
- dispatch_sync(queue, ^{
- fz_try(ctx)
- {
- npages = fz_count_pages(ctx, docRef->doc);
- }
- fz_catch(ctx)
- {
- }
- });
- return npages;
-}
-
-static fz_page *getPage(fz_document *doc, NSInteger pageIndex)
-{
- __block fz_page *page = NULL;
-
- dispatch_sync(queue, ^{
- fz_try(ctx)
- {
- page = fz_load_page(ctx, doc, (int)pageIndex);
- }
- fz_catch(ctx)
- {
- printf("Failed to load page\n");
- }
- });
-
- return page;
-}
-
-static CGSize getPageSize(fz_document *doc, fz_page *page)
-{
- __block CGSize size = {0.0,0.0};
-
- dispatch_sync(queue, ^{
- fz_try(ctx)
- {
- fz_rect bounds;
- fz_bound_page(ctx, page, &bounds);
- size.width = bounds.x1 - bounds.x0;
- size.height = bounds.y1 - bounds.y0;
- }
- fz_catch(ctx)
- {
- printf("Failed to find page bounds\n");
- }
- });
-
- return size;
-}
-
-static fz_pixmap *createPixMap(CGSize size)
-{
- __block fz_pixmap *pix = NULL;
-
- dispatch_sync(queue, ^{
- fz_try(ctx)
- {
- pix = fz_new_pixmap(ctx, fz_device_rgb(ctx), size.width, size.height, 1);
- }
- fz_catch(ctx)
- {
- printf("Failed to create pixmap\n");
- }
- });
-
- return pix;
-}
-
-static void freePage(fz_document *doc, fz_page *page)
-{
- dispatch_sync(queue, ^{
- fz_drop_page(ctx, page);
- });
-}
-
-static void renderPage(fz_document *doc, fz_page *page, fz_pixmap *pix, fz_matrix *ctm)
-{
- dispatch_sync(queue, ^{
- fz_device *dev = NULL;
- fz_var(dev);
- fz_try(ctx)
- {
- dev = fz_new_draw_device(ctx, ctm, pix);
- fz_clear_pixmap_with_value(ctx, pix, 0xFF);
- fz_run_page(ctx, page, dev, &fz_identity, NULL);
- fz_close_device(ctx, dev);
- }
- fz_always(ctx)
- {
- fz_drop_device(ctx, dev);
- }
- fz_catch(ctx)
- {
- printf("Failed to render page\n");
- }
- });
-}
-
--(void) drawPageAtIndex:(NSInteger)pageIndex inRect:(CGRect)printableRect
-{
- fz_page *page = NULL;
- fz_pixmap *pix = NULL;
- CGDataProviderRef dataref = NULL;
- CGImageRef img = NULL;
- CGContextRef cgctx = UIGraphicsGetCurrentContext();
- float dpi = 300.0;
- float ppi = 72.0;
-
- if (!cgctx) return;
-
- CGSize paperSize = self.paperRect.size;
- page = getPage(docRef->doc, pageIndex);
- if (page == NULL) return;
-
- CGSize pageSize = getPageSize(docRef->doc, page);
- if (pageSize.width == 0.0 || pageSize.height == 0.0)
- goto exit;
-
- CGSize scale = fitPageToScreen(pageSize, paperSize);
- pageSize.width *= scale.width;
- pageSize.height *= scale.height;
-
- CGSize pageSizePix = {roundf(pageSize.width * dpi / ppi), roundf(pageSize.height * dpi /ppi)};
- int max_strip_height = MaxStripPixels / (int)pageSizePix.width;
- if (pageSizePix.height > max_strip_height)
- pageSizePix.height = max_strip_height;
- CGSize stripSize = {pageSize.width, pageSizePix.height * ppi / dpi};
-
- float cursor = 0.0;
-
- while (cursor < pageSize.height)
- {
- // Overlap strips by 1 point
- if (cursor > 0.0)
- cursor -= 1.0;
-
- pix = createPixMap(pageSizePix);
- if (!pix)
- goto exit;
-
- dataref = CreateWrappedPixmap(pix);
- if (dataref == NULL)
- goto exit;
-
- img = CreateCGImageWithPixmap(pix, dataref);
- if (img == NULL)
- goto exit;
-
- fz_matrix ctm;
- fz_scale(&ctm, dpi / ppi, -dpi / ppi);
- fz_pre_translate(&ctm, 0, -stripSize.height-cursor);
- fz_pre_scale(&ctm, scale.width, scale.height);
-
- renderPage(docRef->doc, page, pix, &ctm);
-
- CGRect rect = {{0.0,cursor},stripSize};
- CGContextDrawImage(cgctx, rect, img);
-
- CGImageRelease(img);
- img = NULL;
- CGDataProviderRelease(dataref); // releases pix
- dataref = NULL;
-
- cursor += stripSize.height;
- }
-
-exit:
- freePage(docRef->doc, page);
- CGImageRelease(img);
- CGDataProviderRelease(dataref); //releases pix
-}
-
-@end