| Index: ui/gfx/win/dpi.cc
|
| diff --git a/ui/gfx/win/dpi.cc b/ui/gfx/win/dpi.cc
|
| deleted file mode 100644
|
| index 2777f7cb01235bb838de9c8e7b42343a1f5f2499..0000000000000000000000000000000000000000
|
| --- a/ui/gfx/win/dpi.cc
|
| +++ /dev/null
|
| @@ -1,230 +0,0 @@
|
| -// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "ui/gfx/win/dpi.h"
|
| -
|
| -#include <windows.h>
|
| -#include "base/win/scoped_hdc.h"
|
| -#include "base/win/windows_version.h"
|
| -#include "base/win/registry.h"
|
| -#include "ui/gfx/display.h"
|
| -#include "ui/gfx/point_conversions.h"
|
| -#include "ui/gfx/rect_conversions.h"
|
| -#include "ui/gfx/size_conversions.h"
|
| -
|
| -namespace {
|
| -
|
| -int kDefaultDPIX = 96;
|
| -int kDefaultDPIY = 96;
|
| -
|
| -bool force_highdpi_for_testing = false;
|
| -
|
| -BOOL IsProcessDPIAwareWrapper() {
|
| - typedef BOOL(WINAPI *IsProcessDPIAwarePtr)(VOID);
|
| - IsProcessDPIAwarePtr is_process_dpi_aware_func =
|
| - reinterpret_cast<IsProcessDPIAwarePtr>(
|
| - GetProcAddress(GetModuleHandleA("user32.dll"), "IsProcessDPIAware"));
|
| - if (is_process_dpi_aware_func)
|
| - return is_process_dpi_aware_func();
|
| - return FALSE;
|
| -}
|
| -
|
| -float g_device_scale_factor = 0.0f;
|
| -
|
| -float GetUnforcedDeviceScaleFactor() {
|
| - // If the global device scale factor is initialized use it. This is to ensure
|
| - // we use the same scale factor across all callsites. We don't use the
|
| - // GetDeviceScaleFactor function here because it fires a DCHECK if the
|
| - // g_device_scale_factor global is 0.
|
| - if (g_device_scale_factor)
|
| - return g_device_scale_factor;
|
| - return static_cast<float>(gfx::GetDPI().width()) /
|
| - static_cast<float>(kDefaultDPIX);
|
| -}
|
| -
|
| -// Duplicated from Win8.1 SDK ShellScalingApi.h
|
| -typedef enum PROCESS_DPI_AWARENESS {
|
| - PROCESS_DPI_UNAWARE = 0,
|
| - PROCESS_SYSTEM_DPI_AWARE = 1,
|
| - PROCESS_PER_MONITOR_DPI_AWARE = 2
|
| -} PROCESS_DPI_AWARENESS;
|
| -
|
| -typedef enum MONITOR_DPI_TYPE {
|
| - MDT_EFFECTIVE_DPI = 0,
|
| - MDT_ANGULAR_DPI = 1,
|
| - MDT_RAW_DPI = 2,
|
| - MDT_DEFAULT = MDT_EFFECTIVE_DPI
|
| -} MONITOR_DPI_TYPE;
|
| -
|
| -// Win8.1 supports monitor-specific DPI scaling.
|
| -bool SetProcessDpiAwarenessWrapper(PROCESS_DPI_AWARENESS value) {
|
| - typedef BOOL(WINAPI *SetProcessDpiAwarenessPtr)(PROCESS_DPI_AWARENESS);
|
| - SetProcessDpiAwarenessPtr set_process_dpi_awareness_func =
|
| - reinterpret_cast<SetProcessDpiAwarenessPtr>(
|
| - GetProcAddress(GetModuleHandleA("user32.dll"),
|
| - "SetProcessDpiAwarenessInternal"));
|
| - if (set_process_dpi_awareness_func) {
|
| - HRESULT hr = set_process_dpi_awareness_func(value);
|
| - if (SUCCEEDED(hr)) {
|
| - VLOG(1) << "SetProcessDpiAwareness succeeded.";
|
| - return true;
|
| - } else if (hr == E_ACCESSDENIED) {
|
| - LOG(ERROR) << "Access denied error from SetProcessDpiAwareness. "
|
| - "Function called twice, or manifest was used.";
|
| - }
|
| - }
|
| - return false;
|
| -}
|
| -
|
| -// This function works for Windows Vista through Win8. Win8.1 must use
|
| -// SetProcessDpiAwareness[Wrapper]
|
| -BOOL SetProcessDPIAwareWrapper() {
|
| - typedef BOOL(WINAPI *SetProcessDPIAwarePtr)(VOID);
|
| - SetProcessDPIAwarePtr set_process_dpi_aware_func =
|
| - reinterpret_cast<SetProcessDPIAwarePtr>(
|
| - GetProcAddress(GetModuleHandleA("user32.dll"),
|
| - "SetProcessDPIAware"));
|
| - return set_process_dpi_aware_func &&
|
| - set_process_dpi_aware_func();
|
| -}
|
| -
|
| -DWORD ReadRegistryValue(HKEY root,
|
| - const wchar_t* base_key,
|
| - const wchar_t* value_name,
|
| - DWORD default_value) {
|
| - base::win::RegKey reg_key(HKEY_CURRENT_USER,
|
| - base_key,
|
| - KEY_QUERY_VALUE);
|
| - DWORD value;
|
| - if (reg_key.Valid() &&
|
| - reg_key.ReadValueDW(value_name, &value) == ERROR_SUCCESS) {
|
| - return value;
|
| - }
|
| - return default_value;
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -namespace gfx {
|
| -
|
| -void InitDeviceScaleFactor(float scale) {
|
| - DCHECK_NE(0.0f, scale);
|
| - g_device_scale_factor = scale;
|
| -}
|
| -
|
| -Size GetDPI() {
|
| - static int dpi_x = 0;
|
| - static int dpi_y = 0;
|
| - static bool should_initialize = true;
|
| -
|
| - if (should_initialize) {
|
| - should_initialize = false;
|
| - base::win::ScopedGetDC screen_dc(NULL);
|
| - // This value is safe to cache for the life time of the app since the
|
| - // user must logout to change the DPI setting. This value also applies
|
| - // to all screens.
|
| - dpi_x = GetDeviceCaps(screen_dc, LOGPIXELSX);
|
| - dpi_y = GetDeviceCaps(screen_dc, LOGPIXELSY);
|
| - }
|
| - return Size(dpi_x, dpi_y);
|
| -}
|
| -
|
| -float GetDPIScale() {
|
| - if (IsHighDPIEnabled()) {
|
| - if (gfx::Display::HasForceDeviceScaleFactor())
|
| - return gfx::Display::GetForcedDeviceScaleFactor();
|
| - float dpi_scale = GetUnforcedDeviceScaleFactor();
|
| - if (dpi_scale <= 1.25) {
|
| - // Force 125% and below to 100% scale. We do this to maintain previous
|
| - // (non-DPI-aware) behavior where only the font size was boosted.
|
| - dpi_scale = 1.0;
|
| - }
|
| - return dpi_scale;
|
| - }
|
| - return 1.0;
|
| -}
|
| -
|
| -void ForceHighDPISupportForTesting(float scale) {
|
| - g_device_scale_factor = scale;
|
| -}
|
| -
|
| -bool IsHighDPIEnabled() {
|
| - // Flag stored in HKEY_CURRENT_USER\SOFTWARE\\Google\\Chrome\\Profile,
|
| - // under the DWORD value high-dpi-support.
|
| - // Default is disabled.
|
| - static DWORD value = ReadRegistryValue(
|
| - HKEY_CURRENT_USER, gfx::win::kRegistryProfilePath,
|
| - gfx::win::kHighDPISupportW, TRUE);
|
| - return value != 0;
|
| -}
|
| -
|
| -bool IsInHighDPIMode() {
|
| - return GetDPIScale() > 1.0;
|
| -}
|
| -
|
| -void EnableHighDPISupport() {
|
| - if (IsHighDPIEnabled() &&
|
| - !SetProcessDpiAwarenessWrapper(PROCESS_SYSTEM_DPI_AWARE)) {
|
| - SetProcessDPIAwareWrapper();
|
| - }
|
| -}
|
| -
|
| -namespace win {
|
| -
|
| -GFX_EXPORT const wchar_t kRegistryProfilePath[] =
|
| - L"Software\\Google\\Chrome\\Profile";
|
| -GFX_EXPORT const wchar_t kHighDPISupportW[] = L"high-dpi-support";
|
| -
|
| -float GetDeviceScaleFactor() {
|
| - DCHECK_NE(0.0f, g_device_scale_factor);
|
| - return g_device_scale_factor;
|
| -}
|
| -
|
| -Point ScreenToDIPPoint(const Point& pixel_point) {
|
| - return ToFlooredPoint(ScalePoint(pixel_point,
|
| - 1.0f / GetDeviceScaleFactor()));
|
| -}
|
| -
|
| -Point DIPToScreenPoint(const Point& dip_point) {
|
| - return ToFlooredPoint(ScalePoint(dip_point, GetDeviceScaleFactor()));
|
| -}
|
| -
|
| -Rect ScreenToDIPRect(const Rect& pixel_bounds) {
|
| - // It's important we scale the origin and size separately. If we instead
|
| - // calculated the size from the floored origin and ceiled right the size could
|
| - // vary depending upon where the two points land. That would cause problems
|
| - // for the places this code is used (in particular mapping from native window
|
| - // bounds to DIPs).
|
| - return Rect(ScreenToDIPPoint(pixel_bounds.origin()),
|
| - ScreenToDIPSize(pixel_bounds.size()));
|
| -}
|
| -
|
| -Rect DIPToScreenRect(const Rect& dip_bounds) {
|
| - // See comment in ScreenToDIPRect for why we calculate size like this.
|
| - return Rect(DIPToScreenPoint(dip_bounds.origin()),
|
| - DIPToScreenSize(dip_bounds.size()));
|
| -}
|
| -
|
| -Size ScreenToDIPSize(const Size& size_in_pixels) {
|
| - // Always ceil sizes. Otherwise we may be leaving off part of the bounds.
|
| - return ToCeiledSize(
|
| - ScaleSize(size_in_pixels, 1.0f / GetDeviceScaleFactor()));
|
| -}
|
| -
|
| -Size DIPToScreenSize(const Size& dip_size) {
|
| - // Always ceil sizes. Otherwise we may be leaving off part of the bounds.
|
| - return ToCeiledSize(ScaleSize(dip_size, GetDeviceScaleFactor()));
|
| -}
|
| -
|
| -int GetSystemMetricsInDIP(int metric) {
|
| - return static_cast<int>(GetSystemMetrics(metric) /
|
| - GetDeviceScaleFactor() + 0.5);
|
| -}
|
| -
|
| -bool IsDeviceScaleFactorSet() {
|
| - return g_device_scale_factor != 0.0f;
|
| -}
|
| -
|
| -} // namespace win
|
| -} // namespace gfx
|
|
|