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

Unified Diff: ash/display/display_controller.cc

Issue 12047111: Set scale/orientation property to aura root window (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix comments Created 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ash/ash_switches.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ash/display/display_controller.cc
diff --git a/ash/display/display_controller.cc b/ash/display/display_controller.cc
index 6a985223e0bc3cc8362ea6aa450544a6f3c6b1fb..c85aab408c586b095dc57ba5407ee900b9d0f2b4 100644
--- a/ash/display/display_controller.cc
+++ b/ash/display/display_controller.cc
@@ -30,8 +30,10 @@
#if defined(OS_CHROMEOS)
#include "ash/display/output_configurator_animation.h"
#include "base/chromeos/chromeos_version.h"
+#include "base/string_number_conversions.h"
#include "base/time.h"
#include "chromeos/display/output_configurator.h"
+#include "ui/base/x/x11_util.h"
#endif // defined(OS_CHROMEOS)
@@ -103,6 +105,40 @@ internal::DisplayManager* GetDisplayManager() {
return Shell::GetInstance()->display_manager();
}
+void SetDisplayPropertiesOnHostWindow(aura::RootWindow* root,
+ const gfx::Display& display) {
+#if defined(OS_CHROMEOS)
+ // Native window property (Atom in X11) that specifies the display's
+ // rotation and scale factor. They are read and used by
+ // touchpad/mouse driver directly on X (contact adlr@ for more
+ // details on touchpad/mouse driver side). The value of the rotation
+ // is one of 0 (normal), 1 (90 degrees clockwise), 2 (180 degree) or
+ // 3 (270 degrees clockwise). The value of the scale factor is in
+ // percent (100, 140, 200 etc).
+ const char kRotationProp[] = "_CHROME_DISPLAY_ROTATION";
+ const char kScaleFactorProp[] = "_CHROME_DISPLAY_SCALE_FACTOR";
+ const char kCARDINAL[] = "CARDINAL";
+
+ CommandLine* command_line = CommandLine::ForCurrentProcess();
+ int rotation = 0;
+ if (command_line->HasSwitch(switches::kAshOverrideDisplayOrientation)) {
+ std::string value = command_line->
+ GetSwitchValueASCII(switches::kAshOverrideDisplayOrientation);
+ DCHECK(base::StringToInt(value, &rotation));
+ DCHECK(0 <= rotation && rotation <= 3) << "Invalid rotation value="
+ << rotation;
+ if (rotation < 0 || rotation > 3)
+ rotation = 0;
+ }
+ gfx::AcceleratedWidget xwindow = root->GetAcceleratedWidget();
+ ui::SetIntProperty(xwindow, kRotationProp, kCARDINAL, rotation);
+ ui::SetIntProperty(xwindow,
+ kScaleFactorProp,
+ kCARDINAL,
+ 100 * display.device_scale_factor());
+#endif
+}
+
} // namespace
////////////////////////////////////////////////////////////////////////////////
@@ -276,8 +312,7 @@ void DisplayController::InitPrimaryDisplay() {
}
#endif
primary_display_id = primary_candidate->id();
- aura::RootWindow* root = AddRootWindowForDisplay(*primary_candidate);
- root->SetHostBounds(primary_candidate->bounds_in_pixel());
+ AddRootWindowForDisplay(*primary_candidate);
UpdateDisplayBoundsForLayout();
}
@@ -540,7 +575,9 @@ void DisplayController::OnDisplayBoundsChanged(const gfx::Display& display) {
NotifyDisplayConfigurationChanging();
UpdateDisplayBoundsForLayout();
- root_windows_[display.id()]->SetHostBounds(display.bounds_in_pixel());
+ aura::RootWindow* root = root_windows_[display.id()];
+ SetDisplayPropertiesOnHostWindow(root, display);
+ root->SetHostBounds(display.bounds_in_pixel());
}
void DisplayController::OnDisplayAdded(const gfx::Display& display) {
@@ -619,6 +656,7 @@ aura::RootWindow* DisplayController::AddRootWindowForDisplay(
aura::RootWindow* root =
GetDisplayManager()->CreateRootWindowForDisplay(display);
root_windows_[display.id()] = root;
+ SetDisplayPropertiesOnHostWindow(root, display);
#if defined(OS_CHROMEOS)
static bool force_constrain_pointer_to_root =
« no previous file with comments | « ash/ash_switches.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698