summaryrefslogtreecommitdiff
path: root/source/html/epub-doc.c
diff options
context:
space:
mode:
authorTor Andersson <tor.andersson@artifex.com>2015-04-07 16:48:14 +0200
committerTor Andersson <tor.andersson@artifex.com>2015-04-07 16:57:22 +0200
commitc6f488110d1cae3a7920faa5262f1f64956cc63f (patch)
treecda9b71e156302da9eaa745ce7b65b758f78330b /source/html/epub-doc.c
parentf80d3e27163a8fdc335b4796843d4e7c8b258672 (diff)
downloadmupdf-c6f488110d1cae3a7920faa5262f1f64956cc63f.tar.xz
Add some basic page margins to EPUB layout.
Add margins of 1 em at the top and bottom of every page at the top level. TODO: This should be set from the CSS using the @page selector, and be collapsed with the body margins at the start and end of each chapter, as well as the left and right body margins.
Diffstat (limited to 'source/html/epub-doc.c')
-rw-r--r--source/html/epub-doc.c23
1 files changed, 17 insertions, 6 deletions
diff --git a/source/html/epub-doc.c b/source/html/epub-doc.c
index 9b518bd0..eb8e657a 100644
--- a/source/html/epub-doc.c
+++ b/source/html/epub-doc.c
@@ -1,5 +1,7 @@
#include "mupdf/html.h"
+enum { T, R, B, L };
+
typedef struct epub_document_s epub_document;
typedef struct epub_chapter_s epub_chapter;
typedef struct epub_page_s epub_page;
@@ -10,6 +12,7 @@ struct epub_document_s
fz_archive *zip;
fz_html_font_set *set;
float page_w, page_h, em;
+ float page_margin[4];
int count;
epub_chapter *spine;
};
@@ -34,13 +37,18 @@ epub_layout(fz_context *ctx, fz_document *doc_, float w, float h, float em)
epub_document *doc = (epub_document*)doc_;
epub_chapter *ch;
- doc->page_w = w;
- doc->page_h = h;
+ doc->page_margin[T] = em;
+ doc->page_margin[B] = em;
+ doc->page_margin[L] = 0;
+ doc->page_margin[R] = 0;
+
+ doc->page_w = w - doc->page_margin[L] - doc->page_margin[R];
+ doc->page_h = h - doc->page_margin[T] - doc->page_margin[B];
doc->em = em;
printf("epub: laying out chapters.\n");
for (ch = doc->spine; ch; ch = ch->next)
- fz_layout_html(ctx, ch->box, w, h, em);
+ fz_layout_html(ctx, ch->box, doc->page_w, doc->page_h, doc->em);
printf("epub: done.\n");
}
@@ -67,8 +75,8 @@ epub_bound_page(fz_context *ctx, fz_page *page_, fz_rect *bbox)
epub_document *doc = page->doc;
bbox->x0 = 0;
bbox->y0 = 0;
- bbox->x1 = doc->page_w;
- bbox->y1 = doc->page_h;
+ bbox->x1 = doc->page_w + doc->page_margin[L] + doc->page_margin[R];
+ bbox->y1 = doc->page_h + doc->page_margin[T] + doc->page_margin[B];
return bbox;
}
@@ -78,15 +86,18 @@ epub_run_page(fz_context *ctx, fz_page *page_, fz_device *dev, const fz_matrix *
epub_page *page = (epub_page*)page_;
epub_document *doc = page->doc;
epub_chapter *ch;
+ fz_matrix local_ctm = *ctm;
int n = page->number;
+ fz_pre_translate(&local_ctm, doc->page_margin[L], doc->page_margin[T]);
+
int count = 0;
for (ch = doc->spine; ch; ch = ch->next)
{
int cn = ceilf(ch->box->h / doc->page_h);
if (n < count + cn)
{
- fz_draw_html(ctx, ch->box, (n-count) * doc->page_h, (n-count+1) * doc->page_h, dev, ctm);
+ fz_draw_html(ctx, ch->box, (n-count) * doc->page_h, (n-count+1) * doc->page_h, dev, &local_ctm);
break;
}
count += cn;