- add sources.
[platform/framework/web/crosswalk.git] / src / ui / base / cursor / cursor_loader_win.cc
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 #include "ui/base/cursor/cursor_loader_win.h"
6
7 #include "base/lazy_instance.h"
8 #include "base/strings/string16.h"
9 #include "grit/ui_unscaled_resources.h"
10
11 #if defined(USE_AURA)
12 #include "ui/base/cursor/cursor.h"
13 #endif
14
15 namespace ui {
16
17 #if defined(USE_AURA)
18
19 namespace {
20
21 base::LazyInstance<string16> g_cursor_resource_module_name;
22
23 const wchar_t* GetCursorId(gfx::NativeCursor native_cursor) {
24   switch (native_cursor.native_type()) {
25     case kCursorNull:
26       return IDC_ARROW;
27     case kCursorPointer:
28       return IDC_ARROW;
29     case kCursorCross:
30       return IDC_CROSS;
31     case kCursorHand:
32       return IDC_HAND;
33     case kCursorIBeam:
34       return IDC_IBEAM;
35     case kCursorWait:
36       return IDC_WAIT;
37     case kCursorHelp:
38       return IDC_HELP;
39     case kCursorEastResize:
40       return IDC_SIZEWE;
41     case kCursorNorthResize:
42       return IDC_SIZENS;
43     case kCursorNorthEastResize:
44       return IDC_SIZENESW;
45     case kCursorNorthWestResize:
46       return IDC_SIZENWSE;
47     case kCursorSouthResize:
48       return IDC_SIZENS;
49     case kCursorSouthEastResize:
50       return IDC_SIZENWSE;
51     case kCursorSouthWestResize:
52       return IDC_SIZENESW;
53     case kCursorWestResize:
54       return IDC_SIZEWE;
55     case kCursorNorthSouthResize:
56       return IDC_SIZENS;
57     case kCursorEastWestResize:
58       return IDC_SIZEWE;
59     case kCursorNorthEastSouthWestResize:
60       return IDC_SIZENESW;
61     case kCursorNorthWestSouthEastResize:
62       return IDC_SIZENWSE;
63     case kCursorMove:
64       return IDC_SIZEALL;
65     case kCursorProgress:
66       return IDC_APPSTARTING;
67     case kCursorNoDrop:
68       return IDC_NO;
69     case kCursorNotAllowed:
70       return IDC_NO;
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);
95     case kCursorCell:
96       return MAKEINTRESOURCE(IDC_CELL);
97     case kCursorZoomIn:
98       return MAKEINTRESOURCE(IDC_ZOOMIN);
99     case kCursorZoomOut:
100       return MAKEINTRESOURCE(IDC_ZOOMOUT);
101     case kCursorGrab:
102       return MAKEINTRESOURCE(IDC_HAND_GRAB);
103     case kCursorGrabbing:
104       return MAKEINTRESOURCE(IDC_HAND_GRABBING);
105     case kCursorCopy:
106       return MAKEINTRESOURCE(IDC_COPYCUR);
107     case kCursorAlias:
108       return MAKEINTRESOURCE(IDC_ALIAS);
109     case kCursorNone:
110       return MAKEINTRESOURCE(IDC_CURSOR_NONE);
111     case kCursorContextMenu:
112     case kCursorCustom:
113       NOTIMPLEMENTED();
114       return IDC_ARROW;
115     default:
116       NOTREACHED();
117       return IDC_ARROW;
118   }
119 }
120
121 }  // namespace
122
123 #endif
124
125 CursorLoader* CursorLoader::Create() {
126   return new CursorLoaderWin;
127 }
128
129 CursorLoaderWin::CursorLoaderWin() {
130 }
131
132 CursorLoaderWin::~CursorLoaderWin() {
133 }
134
135 void CursorLoaderWin::LoadImageCursor(int id,
136                                       int resource_id,
137                                       const gfx::Point& hot) {
138   // NOTIMPLEMENTED();
139 }
140
141 void CursorLoaderWin::LoadAnimatedCursor(int id,
142                                          int resource_id,
143                                          const gfx::Point& hot,
144                                          int frame_delay_ms) {
145   // NOTIMPLEMENTED();
146 }
147
148 void CursorLoaderWin::UnloadAll() {
149   // NOTIMPLEMENTED();
150 }
151
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());
157     } else {
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()),
163                             cursor_id);
164       }
165       cursor->SetPlatformCursor(platform_cursor);
166     }
167   }
168 #endif
169 }
170
171 #if defined(USE_AURA)
172 // static
173 void CursorLoaderWin::SetCursorResourceModule(const string16& module_name) {
174   g_cursor_resource_module_name.Get() = module_name;
175 }
176 #endif
177
178 }  // namespace ui