summaryrefslogtreecommitdiffstats
path: root/pdf
diff options
context:
space:
mode:
authorthestig <thestig@chromium.org>2016-01-05 09:58:28 -0800
committerCommit bot <commit-bot@chromium.org>2016-01-05 17:59:34 +0000
commita9650644c1ea100dbde61b9c5f2fad57a82733cf (patch)
tree0d219514bd150208e69ba3e0a73dbf5880916323 /pdf
parentdcebce077d5dfd83a9d09e4e00d51347637bae84 (diff)
downloadchromium_src-a9650644c1ea100dbde61b9c5f2fad57a82733cf.zip
chromium_src-a9650644c1ea100dbde61b9c5f2fad57a82733cf.tar.gz
chromium_src-a9650644c1ea100dbde61b9c5f2fad57a82733cf.tar.bz2
Revert of Remove some dead PDF code. (patchset #3 id:40001 of https://codereview.chromium.org/1552833003/ )
Reason for revert: Causes a crash. BUG=574440 Original issue's description: > Remove some dead PDF code. > > Committed: https://crrev.com/e2cb8a125d8079f85c16290ee761460cf54b9ec4 > Cr-Commit-Position: refs/heads/master@{#367398} TBR=raymes@chromium.org NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true Review URL: https://codereview.chromium.org/1557423002 Cr-Commit-Position: refs/heads/master@{#367570}
Diffstat (limited to 'pdf')
-rw-r--r--pdf/pdf_engine.h5
-rw-r--r--pdf/pdfium/pdfium_engine.cc41
-rw-r--r--pdf/pdfium/pdfium_engine.h7
3 files changed, 50 insertions, 3 deletions
diff --git a/pdf/pdf_engine.h b/pdf/pdf_engine.h
index c5d33c8..7df4bff2 100644
--- a/pdf/pdf_engine.h
+++ b/pdf/pdf_engine.h
@@ -222,6 +222,7 @@ class PDFEngine {
virtual void RotateCounterclockwise() = 0;
virtual std::string GetSelectedText() = 0;
virtual std::string GetLinkAtPosition(const pp::Point& point) = 0;
+ virtual bool IsSelecting() = 0;
// Checks the permissions associated with this document.
virtual bool HasPermission(DocumentPermission permission) const = 0;
virtual void SelectAll() = 0;
@@ -229,6 +230,8 @@ class PDFEngine {
virtual int GetNumberOfPages() = 0;
// Gets the 0-based page number of |destination|, or -1 if it does not exist.
virtual int GetNamedDestinationPage(const std::string& destination) = 0;
+ // Gets the index of the first visible page, or -1 if none are visible.
+ virtual int GetFirstVisiblePage() = 0;
// Gets the index of the most visible page, or -1 if none are visible.
virtual int GetMostVisiblePage() = 0;
// Gets the rectangle of the page including shadow.
@@ -241,6 +244,8 @@ class PDFEngine {
// Gets the offset of the vertical scrollbar from the top in document
// coordinates.
virtual int GetVerticalScrollbarYPosition() = 0;
+ // Paints page thumbnail to the ImageData.
+ virtual void PaintThumbnail(pp::ImageData* image_data, int index) = 0;
// Set color / grayscale rendering modes.
virtual void SetGrayscale(bool grayscale) = 0;
// Callback for timer that's set with ScheduleCallback().
diff --git a/pdf/pdfium/pdfium_engine.cc b/pdf/pdfium/pdfium_engine.cc
index 87c7dcc..83291bc 100644
--- a/pdf/pdfium/pdfium_engine.cc
+++ b/pdf/pdfium/pdfium_engine.cc
@@ -534,6 +534,7 @@ PDFiumEngine::PDFiumEngine(PDFEngine::Client* client)
fpdf_availability_(NULL),
next_timer_id_(0),
last_page_mouse_down_(-1),
+ first_visible_page_(-1),
most_visible_page_(-1),
called_do_document_action_(false),
render_grayscale_(false),
@@ -2266,6 +2267,10 @@ std::string PDFiumEngine::GetLinkAtPosition(const pp::Point& point) {
return url;
}
+bool PDFiumEngine::IsSelecting() {
+ return selecting_;
+}
+
bool PDFiumEngine::HasPermission(DocumentPermission permission) const {
// PDF 1.7 spec, section 3.5.2 says: "If the revision number is 2 or greater,
// the operations to which user access can be controlled are as follows: ..."
@@ -2334,6 +2339,11 @@ int PDFiumEngine::GetNamedDestinationPage(const std::string& destination) {
return dest ? FPDFDest_GetPageIndex(doc_, dest) : -1;
}
+int PDFiumEngine::GetFirstVisiblePage() {
+ CalculateVisiblePages();
+ return first_visible_page_;
+}
+
int PDFiumEngine::GetMostVisiblePage() {
CalculateVisiblePages();
return most_visible_page_;
@@ -2350,6 +2360,26 @@ pp::Rect PDFiumEngine::GetPageContentsRect(int index) {
return GetScreenRect(pages_[index]->rect());
}
+void PDFiumEngine::PaintThumbnail(pp::ImageData* image_data, int index) {
+ FPDF_BITMAP bitmap = FPDFBitmap_CreateEx(
+ image_data->size().width(), image_data->size().height(),
+ FPDFBitmap_BGRx, image_data->data(), image_data->stride());
+
+ if (pages_[index]->available()) {
+ FPDFBitmap_FillRect(bitmap, 0, 0, image_data->size().width(),
+ image_data->size().height(), 0xFFFFFFFF);
+
+ FPDF_RenderPageBitmap(
+ bitmap, pages_[index]->GetPage(), 0, 0, image_data->size().width(),
+ image_data->size().height(), 0, GetRenderingFlags());
+ } else {
+ FPDFBitmap_FillRect(bitmap, 0, 0, image_data->size().width(),
+ image_data->size().height(), kPendingPageColor);
+ }
+
+ FPDFBitmap_Destroy(bitmap);
+}
+
void PDFiumEngine::SetGrayscale(bool grayscale) {
render_grayscale_ = grayscale;
}
@@ -2678,10 +2708,15 @@ void PDFiumEngine::CalculateVisiblePages() {
// screen coordinates.
form_highlights_.clear();
- int most_visible_page = visible_pages_.empty() ? 0 : visible_pages_.front();
- DCHECK_GE(most_visible_page, 0);
+ if (visible_pages_.size() == 0)
+ first_visible_page_ = -1;
+ else
+ first_visible_page_ = visible_pages_.front();
+
+ int most_visible_page = first_visible_page_;
// Check if the next page is more visible than the first one.
- if (!pages_.empty() &&
+ if (most_visible_page != -1 &&
+ pages_.size() > 0 &&
most_visible_page < static_cast<int>(pages_.size()) - 1) {
pp::Rect rc_first =
visible_rect.Intersect(GetPageScreenRect(most_visible_page));
diff --git a/pdf/pdfium/pdfium_engine.h b/pdf/pdfium/pdfium_engine.h
index e0b8af5..88a2575 100644
--- a/pdf/pdfium/pdfium_engine.h
+++ b/pdf/pdfium/pdfium_engine.h
@@ -77,16 +77,19 @@ class PDFiumEngine : public PDFEngine,
void RotateCounterclockwise() override;
std::string GetSelectedText() override;
std::string GetLinkAtPosition(const pp::Point& point) override;
+ bool IsSelecting() override;
bool HasPermission(DocumentPermission permission) const override;
void SelectAll() override;
int GetNumberOfPages() override;
pp::VarArray GetBookmarks() override;
int GetNamedDestinationPage(const std::string& destination) override;
+ int GetFirstVisiblePage() override;
int GetMostVisiblePage() override;
pp::Rect GetPageRect(int index) override;
pp::Rect GetPageContentsRect(int index) override;
pp::Rect GetPageScreenRect(int page_index) const override;
int GetVerticalScrollbarYPosition() override { return position_.y(); }
+ void PaintThumbnail(pp::ImageData* image_data, int index) override;
void SetGrayscale(bool grayscale) override;
void OnCallback(int id) override;
std::string GetPageAsJSON(int index) override;
@@ -667,6 +670,10 @@ class PDFiumEngine : public PDFEngine,
// 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_;