| Index: pdf/pdfium/pdfium_engine.h
|
| ===================================================================
|
| --- pdf/pdfium/pdfium_engine.h (revision 0)
|
| +++ pdf/pdfium/pdfium_engine.h (revision 0)
|
| @@ -0,0 +1,621 @@
|
| +// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#ifndef PDF_PDFIUM_PDFIUM_ENGINE_H_
|
| +#define PDF_PDFIUM_PDFIUM_ENGINE_H_
|
| +
|
| +#include <map>
|
| +#include <string>
|
| +#include <utility>
|
| +#include <vector>
|
| +
|
| +#include "base/memory/scoped_ptr.h"
|
| +#include "base/time/time.h"
|
| +#include "pdf/document_loader.h"
|
| +#include "pdf/pdf_engine.h"
|
| +#include "pdf/pdfium/pdfium_page.h"
|
| +#include "pdf/pdfium/pdfium_range.h"
|
| +#include "ppapi/cpp/completion_callback.h"
|
| +#include "ppapi/cpp/dev/buffer_dev.h"
|
| +#include "ppapi/cpp/image_data.h"
|
| +#include "ppapi/cpp/point.h"
|
| +#include "third_party/pdfium/fpdfsdk/include/fpdf_dataavail.h"
|
| +#include "third_party/pdfium/fpdfsdk/include/fpdf_progressive.h"
|
| +#include "third_party/pdfium/fpdfsdk/include/fpdfformfill.h"
|
| +#include "third_party/pdfium/fpdfsdk/include/fpdfview.h"
|
| +
|
| +namespace pp {
|
| +class KeyboardInputEvent;
|
| +class MouseInputEvent;
|
| +}
|
| +
|
| +namespace chrome_pdf {
|
| +
|
| +class ShadowMatrix;
|
| +
|
| +class PDFiumEngine : public PDFEngine,
|
| + public DocumentLoader::Client,
|
| + public FPDF_FORMFILLINFO,
|
| + public IPDF_JSPLATFORM,
|
| + public IFSDK_PAUSE {
|
| + public:
|
| + explicit PDFiumEngine(PDFEngine::Client* client);
|
| + virtual ~PDFiumEngine();
|
| +
|
| + // PDFEngine implementation.
|
| + virtual bool New(const char* url);
|
| + virtual bool New(const char* url,
|
| + const char* headers);
|
| + virtual void PageOffsetUpdated(const pp::Point& page_offset);
|
| + virtual void PluginSizeUpdated(const pp::Size& size);
|
| + virtual void ScrolledToXPosition(int position);
|
| + virtual void ScrolledToYPosition(int position);
|
| + virtual void PrePaint();
|
| + virtual void Paint(const pp::Rect& rect,
|
| + pp::ImageData* image_data,
|
| + std::vector<pp::Rect>* ready,
|
| + std::vector<pp::Rect>* pending);
|
| + virtual void PostPaint();
|
| + virtual bool HandleDocumentLoad(const pp::URLLoader& loader);
|
| + virtual bool HandleEvent(const pp::InputEvent& event);
|
| + virtual uint32_t QuerySupportedPrintOutputFormats();
|
| + virtual void PrintBegin();
|
| + virtual pp::Resource PrintPages(
|
| + const PP_PrintPageNumberRange_Dev* page_ranges,
|
| + uint32_t page_range_count,
|
| + const PP_PrintSettings_Dev& print_settings);
|
| + virtual void PrintEnd();
|
| + virtual void StartFind(const char* text, bool case_sensitive);
|
| + virtual bool SelectFindResult(bool forward);
|
| + virtual void StopFind();
|
| + virtual void ZoomUpdated(double new_zoom_level);
|
| + virtual void RotateClockwise();
|
| + virtual void RotateCounterclockwise();
|
| + virtual std::string GetSelectedText();
|
| + virtual std::string GetLinkAtPosition(const pp::Point& point);
|
| + virtual bool IsSelecting();
|
| + virtual bool HasPermission(DocumentPermission permission) const;
|
| + virtual void SelectAll();
|
| + virtual int GetNumberOfPages();
|
| + virtual int GetNamedDestinationPage(const std::string& destination);
|
| + virtual int GetFirstVisiblePage();
|
| + virtual int GetMostVisiblePage();
|
| + virtual pp::Rect GetPageRect(int index);
|
| + virtual pp::Rect GetPageContentsRect(int index);
|
| + virtual int GetVerticalScrollbarYPosition() { return position_.y(); }
|
| + virtual void PaintThumbnail(pp::ImageData* image_data, int index);
|
| + virtual void SetGrayscale(bool grayscale);
|
| + virtual void OnCallback(int id);
|
| + virtual std::string GetPageAsJSON(int index);
|
| + virtual bool GetPrintScaling();
|
| + virtual void AppendBlankPages(int num_pages);
|
| + virtual void AppendPage(PDFEngine* engine, int index);
|
| + virtual pp::Point GetScrollPosition();
|
| + virtual void SetScrollPosition(const pp::Point& position);
|
| + virtual bool IsProgressiveLoad();
|
| +
|
| + // DocumentLoader::Client implementation.
|
| + virtual pp::Instance* GetPluginInstance();
|
| + virtual pp::URLLoader CreateURLLoader();
|
| + virtual void OnPartialDocumentLoaded();
|
| + virtual void OnPendingRequestComplete();
|
| + virtual void OnNewDataAvailable();
|
| + virtual void OnDocumentComplete();
|
| +
|
| + void UnsupportedFeature(int type);
|
| +
|
| + std::string current_find_text() const { return current_find_text_; }
|
| +
|
| + FPDF_DOCUMENT doc() { return doc_; }
|
| + FPDF_FORMHANDLE form() { return form_; }
|
| +
|
| + private:
|
| + // This helper class is used to detect the difference in selection between
|
| + // construction and destruction. At destruction, it invalidates all the
|
| + // parts that are newly selected, along with all the parts that used to be
|
| + // selected but are not anymore.
|
| + class SelectionChangeInvalidator {
|
| + public:
|
| + explicit SelectionChangeInvalidator(PDFiumEngine* engine);
|
| + ~SelectionChangeInvalidator();
|
| + private:
|
| + // Sets the given container to the all the currently visible selection
|
| + // rectangles, in screen coordinates.
|
| + void GetVisibleSelectionsScreenRects(std::vector<pp::Rect>* rects);
|
| +
|
| + PDFiumEngine* engine_;
|
| + // Screen rectangles that were selected on construction.
|
| + std::vector<pp::Rect> old_selections_;
|
| + // The origin at the time this object was constructed.
|
| + pp::Point previous_origin_;
|
| + };
|
| +
|
| + friend class SelectionChangeInvalidator;
|
| +
|
| + struct FileAvail : public FX_FILEAVAIL {
|
| + DocumentLoader* loader;
|
| + };
|
| +
|
| + struct DownloadHints : public FX_DOWNLOADHINTS {
|
| + DocumentLoader* loader;
|
| + };
|
| +
|
| + // PDFium interface to get block of data.
|
| + static int GetBlock(void* param, unsigned long position,
|
| + unsigned char* buffer, unsigned long size);
|
| +
|
| + // PDFium interface to check is block of data is available.
|
| + static bool IsDataAvail(FX_FILEAVAIL* param,
|
| + size_t offset, size_t size);
|
| +
|
| + // PDFium interface to request download of the block of data.
|
| + static void AddSegment(FX_DOWNLOADHINTS* param,
|
| + size_t offset, size_t size);
|
| +
|
| + // We finished getting the pdf file, so load it. This will complete
|
| + // asynchronously (due to password fetching) and may be run multiple times.
|
| + void LoadDocument();
|
| +
|
| + // Try loading the document. Returns true if the document is successfully
|
| + // loaded or is already loaded otherwise it will return false. If
|
| + // |with_password| is set to true, the document will be loaded with
|
| + // |password|. If the document could not be loaded and needs a password,
|
| + // |needs_password| will be set to true.
|
| + bool TryLoadingDoc(bool with_password,
|
| + const std::string& password,
|
| + bool* needs_password);
|
| +
|
| + // Ask the user for the document password and then continue loading the
|
| + // document.
|
| + void GetPasswordAndLoad();
|
| +
|
| + // Called when the password has been retrieved.
|
| + void OnGetPasswordComplete(int32_t result,
|
| + const pp::Var& password);
|
| +
|
| + // Continues loading the document when the password has been retrieved, or if
|
| + // there is no password.
|
| + void ContinueLoadingDocument(bool has_password,
|
| + const std::string& password);
|
| +
|
| + // Finish loading the document and notify the client that the document has
|
| + // been loaded. This should only be run after |doc_| has been loaded and the
|
| + // document is fully downloaded. If this has been run once, it will result in
|
| + // a no-op.
|
| + void FinishLoadingDocument();
|
| +
|
| + // Loads information about the pages in the document and calculate the
|
| + // document size.
|
| + void LoadPageInfo(bool reload);
|
| +
|
| + // Calculate which pages should be displayed right now.
|
| + void CalculateVisiblePages();
|
| +
|
| + // Returns true iff the given page index is visible. CalculateVisiblePages
|
| + // must have been called first.
|
| + bool IsPageVisible(int index) const;
|
| +
|
| + // Checks if a page is now available, and if so marks it as such and returns
|
| + // true. Otherwise, it will return false and will add the index to the given
|
| + // array if it's not already there.
|
| + bool CheckPageAvailable(int index, std::vector<int>* pending);
|
| +
|
| + // Helper function to get a given page's size in pixels. This is not part of
|
| + // PDFiumPage because we might not have that structure when we need this.
|
| + pp::Size GetPageSize(int index);
|
| +
|
| + void UpdateTickMarks();
|
| +
|
| + // Called to continue searching so we don't block the main thread.
|
| + void ContinueFind(int32_t result);
|
| +
|
| + // Inserts a find result into find_results_, which is sorted.
|
| + void AddFindResult(const PDFiumRange& result);
|
| +
|
| + // Search a page using PDFium's methods. Doesn't work with unicode. This
|
| + // function is just kept arount in case PDFium code is fixed.
|
| + void SearchUsingPDFium(const base::string16& term,
|
| + bool case_sensitive,
|
| + bool first_search,
|
| + int character_to_start_searching_from,
|
| + int current_page);
|
| +
|
| + // Search a page ourself using ICU.
|
| + void SearchUsingICU(const base::string16& term,
|
| + bool case_sensitive,
|
| + bool first_search,
|
| + int character_to_start_searching_from,
|
| + int current_page);
|
| +
|
| + // Input event handlers.
|
| + bool OnMouseDown(const pp::MouseInputEvent& event);
|
| + bool OnMouseUp(const pp::MouseInputEvent& event);
|
| + bool OnMouseMove(const pp::MouseInputEvent& event);
|
| + bool OnKeyDown(const pp::KeyboardInputEvent& event);
|
| + bool OnKeyUp(const pp::KeyboardInputEvent& event);
|
| + bool OnChar(const pp::KeyboardInputEvent& event);
|
| +
|
| + pp::Buffer_Dev PrintPagesAsRasterPDF(
|
| + const PP_PrintPageNumberRange_Dev* page_ranges,
|
| + uint32_t page_range_count,
|
| + const PP_PrintSettings_Dev& print_settings);
|
| + pp::Buffer_Dev PrintPagesAsPDF(const PP_PrintPageNumberRange_Dev* page_ranges,
|
| + uint32_t page_range_count,
|
| + const PP_PrintSettings_Dev& print_settings);
|
| + pp::Buffer_Dev GetFlattenedPrintData(const FPDF_DOCUMENT& doc);
|
| + void FitContentsToPrintableAreaIfRequired(
|
| + const FPDF_DOCUMENT& doc,
|
| + const PP_PrintSettings_Dev& print_settings);
|
| + void SaveSelectedFormForPrint();
|
| +
|
| + // Given a mouse event, returns which page and character location it's closest
|
| + // to.
|
| + PDFiumPage::Area GetCharIndex(const pp::MouseInputEvent& event,
|
| + int* page_index,
|
| + int* char_index,
|
| + PDFiumPage::LinkTarget* target);
|
| + PDFiumPage::Area GetCharIndex(const pp::Point& point,
|
| + int* page_index,
|
| + int* char_index,
|
| + PDFiumPage::LinkTarget* target);
|
| +
|
| + void OnSingleClick(int page_index, int char_index);
|
| + void OnMultipleClick(int click_count, int page_index, int char_index);
|
| +
|
| + // Starts a progressive paint operation given a rectangle in screen
|
| + // coordinates. Returns the index in progressive_rects_.
|
| + int StartPaint(int page_index, const pp::Rect& dirty);
|
| +
|
| + // Continues a paint operation that was started earlier. Returns true if the
|
| + // paint is done, or false if it needs to be continued.
|
| + bool ContinuePaint(int progressive_index, pp::ImageData* image_data);
|
| +
|
| + // Called once PDFium is finished rendering a page so that we draw our
|
| + // borders, highlighting etc.
|
| + void FinishPaint(int progressive_index, pp::ImageData* image_data);
|
| +
|
| + // Stops any paints that are in progress.
|
| + void CancelPaints();
|
| +
|
| + // Invalidates all pages. Use this when some global parameter, such as page
|
| + // orientation, has changed.
|
| + void InvalidateAllPages();
|
| +
|
| + // If the page is narrower than the document size, paint the extra space
|
| + // with the page background.
|
| + void FillPageSides(int progressive_index);
|
| +
|
| + void PaintPageShadow(int progressive_index, pp::ImageData* image_data);
|
| +
|
| + // Highlight visible find results and selections.
|
| + void DrawSelections(int progressive_index, pp::ImageData* image_data);
|
| +
|
| + // Paints an page that hasn't finished downloading.
|
| + void PaintUnavailablePage(int page_index,
|
| + const pp::Rect& dirty,
|
| + pp::ImageData* image_data);
|
| +
|
| + // Given a page index, returns the corresponding index in progressive_rects_,
|
| + // or -1 if it doesn't exist.
|
| + int GetProgressiveIndex(int page_index) const;
|
| +
|
| + // Creates a FPDF_BITMAP from a rectangle in screen coordinates.
|
| + FPDF_BITMAP CreateBitmap(const pp::Rect& rect,
|
| + pp::ImageData* image_data) const;
|
| +
|
| + // Given a rectangle in screen coordinates, returns the coordinates in the
|
| + // units that PDFium rendering functions expect.
|
| + void GetPDFiumRect(int page_index, const pp::Rect& rect, int* start_x,
|
| + int* start_y, int* size_x, int* size_y) const;
|
| +
|
| + // Returns the rendering flags to pass to PDFium.
|
| + int GetRenderingFlags() const;
|
| +
|
| + // Returns the currently visible rectangle in document coordinates.
|
| + pp::Rect GetVisibleRect() const;
|
| +
|
| + // Returns a page's rect in screen coordinates, as well as its surrounding
|
| + // border areas and bottom separator.
|
| + pp::Rect GetPageScreenRect(int page_index) const;
|
| +
|
| + // Given a rectangle in document coordinates, returns the rectange into screen
|
| + // coordinates (i.e. 0,0 is top left corner of plugin area). If it's not
|
| + // visible, an empty rectangle is returned.
|
| + pp::Rect GetScreenRect(const pp::Rect& rect) const;
|
| +
|
| + // Highlights the given rectangle.
|
| + void Highlight(void* buffer,
|
| + int stride,
|
| + const pp::Rect& rect,
|
| + std::vector<pp::Rect>* highlighted_rects);
|
| +
|
| + // Helper function to convert a device to page coordinates. If the page is
|
| + // not yet loaded, page_x and page_y will be set to 0.
|
| + void DeviceToPage(int page_index,
|
| + float device_x,
|
| + float device_y,
|
| + double* page_x,
|
| + double* page_y);
|
| +
|
| + // Helper function to get the index of a given FPDF_PAGE. Returns -1 if not
|
| + // found.
|
| + int GetVisiblePageIndex(FPDF_PAGE page);
|
| +
|
| + // Helper function to change the current page, running page open/close
|
| + // triggers as necessary.
|
| + void SetCurrentPage(int index);
|
| +
|
| + // Transform |page| contents to fit in the selected printer paper size.
|
| + void TransformPDFPageForPrinting(FPDF_PAGE page,
|
| + const PP_PrintSettings_Dev& print_settings);
|
| +
|
| + void DrawPageShadow(const pp::Rect& page_rect,
|
| + const pp::Rect& shadow_rect,
|
| + const pp::Rect& clip_rect,
|
| + pp::ImageData* image_data);
|
| +
|
| + void GetRegion(const pp::Point& location,
|
| + pp::ImageData* image_data,
|
| + void** region,
|
| + int* stride) const;
|
| +
|
| + // Called when the selection changes.
|
| + void OnSelectionChanged();
|
| +
|
| + // FPDF_FORMFILLINFO callbacks.
|
| + static void Form_Invalidate(FPDF_FORMFILLINFO* param,
|
| + FPDF_PAGE page,
|
| + double left,
|
| + double top,
|
| + double right,
|
| + double bottom);
|
| + static void Form_OutputSelectedRect(FPDF_FORMFILLINFO* param,
|
| + FPDF_PAGE page,
|
| + double left,
|
| + double top,
|
| + double right,
|
| + double bottom);
|
| + static void Form_SetCursor(FPDF_FORMFILLINFO* param, int cursor_type);
|
| + static int Form_SetTimer(FPDF_FORMFILLINFO* param,
|
| + int elapse,
|
| + TimerCallback timer_func);
|
| + static void Form_KillTimer(FPDF_FORMFILLINFO* param, int timer_id);
|
| + static FPDF_SYSTEMTIME Form_GetLocalTime(FPDF_FORMFILLINFO* param);
|
| + static void Form_OnChange(FPDF_FORMFILLINFO* param);
|
| + static FPDF_PAGE Form_GetPage(FPDF_FORMFILLINFO* param,
|
| + FPDF_DOCUMENT document,
|
| + int page_index);
|
| + static FPDF_PAGE Form_GetCurrentPage(FPDF_FORMFILLINFO* param,
|
| + FPDF_DOCUMENT document);
|
| + static int Form_GetRotation(FPDF_FORMFILLINFO* param, FPDF_PAGE page);
|
| + static void Form_ExecuteNamedAction(FPDF_FORMFILLINFO* param,
|
| + FPDF_BYTESTRING named_action);
|
| + static void Form_SetTextFieldFocus(FPDF_FORMFILLINFO* param,
|
| + FPDF_WIDESTRING value,
|
| + FPDF_DWORD valueLen,
|
| + FPDF_BOOL is_focus);
|
| + static void Form_DoURIAction(FPDF_FORMFILLINFO* param, FPDF_BYTESTRING uri);
|
| + static void Form_DoGoToAction(FPDF_FORMFILLINFO* param,
|
| + int page_index,
|
| + int zoom_mode,
|
| + float* position_array,
|
| + int size_of_array);
|
| +
|
| + // IPDF_JSPLATFORM callbacks.
|
| + static int Form_Alert(IPDF_JSPLATFORM* param,
|
| + FPDF_WIDESTRING message,
|
| + FPDF_WIDESTRING title,
|
| + int type,
|
| + int icon);
|
| + static void Form_Beep(IPDF_JSPLATFORM* param, int type);
|
| + static int Form_Response(IPDF_JSPLATFORM* param,
|
| + FPDF_WIDESTRING question,
|
| + FPDF_WIDESTRING title,
|
| + FPDF_WIDESTRING default_response,
|
| + FPDF_WIDESTRING label,
|
| + FPDF_BOOL password,
|
| + void* response,
|
| + int length);
|
| + static int Form_GetFilePath(IPDF_JSPLATFORM* param,
|
| + void* file_path,
|
| + int length);
|
| + static void Form_Mail(IPDF_JSPLATFORM* param,
|
| + void* mail_data,
|
| + int length,
|
| + FPDF_BOOL ui,
|
| + FPDF_WIDESTRING to,
|
| + FPDF_WIDESTRING subject,
|
| + FPDF_WIDESTRING cc,
|
| + FPDF_WIDESTRING bcc,
|
| + FPDF_WIDESTRING message);
|
| + static void Form_Print(IPDF_JSPLATFORM* param,
|
| + FPDF_BOOL ui,
|
| + int start,
|
| + int end,
|
| + FPDF_BOOL silent,
|
| + FPDF_BOOL shrink_to_fit,
|
| + FPDF_BOOL print_as_image,
|
| + FPDF_BOOL reverse,
|
| + FPDF_BOOL annotations);
|
| + static void Form_SubmitForm(IPDF_JSPLATFORM* param,
|
| + void* form_data,
|
| + int length,
|
| + FPDF_WIDESTRING url);
|
| + static void Form_GotoPage(IPDF_JSPLATFORM* param, int page_number);
|
| + static int Form_Browse(IPDF_JSPLATFORM* param, void* file_path, int length);
|
| +
|
| + // IFSDK_PAUSE callbacks
|
| + static FPDF_BOOL Pause_NeedToPauseNow(IFSDK_PAUSE* param);
|
| +
|
| + PDFEngine::Client* client_;
|
| + pp::Size document_size_; // Size of document in pixels.
|
| +
|
| + // The scroll position in screen coordinates.
|
| + pp::Point position_;
|
| + // The offset of the page into the viewport.
|
| + pp::Point page_offset_;
|
| + // The plugin size in screen coordinates.
|
| + pp::Size plugin_size_;
|
| + double current_zoom_;
|
| + unsigned int current_rotation_;
|
| +
|
| + DocumentLoader doc_loader_; // Main document's loader.
|
| + std::string url_;
|
| + std::string headers_;
|
| + pp::CompletionCallbackFactory<PDFiumEngine> find_factory_;
|
| +
|
| + pp::CompletionCallbackFactory<PDFiumEngine> password_factory_;
|
| + int32_t password_tries_remaining_;
|
| +
|
| + // The current text used for searching.
|
| + std::string current_find_text_;
|
| +
|
| + // The PDFium wrapper object for the document.
|
| + FPDF_DOCUMENT doc_;
|
| +
|
| + // The PDFium wrapper for form data. Used even if there are no form controls
|
| + // on the page.
|
| + FPDF_FORMHANDLE form_;
|
| +
|
| + // The page(s) of the document. Store a vector of pointers so that when the
|
| + // vector is resized we don't close the pages that are used in pending
|
| + // paints.
|
| + std::vector<PDFiumPage*> pages_;
|
| +
|
| + // The indexes of the pages currently visible.
|
| + std::vector<int> visible_pages_;
|
| +
|
| + // The indexes of the pages pending download.
|
| + std::vector<int> pending_pages_;
|
| +
|
| + // During handling of input events we don't want to unload any pages in
|
| + // callbacks to us from PDFium, since the current page can change while PDFium
|
| + // code still has a pointer to it.
|
| + bool defer_page_unload_;
|
| + std::vector<int> deferred_page_unloads_;
|
| +
|
| + // Used for selection. There could be more than one range if selection spans
|
| + // more than one page.
|
| + std::vector<PDFiumRange> selection_;
|
| + // True if we're in the middle of selection.
|
| + bool selecting_;
|
| +
|
| + // Used for searching.
|
| + typedef std::vector<PDFiumRange> FindResults;
|
| + FindResults find_results_;
|
| + // Which page to search next.
|
| + int next_page_to_search_;
|
| + // Where to stop searching.
|
| + int last_page_to_search_;
|
| + int last_character_index_to_search_; // -1 if search until end of page.
|
| + // Which result the user has currently selected.
|
| + int current_find_index_;
|
| +
|
| + // Permissions bitfield.
|
| + unsigned long permissions_;
|
| +
|
| + // Interface structure to provide access to document stream.
|
| + FPDF_FILEACCESS file_access_;
|
| + // Interface structure to check data availability in the document stream.
|
| + FileAvail file_availability_;
|
| + // Interface structure to request data chunks from the document stream.
|
| + DownloadHints download_hints_;
|
| + // Pointer to the document availability interface.
|
| + FPDF_AVAIL fpdf_availability_;
|
| +
|
| + pp::Size default_page_size_;
|
| +
|
| + // Used to manage timers that form fill API needs. The pair holds the timer
|
| + // period, in ms, and the callback function.
|
| + std::map<int, std::pair<int, TimerCallback> > timers_;
|
| + int next_timer_id_;
|
| +
|
| + // Holds the page index of the last page that the mouse clicked on.
|
| + int last_page_mouse_down_;
|
| +
|
| + // Holds the page index of the first visible page; refreshed by calling
|
| + // CalculateVisiblePages()
|
| + int first_visible_page_;
|
| +
|
| + // Holds the page index of the most visible page; refreshed by calling
|
| + // CalculateVisiblePages()
|
| + int most_visible_page_;
|
| +
|
| + // Set to true after FORM_DoDocumentJSAction/FORM_DoDocumentOpenAction have
|
| + // been called. Only after that can we call FORM_DoPageAAction.
|
| + bool called_do_document_action_;
|
| +
|
| + // Records parts of form fields that need to be highlighted at next paint, in
|
| + // screen coordinates.
|
| + std::vector<pp::Rect> form_highlights_;
|
| +
|
| + // Whether to render in grayscale or in color.
|
| + bool render_grayscale_;
|
| +
|
| + // The link currently under the cursor.
|
| + std::string link_under_cursor_;
|
| +
|
| + // Pending progressive paints.
|
| + struct ProgressivePaint {
|
| + pp::Rect rect; // In screen coordinates.
|
| + FPDF_BITMAP bitmap;
|
| + int page_index;
|
| + // Temporary used to figure out if in a series of Paint() calls whether this
|
| + // pending paint was updated or not.
|
| + int painted_;
|
| + };
|
| + std::vector<ProgressivePaint> progressive_paints_;
|
| +
|
| + // Keeps track of when we started the last progressive paint, so that in our
|
| + // callback we can determine if we need to pause.
|
| + base::Time last_progressive_start_time_;
|
| +
|
| + // The timeout to use for the current progressive paint.
|
| + int progressive_paint_timeout_;
|
| +
|
| + // Shadow matrix for generating the page shadow bitmap.
|
| + scoped_ptr<ShadowMatrix> page_shadow_;
|
| +
|
| + // Set to true if the user is being prompted for their password. Will be set
|
| + // to false after the user finishes getting their password.
|
| + bool getting_password_;
|
| +};
|
| +
|
| +// Create a local variable of this when calling PDFium functions which can call
|
| +// our global callback when an unsupported feature is reached.
|
| +class ScopedUnsupportedFeature {
|
| + public:
|
| + explicit ScopedUnsupportedFeature(PDFiumEngine* engine);
|
| + ~ScopedUnsupportedFeature();
|
| + private:
|
| + PDFiumEngine* engine_;
|
| + PDFiumEngine* old_engine_;
|
| +};
|
| +
|
| +class PDFiumEngineExports : public PDFEngineExports {
|
| + public:
|
| + PDFiumEngineExports() {}
|
| +#if defined(OS_WIN)
|
| + // See the definition of RenderPDFPageToDC in pdf.cc for details.
|
| + virtual bool RenderPDFPageToDC(const void* pdf_buffer,
|
| + int buffer_size,
|
| + int page_number,
|
| + const RenderingSettings& settings,
|
| + HDC dc);
|
| +#endif // OS_WIN
|
| + virtual bool RenderPDFPageToBitmap(const void* pdf_buffer,
|
| + int pdf_buffer_size,
|
| + int page_number,
|
| + const RenderingSettings& settings,
|
| + void* bitmap_buffer);
|
| +
|
| + virtual bool GetPDFDocInfo(const void* pdf_buffer,
|
| + int buffer_size,
|
| + int* page_count,
|
| + double* max_page_width);
|
| +};
|
| +
|
| +} // namespace chrome_pdf
|
| +
|
| +#endif // PDF_PDFIUM_PDFIUM_ENGINE_H_
|
|
|
| Property changes on: pdf\pdfium\pdfium_engine.h
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|