1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "components/html_viewer/ui_setup_android.h"
7 #include "base/memory/singleton.h"
8 #include "ui/events/gesture_detection/gesture_configuration.h"
9 #include "ui/gfx/geometry/size_conversions.h"
10 #include "ui/gfx/screen.h"
12 namespace html_viewer
{
15 class ScreenMandoline
: public gfx::Screen
{
17 ScreenMandoline(const gfx::Size
& screen_size_in_pixels
,
18 float device_pixel_ratio
)
19 : screen_size_in_pixels_(screen_size_in_pixels
),
20 device_pixel_ratio_(device_pixel_ratio
) {}
22 gfx::Point
GetCursorScreenPoint() override
{ return gfx::Point(); }
24 gfx::NativeWindow
GetWindowUnderCursor() override
{
29 gfx::NativeWindow
GetWindowAtScreenPoint(const gfx::Point
& point
) override
{
34 gfx::Display
GetPrimaryDisplay() const override
{
35 const gfx::Rect
bounds_in_pixels(gfx::Point(), screen_size_in_pixels_
);
36 const gfx::Rect
bounds_in_dip(gfx::ToCeiledSize(
37 gfx::ScaleSize(bounds_in_pixels
.size(), 1.0f
/ device_pixel_ratio_
)));
38 gfx::Display
display(0, bounds_in_dip
);
39 display
.set_device_scale_factor(device_pixel_ratio_
);
43 gfx::Display
GetDisplayNearestWindow(gfx::NativeView view
) const override
{
44 return GetPrimaryDisplay();
47 gfx::Display
GetDisplayNearestPoint(const gfx::Point
& point
) const override
{
48 return GetPrimaryDisplay();
51 int GetNumDisplays() const override
{ return 1; }
53 std::vector
<gfx::Display
> GetAllDisplays() const override
{
54 return std::vector
<gfx::Display
>(1, GetPrimaryDisplay());
57 gfx::Display
GetDisplayMatching(const gfx::Rect
& match_rect
) const override
{
58 return GetPrimaryDisplay();
61 void AddObserver(gfx::DisplayObserver
* observer
) override
{
62 // no display change on Android.
65 void RemoveObserver(gfx::DisplayObserver
* observer
) override
{
66 // no display change on Android.
70 const gfx::Size screen_size_in_pixels_
;
71 const float device_pixel_ratio_
;
73 DISALLOW_COPY_AND_ASSIGN(ScreenMandoline
);
78 // TODO(sky): this needs to come from system.
79 class GestureConfigurationMandoline
: public ui::GestureConfiguration
{
81 GestureConfigurationMandoline() : GestureConfiguration() {
82 set_double_tap_enabled(false);
83 set_double_tap_timeout_in_ms(semi_long_press_time_in_ms());
84 set_gesture_begin_end_types_enabled(true);
85 set_min_gesture_bounds_length(default_radius());
86 set_min_pinch_update_span_delta(0);
87 set_min_scaling_touch_major(default_radius() * 2);
88 set_velocity_tracker_strategy(
89 ui::VelocityTracker::Strategy::LSQ2_RESTRICTED
);
90 set_span_slop(max_touch_move_in_pixels_for_click() * 2);
91 set_swipe_enabled(true);
92 set_two_finger_tap_enabled(true);
95 ~GestureConfigurationMandoline() override
{}
98 DISALLOW_COPY_AND_ASSIGN(GestureConfigurationMandoline
);
101 UISetup::UISetup(const gfx::Size
& screen_size_in_pixels
,
102 float device_pixel_ratio
)
103 : screen_(new ScreenMandoline(screen_size_in_pixels
, device_pixel_ratio
)),
104 gesture_configuration_(new GestureConfigurationMandoline
) {
105 gfx::Screen::SetScreenInstance(gfx::SCREEN_TYPE_NATIVE
,
107 ui::GestureConfiguration::SetInstance(gesture_configuration_
.get());
110 UISetup::~UISetup() {
111 gfx::Screen::SetScreenInstance(gfx::SCREEN_TYPE_NATIVE
, nullptr);
112 ui::GestureConfiguration::SetInstance(nullptr);
115 } // namespace html_viewer