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.
5 #include "ui/base/cursor/cursor_loader_win.h"
7 #include "base/lazy_instance.h"
8 #include "base/strings/string16.h"
9 #include "grit/ui_unscaled_resources.h"
12 #include "ui/base/cursor/cursor.h"
21 base::LazyInstance<string16> g_cursor_resource_module_name;
23 const wchar_t* GetCursorId(gfx::NativeCursor native_cursor) {
24 switch (native_cursor.native_type()) {
39 case kCursorEastResize:
41 case kCursorNorthResize:
43 case kCursorNorthEastResize:
45 case kCursorNorthWestResize:
47 case kCursorSouthResize:
49 case kCursorSouthEastResize:
51 case kCursorSouthWestResize:
53 case kCursorWestResize:
55 case kCursorNorthSouthResize:
57 case kCursorEastWestResize:
59 case kCursorNorthEastSouthWestResize:
61 case kCursorNorthWestSouthEastResize:
66 return IDC_APPSTARTING;
69 case kCursorNotAllowed:
71 case kCursorColumnResize:
72 return MAKEINTRESOURCE(IDC_COLRESIZE);
73 case kCursorRowResize:
74 return MAKEINTRESOURCE(IDC_ROWRESIZE);
75 case kCursorMiddlePanning:
76 return MAKEINTRESOURCE(IDC_PAN_MIDDLE);
77 case kCursorEastPanning:
78 return MAKEINTRESOURCE(IDC_PAN_EAST);
79 case kCursorNorthPanning:
80 return MAKEINTRESOURCE(IDC_PAN_NORTH);
81 case kCursorNorthEastPanning:
82 return MAKEINTRESOURCE(IDC_PAN_NORTH_EAST);
83 case kCursorNorthWestPanning:
84 return MAKEINTRESOURCE(IDC_PAN_NORTH_WEST);
85 case kCursorSouthPanning:
86 return MAKEINTRESOURCE(IDC_PAN_SOUTH);
87 case kCursorSouthEastPanning:
88 return MAKEINTRESOURCE(IDC_PAN_SOUTH_EAST);
89 case kCursorSouthWestPanning:
90 return MAKEINTRESOURCE(IDC_PAN_SOUTH_WEST);
91 case kCursorWestPanning:
92 return MAKEINTRESOURCE(IDC_PAN_WEST);
93 case kCursorVerticalText:
94 return MAKEINTRESOURCE(IDC_VERTICALTEXT);
96 return MAKEINTRESOURCE(IDC_CELL);
98 return MAKEINTRESOURCE(IDC_ZOOMIN);
100 return MAKEINTRESOURCE(IDC_ZOOMOUT);
102 return MAKEINTRESOURCE(IDC_HAND_GRAB);
103 case kCursorGrabbing:
104 return MAKEINTRESOURCE(IDC_HAND_GRABBING);
106 return MAKEINTRESOURCE(IDC_COPYCUR);
108 return MAKEINTRESOURCE(IDC_ALIAS);
110 return MAKEINTRESOURCE(IDC_CURSOR_NONE);
111 case kCursorContextMenu:
125 CursorLoader* CursorLoader::Create() {
126 return new CursorLoaderWin;
129 CursorLoaderWin::CursorLoaderWin() {
132 CursorLoaderWin::~CursorLoaderWin() {
135 void CursorLoaderWin::LoadImageCursor(int id,
137 const gfx::Point& hot) {
141 void CursorLoaderWin::LoadAnimatedCursor(int id,
143 const gfx::Point& hot,
144 int frame_delay_ms) {
148 void CursorLoaderWin::UnloadAll() {
152 void CursorLoaderWin::SetPlatformCursor(gfx::NativeCursor* cursor) {
153 #if defined(USE_AURA)
154 if (cursor->native_type() != kCursorCustom) {
155 if (cursor->platform()) {
156 cursor->SetPlatformCursor(cursor->platform());
158 const wchar_t* cursor_id = GetCursorId(*cursor);
159 PlatformCursor platform_cursor = LoadCursor(NULL, cursor_id);
160 if (!platform_cursor && !g_cursor_resource_module_name.Get().empty()) {
161 platform_cursor = LoadCursor(
162 GetModuleHandle(g_cursor_resource_module_name.Get().c_str()),
165 cursor->SetPlatformCursor(platform_cursor);
171 #if defined(USE_AURA)
173 void CursorLoaderWin::SetCursorResourceModule(const string16& module_name) {
174 g_cursor_resource_module_name.Get() = module_name;