OLD | NEW |
---|---|
(Empty) | |
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 "ash/wm/image_cursors.h" | |
6 | |
7 #include "base/logging.h" | |
8 #include "ui/base/cursor/cursor_loader.h" | |
9 #include "ui/base/cursor/cursor.h" | |
10 #include "ui/gfx/point.h" | |
11 #include "grit/ui_resources.h" | |
12 | |
13 namespace { | |
14 | |
15 const int kAnimatedCursorFrameDelayMs = 25; | |
16 | |
17 struct HotPoint { | |
18 int x; | |
19 int y; | |
20 }; | |
21 | |
22 struct CursorData { | |
23 int id; | |
24 int resource_id; | |
25 HotPoint hot_1x; | |
26 HotPoint hot_2x; | |
27 }; | |
28 | |
29 // The cursor's hot points are defined in chromeos cursor images at: | |
30 // http://folder/kuscher/projects/Chrome_OS/Pointers/focuspoint | |
Daniel Erat
2012/09/10 23:16:45
nit: feels weird to put an internal filer path her
mazda
2012/09/11 00:45:09
I heard from Oshima-san that there's a plan to emb
| |
31 const CursorData kImageCursors[] = { | |
32 {ui::kCursorNull, IDR_AURA_CURSOR_PTR, {4, 4}, {8, 9}}, | |
33 {ui::kCursorPointer, IDR_AURA_CURSOR_PTR, {4, 4}, {8, 9}}, | |
34 {ui::kCursorNoDrop, IDR_AURA_CURSOR_NO_DROP, {4, 4}, {8, 9}}, | |
35 {ui::kCursorNotAllowed, IDR_AURA_CURSOR_NO_DROP, {4, 4}, {8, 9}}, | |
36 {ui::kCursorCopy, IDR_AURA_CURSOR_COPY, {4, 4}, {8, 9}}, | |
37 {ui::kCursorHand, IDR_AURA_CURSOR_HAND, {9, 4}, {19, 8}}, | |
38 {ui::kCursorMove, IDR_AURA_CURSOR_MOVE, {11, 11}, {23, 23}}, | |
39 {ui::kCursorNorthEastResize, IDR_AURA_CURSOR_NORTH_EAST_RESIZE, | |
40 {12, 11}, {25, 23}}, | |
41 {ui::kCursorSouthWestResize, IDR_AURA_CURSOR_SOUTH_WEST_RESIZE, | |
42 {12, 11}, {25, 23}}, | |
43 {ui::kCursorSouthEastResize, IDR_AURA_CURSOR_SOUTH_EAST_RESIZE, | |
44 {11, 11}, {24, 23}}, | |
45 {ui::kCursorNorthWestResize, IDR_AURA_CURSOR_NORTH_WEST_RESIZE, | |
46 {11, 11}, {24, 23}}, | |
47 {ui::kCursorNorthResize, IDR_AURA_CURSOR_NORTH_RESIZE, {11, 12}, {23, 23}}, | |
48 {ui::kCursorSouthResize, IDR_AURA_CURSOR_SOUTH_RESIZE, {11, 12}, {23, 23}}, | |
49 {ui::kCursorEastResize, IDR_AURA_CURSOR_EAST_RESIZE, {12, 11}, {25, 23}}, | |
50 {ui::kCursorWestResize, IDR_AURA_CURSOR_WEST_RESIZE, {12, 11}, {25, 23}}, | |
51 {ui::kCursorIBeam, IDR_AURA_CURSOR_IBEAM, {12, 12}, {24, 25}}, | |
52 {ui::kCursorAlias, IDR_AURA_CURSOR_ALIAS, {8, 6}, {15, 11}}, | |
53 {ui::kCursorCell, IDR_AURA_CURSOR_CELL, {11, 11}, {24, 23}}, | |
54 {ui::kCursorContextMenu, IDR_AURA_CURSOR_CONTEXT_MENU, {4, 4}, {8, 9}}, | |
55 {ui::kCursorCross, IDR_AURA_CURSOR_CROSSHAIR, {12, 12}, {25, 23}}, | |
56 {ui::kCursorHelp, IDR_AURA_CURSOR_HELP, {4, 4}, {8, 9}}, | |
57 {ui::kCursorVerticalText, IDR_AURA_CURSOR_XTERM_HORIZ, {12, 11}, {26, 23}}, | |
58 {ui::kCursorZoomIn, IDR_AURA_CURSOR_ZOOM_IN, {10, 10}, {20, 20}}, | |
59 {ui::kCursorZoomOut, IDR_AURA_CURSOR_ZOOM_OUT, {10, 10}, {20, 20}}, | |
60 {ui::kCursorRowResize, IDR_AURA_CURSOR_ROW_RESIZE, {11, 12}, {23, 23}}, | |
61 {ui::kCursorColumnResize, IDR_AURA_CURSOR_COL_RESIZE, {12, 11}, {25, 23}}, | |
62 {ui::kCursorEastWestResize, IDR_AURA_CURSOR_EAST_WEST_RESIZE, | |
63 {12, 11}, {25, 23}}, | |
64 {ui::kCursorNorthSouthResize, IDR_AURA_CURSOR_NORTH_SOUTH_RESIZE, | |
65 {11, 12}, {23, 23}}, | |
66 {ui::kCursorNorthEastSouthWestResize, | |
67 IDR_AURA_CURSOR_NORTH_EAST_SOUTH_WEST_RESIZE, {12, 11}, {25, 23}}, | |
68 {ui::kCursorNorthWestSouthEastResize, | |
69 IDR_AURA_CURSOR_NORTH_WEST_SOUTH_EAST_RESIZE, {11, 11}, {24, 23}}, | |
70 {ui::kCursorGrab, IDR_AURA_CURSOR_GRAB, {8, 5}, {16, 10}}, | |
71 {ui::kCursorGrabbing, IDR_AURA_CURSOR_GRABBING, {9, 9}, {18, 18}}, | |
72 }; | |
73 | |
74 const CursorData kAnimatedCursors[] = { | |
75 {ui::kCursorWait, IDR_THROBBER, {7, 7}, {14, 14}}, | |
76 {ui::kCursorProgress, IDR_THROBBER, {7, 7}, {14, 14}}, | |
77 }; | |
78 | |
79 } // namespace | |
80 | |
81 namespace ash { | |
82 | |
83 ImageCursors::ImageCursors() | |
84 : cursor_loader_(ui::CursorLoader::Create()) { | |
85 } | |
86 | |
87 ImageCursors::~ImageCursors() { | |
88 } | |
89 | |
90 float ImageCursors::GetDeviceScaleFactor() const { | |
91 return cursor_loader_->device_scale_factor(); | |
92 } | |
93 | |
94 void ImageCursors::SetDeviceScaleFactor(float device_scale_factor) { | |
95 if (GetDeviceScaleFactor() == device_scale_factor) | |
96 return; | |
97 | |
98 cursor_loader_->UnloadAll(); | |
99 cursor_loader_->set_device_scale_factor(device_scale_factor); | |
100 | |
101 for (size_t i = 0; i < arraysize(kImageCursors); ++i) { | |
102 const HotPoint& hot = device_scale_factor == 1.0f ? | |
103 kImageCursors[i].hot_1x : kImageCursors[i].hot_2x; | |
104 cursor_loader_->LoadImageCursor(kImageCursors[i].id, | |
105 kImageCursors[i].resource_id, | |
106 gfx::Point(hot.x, hot.y)); | |
107 } | |
108 for (size_t i = 0; i < arraysize(kAnimatedCursors); ++i) { | |
109 const HotPoint& hot = device_scale_factor == 1.0f ? | |
110 kAnimatedCursors[i].hot_1x : kAnimatedCursors[i].hot_2x; | |
111 cursor_loader_->LoadAnimatedCursor(kAnimatedCursors[i].id, | |
112 kAnimatedCursors[i].resource_id, | |
113 gfx::Point(hot.x, hot.y), | |
114 kAnimatedCursorFrameDelayMs); | |
115 } | |
116 } | |
117 | |
118 void ImageCursors::SetPlatformCursor(gfx::NativeCursor* cursor) { | |
119 cursor_loader_->SetPlatformCursor(cursor); | |
120 } | |
121 | |
122 } // namespace ash | |
OLD | NEW |