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

Side by Side Diff: ui/views/corewm/tooltip_win.cc

Issue 659883002: Enable hidpi on Linux, refactor a bit on Windows to share Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: constants Created 6 years, 2 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "ui/views/corewm/tooltip_win.h" 5 #include "ui/views/corewm/tooltip_win.h"
6 6
7 #include <winuser.h> 7 #include <winuser.h>
8 8
9 #include "base/debug/stack_trace.h" 9 #include "base/debug/stack_trace.h"
10 #include "base/i18n/rtl.h" 10 #include "base/i18n/rtl.h"
11 #include "base/logging.h" 11 #include "base/logging.h"
12 #include "ui/base/l10n/l10n_util_win.h" 12 #include "ui/base/l10n/l10n_util_win.h"
13 #include "ui/gfx/dpi.h"
13 #include "ui/gfx/rect.h" 14 #include "ui/gfx/rect.h"
14 #include "ui/gfx/screen.h" 15 #include "ui/gfx/screen.h"
15 #include "ui/gfx/win/dpi.h"
16 #include "ui/views/corewm/cursor_height_provider_win.h" 16 #include "ui/views/corewm/cursor_height_provider_win.h"
17 17
18 namespace views { 18 namespace views {
19 namespace corewm { 19 namespace corewm {
20 20
21 TooltipWin::TooltipWin(HWND parent) 21 TooltipWin::TooltipWin(HWND parent)
22 : parent_hwnd_(parent), 22 : parent_hwnd_(parent),
23 tooltip_hwnd_(NULL), 23 tooltip_hwnd_(NULL),
24 showing_(false) { 24 showing_(false) {
25 memset(&toolinfo_, 0, sizeof(toolinfo_)); 25 memset(&toolinfo_, 0, sizeof(toolinfo_));
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 71
72 l10n_util::AdjustUIFontForWindow(tooltip_hwnd_); 72 l10n_util::AdjustUIFontForWindow(tooltip_hwnd_);
73 73
74 SendMessage(tooltip_hwnd_, TTM_ADDTOOL, 0, 74 SendMessage(tooltip_hwnd_, TTM_ADDTOOL, 0,
75 reinterpret_cast<LPARAM>(&toolinfo_)); 75 reinterpret_cast<LPARAM>(&toolinfo_));
76 return true; 76 return true;
77 } 77 }
78 78
79 void TooltipWin::PositionTooltip() { 79 void TooltipWin::PositionTooltip() {
80 // This code only runs for non-metro, so GetNativeScreen() is fine. 80 // This code only runs for non-metro, so GetNativeScreen() is fine.
81 gfx::Point screen_point = gfx::win::DIPToScreenPoint(location_); 81 gfx::Point screen_point = gfx::DIPToScreenPoint(location_);
82 const int cursoroffset = GetCurrentCursorVisibleHeight(); 82 const int cursoroffset = GetCurrentCursorVisibleHeight();
83 screen_point.Offset(0, cursoroffset); 83 screen_point.Offset(0, cursoroffset);
84 84
85 DWORD tooltip_size = SendMessage(tooltip_hwnd_, TTM_GETBUBBLESIZE, 0, 85 DWORD tooltip_size = SendMessage(tooltip_hwnd_, TTM_GETBUBBLESIZE, 0,
86 reinterpret_cast<LPARAM>(&toolinfo_)); 86 reinterpret_cast<LPARAM>(&toolinfo_));
87 const gfx::Size size(LOWORD(tooltip_size), HIWORD(tooltip_size)); 87 const gfx::Size size(LOWORD(tooltip_size), HIWORD(tooltip_size));
88 88
89 const gfx::Display display( 89 const gfx::Display display(
90 gfx::Screen::GetNativeScreen()->GetDisplayNearestPoint(screen_point)); 90 gfx::Screen::GetNativeScreen()->GetDisplayNearestPoint(screen_point));
91 91
92 gfx::Rect tooltip_bounds(screen_point, size); 92 gfx::Rect tooltip_bounds(screen_point, size);
93 tooltip_bounds.AdjustToFit(gfx::win::DIPToScreenRect(display.work_area())); 93 tooltip_bounds.AdjustToFit(gfx::DIPToScreenRect(display.work_area()));
94 SetWindowPos(tooltip_hwnd_, NULL, tooltip_bounds.x(), tooltip_bounds.y(), 0, 94 SetWindowPos(tooltip_hwnd_, NULL, tooltip_bounds.x(), tooltip_bounds.y(), 0,
95 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE); 95 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
96 } 96 }
97 97
98 void TooltipWin::SetText(aura::Window* window, 98 void TooltipWin::SetText(aura::Window* window,
99 const base::string16& tooltip_text, 99 const base::string16& tooltip_text,
100 const gfx::Point& location) { 100 const gfx::Point& location) {
101 if (!EnsureTooltipWindow()) 101 if (!EnsureTooltipWindow())
102 return; 102 return;
103 103
104 // See comment in header for details on why |location_| is needed. 104 // See comment in header for details on why |location_| is needed.
105 location_ = location; 105 location_ = location;
106 106
107 // Without this we get a flicker of the tooltip appearing at 0x0. Not sure 107 // Without this we get a flicker of the tooltip appearing at 0x0. Not sure
108 // why. 108 // why.
109 SetWindowPos(tooltip_hwnd_, NULL, 0, 0, 0, 0, 109 SetWindowPos(tooltip_hwnd_, NULL, 0, 0, 0, 0,
110 SWP_HIDEWINDOW | SWP_NOACTIVATE | SWP_NOMOVE | 110 SWP_HIDEWINDOW | SWP_NOACTIVATE | SWP_NOMOVE |
111 SWP_NOREPOSITION | SWP_NOSIZE | SWP_NOZORDER); 111 SWP_NOREPOSITION | SWP_NOSIZE | SWP_NOZORDER);
112 112
113 base::string16 adjusted_text(tooltip_text); 113 base::string16 adjusted_text(tooltip_text);
114 base::i18n::AdjustStringForLocaleDirection(&adjusted_text); 114 base::i18n::AdjustStringForLocaleDirection(&adjusted_text);
115 toolinfo_.lpszText = const_cast<WCHAR*>(adjusted_text.c_str()); 115 toolinfo_.lpszText = const_cast<WCHAR*>(adjusted_text.c_str());
116 SendMessage(tooltip_hwnd_, TTM_SETTOOLINFO, 0, 116 SendMessage(tooltip_hwnd_, TTM_SETTOOLINFO, 0,
117 reinterpret_cast<LPARAM>(&toolinfo_)); 117 reinterpret_cast<LPARAM>(&toolinfo_));
118 118
119 // This code only runs for non-metro, so GetNativeScreen() is fine. 119 // This code only runs for non-metro, so GetNativeScreen() is fine.
120 const gfx::Point screen_point = gfx::win::DIPToScreenPoint(location_); 120 const gfx::Point screen_point = gfx::DIPToScreenPoint(location_);
121 gfx::Display display( 121 gfx::Display display(
122 gfx::Screen::GetNativeScreen()->GetDisplayNearestPoint(screen_point)); 122 gfx::Screen::GetNativeScreen()->GetDisplayNearestPoint(screen_point));
123 const gfx::Rect monitor_bounds = display.bounds(); 123 const gfx::Rect monitor_bounds = display.bounds();
124 int max_width = (monitor_bounds.width() + 1) / 2; 124 int max_width = (monitor_bounds.width() + 1) / 2;
125 SendMessage(tooltip_hwnd_, TTM_SETMAXTIPWIDTH, 0, max_width); 125 SendMessage(tooltip_hwnd_, TTM_SETMAXTIPWIDTH, 0, max_width);
126 } 126 }
127 127
128 void TooltipWin::Show() { 128 void TooltipWin::Show() {
129 if (!EnsureTooltipWindow()) 129 if (!EnsureTooltipWindow())
130 return; 130 return;
(...skipping 11 matching lines...) Expand all
142 SendMessage(tooltip_hwnd_, TTM_TRACKACTIVATE, FALSE, 142 SendMessage(tooltip_hwnd_, TTM_TRACKACTIVATE, FALSE,
143 reinterpret_cast<LPARAM>(&toolinfo_)); 143 reinterpret_cast<LPARAM>(&toolinfo_));
144 } 144 }
145 145
146 bool TooltipWin::IsVisible() { 146 bool TooltipWin::IsVisible() {
147 return showing_; 147 return showing_;
148 } 148 }
149 149
150 } // namespace corewm 150 } // namespace corewm
151 } // namespace views 151 } // namespace views
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698