Index: pdf/pdfium/pdfium_engine.cc |
diff --git a/pdf/pdfium/pdfium_engine.cc b/pdf/pdfium/pdfium_engine.cc |
index 3f0b3120edb65b161a2c9aa9c7d0c0151fe831ab..6506d8c96b1038af85ffed479c6b7d05e9dcb8c1 100644 |
--- a/pdf/pdfium/pdfium_engine.cc |
+++ b/pdf/pdfium/pdfium_engine.cc |
@@ -527,6 +527,7 @@ |
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), |
@@ -2276,6 +2277,10 @@ |
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: ..." |
@@ -2345,6 +2350,11 @@ |
return dest ? FPDFDest_GetPageIndex(doc_, dest) : -1; |
} |
+int PDFiumEngine::GetFirstVisiblePage() { |
+ CalculateVisiblePages(); |
+ return first_visible_page_; |
+} |
+ |
int PDFiumEngine::GetMostVisiblePage() { |
CalculateVisiblePages(); |
return most_visible_page_; |
@@ -2359,6 +2369,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) { |
@@ -2689,10 +2719,15 @@ |
// 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)); |