Upstream version 10.39.225.0
[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 "ui/base/cursor/cursor.h"
10 #include "ui/resources/grit/ui_unscaled_resources.h"
11
12 namespace ui {
13
14 namespace {
15
16 base::LazyInstance<base::string16> g_cursor_resource_module_name;
17
18 const wchar_t* GetCursorId(gfx::NativeCursor native_cursor) {
19   switch (native_cursor.native_type()) {
20     case kCursorNull:
21       return IDC_ARROW;
22     case kCursorPointer:
23       return IDC_ARROW;
24     case kCursorCross:
25       return IDC_CROSS;
26     case kCursorHand:
27       return IDC_HAND;
28     case kCursorIBeam:
29       return IDC_IBEAM;
30     case kCursorWait:
31       return IDC_WAIT;
32     case kCursorHelp:
33       return IDC_HELP;
34     case kCursorEastResize:
35       return IDC_SIZEWE;
36     case kCursorNorthResize:
37       return IDC_SIZENS;
38     case kCursorNorthEastResize:
39       return IDC_SIZENESW;
40     case kCursorNorthWestResize:
41       return IDC_SIZENWSE;
42     case kCursorSouthResize:
43       return IDC_SIZENS;
44     case kCursorSouthEastResize:
45       return IDC_SIZENWSE;
46     case kCursorSouthWestResize:
47       return IDC_SIZENESW;
48     case kCursorWestResize:
49       return IDC_SIZEWE;
50     case kCursorNorthSouthResize:
51       return IDC_SIZENS;
52     case kCursorEastWestResize:
53       return IDC_SIZEWE;
54     case kCursorNorthEastSouthWestResize:
55       return IDC_SIZENESW;
56     case kCursorNorthWestSouthEastResize:
57       return IDC_SIZENWSE;
58     case kCursorMove:
59       return IDC_SIZEALL;
60     case kCursorProgress:
61       return IDC_APPSTARTING;
62     case kCursorNoDrop:
63       return IDC_NO;
64     case kCursorNotAllowed:
65       return IDC_NO;
66     case kCursorColumnResize:
67       return MAKEINTRESOURCE(IDC_COLRESIZE);
68     case kCursorRowResize:
69       return MAKEINTRESOURCE(IDC_ROWRESIZE);
70     case kCursorMiddlePanning:
71       return MAKEINTRESOURCE(IDC_PAN_MIDDLE);
72     case kCursorEastPanning:
73       return MAKEINTRESOURCE(IDC_PAN_EAST);
74     case kCursorNorthPanning:
75       return MAKEINTRESOURCE(IDC_PAN_NORTH);
76     case kCursorNorthEastPanning:
77       return MAKEINTRESOURCE(IDC_PAN_NORTH_EAST);
78     case kCursorNorthWestPanning:
79       return MAKEINTRESOURCE(IDC_PAN_NORTH_WEST);
80     case kCursorSouthPanning:
81       return MAKEINTRESOURCE(IDC_PAN_SOUTH);
82     case kCursorSouthEastPanning:
83       return MAKEINTRESOURCE(IDC_PAN_SOUTH_EAST);
84     case kCursorSouthWestPanning:
85       return MAKEINTRESOURCE(IDC_PAN_SOUTH_WEST);
86     case kCursorWestPanning:
87       return MAKEINTRESOURCE(IDC_PAN_WEST);
88     case kCursorVerticalText:
89       return MAKEINTRESOURCE(IDC_VERTICALTEXT);
90     case kCursorCell:
91       return MAKEINTRESOURCE(IDC_CELL);
92     case kCursorZoomIn:
93       return MAKEINTRESOURCE(IDC_ZOOMIN);
94     case kCursorZoomOut:
95       return MAKEINTRESOURCE(IDC_ZOOMOUT);
96     case kCursorGrab:
97       return MAKEINTRESOURCE(IDC_HAND_GRAB);
98     case kCursorGrabbing:
99       return MAKEINTRESOURCE(IDC_HAND_GRABBING);
100     case kCursorCopy:
101       return MAKEINTRESOURCE(IDC_COPYCUR);
102     case kCursorAlias:
103       return MAKEINTRESOURCE(IDC_ALIAS);
104     case kCursorNone:
105       return MAKEINTRESOURCE(IDC_CURSOR_NONE);
106     case kCursorContextMenu:
107     case kCursorCustom:
108       NOTIMPLEMENTED();
109       return IDC_ARROW;
110     default:
111       NOTREACHED();
112       return IDC_ARROW;
113   }
114 }
115
116 }  // namespace
117
118 CursorLoader* CursorLoader::Create() {
119   return new CursorLoaderWin;
120 }
121
122 CursorLoaderWin::CursorLoaderWin() {
123 }
124
125 CursorLoaderWin::~CursorLoaderWin() {
126 }
127
128 void CursorLoaderWin::LoadImageCursor(int id,
129                                       int resource_id,
130                                       const gfx::Point& hot) {
131   // NOTIMPLEMENTED();
132 }
133
134 void CursorLoaderWin::LoadAnimatedCursor(int id,
135                                          int resource_id,
136                                          const gfx::Point& hot,
137                                          int frame_delay_ms) {
138   // NOTIMPLEMENTED();
139 }
140
141 void CursorLoaderWin::UnloadAll() {
142   // NOTIMPLEMENTED();
143 }
144
145 void CursorLoaderWin::SetPlatformCursor(gfx::NativeCursor* cursor) {
146   if (cursor->native_type() != kCursorCustom) {
147     if (cursor->platform()) {
148       cursor->SetPlatformCursor(cursor->platform());
149     } else {
150       const wchar_t* cursor_id = GetCursorId(*cursor);
151       PlatformCursor platform_cursor = LoadCursor(NULL, cursor_id);
152       if (!platform_cursor && !g_cursor_resource_module_name.Get().empty()) {
153         platform_cursor = LoadCursor(
154             GetModuleHandle(g_cursor_resource_module_name.Get().c_str()),
155                             cursor_id);
156       }
157       cursor->SetPlatformCursor(platform_cursor);
158     }
159   }
160 }
161
162 // static
163 void CursorLoaderWin::SetCursorResourceModule(
164     const base::string16& module_name) {
165   g_cursor_resource_module_name.Get() = module_name;
166 }
167
168 }  // namespace ui