From fb12e1716d653cce57b7b6acfa16c44c748969b4 Mon Sep 17 00:00:00 2001 From: Raph Levien Date: Sun, 9 Jan 2005 07:29:59 +0100 Subject: created macpdf app --- macpdf/carbonpdf.app/Contents/Info.plist | 24 + macpdf/carbonpdf.app/Contents/PkgInfo | 1 + .../Resources/English.lproj/main.nib/classes.nib | 4 + .../Resources/English.lproj/main.nib/info.nib | 24 + .../Resources/English.lproj/main.nib/objects.xib | 516 ++++++++++++++++++++ .../Contents/Resources/carbonpdf.icns | Bin 0 -> 31574 bytes macpdf/carbonpdf.c | 69 +++ macpdf/carbonpdf.h | 31 ++ macpdf/view.c | 525 +++++++++++++++++++++ 9 files changed, 1194 insertions(+) create mode 100644 macpdf/carbonpdf.app/Contents/Info.plist create mode 100644 macpdf/carbonpdf.app/Contents/PkgInfo create mode 100644 macpdf/carbonpdf.app/Contents/Resources/English.lproj/main.nib/classes.nib create mode 100644 macpdf/carbonpdf.app/Contents/Resources/English.lproj/main.nib/info.nib create mode 100644 macpdf/carbonpdf.app/Contents/Resources/English.lproj/main.nib/objects.xib create mode 100644 macpdf/carbonpdf.app/Contents/Resources/carbonpdf.icns create mode 100644 macpdf/carbonpdf.c create mode 100644 macpdf/carbonpdf.h create mode 100644 macpdf/view.c (limited to 'macpdf') diff --git a/macpdf/carbonpdf.app/Contents/Info.plist b/macpdf/carbonpdf.app/Contents/Info.plist new file mode 100644 index 00000000..48d01207 --- /dev/null +++ b/macpdf/carbonpdf.app/Contents/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + carbonpdf + CFBundleIconFile + carbonpdf.icns + CFBundleIdentifier + com.artofcode.MuPDF + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + APPL + CFBundleSignature + ???? + CFBundleVersion + 0.1 + CSResourcesFileMapped + + + diff --git a/macpdf/carbonpdf.app/Contents/PkgInfo b/macpdf/carbonpdf.app/Contents/PkgInfo new file mode 100644 index 00000000..bd04210f --- /dev/null +++ b/macpdf/carbonpdf.app/Contents/PkgInfo @@ -0,0 +1 @@ +APPL???? \ No newline at end of file diff --git a/macpdf/carbonpdf.app/Contents/Resources/English.lproj/main.nib/classes.nib b/macpdf/carbonpdf.app/Contents/Resources/English.lproj/main.nib/classes.nib new file mode 100644 index 00000000..ea58db11 --- /dev/null +++ b/macpdf/carbonpdf.app/Contents/Resources/English.lproj/main.nib/classes.nib @@ -0,0 +1,4 @@ +{ +IBClasses = (); +IBVersion = 1; +} diff --git a/macpdf/carbonpdf.app/Contents/Resources/English.lproj/main.nib/info.nib b/macpdf/carbonpdf.app/Contents/Resources/English.lproj/main.nib/info.nib new file mode 100644 index 00000000..8d83474f --- /dev/null +++ b/macpdf/carbonpdf.app/Contents/Resources/English.lproj/main.nib/info.nib @@ -0,0 +1,24 @@ + + + + + IBDocumentLocation + 54 19 356 240 0 0 1024 746 + IBEditorPositions + + 29 + 15 273 218 44 0 0 1024 746 + + IBFramework Version + 349.0 + IBOpenObjects + + 29 + 231 + + IBSystem Version + 7S215 + targetFramework + IBCarbonFramework + + diff --git a/macpdf/carbonpdf.app/Contents/Resources/English.lproj/main.nib/objects.xib b/macpdf/carbonpdf.app/Contents/Resources/English.lproj/main.nib/objects.xib new file mode 100644 index 00000000..6e3aad82 --- /dev/null +++ b/macpdf/carbonpdf.app/Contents/Resources/English.lproj/main.nib/objects.xib @@ -0,0 +1,516 @@ + + + IBCarbonFramework + + NSApplication + + + + MuPDF + + + MuPDF + + MuPDF + + + TRUE + About MuPDF + 0 + abou + + + _NSAppleMenu + + + + File + + File + + + TRUE + New + n + new + + + TRUE + Open… + o + open + + + TRUE + + + TRUE + Close + w + clos + + + TRUE + Save + s + save + + + TRUE + Save As… + S + svas + + + TRUE + Revert + r + rvrt + + + TRUE + + + TRUE + Page Setup… + P + page + + + TRUE + Print… + p + prnt + + + + + + Edit + + Edit + + + TRUE + Undo + z + undo + + + TRUE + Redo + Z + redo + + + TRUE + + + TRUE + Cut + x + cut + + + TRUE + Copy + c + copy + + + TRUE + Paste + v + past + + + TRUE + Delete + clea + + + TRUE + Select All + a + sall + + + TRUE + + + TRUE + Special Characters… + chrp + + + + + + Window + + Window + + + TRUE + TRUE + Minimize Window + m + mini + + + TRUE + TRUE + Minimize All Windows + m + 1572864 + mina + + + TRUE + Zoom + zoom + + + TRUE + + + TRUE + TRUE + Bring All to Front + bfrt + + + TRUE + TRUE + Arrange in Front + 1572864 + frnt + + + _NSWindowsMenu + + + + _NSMainMenu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 56 24 553 587 + Window + + 0 0 497 563 + 0 0 563 497 + + + 482 248 497 549 + 248 482 301 15 + + 1 + 2 + 2 + + + + -1 548 483 563 + 548 -1 15 484 + + 1 + 2 + 2 + + + + 482 23 498 47 + 23 482 24 16 + < + + 1 + 2 + + 0 + 3 + + + 482 46 498 70 + 46 482 24 16 + > + + 2 + + 0 + 3 + + + 482 92 498 112 + 92 482 20 16 + ( + + 2 + + 0 + 3 + + + 482 111 498 131 + 111 482 20 16 + ) + + 2 + + 0 + 3 + + + 485 199 495 237 + 199 485 38 10 + TRUE + 3 + + 2 + + TRUE + + + 482 0 498 24 + 0 482 24 16 + << + + 1 + 2 + + 0 + 3 + + + 482 69 498 93 + 69 482 24 16 + >> + + 2 + + 0 + 3 + + + 482 168 498 188 + 168 482 20 16 + + + + 2 + + 0 + 3 + + + 482 130 498 150 + 130 482 20 16 + - + + 2 + + 0 + 3 + + + 482 149 498 169 + 149 482 20 16 + % + + 2 + + 0 + 3 + + + 0 0 484 549 + 0 0 549 484 + Poof + 666 + + 1 + 1 + 2 + 2 + + com.artofcode.mupdf.View + + + + FALSE + TRUE + TRUE + FALSE + + + + + + + + + + + + + + + + + + + + + + + + + 200 83 330 337 + Password + + 0 0 130 254 + 0 0 254 130 + + + 20 20 36 234 + 20 20 214 16 + This PDF document is encrypted. + + + 50 32 66 146 + 32 50 114 16 + Password: + + + 51 106 67 215 + 106 51 109 16 + TRUE + TRUE + TRUE + + + 90 132 110 202 + 132 90 70 20 + OK + 1 + + + 90 50 110 120 + 50 90 70 20 + Cancel + + + + FALSE + FALSE + TRUE + TRUE + 11 + FALSE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Files Owner + + MainWindow + + MenuBar + + PasswordWindow + + View1 + + + 239 + diff --git a/macpdf/carbonpdf.app/Contents/Resources/carbonpdf.icns b/macpdf/carbonpdf.app/Contents/Resources/carbonpdf.icns new file mode 100644 index 00000000..d11b8be1 Binary files /dev/null and b/macpdf/carbonpdf.app/Contents/Resources/carbonpdf.icns differ diff --git a/macpdf/carbonpdf.c b/macpdf/carbonpdf.c new file mode 100644 index 00000000..e543e7c7 --- /dev/null +++ b/macpdf/carbonpdf.c @@ -0,0 +1,69 @@ +#include "carbonpdf.h" + +static void +init_window(viewctx *ctx) +{ + WindowRef window = ctx->window; + HIViewRef viewPane; + static const HIViewID viewPaneID = { 'Poof', 666 }; + OSStatus err; + + err = HIViewFindByID(HIViewGetRoot(window), viewPaneID, &viewPane); + printf("err from findbyid: %d\n", err); +} + +int +openpdf(WindowRef window, const char *filename) +{ + HIViewRef viewPane; + static const HIViewID viewPaneID = { 'Poof', 666 }; + OSStatus err; + + err = HIViewFindByID(HIViewGetRoot(window), viewPaneID, &viewPane); + require_noerr(err, cleanup); + + err = view_openpdf(viewPane, filename); + require_noerr(err, cleanup); + + err = view_showpage(viewPane); + + cleanup: + return err; +} + +int main(int argc, char *argv[]) +{ + IBNibRef nibRef; + OSStatus err; + WindowRef window; + + fz_cpudetect(); + fz_accelerate(); + + err = view_register(); + require_noerr(err, CantRegisterView); + + err = CreateNibReference(CFSTR("main"), &nibRef); + printf("err = %d\n", err); + require_noerr(err, CantGetNibRef); + + err = SetMenuBarFromNib(nibRef, CFSTR("MenuBar")); + require_noerr(err, CantSetMenuBar); + + err = CreateWindowFromNib(nibRef, CFSTR("MainWindow"), &window); + require_noerr(err, CantCreateWindow); + + openpdf(window, "/Users/raph/golf/fitz/tiger.pdf"); + + DisposeNibReference(nibRef); + + ShowWindow(window); + RunApplicationEventLoop(); + + CantGetNibRef: + CantSetMenuBar: + CantCreateWindow: + CantRegisterView: + + return err; +} diff --git a/macpdf/carbonpdf.h b/macpdf/carbonpdf.h new file mode 100644 index 00000000..dde4dca7 --- /dev/null +++ b/macpdf/carbonpdf.h @@ -0,0 +1,31 @@ +#include + +#include +#include + +typedef struct viewctx +{ + WindowRef window; + HIViewRef view; + char *doctitle; + + float zoom; + int rotate; + int pageno; + + pdf_page *page; + fz_obj *pageobj; + + pdf_xref *xref; + pdf_pagetree *pages; + pdf_outline *outline; + fz_renderer *rast; + fz_pixmap *image; +} viewctx; + +OSStatus view_register(void); + +OSStatus +view_openpdf(HIViewRef view, char *filename); + +OSStatus view_showpage(HIViewRef view); diff --git a/macpdf/view.c b/macpdf/view.c new file mode 100644 index 00000000..b44718aa --- /dev/null +++ b/macpdf/view.c @@ -0,0 +1,525 @@ +/* This module implements a Carbon HIView object for a pattern plate + editor. */ + +#include "carbonpdf.h" + +#define kViewClassID CFSTR("com.artofcode.mupdf.View") +#define kViewPrivate 'MU_v' + +static OSStatus +view_construct(EventRef inEvent) +{ + OSStatus err; + viewctx *ctx; + + ctx = (viewctx *)malloc(sizeof(viewctx)); + require_action(ctx != NULL, CantMalloc, err = memFullErr); + err = GetEventParameter(inEvent, kEventParamHIObjectInstance, + typeHIObjectRef, NULL, sizeof(HIObjectRef), NULL, + (HIObjectRef *)&ctx->view); + require_noerr(err, ParameterMissing); + err = SetEventParameter(inEvent, kEventParamHIObjectInstance, + typeVoidPtr, sizeof(viewctx *), &ctx); + + ParameterMissing: + if (err != noErr) + free(ctx); + + CantMalloc: + return err; +} + +static OSStatus +view_destruct(EventRef inEvent, viewctx *inData) +{ + free(inData); + return noErr; +} + +static OSStatus +view_initialize(EventHandlerCallRef inCallRef, EventRef inEvent, + viewctx *ctx) +{ + OSStatus err; + HIRect bounds; + + err = CallNextEventHandler(inCallRef, inEvent); + require_noerr(err, TroubleInSuperClass); + + ctx->zoom = 1.0; + ctx->rotate = 0; + ctx->pageno = 1; + ctx->window = nil; + + ParameterMissing: + TroubleInSuperClass: + return err; +} + +#ifndef M_PI +#define M_PI 3.14159265358979323846 /* pi */ +#endif + +static void +cgcontext_set_rgba(CGContextRef ctx, unsigned int rgba) +{ + const double norm = 1.0 / 255; + CGContextSetRGBFillColor(ctx, + ((rgba >> 24) & 0xff) * norm, + ((rgba >> 16) & 0xff) * norm, + ((rgba >> 8) & 0xff) * norm, + (rgba & 0xff) * norm); +} + +static void +draw_dot(CGContextRef ctx, double x, double y, double r, + unsigned int rgba) +{ + cgcontext_set_rgba(ctx, rgba); + CGMutablePathRef path = CGPathCreateMutable(); + CGPathAddArc(path, NULL, x, y, r, 0, 2 * M_PI, false); + CGContextAddPath(ctx, path); + CGPathRelease(path); + CGContextFillPath(ctx); +} + +static void +draw_raw_rect(CGContextRef ctx, double x0, double y0, double x1, double y1, + unsigned int rgba) +{ + HIRect rect; + + cgcontext_set_rgba(ctx, rgba); + rect.origin.x = x0; + rect.origin.y = y0; + rect.size.width = x1 - x0; + rect.size.height = y1 - y0; + CGContextFillRect(ctx, rect); +} + +static void +draw_rect(CGContextRef ctx, double x, double y, double r, + unsigned int rgba) +{ + draw_raw_rect(ctx, x - r, y - r, x + r, y + r, rgba); +} + +static OSStatus +view_draw(EventRef inEvent, viewctx *ctx) +{ + OSStatus err; + CGContextRef gc; + CGDataProviderRef provider; + CGImageRef image; + CGColorSpaceRef colorspace; + CGRect rect; + + err = GetEventParameter(inEvent, kEventParamCGContextRef, typeCGContextRef, + NULL, sizeof(CGContextRef), NULL, &gc); + require_noerr(err, cleanup); + + colorspace = CGColorSpaceCreateDeviceRGB(); + provider = CGDataProviderCreateWithData(NULL, ctx->image->samples, + ctx->image->w * ctx->image->h * 4, + NULL); + image = CGImageCreate(ctx->image->w, ctx->image->h, + 8, 32, ctx->image->w * 4, + colorspace, kCGImageAlphaNoneSkipFirst, provider, + NULL, 0, kCGRenderingIntentDefault); + + rect.origin.x = 0; + rect.origin.y = 0; + rect.size.width = ctx->image->w; + rect.size.height = ctx->image->h; + HIViewDrawCGImage(gc, &rect, image); + + CGColorSpaceRelease(colorspace); + CGDataProviderRelease(provider); + + cleanup: + return err; +} + +static OSStatus +view_get_data(EventRef inEvent, viewctx *inData) +{ + OSStatus err; + OSType tag; + Ptr ptr; + Size outSize; + + /* Probably could use a bit more error checking here, for type + and size match. Also, just returning a viewctx seems a + little hacky. */ + err = GetEventParameter(inEvent, kEventParamControlDataTag, typeEnumeration, + NULL, sizeof(OSType), NULL, &tag); + require_noerr(err, ParameterMissing); + + err = GetEventParameter(inEvent, kEventParamControlDataBuffer, typePtr, + NULL, sizeof(Ptr), NULL, &ptr); + + if (tag == kViewPrivate) { + *((viewctx **)ptr) = inData; + outSize = sizeof(viewctx *); + } else + err = errDataNotSupported; + + if (err == noErr) + err = SetEventParameter(inEvent, kEventParamControlDataBufferSize, typeLongInteger, + sizeof(Size), &outSize); + + ParameterMissing: + return err; +} + +static OSStatus +view_set_data(EventRef inEvent, viewctx *inData) +{ + OSStatus err; + Ptr ptr; + OSType tag; + + err = GetEventParameter(inEvent, kEventParamControlDataTag, typeEnumeration, + NULL, sizeof(OSType), NULL, &tag); + require_noerr(err, ParameterMissing); + + err = GetEventParameter(inEvent, kEventParamControlDataBuffer, typePtr, + NULL, sizeof(Ptr), NULL, &ptr); + require_noerr(err, ParameterMissing); + + if (tag == 'Plat') { + //inData->p = *(plate **)ptr; + } else + err = errDataNotSupported; + + ParameterMissing: + return err; +} + +static OSStatus +view_hittest(EventRef inEvent, viewctx *inData) +{ + OSStatus err; + HIPoint where; + HIRect bounds; + ControlPartCode part; + + err = GetEventParameter(inEvent, kEventParamMouseLocation, typeHIPoint, + NULL, sizeof(HIPoint), NULL, &where); + require_noerr(err, ParameterMissing); + + err = HIViewGetBounds(inData->view, &bounds); + require_noerr(err, ParameterMissing); + + if (CGRectContainsPoint(bounds, where)) + part = 1; + else + part = kControlNoPart; + err = SetEventParameter(inEvent, kEventParamControlPart, + typeControlPartCode, sizeof(ControlPartCode), + &part); + printf("hittest %g, %g!\n", where.x, where.y); + + ParameterMissing: + return err; +} + +static void +view_queue_draw(viewctx *pe) +{ + HIViewSetNeedsDisplay(pe->view, true); +} + + +static int +view_motion(viewctx *pe, double x, double y) +{ + //if (pe->p->motmode == MOTION_MODE_MOVE) + //plate_motion_move(pe->p, x, y); + //else if (pe->p->motmode == MOTION_MODE_SELECT) + //plate_motion_select(pe->p, x, y); + view_queue_draw(pe); + return 1; +} + +static int +view_button_release(viewctx *pe) +{ + int need_redraw; + + //need_redraw = (pe->p->motmode == MOTION_MODE_SELECT); + + //plate_unpress(pe->p); + + if (need_redraw) + view_queue_draw(pe); + return 1; +} + +pascal OSStatus +view_handler(EventHandlerCallRef inCallRef, + EventRef inEvent, + void* inUserData ) +{ + OSStatus err = eventNotHandledErr; + UInt32 eventClass = GetEventClass(inEvent); + UInt32 eventKind = GetEventKind(inEvent); + viewctx *data = (viewctx *)inUserData; + + switch (eventClass) { + case kEventClassHIObject: + switch (eventKind) { + case kEventHIObjectConstruct: + err = view_construct(inEvent); + break; + case kEventHIObjectInitialize: + err = view_initialize(inCallRef, inEvent, data); + break; + case kEventHIObjectDestruct: + err = view_destruct(inEvent, data); + break; + } + break; + case kEventClassControl: + switch (eventKind) { + case kEventControlInitialize: + err = noErr; + break; + case kEventControlDraw: + err = view_draw(inEvent, data); + break; + case kEventControlGetData: + err = view_get_data(inEvent, data); + break; + case kEventControlSetData: + err = view_set_data(inEvent, data); + break; + case kEventControlHitTest: + err = view_hittest(inEvent, data); + break; + /*...*/ + } + break; + } + return err; +} + +OSStatus +view_register(void) +{ + OSStatus err = noErr; + static HIObjectClassRef view_ClassRef = NULL; + + if (view_ClassRef == NULL) { + EventTypeSpec eventList[] = { + { kEventClassHIObject, kEventHIObjectConstruct }, + { kEventClassHIObject, kEventHIObjectInitialize }, + { kEventClassHIObject, kEventHIObjectDestruct }, + + { kEventClassControl, kEventControlActivate }, + { kEventClassControl, kEventControlDeactivate }, + { kEventClassControl, kEventControlDraw }, + { kEventClassControl, kEventControlHiliteChanged }, + { kEventClassControl, kEventControlHitTest }, + { kEventClassControl, kEventControlInitialize }, + { kEventClassControl, kEventControlGetData }, + { kEventClassControl, kEventControlSetData }, + }; + err = HIObjectRegisterSubclass(kViewClassID, + kHIViewClassID, + NULL, + view_handler, + GetEventTypeCount(eventList), + eventList, + NULL, + &view_ClassRef); + } + return err; +} + +OSStatus view_create( + WindowRef inWindow, + const HIRect* inBounds, + HIViewRef* outView) +{ + OSStatus err; + EventRef event; + + err = view_register(); + require_noerr(err, CantRegister); + + err = CreateEvent(NULL, kEventClassHIObject, kEventHIObjectInitialize, + GetCurrentEventTime(), 0, &event); + require_noerr(err, CantCreateEvent); + + if (inBounds != NULL) { + err = SetEventParameter(event, 'Boun', typeHIRect, sizeof(HIRect), + inBounds); + require_noerr(err, CantSetParameter); + } + + err = HIObjectCreate(kViewClassID, event, (HIObjectRef*)outView); + require_noerr(err, CantCreate); + + if (inWindow != NULL) { + HIViewRef root; + err = GetRootControl(inWindow, &root); + require_noerr(err, CantGetRootView); + err = HIViewAddSubview(root, *outView); + } + CantCreate: + CantGetRootView: + CantSetParameter: + CantCreateEvent: + ReleaseEvent(event); + CantRegister: + return err; +} + +OSStatus +view_openpdf(HIViewRef view, char *filename) +{ + OSStatus err; + viewctx *ctx; + + err = GetControlData(view, 1, kViewPrivate, 4, &ctx, NULL); + require_noerr(err, CantGetPrivate); + + fz_error *error; + fz_obj *obj; + pdf_xref *xref; + + error = pdf_newxref(&xref); + if (error) + fz_abort(error); + ctx->xref = xref; + + error = pdf_loadxref(xref, filename); + if (error) + { + fz_warn(error->msg); + printf("trying to repair...\n"); + error = pdf_repairxref(xref, filename); + if (error) + fz_abort(error); + } + + error = pdf_decryptxref(xref); + if (error) + fz_abort(error); + +#if 0 + if (xref->crypt) + { + error = pdf_setpassword(xref->crypt, password); + if (error) fz_abort(error); + } +#endif + + obj = fz_dictgets(xref->trailer, "Root"); + if (!obj) + fz_abort(fz_throw("syntaxerror: missing Root object")); + error = pdf_loadindirect(&xref->root, xref, obj); + if (error) fz_abort(error); + + obj = fz_dictgets(xref->trailer, "Info"); + if (obj) + { + error = pdf_loadindirect(&xref->info, xref, obj); + if (error) fz_abort(error); + } + + error = pdf_loadnametrees(xref); + if (error) fz_abort(error); + + error = pdf_loadoutline(&ctx->outline, xref); + if (error) fz_abort(error); + + ctx->doctitle = filename; + if (xref->info) + { + obj = fz_dictgets(xref->info, "Title"); + if (obj) + { + error = pdf_toutf8(&ctx->doctitle, obj); + if (error) fz_abort(error); + } + } + + error = pdf_loadpagetree(&ctx->pages, xref); + if (error) fz_abort(error); + + //count = pdf_getpagecount(ctx->pages); + + error = fz_newrenderer(&ctx->rast, pdf_devicergb, 0, 1024 * 512); + if (error) fz_abort(error); + + ctx->image = nil; + printf("hit bottom\n"); + + + CantGetPrivate: + return err; +} + +OSStatus view_showpage(HIViewRef view) +{ + OSStatus err; + viewctx *ctx; + + err = GetControlData(view, 1, kViewPrivate, 4, &ctx, NULL); + require_noerr(err, CantGetPrivate); + + fz_error *error; + fz_matrix ctm; + fz_rect bbox; + fz_obj *obj; + char s[256]; + + assert(ctx->pageno > 0 && ctx->pageno <= pdf_getpagecount(ctx->pages)); + + //XDefineCursor(xdpy, xwin, xcwait); + + if (ctx->image) + fz_droppixmap(ctx->image); + ctx->image = nil; + + obj = pdf_getpageobject(ctx->pages, ctx->pageno - 1); + if (obj == ctx->pageobj) + goto Lskipload; + ctx->pageobj = obj; + + if (ctx->page) + pdf_droppage(ctx->page); + + error = pdf_loadpage(&ctx->page, ctx->xref, ctx->pageobj); + if (error) + fz_abort(error); + +Lskipload: + + ctm = fz_identity(); + ctm = fz_concat(ctm, fz_translate(0, -ctx->page->mediabox.max.y)); + ctm = fz_concat(ctm, fz_scale(ctx->zoom, -ctx->zoom)); + ctm = fz_concat(ctm, fz_rotate(ctx->rotate + ctx->page->rotate)); + + bbox = fz_transformaabb(ctm, ctx->page->mediabox); + + error = fz_rendertree(&ctx->image, ctx->rast, ctx->page->tree, ctm, fz_roundrect(bbox), 1); + if (error) + fz_abort(error); + + //XDefineCursor(xdpy, xwin, xcarrow); + + { + char buf[512]; + int count = pdf_getpagecount(ctx->pages); + sprintf(buf, "%s - %d/%d", ctx->doctitle, ctx->pageno, count); + //xtitle(buf); + } + + //xresize(); + //xblit(); + CantGetPrivate: + return err; +} -- cgit v1.2.3