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

Side by Side Diff: pdf/out_of_process_instance.cc

Issue 1901903002: Improved Pinch-Zoom for PDF (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@pepper_add_set_layer_transform
Patch Set: Clean code part 2 Created 4 years, 8 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
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/out_of_process_instance.h" 5 #include "pdf/out_of_process_instance.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <algorithm> // for min/max() 10 #include <algorithm> // for min/max()
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
56 const char kAccessibleLoaded[] = "loaded"; 56 const char kAccessibleLoaded[] = "loaded";
57 const char kAccessibleCopyable[] = "copyable"; 57 const char kAccessibleCopyable[] = "copyable";
58 58
59 // Constants used in handling postMessage() messages. 59 // Constants used in handling postMessage() messages.
60 const char kType[] = "type"; 60 const char kType[] = "type";
61 // Viewport message arguments. (Page -> Plugin). 61 // Viewport message arguments. (Page -> Plugin).
62 const char kJSViewportType[] = "viewport"; 62 const char kJSViewportType[] = "viewport";
63 const char kJSXOffset[] = "xOffset"; 63 const char kJSXOffset[] = "xOffset";
64 const char kJSYOffset[] = "yOffset"; 64 const char kJSYOffset[] = "yOffset";
65 const char kJSZoom[] = "zoom"; 65 const char kJSZoom[] = "zoom";
66 const char kJSRender[] = "render";
67 const char kJSPx[] = "px";
68 const char kJSPy[] = "py";
bokan 2016/04/21 18:20:17 more descriptive name please
alessandroa 2016/04/22 14:33:04 Acknowledged.
69 const char kJSPinchVectorX[] = "pinchVectorX";
bokan 2016/04/21 18:20:17 add a comment to say what pinch vector is (i.e. th
alessandroa 2016/04/22 14:33:05 Done.
70 const char kJSPinchVectorY[] = "pinchVectorY";
66 // Stop scrolling message (Page -> Plugin) 71 // Stop scrolling message (Page -> Plugin)
67 const char kJSStopScrollingType[] = "stopScrolling"; 72 const char kJSStopScrollingType[] = "stopScrolling";
68 // Document dimension arguments (Plugin -> Page). 73 // Document dimension arguments (Plugin -> Page).
69 const char kJSDocumentDimensionsType[] = "documentDimensions"; 74 const char kJSDocumentDimensionsType[] = "documentDimensions";
70 const char kJSDocumentWidth[] = "width"; 75 const char kJSDocumentWidth[] = "width";
71 const char kJSDocumentHeight[] = "height"; 76 const char kJSDocumentHeight[] = "height";
72 const char kJSPageDimensions[] = "pageDimensions"; 77 const char kJSPageDimensions[] = "pageDimensions";
73 const char kJSPageX[] = "x"; 78 const char kJSPageX[] = "x";
74 const char kJSPageY[] = "y"; 79 const char kJSPageY[] = "y";
75 const char kJSPageWidth[] = "width"; 80 const char kJSPageWidth[] = "width";
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
266 } 271 }
267 272
268 } // namespace 273 } // namespace
269 274
270 OutOfProcessInstance::OutOfProcessInstance(PP_Instance instance) 275 OutOfProcessInstance::OutOfProcessInstance(PP_Instance instance)
271 : pp::Instance(instance), 276 : pp::Instance(instance),
272 pp::Find_Private(this), 277 pp::Find_Private(this),
273 pp::Printing_Dev(this), 278 pp::Printing_Dev(this),
274 cursor_(PP_CURSORTYPE_POINTER), 279 cursor_(PP_CURSORTYPE_POINTER),
275 zoom_(1.0), 280 zoom_(1.0),
281 do_render_(1),
282 last_current_scroll_(0,0),
bokan 2016/04/21 18:20:17 nit: space after comma: (0,0) -> (0, 0)
alessandroa 2016/04/22 14:33:05 Done.
283 was_smaller_(false),
276 device_scale_(1.0), 284 device_scale_(1.0),
277 full_(false), 285 full_(false),
278 paint_manager_(this, this, true), 286 paint_manager_(this, this, true),
279 first_paint_(true), 287 first_paint_(true),
280 document_load_state_(LOAD_STATE_LOADING), 288 document_load_state_(LOAD_STATE_LOADING),
281 preview_document_load_state_(LOAD_STATE_COMPLETE), 289 preview_document_load_state_(LOAD_STATE_COMPLETE),
282 uma_(this), 290 uma_(this),
283 told_browser_about_unsupported_feature_(false), 291 told_browser_about_unsupported_feature_(false),
284 print_preview_page_count_(0), 292 print_preview_page_count_(0),
285 last_progress_sent_(0), 293 last_progress_sent_(0),
286 recently_sent_find_update_(false), 294 recently_sent_find_update_(false),
287 received_viewport_message_(false), 295 received_viewport_message_(false),
288 did_call_start_loading_(false), 296 did_call_start_loading_(false),
289 stop_scrolling_(false), 297 stop_scrolling_(false),
290 background_color_(0), 298 background_color_(0),
291 top_toolbar_height_(0) { 299 top_toolbar_height_(0){
292 loader_factory_.Initialize(this); 300 loader_factory_.Initialize(this);
293 timer_factory_.Initialize(this); 301 timer_factory_.Initialize(this);
294 form_factory_.Initialize(this); 302 form_factory_.Initialize(this);
295 print_callback_factory_.Initialize(this); 303 print_callback_factory_.Initialize(this);
296 engine_.reset(PDFEngine::Create(this)); 304 engine_.reset(PDFEngine::Create(this));
297 pp::Module::Get()->AddPluginInterface(kPPPPdfInterface, &ppp_private); 305 pp::Module::Get()->AddPluginInterface(kPPPPdfInterface, &ppp_private);
298 AddPerInstanceObject(kPPPPdfInterface, this); 306 AddPerInstanceObject(kPPPPdfInterface, this);
299 307
300 RequestFilteringInputEvents(PP_INPUTEVENT_CLASS_MOUSE); 308 RequestFilteringInputEvents(PP_INPUTEVENT_CLASS_MOUSE);
301 RequestFilteringInputEvents(PP_INPUTEVENT_CLASS_KEYBOARD); 309 RequestFilteringInputEvents(PP_INPUTEVENT_CLASS_KEYBOARD);
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
379 } 387 }
380 388
381 void OutOfProcessInstance::HandleMessage(const pp::Var& message) { 389 void OutOfProcessInstance::HandleMessage(const pp::Var& message) {
382 pp::VarDictionary dict(message); 390 pp::VarDictionary dict(message);
383 if (!dict.Get(kType).is_string()) { 391 if (!dict.Get(kType).is_string()) {
384 NOTREACHED(); 392 NOTREACHED();
385 return; 393 return;
386 } 394 }
387 395
388 std::string type = dict.Get(kType).AsString(); 396 std::string type = dict.Get(kType).AsString();
389
390 if (type == kJSViewportType && 397 if (type == kJSViewportType &&
391 dict.Get(pp::Var(kJSXOffset)).is_number() && 398 dict.Get(pp::Var(kJSXOffset)).is_number() &&
392 dict.Get(pp::Var(kJSYOffset)).is_number() && 399 dict.Get(pp::Var(kJSYOffset)).is_number() &&
393 dict.Get(pp::Var(kJSZoom)).is_number()) { 400 dict.Get(pp::Var(kJSZoom)).is_number() &&
401 dict.Get(pp::Var(kJSRender)).is_bool() &&
402 dict.Get(pp::Var(kJSPx)).is_number() &&
403 dict.Get(pp::Var(kJSPy)).is_number()) {
394 received_viewport_message_ = true; 404 received_viewport_message_ = true;
395 stop_scrolling_ = false; 405 stop_scrolling_ = false;
406 bool do_render = dict.Get(pp::Var(kJSRender)).AsBool();
396 double zoom = dict.Get(pp::Var(kJSZoom)).AsDouble(); 407 double zoom = dict.Get(pp::Var(kJSZoom)).AsDouble();
408 double zoom_delta = zoom / zoom_;
409
410 // Pinch vector is the vector that computes fingers panning.
bokan 2016/04/21 18:20:17 These kinds of comments belong where kJSPinchVecto
alessandroa 2016/04/22 14:33:05 Acknowledged.
411 pp::Point pinch_vector =
412 pp::Point(dict.Get(kJSPinchVectorX).AsDouble() * zoom_delta,
413 dict.Get(kJSPinchVectorY).AsDouble() * zoom_delta);
397 pp::FloatPoint scroll_offset(dict.Get(pp::Var(kJSXOffset)).AsDouble(), 414 pp::FloatPoint scroll_offset(dict.Get(pp::Var(kJSXOffset)).AsDouble(),
398 dict.Get(pp::Var(kJSYOffset)).AsDouble()); 415 dict.Get(pp::Var(kJSYOffset)).AsDouble());
416 pp::Point pinch_center(dict.Get(pp::Var(kJSPx)).AsDouble(),
417 dict.Get(pp::Var(kJSPy)).AsDouble());
418 pp::Point scroll_delta(0,0);
419
420 // If we have the grey parts we will use paint_offset to anchor the paint
wjmaclean 2016/04/21 14:11:02 "have the grey parts" -> "the rendered document do
alessandroa 2016/04/22 14:33:05 Done.
421 // vertically into the same place. We use the scroll bars instead of the
422 // pinch vector to get the actual position on screen of the paint.
423 pp::Point paint_offset(0,0);
424
425 // Pinch start.
wjmaclean 2016/04/21 14:11:02 Is it worth having an enum like "enum PinchPhase {
bokan 2016/04/21 18:20:17 +1. In fact, I would argue you should be passing t
426 if (!do_render && do_render_) {
bokan 2016/04/21 18:20:17 We can also get into this block if we switch from
427 last_current_scroll_ = scroll_offset;
428 old_zoom_ = zoom;
429 initial_zoom_delta_ = zoom / zoom_;
430 was_smaller_ = false;
431 do_render_ = false;
432 return;
433 }
434
435 if (!do_render &&
436 plugin_size_.width() > GetDocumentPixelWidth() * zoom_delta) {
437 // We want to keep the paint in the middle but it must stay in the same
438 // position relative to the scroll bars.
439 paint_offset = pp::Point(0, (1 - zoom_delta) * pinch_center.y());
bokan 2016/04/21 18:20:17 I don't understand what we're doing here. Why are
alessandroa 2016/04/22 14:33:05 We anchor the paint on the Oy axis and after that
bokan 2016/04/22 15:45:35 Acknowledged.
440 scroll_delta = pp::Point(
441 0, (scroll_offset.y() -
442 last_current_scroll_.y() * zoom_delta / initial_zoom_delta_));
443
444 pinch_vector = pp::Point();
445 old_zoom_ = zoom;
446 was_smaller_ = true;
447 } else {
448 if(was_smaller_) {
wjmaclean 2016/04/21 14:11:02 space after 'if'
alessandroa 2016/04/22 14:33:05 Done.
449 pinch_center = pp::Point((plugin_size_.width() / device_scale_) / 2,
450 (plugin_size_.height() / device_scale_) / 2);
451 paint_offset = pp::Point((1 - zoom / old_zoom_) * pinch_center.x(),
452 (1 - zoom_delta) * pinch_center.y());
453 pinch_vector = pp::Point(0, 0);
454 scroll_delta = pp::Point(
455 (scroll_offset.x() -
456 last_current_scroll_.x() * zoom_delta / initial_zoom_delta_),
457 (scroll_offset.y() -
458 last_current_scroll_.y() * zoom_delta / initial_zoom_delta_));
459 }
460 }
461
462 // While pinching.
wjmaclean 2016/04/21 14:11:01 See comment about tracking pinch state above ...
bokan 2016/04/21 18:20:17 The if ... else branch above is also part of "whil
463 if (!do_render) {
464 paint_manager_.SetTransform(zoom_delta, pinch_center,
465 pinch_vector + paint_offset + scroll_delta);
466 do_render_ = do_render;
467 return;
468 }
469
470 // On pinch end the scale is again 1.f and we request a render in the new
471 // position.
wjmaclean 2016/04/21 14:11:01 PinchEnd state.
472 if (do_render && !do_render_) {
473 paint_manager_.SetTransform(1.f);
474 was_smaller_ = false;
475 }
399 476
400 // Bound the input parameters. 477 // Bound the input parameters.
401 zoom = std::max(kMinZoom, zoom); 478 zoom = std::max(kMinZoom, zoom);
402 SetZoom(zoom); 479 SetZoom(zoom);
480
481 do_render_ = do_render;
403 scroll_offset = BoundScrollOffsetToDocument(scroll_offset); 482 scroll_offset = BoundScrollOffsetToDocument(scroll_offset);
404 engine_->ScrolledToXPosition(scroll_offset.x() * device_scale_); 483 engine_->ScrolledToXPosition(scroll_offset.x() * device_scale_);
405 engine_->ScrolledToYPosition(scroll_offset.y() * device_scale_); 484 engine_->ScrolledToYPosition(scroll_offset.y() * device_scale_);
406 } else if (type == kJSGetPasswordCompleteType && 485 } else if (type == kJSGetPasswordCompleteType &&
407 dict.Get(pp::Var(kJSPassword)).is_string()) { 486 dict.Get(pp::Var(kJSPassword)).is_string()) {
408 if (password_callback_) { 487 if (password_callback_) {
409 pp::CompletionCallbackWithOutput<pp::Var> callback = *password_callback_; 488 pp::CompletionCallbackWithOutput<pp::Var> callback = *password_callback_;
410 password_callback_.reset(); 489 password_callback_.reset();
411 *callback.output() = dict.Get(pp::Var(kJSPassword)).pp_var(); 490 *callback.output() = dict.Get(pp::Var(kJSPassword)).pp_var();
412 callback.Run(PP_OK); 491 callback.Run(PP_OK);
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
561 float device_scale = view.GetDeviceScale(); 640 float device_scale = view.GetDeviceScale();
562 pp::Size view_device_size(view_rect.width() * device_scale, 641 pp::Size view_device_size(view_rect.width() * device_scale,
563 view_rect.height() * device_scale); 642 view_rect.height() * device_scale);
564 643
565 if (view_device_size != plugin_size_ || device_scale != device_scale_) { 644 if (view_device_size != plugin_size_ || device_scale != device_scale_) {
566 device_scale_ = device_scale; 645 device_scale_ = device_scale;
567 plugin_dip_size_ = view_rect.size(); 646 plugin_dip_size_ = view_rect.size();
568 plugin_size_ = view_device_size; 647 plugin_size_ = view_device_size;
569 648
570 paint_manager_.SetSize(view_device_size, device_scale_); 649 paint_manager_.SetSize(view_device_size, device_scale_);
571
wjmaclean 2016/04/21 14:11:02 Undo white-space changes.
572 pp::Size new_image_data_size = PaintManager::GetNewContextSize( 650 pp::Size new_image_data_size = PaintManager::GetNewContextSize(
573 image_data_.size(), 651 image_data_.size(),
574 plugin_size_); 652 plugin_size_);
575 if (new_image_data_size != image_data_.size()) { 653 if (new_image_data_size != image_data_.size()) {
576 image_data_ = pp::ImageData(this, 654 image_data_ = pp::ImageData(this,
577 PP_IMAGEDATAFORMAT_BGRA_PREMUL, 655 PP_IMAGEDATAFORMAT_BGRA_PREMUL,
578 new_image_data_size, 656 new_image_data_size,
579 false); 657 false);
580 first_paint_ = true; 658 first_paint_ = true;
581 } 659 }
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
690 DCHECK(plugin_size_.IsEmpty()); 768 DCHECK(plugin_size_.IsEmpty());
691 return; 769 return;
692 } 770 }
693 if (first_paint_) { 771 if (first_paint_) {
694 first_paint_ = false; 772 first_paint_ = false;
695 pp::Rect rect = pp::Rect(pp::Point(), image_data_.size()); 773 pp::Rect rect = pp::Rect(pp::Point(), image_data_.size());
696 FillRect(rect, background_color_); 774 FillRect(rect, background_color_);
697 ready->push_back(PaintManager::ReadyRect(rect, image_data_, true)); 775 ready->push_back(PaintManager::ReadyRect(rect, image_data_, true));
698 } 776 }
699 777
700 if (!received_viewport_message_) 778 if (!received_viewport_message_ || !do_render_)
701 return; 779 return;
702 780
703 engine_->PrePaint(); 781 engine_->PrePaint();
704 782
705 for (const auto& paint_rect : paint_rects) { 783 for (const auto& paint_rect : paint_rects) {
706 // Intersect with plugin area since there could be pending invalidates from 784 // Intersect with plugin area since there could be pending invalidates from
707 // when the plugin area was larger. 785 // when the plugin area was larger.
708 pp::Rect rect = 786 pp::Rect rect =
709 paint_rect.Intersect(pp::Rect(pp::Point(), plugin_size_)); 787 paint_rect.Intersect(pp::Rect(pp::Point(), plugin_size_));
710 if (rect.IsEmpty()) 788 if (rect.IsEmpty())
711 continue; 789 continue;
712 790
713 pp::Rect pdf_rect = available_area_.Intersect(rect); 791 pp::Rect pdf_rect = available_area_.Intersect(rect);
714 if (!pdf_rect.IsEmpty()) { 792 if (!pdf_rect.IsEmpty()) {
715 pdf_rect.Offset(available_area_.x() * -1, 0); 793 pdf_rect.Offset(available_area_.x() * -1, 0);
716 794
717 std::vector<pp::Rect> pdf_ready; 795 std::vector<pp::Rect> pdf_ready;
718 std::vector<pp::Rect> pdf_pending; 796 std::vector<pp::Rect> pdf_pending;
719 engine_->Paint(pdf_rect, &image_data_, &pdf_ready, &pdf_pending); 797 engine_->Paint(pdf_rect, &image_data_, &pdf_ready, &pdf_pending);
798
wjmaclean 2016/04/21 14:11:01 Ditto.
720 for (auto& ready_rect : pdf_ready) { 799 for (auto& ready_rect : pdf_ready) {
721 ready_rect.Offset(available_area_.point()); 800 ready_rect.Offset(available_area_.point());
722 ready->push_back( 801 ready->push_back(
723 PaintManager::ReadyRect(ready_rect, image_data_, false)); 802 PaintManager::ReadyRect(ready_rect, image_data_, false));
724 } 803 }
725 for (auto& pending_rect : pdf_pending) { 804 for (auto& pending_rect : pdf_pending) {
726 pending_rect.Offset(available_area_.point()); 805 pending_rect.Offset(available_area_.point());
727 pending->push_back(pending_rect); 806 pending->push_back(pending_rect);
728 } 807 }
729 } 808 }
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
857 OnGeometryChanged(zoom_, device_scale_); 936 OnGeometryChanged(zoom_, device_scale_);
858 } 937 }
859 938
860 void OutOfProcessInstance::Invalidate(const pp::Rect& rect) { 939 void OutOfProcessInstance::Invalidate(const pp::Rect& rect) {
861 pp::Rect offset_rect(rect); 940 pp::Rect offset_rect(rect);
862 offset_rect.Offset(available_area_.point()); 941 offset_rect.Offset(available_area_.point());
863 paint_manager_.InvalidateRect(offset_rect); 942 paint_manager_.InvalidateRect(offset_rect);
864 } 943 }
865 944
866 void OutOfProcessInstance::Scroll(const pp::Point& point) { 945 void OutOfProcessInstance::Scroll(const pp::Point& point) {
867 if (!image_data_.is_null()) 946 if (!image_data_.is_null()) {
wjmaclean 2016/04/21 14:11:02 You don't need the curly braces here. I assume thi
alessandroa 2016/04/22 14:33:05 Done.
868 paint_manager_.ScrollRect(available_area_, point); 947 paint_manager_.ScrollRect(available_area_, point);
948 }
869 } 949 }
870 950
871 void OutOfProcessInstance::ScrollToX(int x) { 951 void OutOfProcessInstance::ScrollToX(int x) {
872 pp::VarDictionary position; 952 pp::VarDictionary position;
873 position.Set(kType, kJSSetScrollPositionType); 953 position.Set(kType, kJSSetScrollPositionType);
874 position.Set(kJSPositionX, pp::Var(x / device_scale_)); 954 position.Set(kJSPositionX, pp::Var(x / device_scale_));
875 PostMessage(position); 955 PostMessage(position);
876 } 956 }
877 957
878 void OutOfProcessInstance::ScrollToY(int y) { 958 void OutOfProcessInstance::ScrollToY(int y) {
(...skipping 426 matching lines...) Expand 10 before | Expand all | Expand 10 after
1305 } 1385 }
1306 1386
1307 void OutOfProcessInstance::OnGeometryChanged(double old_zoom, 1387 void OutOfProcessInstance::OnGeometryChanged(double old_zoom,
1308 float old_device_scale) { 1388 float old_device_scale) {
1309 if (zoom_ != old_zoom || device_scale_ != old_device_scale) 1389 if (zoom_ != old_zoom || device_scale_ != old_device_scale)
1310 engine_->ZoomUpdated(zoom_ * device_scale_); 1390 engine_->ZoomUpdated(zoom_ * device_scale_);
1311 1391
1312 available_area_ = pp::Rect(plugin_size_); 1392 available_area_ = pp::Rect(plugin_size_);
1313 int doc_width = GetDocumentPixelWidth(); 1393 int doc_width = GetDocumentPixelWidth();
1314 if (doc_width < available_area_.width()) { 1394 if (doc_width < available_area_.width()) {
1315 available_area_.Offset((available_area_.width() - doc_width) / 2, 0); 1395 available_area_.Offset((available_area_.width() - doc_width) / 2 , 0);
wjmaclean 2016/04/21 14:11:01 Undo this change.
alessandroa 2016/04/22 14:33:05 Done.
1316 available_area_.set_width(doc_width); 1396 available_area_.set_width(doc_width);
1317 } 1397 }
1318 int bottom_of_document = 1398 int bottom_of_document =
1319 GetDocumentPixelHeight() + (top_toolbar_height_ * device_scale_); 1399 GetDocumentPixelHeight() + (top_toolbar_height_ * device_scale_);
1320 if (bottom_of_document < available_area_.height()) 1400 if (bottom_of_document < available_area_.height())
1321 available_area_.set_height(bottom_of_document); 1401 available_area_.set_height(bottom_of_document);
1322 1402
1323 CalculateBackgroundParts(); 1403 CalculateBackgroundParts();
1324 engine_->PageOffsetUpdated(available_area_.point()); 1404 engine_->PageOffsetUpdated(available_area_.point());
1325 engine_->PluginSizeUpdated(available_area_.size()); 1405 engine_->PluginSizeUpdated(available_area_.size());
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
1360 reinterpret_cast<const PPB_URLLoaderTrusted*>( 1440 reinterpret_cast<const PPB_URLLoaderTrusted*>(
1361 pp::Module::Get()->GetBrowserInterface( 1441 pp::Module::Get()->GetBrowserInterface(
1362 PPB_URLLOADERTRUSTED_INTERFACE)); 1442 PPB_URLLOADERTRUSTED_INTERFACE));
1363 if (trusted_interface) 1443 if (trusted_interface)
1364 trusted_interface->GrantUniversalAccess(loader.pp_resource()); 1444 trusted_interface->GrantUniversalAccess(loader.pp_resource());
1365 return loader; 1445 return loader;
1366 } 1446 }
1367 1447
1368 void OutOfProcessInstance::SetZoom(double scale) { 1448 void OutOfProcessInstance::SetZoom(double scale) {
1369 double old_zoom = zoom_; 1449 double old_zoom = zoom_;
1450
wjmaclean 2016/04/21 14:11:01 Undo.
alessandroa 2016/04/22 14:33:04 Done.
1370 zoom_ = scale; 1451 zoom_ = scale;
1371 OnGeometryChanged(old_zoom, device_scale_); 1452 OnGeometryChanged(old_zoom, device_scale_);
1372 } 1453 }
1373 1454
1374 void OutOfProcessInstance::AppendBlankPrintPreviewPages() { 1455 void OutOfProcessInstance::AppendBlankPrintPreviewPages() {
1375 if (print_preview_page_count_ == 0) 1456 if (print_preview_page_count_ == 0)
1376 return; 1457 return;
1377 engine_->AppendBlankPages(print_preview_page_count_); 1458 engine_->AppendBlankPages(print_preview_page_count_);
1378 if (!preview_pages_info_.empty()) 1459 if (!preview_pages_info_.empty())
1379 LoadAvailablePreviewPage(); 1460 LoadAvailablePreviewPage();
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
1436 const pp::FloatPoint& scroll_offset) { 1517 const pp::FloatPoint& scroll_offset) {
1437 float max_x = document_size_.width() * zoom_ - plugin_dip_size_.width(); 1518 float max_x = document_size_.width() * zoom_ - plugin_dip_size_.width();
1438 float x = std::max(std::min(scroll_offset.x(), max_x), 0.0f); 1519 float x = std::max(std::min(scroll_offset.x(), max_x), 0.0f);
1439 float min_y = -top_toolbar_height_; 1520 float min_y = -top_toolbar_height_;
1440 float max_y = document_size_.height() * zoom_ - plugin_dip_size_.height(); 1521 float max_y = document_size_.height() * zoom_ - plugin_dip_size_.height();
1441 float y = std::max(std::min(scroll_offset.y(), max_y), min_y); 1522 float y = std::max(std::min(scroll_offset.y(), max_y), min_y);
1442 return pp::FloatPoint(x, y); 1523 return pp::FloatPoint(x, y);
1443 } 1524 }
1444 1525
1445 } // namespace chrome_pdf 1526 } // namespace chrome_pdf
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698