Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(51)

Side by Side Diff: pdf/pdfium/pdfium_engine.cc

Issue 2954803002: Refactor PDFiumEngine::SelectionChangeInvalidator. (Closed)
Patch Set: Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « pdf/pdfium/pdfium_engine.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 #include <stddef.h> 8 #include <stddef.h>
9 #include <stdint.h> 9 #include <stdint.h>
10 10
(...skipping 3248 matching lines...) Expand 10 before | Expand all | Expand 10 after
3259 // This is our highlight color. 3259 // This is our highlight color.
3260 pixel[0] = static_cast<uint8_t>(pixel[0] * (kHighlightColorB / 255.0)); 3260 pixel[0] = static_cast<uint8_t>(pixel[0] * (kHighlightColorB / 255.0));
3261 pixel[1] = static_cast<uint8_t>(pixel[1] * (kHighlightColorG / 255.0)); 3261 pixel[1] = static_cast<uint8_t>(pixel[1] * (kHighlightColorG / 255.0));
3262 pixel[2] = static_cast<uint8_t>(pixel[2] * (kHighlightColorR / 255.0)); 3262 pixel[2] = static_cast<uint8_t>(pixel[2] * (kHighlightColorR / 255.0));
3263 } 3263 }
3264 } 3264 }
3265 } 3265 }
3266 3266
3267 PDFiumEngine::SelectionChangeInvalidator::SelectionChangeInvalidator( 3267 PDFiumEngine::SelectionChangeInvalidator::SelectionChangeInvalidator(
3268 PDFiumEngine* engine) 3268 PDFiumEngine* engine)
3269 : engine_(engine) { 3269 : engine_(engine),
3270 previous_origin_ = engine_->GetVisibleRect().point(); 3270 previous_origin_(engine_->GetVisibleRect().point()),
3271 GetVisibleSelectionsScreenRects(&old_selections_); 3271 old_selections_(GetVisibleSelections()) {}
3272 }
3273 3272
3274 PDFiumEngine::SelectionChangeInvalidator::~SelectionChangeInvalidator() { 3273 PDFiumEngine::SelectionChangeInvalidator::~SelectionChangeInvalidator() {
3275 // Offset the old selections if the document scrolled since we recorded them. 3274 // Offset the old selections if the document scrolled since we recorded them.
3276 pp::Point offset = previous_origin_ - engine_->GetVisibleRect().point(); 3275 pp::Point offset = previous_origin_ - engine_->GetVisibleRect().point();
3277 for (auto& old_selection : old_selections_) 3276 for (auto& old_selection : old_selections_)
3278 old_selection.Offset(offset); 3277 old_selection.Offset(offset);
3279 3278
3280 std::vector<pp::Rect> new_selections; 3279 std::vector<pp::Rect> new_selections = GetVisibleSelections();
3281 GetVisibleSelectionsScreenRects(&new_selections);
3282 for (auto& new_selection : new_selections) { 3280 for (auto& new_selection : new_selections) {
3283 for (auto& old_selection : old_selections_) { 3281 for (auto& old_selection : old_selections_) {
3284 if (!old_selection.IsEmpty() && new_selection == old_selection) { 3282 if (!old_selection.IsEmpty() && new_selection == old_selection) {
3285 // Rectangle was selected before and after, so no need to invalidate it. 3283 // Rectangle was selected before and after, so no need to invalidate it.
3286 // Mark the rectangles by setting them to empty. 3284 // Mark the rectangles by setting them to empty.
3287 new_selection = old_selection = pp::Rect(); 3285 new_selection = old_selection = pp::Rect();
3288 break; 3286 break;
3289 } 3287 }
3290 } 3288 }
3291 } 3289 }
3292 3290
3293 bool selection_changed = false; 3291 bool selection_changed = false;
3294 for (const auto& old_selection : old_selections_) { 3292 for (const auto& old_selection : old_selections_) {
3295 if (!old_selection.IsEmpty()) { 3293 if (!old_selection.IsEmpty()) {
3296 engine_->client_->Invalidate(old_selection); 3294 engine_->client_->Invalidate(old_selection);
3297 selection_changed = true; 3295 selection_changed = true;
3298 } 3296 }
3299 } 3297 }
3300 for (const auto& new_selection : new_selections) { 3298 for (const auto& new_selection : new_selections) {
3301 if (!new_selection.IsEmpty()) { 3299 if (!new_selection.IsEmpty()) {
3302 engine_->client_->Invalidate(new_selection); 3300 engine_->client_->Invalidate(new_selection);
3303 selection_changed = true; 3301 selection_changed = true;
3304 } 3302 }
3305 } 3303 }
3306 if (selection_changed) 3304 if (selection_changed)
3307 engine_->OnSelectionChanged(); 3305 engine_->OnSelectionChanged();
3308 } 3306 }
3309 3307
3310 void PDFiumEngine::SelectionChangeInvalidator::GetVisibleSelectionsScreenRects( 3308 std::vector<pp::Rect>
3311 std::vector<pp::Rect>* rects) { 3309 PDFiumEngine::SelectionChangeInvalidator::GetVisibleSelections() const {
3312 pp::Rect visible_rect = engine_->GetVisibleRect(); 3310 std::vector<pp::Rect> rects;
3311 pp::Point visible_point = engine_->GetVisibleRect().point();
3313 for (auto& range : engine_->selection_) { 3312 for (auto& range : engine_->selection_) {
3314 int page_index = range.page_index(); 3313 // Exclude selections on pages that's not currently visible.
3315 if (!engine_->IsPageVisible(page_index)) 3314 if (!engine_->IsPageVisible(range.page_index()))
3316 continue; // This selection is on a page that's not currently visible. 3315 continue;
3317 3316
3318 std::vector<pp::Rect> selection_rects = 3317 std::vector<pp::Rect> selection_rects = range.GetScreenRects(
3319 range.GetScreenRects(visible_rect.point(), engine_->current_zoom_, 3318 visible_point, engine_->current_zoom_, engine_->current_rotation_);
3320 engine_->current_rotation_); 3319 rects.insert(rects.end(), selection_rects.begin(), selection_rects.end());
3321 rects->insert(rects->end(), selection_rects.begin(), selection_rects.end());
3322 } 3320 }
3321 return rects;
3323 } 3322 }
3324 3323
3325 PDFiumEngine::MouseDownState::MouseDownState( 3324 PDFiumEngine::MouseDownState::MouseDownState(
3326 const PDFiumPage::Area& area, 3325 const PDFiumPage::Area& area,
3327 const PDFiumPage::LinkTarget& target) 3326 const PDFiumPage::LinkTarget& target)
3328 : area_(area), target_(target) {} 3327 : area_(area), target_(target) {}
3329 3328
3330 PDFiumEngine::MouseDownState::~MouseDownState() {} 3329 PDFiumEngine::MouseDownState::~MouseDownState() {}
3331 3330
3332 void PDFiumEngine::MouseDownState::Set(const PDFiumPage::Area& area, 3331 void PDFiumEngine::MouseDownState::Set(const PDFiumPage::Area& area,
(...skipping 859 matching lines...) Expand 10 before | Expand all | Expand 10 after
4192 FPDF_DOCUMENT doc = 4191 FPDF_DOCUMENT doc =
4193 FPDF_LoadMemDocument(pdf_buffer, pdf_buffer_size, nullptr); 4192 FPDF_LoadMemDocument(pdf_buffer, pdf_buffer_size, nullptr);
4194 if (!doc) 4193 if (!doc)
4195 return false; 4194 return false;
4196 bool success = FPDF_GetPageSizeByIndex(doc, page_number, width, height) != 0; 4195 bool success = FPDF_GetPageSizeByIndex(doc, page_number, width, height) != 0;
4197 FPDF_CloseDocument(doc); 4196 FPDF_CloseDocument(doc);
4198 return success; 4197 return success;
4199 } 4198 }
4200 4199
4201 } // namespace chrome_pdf 4200 } // namespace chrome_pdf
OLDNEW
« no previous file with comments | « pdf/pdfium/pdfium_engine.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698