diff options
author | raymes <raymes@chromium.org> | 2014-10-28 18:29:54 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-10-29 01:30:22 +0000 |
commit | 3edd4d5d972d3820ec22cebd011ecbd9d4841143 (patch) | |
tree | fadb2b0f3668591049cfe4e754e9706ee7f6f4af /pdf/out_of_process_instance.cc | |
parent | 026009ac5ebc42f511017b66aa0365b67c998919 (diff) | |
download | chromium_src-3edd4d5d972d3820ec22cebd011ecbd9d4841143.zip chromium_src-3edd4d5d972d3820ec22cebd011ecbd9d4841143.tar.gz chromium_src-3edd4d5d972d3820ec22cebd011ecbd9d4841143.tar.bz2 |
Support non-integer scroll offsets being passed to the PDF plugin.
This broke as a result of non-integer scroll offsets being introduced into blink.
BUG=303491
Review URL: https://codereview.chromium.org/685923002
Cr-Commit-Position: refs/heads/master@{#301765}
Diffstat (limited to 'pdf/out_of_process_instance.cc')
-rw-r--r-- | pdf/out_of_process_instance.cc | 32 |
1 files changed, 17 insertions, 15 deletions
diff --git a/pdf/out_of_process_instance.cc b/pdf/out_of_process_instance.cc index d627dc2..6f1b23d 100644 --- a/pdf/out_of_process_instance.cc +++ b/pdf/out_of_process_instance.cc @@ -352,14 +352,14 @@ void OutOfProcessInstance::HandleMessage(const pp::Var& message) { std::string type = dict.Get(kType).AsString(); if (type == kJSViewportType && - dict.Get(pp::Var(kJSXOffset)).is_int() && - dict.Get(pp::Var(kJSYOffset)).is_int() && + dict.Get(pp::Var(kJSXOffset)).is_number() && + dict.Get(pp::Var(kJSYOffset)).is_number() && dict.Get(pp::Var(kJSZoom)).is_number()) { received_viewport_message_ = true; stop_scrolling_ = false; double zoom = dict.Get(pp::Var(kJSZoom)).AsDouble(); - pp::Point scroll_offset(dict.Get(pp::Var(kJSXOffset)).AsInt(), - dict.Get(pp::Var(kJSYOffset)).AsInt()); + pp::FloatPoint scroll_offset(dict.Get(pp::Var(kJSXOffset)).AsDouble(), + dict.Get(pp::Var(kJSYOffset)).AsDouble()); // Bound the input parameters. zoom = std::max(kMinZoom, zoom); @@ -530,10 +530,12 @@ void OutOfProcessInstance::DidChangeView(const pp::View& view) { } if (!stop_scrolling_) { - pp::Point scroll_offset( - BoundScrollOffsetToDocument(view.GetScrollOffset())); - engine_->ScrolledToXPosition(scroll_offset.x() * device_scale_); - engine_->ScrolledToYPosition(scroll_offset.y() * device_scale_); + pp::Point scroll_offset(view.GetScrollOffset()); + pp::FloatPoint scroll_offset_float(scroll_offset.x(), + scroll_offset.y()); + scroll_offset_float = BoundScrollOffsetToDocument(scroll_offset_float); + engine_->ScrolledToXPosition(scroll_offset_float.x() * device_scale_); + engine_->ScrolledToYPosition(scroll_offset_float.y() * device_scale_); } } @@ -1357,13 +1359,13 @@ void OutOfProcessInstance::UserMetricsRecordAction( pp::PDF::UserMetricsRecordAction(this, pp::Var(action)); } -pp::Point OutOfProcessInstance::BoundScrollOffsetToDocument( - const pp::Point& scroll_offset) { - int max_x = document_size_.width() * zoom_ - plugin_dip_size_.width(); - int x = std::max(std::min(scroll_offset.x(), max_x), 0); - int max_y = document_size_.height() * zoom_ - plugin_dip_size_.height(); - int y = std::max(std::min(scroll_offset.y(), max_y), 0); - return pp::Point(x, y); +pp::FloatPoint OutOfProcessInstance::BoundScrollOffsetToDocument( + const pp::FloatPoint& scroll_offset) { + float max_x = document_size_.width() * zoom_ - plugin_dip_size_.width(); + float x = std::max(std::min(scroll_offset.x(), max_x), 0.0f); + float max_y = document_size_.height() * zoom_ - plugin_dip_size_.height(); + float y = std::max(std::min(scroll_offset.y(), max_y), 0.0f); + return pp::FloatPoint(x, y); } } // namespace chrome_pdf |