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

Side by Side Diff: ui/base/x/x11_util.cc

Issue 280133002: Do not scale cursor image for 2x image (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: added test Created 6 years, 7 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 | Annotate | Revision Log
« ui/base/x/x11_util.h ('K') | « ui/base/x/x11_util.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 // This file defines utility functions for X11 (Linux only). This code has been 5 // This file defines utility functions for X11 (Linux only). This code has been
6 // ported from XCB since we can't use XCB on Ubuntu while its 32-bit support 6 // ported from XCB since we can't use XCB on Ubuntu while its 32-bit support
7 // remains woefully incomplete. 7 // remains woefully incomplete.
8 8
9 #include "ui/base/x/x11_util.h" 9 #include "ui/base/x/x11_util.h"
10 10
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
160 160
161 void Unref(::Cursor cursor) { 161 void Unref(::Cursor cursor) {
162 if (cache_[cursor]->Unref()) 162 if (cache_[cursor]->Unref())
163 cache_.erase(cursor); 163 cache_.erase(cursor);
164 } 164 }
165 165
166 void Clear() { 166 void Clear() {
167 cache_.clear(); 167 cache_.clear();
168 } 168 }
169 169
170 const XcursorImage* GetXcursorImage(::Cursor cursor) const {
171 return cache_.find(cursor)->second->image();
172 }
173
170 private: 174 private:
171 friend struct DefaultSingletonTraits<XCustomCursorCache>; 175 friend struct DefaultSingletonTraits<XCustomCursorCache>;
172 176
173 class XCustomCursor { 177 class XCustomCursor {
174 public: 178 public:
175 // This takes ownership of the image. 179 // This takes ownership of the image.
176 XCustomCursor(XcursorImage* image) 180 XCustomCursor(XcursorImage* image)
177 : image_(image), 181 : image_(image),
178 ref_(1) { 182 ref_(1) {
179 cursor_ = XcursorImageLoadCursor(gfx::GetXDisplay(), image); 183 cursor_ = XcursorImageLoadCursor(gfx::GetXDisplay(), image);
(...skipping 12 matching lines...) Expand all
192 196
193 // Returns true if the cursor was destroyed because of the unref. 197 // Returns true if the cursor was destroyed because of the unref.
194 bool Unref() { 198 bool Unref() {
195 if (--ref_ == 0) { 199 if (--ref_ == 0) {
196 delete this; 200 delete this;
197 return true; 201 return true;
198 } 202 }
199 return false; 203 return false;
200 } 204 }
201 205
206 const XcursorImage* image() const {
207 return image_;
208 };
209
202 private: 210 private:
203 XcursorImage* image_; 211 XcursorImage* image_;
204 int ref_; 212 int ref_;
205 ::Cursor cursor_; 213 ::Cursor cursor_;
206 214
207 DISALLOW_COPY_AND_ASSIGN(XCustomCursor); 215 DISALLOW_COPY_AND_ASSIGN(XCustomCursor);
208 }; 216 };
209 217
210 XCustomCursorCache() {} 218 XCustomCursorCache() {}
211 ~XCustomCursorCache() { 219 ~XCustomCursorCache() {
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
308 316
309 return render_supported; 317 return render_supported;
310 } 318 }
311 319
312 ::Cursor GetXCursor(int cursor_shape) { 320 ::Cursor GetXCursor(int cursor_shape) {
313 if (!cursor_cache) 321 if (!cursor_cache)
314 cursor_cache = new XCursorCache; 322 cursor_cache = new XCursorCache;
315 return cursor_cache->GetCursor(cursor_shape); 323 return cursor_cache->GetCursor(cursor_shape);
316 } 324 }
317 325
318 void ResetXCursorCache() {
319 delete cursor_cache;
320 cursor_cache = NULL;
321 }
322
323 ::Cursor CreateReffedCustomXCursor(XcursorImage* image) { 326 ::Cursor CreateReffedCustomXCursor(XcursorImage* image) {
324 return XCustomCursorCache::GetInstance()->InstallCustomCursor(image); 327 return XCustomCursorCache::GetInstance()->InstallCustomCursor(image);
325 } 328 }
326 329
327 void RefCustomXCursor(::Cursor cursor) { 330 void RefCustomXCursor(::Cursor cursor) {
328 XCustomCursorCache::GetInstance()->Ref(cursor); 331 XCustomCursorCache::GetInstance()->Ref(cursor);
329 } 332 }
330 333
331 void UnrefCustomXCursor(::Cursor cursor) { 334 void UnrefCustomXCursor(::Cursor cursor) {
332 XCustomCursorCache::GetInstance()->Unref(cursor); 335 XCustomCursorCache::GetInstance()->Unref(cursor);
(...skipping 931 matching lines...) Expand 10 before | Expand all | Expand 10 after
1264 ::Cursor XScopedCursor::get() const { 1267 ::Cursor XScopedCursor::get() const {
1265 return cursor_; 1268 return cursor_;
1266 } 1269 }
1267 1270
1268 void XScopedCursor::reset(::Cursor cursor) { 1271 void XScopedCursor::reset(::Cursor cursor) {
1269 if (cursor_) 1272 if (cursor_)
1270 XFreeCursor(display_, cursor_); 1273 XFreeCursor(display_, cursor_);
1271 cursor_ = cursor; 1274 cursor_ = cursor;
1272 } 1275 }
1273 1276
1277 namespace test {
1278
1279 void ResetXCursorCache() {
1280 delete cursor_cache;
1281 cursor_cache = NULL;
1282 }
1283
1284 const XcursorImage* GetCachedXcursorImage(::Cursor cursor) {
1285 return XCustomCursorCache::GetInstance()->GetXcursorImage(cursor);
1286 }
1287 }
1288
1274 // ---------------------------------------------------------------------------- 1289 // ----------------------------------------------------------------------------
1275 // These functions are declared in x11_util_internal.h because they require 1290 // These functions are declared in x11_util_internal.h because they require
1276 // XLib.h to be included, and it conflicts with many other headers. 1291 // XLib.h to be included, and it conflicts with many other headers.
1277 XRenderPictFormat* GetRenderARGB32Format(XDisplay* dpy) { 1292 XRenderPictFormat* GetRenderARGB32Format(XDisplay* dpy) {
1278 static XRenderPictFormat* pictformat = NULL; 1293 static XRenderPictFormat* pictformat = NULL;
1279 if (pictformat) 1294 if (pictformat)
1280 return pictformat; 1295 return pictformat;
1281 1296
1282 // First look for a 32-bit format which ignores the alpha value 1297 // First look for a 32-bit format which ignores the alpha value
1283 XRenderPictFormat templ; 1298 XRenderPictFormat templ;
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
1357 << "request_code " << static_cast<int>(error_event.request_code) << ", " 1372 << "request_code " << static_cast<int>(error_event.request_code) << ", "
1358 << "minor_code " << static_cast<int>(error_event.minor_code) 1373 << "minor_code " << static_cast<int>(error_event.minor_code)
1359 << " (" << request_str << ")"; 1374 << " (" << request_str << ")";
1360 } 1375 }
1361 1376
1362 // ---------------------------------------------------------------------------- 1377 // ----------------------------------------------------------------------------
1363 // End of x11_util_internal.h 1378 // End of x11_util_internal.h
1364 1379
1365 1380
1366 } // namespace ui 1381 } // namespace ui
OLDNEW
« ui/base/x/x11_util.h ('K') | « ui/base/x/x11_util.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698