allow moving forward and back clicking in window

This commit is contained in:
Vincent Sanders 2018-02-04 22:32:45 +00:00
parent 4953bd0fe1
commit 8bd19b1cf3

View File

@ -33,8 +33,10 @@
#include "utils/messages.h" #include "utils/messages.h"
#include "utils/utils.h" #include "utils/utils.h"
#include "utils/log.h"
#include "netsurf/plotters.h" #include "netsurf/plotters.h"
#include "netsurf/content.h" #include "netsurf/content.h"
#include "netsurf/browser_window.h"
#include "content/llcache.h" #include "content/llcache.h"
#include "content/content_protected.h" #include "content/content_protected.h"
@ -46,6 +48,7 @@ typedef struct pdf_content {
struct nspdf_doc *doc; struct nspdf_doc *doc;
unsigned int current_page; unsigned int current_page;
unsigned int page_count;
} pdf_content; } pdf_content;
static nserror nspdf2nserr(nspdferror nspdferr) static nserror nspdf2nserr(nspdferror nspdferr)
@ -139,13 +142,19 @@ static bool pdf_convert(struct content *c)
return false; return false;
} }
pdfres = nspdf_page_count(pdfc->doc, &pdfc->page_count);
if (pdfres != NSPDFERROR_OK) {
content_broadcast_errorcode(c, NSERROR_INVALID);
return false;
}
pdfres = nspdf_get_title(pdfc->doc, &title); pdfres = nspdf_get_title(pdfc->doc, &title);
if (pdfres == NSPDFERROR_OK) { if (pdfres == NSPDFERROR_OK) {
content__set_title(c, lwc_string_data(title)); content__set_title(c, lwc_string_data(title));
} }
/** \todo extract documents starting page number */ /** \todo extract documents starting page number */
pdfc->current_page = 0; pdfc->current_page = 16;
pdfres = nspdf_get_page_dimensions(pdfc->doc, pdfres = nspdf_get_page_dimensions(pdfc->doc,
pdfc->current_page, pdfc->current_page,
@ -172,7 +181,7 @@ pdf_path(const struct nspdf_style *style,
const struct redraw_context *ctx = ctxin; const struct redraw_context *ctx = ctxin;
ctx->plot->path(ctx, ctx->plot->path(ctx,
style, (const struct plot_style_s *)style,
path, path,
path_length, path_length,
style->stroke_width, style->stroke_width,
@ -191,7 +200,8 @@ pdf_redraw(struct content *c,
nspdferror pdfres; nspdferror pdfres;
struct nspdf_render_ctx render_ctx; struct nspdf_render_ctx render_ctx;
printf("data x:%d y:%d w:%d h:%d\nclip %d %d %d %d\n", NSLOG(netsurf, DEBUG,
"data x:%d y:%d w:%d h:%d\nclip %d %d %d %d\n",
data->x, data->y, data->width, data->height, data->x, data->y, data->width, data->height,
clip->x0, clip->y0, clip->x1, clip->y1); clip->x0, clip->y0, clip->x1, clip->y1);
@ -206,7 +216,6 @@ pdf_redraw(struct content *c,
pdfres = nspdf_page_render(pdfc->doc, pdfc->current_page, &render_ctx); pdfres = nspdf_page_render(pdfc->doc, pdfc->current_page, &render_ctx);
return true; return true;
} }
@ -223,6 +232,39 @@ static content_type pdf_content_type(void)
return CONTENT_PDF; return CONTENT_PDF;
} }
static void
pdf_change_page(struct pdf_content *pdfc,
struct browser_window *bw,
unsigned int page_number)
{
float page_width;
float page_height;
nspdferror pdfres;
/* ensure page stays in bounds */
if (page_number >= pdfc->page_count) {
return;
}
pdfc->current_page = page_number;
pdfres = nspdf_get_page_dimensions(pdfc->doc,
pdfc->current_page,
&page_width,
&page_height);
if (pdfres == NSPDFERROR_OK) {
pdfc->base.width = page_width;
pdfc->base.height = page_height;
NSLOG(netsurf, DEBUG,
"page %d w:%f h:%f\n",
pdfc->current_page,
page_width,
page_height);
}
browser_window_update(bw, false);
}
static void static void
pdf_mouse_action(struct content *c, pdf_mouse_action(struct content *c,
struct browser_window *bw, struct browser_window *bw,
@ -230,26 +272,17 @@ pdf_mouse_action(struct content *c,
int x, int y) int x, int y)
{ {
struct pdf_content *pdfc = (struct pdf_content *)c; struct pdf_content *pdfc = (struct pdf_content *)c;
nspdferror pdfres;
printf("ici\n");
if (mouse & BROWSER_MOUSE_CLICK_1) { if (mouse & BROWSER_MOUSE_CLICK_1) {
float page_width; int bwwidth;
float page_height; int bwheight;
browser_window_get_extents(bw, false, &bwwidth, &bwheight);
pdfc->current_page++; if (x < (bwwidth / 2)) {
pdf_change_page(pdfc, bw, pdfc->current_page - 1);
pdfres = nspdf_get_page_dimensions(pdfc->doc, } else {
pdfc->current_page, pdf_change_page(pdfc, bw, pdfc->current_page + 1);
&page_width,
&page_height);
if (pdfres == NSPDFERROR_OK) {
pdfc->base.width = page_width;
pdfc->base.height = page_height;
printf("page $d w:%f h:%f\n",pdfc->current_page, page_width, page_height);
} }
browser_window_update(bw, false);
} }
} }