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_export.h" 15 #include "ui/base/x/x11_util.h" 16 #include "ui/gfx/display.h" 17 18 namespace ui { 19 20 class UI_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 private: 37 // Returns true if we have an image resource loaded for the |native_cursor|. 38 bool IsImageCursor(gfx::NativeCursor native_cursor); 39 40 // Gets the X Cursor corresponding to the |native_cursor|. 41 ::Cursor ImageCursorFromNative(gfx::NativeCursor native_cursor); 42 43 // A map to hold all image cursors. It maps the cursor ID to the X Cursor. 44 typedef std::map<int, ::Cursor> ImageCursorMap; 45 ImageCursorMap cursors_; 46 47 // A map to hold all animated cursors. It maps the cursor ID to the pair of 48 // the X Cursor and the corresponding XcursorImages. We need a pointer to the 49 // images so that we can free them on destruction. 50 typedef std::map<int, std::pair< ::Cursor, XcursorImages*> > 51 AnimatedCursorMap; 52 AnimatedCursorMap animated_cursors_; 53 54 const XScopedCursor invisible_cursor_; 55 56 DISALLOW_COPY_AND_ASSIGN(CursorLoaderX11); 57 }; 58 59 // Scale and rotate the cursor's bitmap and hotpoint. 60 // |bitmap_in_out| and |hotpoint_in_out| are used as 61 // both input and output. 62 UI_EXPORT void ScaleAndRotateCursorBitmapAndHotpoint( 63 float scale, 64 gfx::Display::Rotation rotation, 65 SkBitmap* bitmap_in_out, 66 gfx::Point* hotpoint_in_out); 67 68 } // namespace ui 69 70 #endif // UI_BASE_CURSOR_CURSOR_LOADER_X11_H_ 71