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

Side by Side Diff: content/browser/renderer_host/dip_util.cc

Issue 859973003: Touch emulator: enables double tap support for pages similar to Chrome on Android. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Moved to dip_util, renamed to IsMobileOptimizedFrame Created 5 years, 11 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 "content/browser/renderer_host/dip_util.h" 5 #include "content/browser/renderer_host/dip_util.h"
6 6
7 #include "cc/output/compositor_frame_metadata.h"
7 #include "content/public/browser/render_widget_host_view.h" 8 #include "content/public/browser/render_widget_host_view.h"
8 #include "ui/base/layout.h" 9 #include "ui/base/layout.h"
9 #include "ui/gfx/display.h" 10 #include "ui/gfx/display.h"
10 #include "ui/gfx/geometry/dip_util.h" 11 #include "ui/gfx/geometry/dip_util.h"
11 #include "ui/gfx/geometry/point.h" 12 #include "ui/gfx/geometry/point.h"
12 #include "ui/gfx/geometry/point_conversions.h" 13 #include "ui/gfx/geometry/point_conversions.h"
13 #include "ui/gfx/geometry/rect.h" 14 #include "ui/gfx/geometry/rect.h"
14 #include "ui/gfx/geometry/rect_conversions.h" 15 #include "ui/gfx/geometry/rect_conversions.h"
15 #include "ui/gfx/geometry/size.h" 16 #include "ui/gfx/geometry/size.h"
16 #include "ui/gfx/geometry/size_conversions.h" 17 #include "ui/gfx/geometry/size_conversions.h"
17 #include "ui/gfx/screen.h" 18 #include "ui/gfx/screen.h"
18 19
20 namespace {
21
22 // Used to accomodate finite precision when comparing scaled viewport and
23 // content widths. While this value may seem large, width=device-width on an N7
24 // V1 saw errors of ~0.065 between computed window and content widths.
25 const float kMobileViewportWidthEpsilon = 0.15f;
26
27 bool HasFixedPageScale(const cc::CompositorFrameMetadata& frame_metadata) {
28 return frame_metadata.min_page_scale_factor ==
29 frame_metadata.max_page_scale_factor;
30 }
31
32 bool HasMobileViewport(const cc::CompositorFrameMetadata& frame_metadata) {
33 float window_width_dip =
34 frame_metadata.page_scale_factor *
35 frame_metadata.scrollable_viewport_size.width();
36 float content_width_css = frame_metadata.root_layer_size.width();
37 return content_width_css <= window_width_dip + kMobileViewportWidthEpsilon;
38 }
39
40 } // namespace
41
19 namespace content { 42 namespace content {
20 43
21 float GetScaleFactorForView(const RenderWidgetHostView* view) { 44 float GetScaleFactorForView(const RenderWidgetHostView* view) {
22 return ui::GetScaleFactorForNativeView(view ? view->GetNativeView() : NULL); 45 return ui::GetScaleFactorForNativeView(view ? view->GetNativeView() : NULL);
23 } 46 }
24 47
25 gfx::Point ConvertViewPointToDIP(const RenderWidgetHostView* view, 48 gfx::Point ConvertViewPointToDIP(const RenderWidgetHostView* view,
26 const gfx::Point& point_in_pixel) { 49 const gfx::Point& point_in_pixel) {
27 return gfx::ConvertPointToDIP(GetScaleFactorForView(view), point_in_pixel); 50 return gfx::ConvertPointToDIP(GetScaleFactorForView(view), point_in_pixel);
28 } 51 }
29 52
30 gfx::Size ConvertViewSizeToPixel(const RenderWidgetHostView* view, 53 gfx::Size ConvertViewSizeToPixel(const RenderWidgetHostView* view,
31 const gfx::Size& size_in_dip) { 54 const gfx::Size& size_in_dip) {
32 return gfx::ConvertSizeToPixel(GetScaleFactorForView(view), size_in_dip); 55 return gfx::ConvertSizeToPixel(GetScaleFactorForView(view), size_in_dip);
33 } 56 }
34 57
35 gfx::Rect ConvertViewRectToPixel(const RenderWidgetHostView* view, 58 gfx::Rect ConvertViewRectToPixel(const RenderWidgetHostView* view,
36 const gfx::Rect& rect_in_dip) { 59 const gfx::Rect& rect_in_dip) {
37 return gfx::ConvertRectToPixel(GetScaleFactorForView(view), rect_in_dip); 60 return gfx::ConvertRectToPixel(GetScaleFactorForView(view), rect_in_dip);
38 } 61 }
39 62
63 bool IsMobileOptimizedFrame(const cc::CompositorFrameMetadata& frame_metadata) {
64 // Disable double tap zoom for pages that have a width=device-width or
65 // narrower viewport (indicating that this is a mobile-optimized or responsive
66 // web design, so text will be legible without zooming). Also disable
67 // double tap and pinch for pages that prevent zooming in or out.
68 bool has_mobile_viewport = HasMobileViewport(frame_metadata);
69 bool has_fixed_page_scale = HasFixedPageScale(frame_metadata);
70 return !has_fixed_page_scale && !has_mobile_viewport;
71 }
72
40 } // namespace content 73 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698