13bf66744d61d18c66d46f2608de0467ad3df0268Mopria/*
23bf66744d61d18c66d46f2608de0467ad3df0268Mopria * Copyright (C) 2016 The Android Open Source Project
33bf66744d61d18c66d46f2608de0467ad3df0268Mopria * Copyright (C) 2016 Mopria Alliance, Inc.
43bf66744d61d18c66d46f2608de0467ad3df0268Mopria * Copyright (C) 2013 Hewlett-Packard Development Company, L.P.
53bf66744d61d18c66d46f2608de0467ad3df0268Mopria *
63bf66744d61d18c66d46f2608de0467ad3df0268Mopria * Licensed under the Apache License, Version 2.0 (the "License");
73bf66744d61d18c66d46f2608de0467ad3df0268Mopria * you may not use this file except in compliance with the License.
83bf66744d61d18c66d46f2608de0467ad3df0268Mopria * You may obtain a copy of the License at
93bf66744d61d18c66d46f2608de0467ad3df0268Mopria *
103bf66744d61d18c66d46f2608de0467ad3df0268Mopria *      http://www.apache.org/licenses/LICENSE-2.0
113bf66744d61d18c66d46f2608de0467ad3df0268Mopria *
123bf66744d61d18c66d46f2608de0467ad3df0268Mopria * Unless required by applicable law or agreed to in writing, software
133bf66744d61d18c66d46f2608de0467ad3df0268Mopria * distributed under the License is distributed on an "AS IS" BASIS,
143bf66744d61d18c66d46f2608de0467ad3df0268Mopria * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
153bf66744d61d18c66d46f2608de0467ad3df0268Mopria * See the License for the specific language governing permissions and
163bf66744d61d18c66d46f2608de0467ad3df0268Mopria * limitations under the License.
173bf66744d61d18c66d46f2608de0467ad3df0268Mopria */
183bf66744d61d18c66d46f2608de0467ad3df0268Mopria
193bf66744d61d18c66d46f2608de0467ad3df0268Mopria#ifndef __WPRINT_MUPDF__
203bf66744d61d18c66d46f2608de0467ad3df0268Mopria#define __WPRINT_MUPDF__
213bf66744d61d18c66d46f2608de0467ad3df0268Mopria
223bf66744d61d18c66d46f2608de0467ad3df0268Mopria#include <jni.h>
233bf66744d61d18c66d46f2608de0467ad3df0268Mopria#include "wprint_image.h"
243bf66744d61d18c66d46f2608de0467ad3df0268Mopria
253bf66744d61d18c66d46f2608de0467ad3df0268Mopriaextern const image_decode_ifc_t *wprint_mupdf_decode_ifc;
263bf66744d61d18c66d46f2608de0467ad3df0268Mopria
273bf66744d61d18c66d46f2608de0467ad3df0268Mopriatypedef struct pdf_render_ifc pdf_render_ifc_t;
283bf66744d61d18c66d46f2608de0467ad3df0268Mopria
293bf66744d61d18c66d46f2608de0467ad3df0268Mopria/*
303bf66744d61d18c66d46f2608de0467ad3df0268Mopria * Defines an interface for inspecting and rendering PDFs. Note: all methods must be called
313bf66744d61d18c66d46f2608de0467ad3df0268Mopria * from the same thread that created the interface.
323bf66744d61d18c66d46f2608de0467ad3df0268Mopria */
333bf66744d61d18c66d46f2608de0467ad3df0268Mopriastruct pdf_render_ifc {
343bf66744d61d18c66d46f2608de0467ad3df0268Mopria    /*
353bf66744d61d18c66d46f2608de0467ad3df0268Mopria     * Return the page count for the specified file, or 0 on failure.
363bf66744d61d18c66d46f2608de0467ad3df0268Mopria     */
373bf66744d61d18c66d46f2608de0467ad3df0268Mopria    int (*openDocument)(pdf_render_ifc_t *self, const char *fileName);
383bf66744d61d18c66d46f2608de0467ad3df0268Mopria
393bf66744d61d18c66d46f2608de0467ad3df0268Mopria    /*
403bf66744d61d18c66d46f2608de0467ad3df0268Mopria     * Render a page (1-based) at the specified zoom level into the supplied output buffer. The
413bf66744d61d18c66d46f2608de0467ad3df0268Mopria     * buffer must be large enough to contain width * height * 3 (RGB). Returns success.
423bf66744d61d18c66d46f2608de0467ad3df0268Mopria     */
433bf66744d61d18c66d46f2608de0467ad3df0268Mopria    status_t (*renderPageStripe)(pdf_render_ifc_t *self, int page, int width,
443bf66744d61d18c66d46f2608de0467ad3df0268Mopria            int height, float zoom, char *buffer);
453bf66744d61d18c66d46f2608de0467ad3df0268Mopria
463bf66744d61d18c66d46f2608de0467ad3df0268Mopria    /*
473bf66744d61d18c66d46f2608de0467ad3df0268Mopria     * Determine the width and height of a particular page (1-based), returning success.
483bf66744d61d18c66d46f2608de0467ad3df0268Mopria     */
493bf66744d61d18c66d46f2608de0467ad3df0268Mopria    status_t (*getPageAttributes)(pdf_render_ifc_t *self, int page,
503bf66744d61d18c66d46f2608de0467ad3df0268Mopria            double *width, double *height);
513bf66744d61d18c66d46f2608de0467ad3df0268Mopria
523bf66744d61d18c66d46f2608de0467ad3df0268Mopria    /*
533bf66744d61d18c66d46f2608de0467ad3df0268Mopria     * Finally release all resources related to this interface
543bf66744d61d18c66d46f2608de0467ad3df0268Mopria     */
553bf66744d61d18c66d46f2608de0467ad3df0268Mopria    void (*destroy)(pdf_render_ifc_t *self);
563bf66744d61d18c66d46f2608de0467ad3df0268Mopria};
573bf66744d61d18c66d46f2608de0467ad3df0268Mopria
583bf66744d61d18c66d46f2608de0467ad3df0268Mopria/*
593bf66744d61d18c66d46f2608de0467ad3df0268Mopria * One-time initialization of pdf_render module. pdf_render_deinit must be called later to
603bf66744d61d18c66d46f2608de0467ad3df0268Mopria * free resources.
613bf66744d61d18c66d46f2608de0467ad3df0268Mopria */
623bf66744d61d18c66d46f2608de0467ad3df0268Mopriavoid pdf_render_init(JNIEnv *env);
633bf66744d61d18c66d46f2608de0467ad3df0268Mopria
643bf66744d61d18c66d46f2608de0467ad3df0268Mopria/*
653bf66744d61d18c66d46f2608de0467ad3df0268Mopria * Deinitialize the pdf_render module (at shutdown)
663bf66744d61d18c66d46f2608de0467ad3df0268Mopria */
673bf66744d61d18c66d46f2608de0467ad3df0268Mopriavoid pdf_render_deinit(JNIEnv *env);
683bf66744d61d18c66d46f2608de0467ad3df0268Mopria
693bf66744d61d18c66d46f2608de0467ad3df0268Mopria/*
703bf66744d61d18c66d46f2608de0467ad3df0268Mopria * Allocate and return a thread-specific pdf_render interface. Caller must eventually
713bf66744d61d18c66d46f2608de0467ad3df0268Mopria * call destroy on this instance.
723bf66744d61d18c66d46f2608de0467ad3df0268Mopria */
733bf66744d61d18c66d46f2608de0467ad3df0268Mopriapdf_render_ifc_t *create_pdf_render_ifc();
743bf66744d61d18c66d46f2608de0467ad3df0268Mopria
753bf66744d61d18c66d46f2608de0467ad3df0268Mopria#endif // __WPRINT_MUPDF__