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 3 // found in the LICENSE file. 4 5 #ifndef UI_BASE_CURSOR_CURSOR_LOADER_X11_H_ 6 #define UI_BASE_CURSOR_CURSOR_LOADER_X11_H_ 7 8 #include <X11/Xcursor/Xcursor.h> 9 #include <map> 10 11 #include "base/compiler_specific.h" 12 #include "ui/base/cursor/cursor.h" 13 #include "ui/base/cursor/cursor_loader.h" 14 #include "ui/base/ui_base_export.h" 15 #include "ui/base/x/x11_util.h" 16 #include "ui/gfx/display.h" 17 18 namespace ui { 19 20 class UI_BASE_EXPORT CursorLoaderX11 : public CursorLoader { 21 public: 22 CursorLoaderX11(); 23 virtual ~CursorLoaderX11(); 24 25 // Overridden from CursorLoader: 26 virtual void LoadImageCursor(int id, 27 int resource_id, 28 const gfx::Point& hot) OVERRIDE; 29 virtual void LoadAnimatedCursor(int id, 30 int resource_id, 31 const gfx::Point& hot, 32 int frame_delay_ms) OVERRIDE; 33 virtual void UnloadAll() OVERRIDE; 34 virtual void SetPlatformCursor(gfx::NativeCursor* cursor) OVERRIDE; 35 36 const XcursorImage* GetXcursorImageForTest(int id); 37 38 private: 39 // Returns true if we have an image resource loaded for the |native_cursor|. 40 bool IsImageCursor(gfx::NativeCursor native_cursor); 41 42 // Gets the X Cursor corresponding to the |native_cursor|. 43 ::Cursor ImageCursorFromNative(gfx::NativeCursor native_cursor); 44 45 // A map to hold all image cursors. It maps the cursor ID to the X Cursor. 46 typedef std::map<int, ::Cursor> ImageCursorMap; 47 ImageCursorMap cursors_; 48 49 // A map to hold all animated cursors. It maps the cursor ID to the pair of 50 // the X Cursor and the corresponding XcursorImages. We need a pointer to the 51 // images so that we can free them on destruction. 52 typedef std::map<int, std::pair< ::Cursor, XcursorImages*> > 53 AnimatedCursorMap; 54 AnimatedCursorMap animated_cursors_; 55 56 const XScopedCursor invisible_cursor_; 57 58 DISALLOW_COPY_AND_ASSIGN(CursorLoaderX11); 59 }; 60 61 } // namespace ui 62 63 #endif // UI_BASE_CURSOR_CURSOR_LOADER_X11_H_ 64