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

Unified Diff: ash/display/event_transformation_handler.cc

Issue 412553005: Scale touch event radius (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: address comment Created 6 years, 5 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ash/display/event_transformation_handler.h ('k') | ash/touch/touch_transformer_controller.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ash/display/event_transformation_handler.cc
diff --git a/ash/display/event_transformation_handler.cc b/ash/display/event_transformation_handler.cc
index cd9961a954e93ea39b8c95e06070b7019935c523..62a6fa15cf2d381cc51d363ca2bba42196175870 100644
--- a/ash/display/event_transformation_handler.cc
+++ b/ash/display/event_transformation_handler.cc
@@ -18,71 +18,12 @@
#include "ui/gfx/display.h"
#include "ui/gfx/screen.h"
-#if defined(OS_CHROMEOS)
-#include "ui/display/chromeos/display_configurator.h"
-#endif // defined(OS_CHROMEOS)
-
namespace ash {
namespace {
// Boost factor for non-integrated displays.
const float kBoostForNonIntegrated = 1.20f;
-#if defined(OS_CHROMEOS)
-gfx::Size GetNativeModeSize(const DisplayInfo& info) {
- const std::vector<DisplayMode>& modes = info.display_modes();
- for (size_t i = 0; i < modes.size(); ++i) {
- if (modes[i].native)
- return modes[i].size;
- }
-
- return gfx::Size();
-}
-
-float GetMirroredDisplayAreaRatio(const gfx::Size& current_size,
- const gfx::Size& native_size) {
- float area_ratio = 1.0f;
-
- if (current_size.IsEmpty() || native_size.IsEmpty())
- return area_ratio;
-
- float width_ratio = static_cast<float>(current_size.width()) /
- static_cast<float>(native_size.width());
- float height_ratio = static_cast<float>(current_size.height()) /
- static_cast<float>(native_size.height());
-
- area_ratio = width_ratio * height_ratio;
- return area_ratio;
-}
-
-// Key of the map is the touch display's id, and the value of the map is the
-// touch display's area ratio in mirror mode defined as:
-// mirror_mode_area / native_mode_area.
-// This is used for scaling touch event's radius when the touch display is in
-// mirror mode: new_touch_radius = sqrt(area_ratio) * old_touch_radius
-std::map<int, float> GetMirroredDisplayAreaRatioMap() {
- std::map<int, float> area_ratios;
- DisplayManager* display_manager =
- ash::Shell::GetInstance()->display_manager();
- const std::vector<gfx::Display>& displays = display_manager->displays();
- for (size_t i = 0; i < displays.size(); ++i) {
- const DisplayInfo& info = display_manager->GetDisplayInfo(
- displays[i].id());
- const gfx::Size current_size = info.size_in_pixel();
- const gfx::Size native_size = GetNativeModeSize(info);
-
- if (info.touch_support() == gfx::Display::TOUCH_SUPPORT_AVAILABLE &&
- current_size != native_size &&
- info.is_aspect_preserving_scaling()) {
- area_ratios[info.touch_device_id()] = GetMirroredDisplayAreaRatio(
- current_size, native_size);
- }
- }
-
- return area_ratios;
-}
-#endif // defined(OS_CHROMEOS)
-
} // namespace
EventTransformationHandler::EventTransformationHandler()
@@ -109,38 +50,4 @@ void EventTransformationHandler::OnScrollEvent(ui::ScrollEvent* event) {
event->Scale(kBoostForNonIntegrated);
}
-#if defined(OS_CHROMEOS)
-// This is to scale the TouchEvent's radius when the touch display is in
-// mirror mode. TouchEvent's radius is often reported in the touchscreen's
-// native resolution. In mirror mode, the touch display could be configured
-// at a lower resolution. We scale down the radius using the ratio defined as
-// the sqrt of
-// (mirror_width * mirror_height) / (native_width * native_height)
-void EventTransformationHandler::OnTouchEvent(ui::TouchEvent* event) {
- // Check display_configurator's output_state instead of checking
- // DisplayManager::IsMirrored() because the compositor based mirroring
- // won't cause the scaling issue.
- if (ash::Shell::GetInstance()->display_configurator()->display_state() !=
- ui::MULTIPLE_DISPLAY_STATE_DUAL_MIRROR)
- return;
-
- const std::map<int, float> area_ratio_map = GetMirroredDisplayAreaRatioMap();
-
- // TODO(miletus): When there are more than 1 touchscreen (e.g. Link connected
- // to an external touchscreen), the correct way to do is to have a way
- // to find out which touchscreen is the event originating from and use the
- // area ratio of that touchscreen to scale the event's radius.
- // Tracked here crbug.com/233245
- if (area_ratio_map.size() != 1) {
- LOG(ERROR) << "Mirroring mode with " << area_ratio_map.size()
- << " touch display found";
- return;
- }
-
- float area_ratio_sqrt = std::sqrt(area_ratio_map.begin()->second);
- event->set_radius_x(event->radius_x() * area_ratio_sqrt);
- event->set_radius_y(event->radius_y() * area_ratio_sqrt);
-}
-#endif // defined(OS_CHROMEOS)
-
} // namespace ash
« no previous file with comments | « ash/display/event_transformation_handler.h ('k') | ash/touch/touch_transformer_controller.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698