| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "pdf/pdfium/pdfium_engine.h" | 5 #include "pdf/pdfium/pdfium_engine.h" |
| 6 | 6 |
| 7 #include <math.h> | 7 #include <math.h> |
| 8 | 8 |
| 9 #include "base/i18n/icu_encoding_detection.h" | 9 #include "base/i18n/icu_encoding_detection.h" |
| 10 #include "base/i18n/icu_string_conversions.h" | 10 #include "base/i18n/icu_string_conversions.h" |
| (...skipping 1053 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1064 // Convert the current page's rectangle to screen rectangle. We do this | 1064 // Convert the current page's rectangle to screen rectangle. We do this |
| 1065 // instead of the reverse (converting the dirty rectangle from screen to | 1065 // instead of the reverse (converting the dirty rectangle from screen to |
| 1066 // page coordinates) because then we'd have to convert back to screen | 1066 // page coordinates) because then we'd have to convert back to screen |
| 1067 // coordinates, and the rounding errors sometime leave pixels dirty or even | 1067 // coordinates, and the rounding errors sometime leave pixels dirty or even |
| 1068 // move the text up or down a pixel when zoomed. | 1068 // move the text up or down a pixel when zoomed. |
| 1069 pp::Rect page_rect_in_screen = GetPageScreenRect(index); | 1069 pp::Rect page_rect_in_screen = GetPageScreenRect(index); |
| 1070 pp::Rect dirty_in_screen = page_rect_in_screen.Intersect(leftover); | 1070 pp::Rect dirty_in_screen = page_rect_in_screen.Intersect(leftover); |
| 1071 if (dirty_in_screen.IsEmpty()) | 1071 if (dirty_in_screen.IsEmpty()) |
| 1072 continue; | 1072 continue; |
| 1073 | 1073 |
| 1074 // Compute the leftover dirty region. The first page may have blank space | |
| 1075 // above it, in which case we also need to subtract that space from the | |
| 1076 // dirty region. | |
| 1077 if (i == 0) { | |
| 1078 pp::Rect blank_space_in_screen = dirty_in_screen; | |
| 1079 blank_space_in_screen.set_y(0); | |
| 1080 blank_space_in_screen.set_height(dirty_in_screen.y()); | |
| 1081 leftover = leftover.Subtract(blank_space_in_screen); | |
| 1082 } | |
| 1083 leftover = leftover.Subtract(dirty_in_screen); | 1074 leftover = leftover.Subtract(dirty_in_screen); |
| 1084 | 1075 |
| 1085 if (pages_[index]->available()) { | 1076 if (pages_[index]->available()) { |
| 1086 int progressive = GetProgressiveIndex(index); | 1077 int progressive = GetProgressiveIndex(index); |
| 1087 if (progressive != -1) { | 1078 if (progressive != -1) { |
| 1088 DCHECK_GE(progressive, 0); | 1079 DCHECK_GE(progressive, 0); |
| 1089 DCHECK_LT(static_cast<size_t>(progressive), progressive_paints_.size()); | 1080 DCHECK_LT(static_cast<size_t>(progressive), progressive_paints_.size()); |
| 1090 if (progressive_paints_[progressive].rect != dirty_in_screen) { | 1081 if (progressive_paints_[progressive].rect != dirty_in_screen) { |
| 1091 // The PDFium code can only handle one progressive paint at a time, so | 1082 // The PDFium code can only handle one progressive paint at a time, so |
| 1092 // queue this up. Previously we used to merge the rects when this | 1083 // queue this up. Previously we used to merge the rects when this |
| (...skipping 2959 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4052 double* height) { | 4043 double* height) { |
| 4053 FPDF_DOCUMENT doc = FPDF_LoadMemDocument(pdf_buffer, pdf_buffer_size, NULL); | 4044 FPDF_DOCUMENT doc = FPDF_LoadMemDocument(pdf_buffer, pdf_buffer_size, NULL); |
| 4054 if (!doc) | 4045 if (!doc) |
| 4055 return false; | 4046 return false; |
| 4056 bool success = FPDF_GetPageSizeByIndex(doc, page_number, width, height) != 0; | 4047 bool success = FPDF_GetPageSizeByIndex(doc, page_number, width, height) != 0; |
| 4057 FPDF_CloseDocument(doc); | 4048 FPDF_CloseDocument(doc); |
| 4058 return success; | 4049 return success; |
| 4059 } | 4050 } |
| 4060 | 4051 |
| 4061 } // namespace chrome_pdf | 4052 } // namespace chrome_pdf |
| OLD | NEW |