| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ui/base/cursor/cursors_aura.h" | 5 #include "ui/base/cursor/cursors_aura.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include "base/macros.h" | 9 #include "base/macros.h" |
| 10 #include "third_party/skia/include/core/SkBitmap.h" | 10 #include "third_party/skia/include/core/SkBitmap.h" |
| 11 #include "ui/base/resource/resource_bundle.h" | 11 #include "ui/base/resource/resource_bundle.h" |
| 12 #include "ui/gfx/geometry/point.h" | 12 #include "ui/gfx/geometry/point.h" |
| 13 #include "ui/gfx/image/image_skia.h" | 13 #include "ui/gfx/image/image_skia.h" |
| 14 #include "ui/resources/grit/ui_resources.h" | 14 #include "ui/resources/grit/ui_resources.h" |
| 15 | 15 |
| 16 #if defined(OS_WIN) | 16 #if defined(OS_WIN) |
| 17 #include "ui/base/cursor/cursor_loader_win.h" | 17 #include "ui/base/cursor/cursor_loader_win.h" |
| 18 #include "ui/gfx/icon_util.h" | 18 #include "ui/gfx/icon_util.h" |
| 19 #endif | 19 #endif |
| 20 | 20 |
| 21 namespace ui { | 21 namespace ui { |
| 22 namespace { | 22 namespace { |
| 23 | 23 |
| 24 struct HotPoint { | 24 struct HotPoint { |
| 25 int x; | 25 int x; |
| 26 int y; | 26 int y; |
| 27 }; | 27 }; |
| 28 | 28 |
| 29 struct CursorData { | 29 struct CursorData { |
| 30 int id; | 30 CursorType id; |
| 31 int resource_id; | 31 int resource_id; |
| 32 HotPoint hot_1x; | 32 HotPoint hot_1x; |
| 33 HotPoint hot_2x; | 33 HotPoint hot_2x; |
| 34 }; | 34 }; |
| 35 | 35 |
| 36 struct CursorSet { | 36 struct CursorSet { |
| 37 const CursorSetType id; | 37 const CursorSetType id; |
| 38 const CursorData* cursors; | 38 const CursorData* cursors; |
| 39 const int length; | 39 const int length; |
| 40 const CursorData* animated_cursors; | 40 const CursorData* animated_cursors; |
| 41 const int animated_length; | 41 const int animated_length; |
| 42 }; | 42 }; |
| 43 | 43 |
| 44 const CursorData kNormalCursors[] = { | 44 const CursorData kNormalCursors[] = { |
| 45 {ui::kCursorNull, IDR_AURA_CURSOR_PTR, {4, 4}, {7, 7}}, | 45 {CursorType::kNull, IDR_AURA_CURSOR_PTR, {4, 4}, {7, 7}}, |
| 46 {ui::kCursorPointer, IDR_AURA_CURSOR_PTR, {4, 4}, {7, 7}}, | 46 {CursorType::kPointer, IDR_AURA_CURSOR_PTR, {4, 4}, {7, 7}}, |
| 47 {ui::kCursorNoDrop, IDR_AURA_CURSOR_NO_DROP, {9, 9}, {18, 18}}, | 47 {CursorType::kNoDrop, IDR_AURA_CURSOR_NO_DROP, {9, 9}, {18, 18}}, |
| 48 {ui::kCursorNotAllowed, IDR_AURA_CURSOR_NO_DROP, {9, 9}, {18, 18}}, | 48 {CursorType::kNotAllowed, IDR_AURA_CURSOR_NO_DROP, {9, 9}, {18, 18}}, |
| 49 {ui::kCursorCopy, IDR_AURA_CURSOR_COPY, {9, 9}, {18, 18}}, | 49 {CursorType::kCopy, IDR_AURA_CURSOR_COPY, {9, 9}, {18, 18}}, |
| 50 {ui::kCursorHand, IDR_AURA_CURSOR_HAND, {9, 4}, {19, 8}}, | 50 {CursorType::kHand, IDR_AURA_CURSOR_HAND, {9, 4}, {19, 8}}, |
| 51 {ui::kCursorMove, IDR_AURA_CURSOR_MOVE, {11, 11}, {23, 23}}, | 51 {CursorType::kMove, IDR_AURA_CURSOR_MOVE, {11, 11}, {23, 23}}, |
| 52 {ui::kCursorNorthEastResize, IDR_AURA_CURSOR_NORTH_EAST_RESIZE, | 52 {CursorType::kNorthEastResize, |
| 53 {12, 11}, {25, 23}}, | 53 IDR_AURA_CURSOR_NORTH_EAST_RESIZE, |
| 54 {ui::kCursorSouthWestResize, IDR_AURA_CURSOR_SOUTH_WEST_RESIZE, | 54 {12, 11}, |
| 55 {12, 11}, {25, 23}}, | 55 {25, 23}}, |
| 56 {ui::kCursorSouthEastResize, IDR_AURA_CURSOR_SOUTH_EAST_RESIZE, | 56 {CursorType::kSouthWestResize, |
| 57 {11, 11}, {24, 23}}, | 57 IDR_AURA_CURSOR_SOUTH_WEST_RESIZE, |
| 58 {ui::kCursorNorthWestResize, IDR_AURA_CURSOR_NORTH_WEST_RESIZE, | 58 {12, 11}, |
| 59 {11, 11}, {24, 23}}, | 59 {25, 23}}, |
| 60 {ui::kCursorNorthResize, IDR_AURA_CURSOR_NORTH_RESIZE, {11, 12}, {23, 23}}, | 60 {CursorType::kSouthEastResize, |
| 61 {ui::kCursorSouthResize, IDR_AURA_CURSOR_SOUTH_RESIZE, {11, 12}, {23, 23}}, | 61 IDR_AURA_CURSOR_SOUTH_EAST_RESIZE, |
| 62 {ui::kCursorEastResize, IDR_AURA_CURSOR_EAST_RESIZE, {12, 11}, {25, 23}}, | 62 {11, 11}, |
| 63 {ui::kCursorWestResize, IDR_AURA_CURSOR_WEST_RESIZE, {12, 11}, {25, 23}}, | 63 {24, 23}}, |
| 64 {ui::kCursorIBeam, IDR_AURA_CURSOR_IBEAM, {12, 12}, {24, 25}}, | 64 {CursorType::kNorthWestResize, |
| 65 {ui::kCursorAlias, IDR_AURA_CURSOR_ALIAS, {8, 6}, {15, 11}}, | 65 IDR_AURA_CURSOR_NORTH_WEST_RESIZE, |
| 66 {ui::kCursorCell, IDR_AURA_CURSOR_CELL, {11, 11}, {24, 23}}, | 66 {11, 11}, |
| 67 {ui::kCursorContextMenu, IDR_AURA_CURSOR_CONTEXT_MENU, {4, 4}, {8, 9}}, | 67 {24, 23}}, |
| 68 {ui::kCursorCross, IDR_AURA_CURSOR_CROSSHAIR, {12, 12}, {25, 23}}, | 68 {CursorType::kNorthResize, |
| 69 {ui::kCursorHelp, IDR_AURA_CURSOR_HELP, {4, 4}, {8, 9}}, | 69 IDR_AURA_CURSOR_NORTH_RESIZE, |
| 70 {ui::kCursorVerticalText, IDR_AURA_CURSOR_XTERM_HORIZ, {12, 11}, {26, 23}}, | 70 {11, 12}, |
| 71 {ui::kCursorZoomIn, IDR_AURA_CURSOR_ZOOM_IN, {10, 10}, {20, 20}}, | 71 {23, 23}}, |
| 72 {ui::kCursorZoomOut, IDR_AURA_CURSOR_ZOOM_OUT, {10, 10}, {20, 20}}, | 72 {CursorType::kSouthResize, |
| 73 {ui::kCursorRowResize, IDR_AURA_CURSOR_ROW_RESIZE, {11, 12}, {23, 23}}, | 73 IDR_AURA_CURSOR_SOUTH_RESIZE, |
| 74 {ui::kCursorColumnResize, IDR_AURA_CURSOR_COL_RESIZE, {12, 11}, {25, 23}}, | 74 {11, 12}, |
| 75 {ui::kCursorEastWestResize, IDR_AURA_CURSOR_EAST_WEST_RESIZE, | 75 {23, 23}}, |
| 76 {12, 11}, {25, 23}}, | 76 {CursorType::kEastResize, IDR_AURA_CURSOR_EAST_RESIZE, {12, 11}, {25, 23}}, |
| 77 {ui::kCursorNorthSouthResize, IDR_AURA_CURSOR_NORTH_SOUTH_RESIZE, | 77 {CursorType::kWestResize, IDR_AURA_CURSOR_WEST_RESIZE, {12, 11}, {25, 23}}, |
| 78 {11, 12}, {23, 23}}, | 78 {CursorType::kIBeam, IDR_AURA_CURSOR_IBEAM, {12, 12}, {24, 25}}, |
| 79 {ui::kCursorNorthEastSouthWestResize, | 79 {CursorType::kAlias, IDR_AURA_CURSOR_ALIAS, {8, 6}, {15, 11}}, |
| 80 IDR_AURA_CURSOR_NORTH_EAST_SOUTH_WEST_RESIZE, {12, 11}, {25, 23}}, | 80 {CursorType::kCell, IDR_AURA_CURSOR_CELL, {11, 11}, {24, 23}}, |
| 81 {ui::kCursorNorthWestSouthEastResize, | 81 {CursorType::kContextMenu, IDR_AURA_CURSOR_CONTEXT_MENU, {4, 4}, {8, 9}}, |
| 82 IDR_AURA_CURSOR_NORTH_WEST_SOUTH_EAST_RESIZE, {11, 11}, {24, 23}}, | 82 {CursorType::kCross, IDR_AURA_CURSOR_CROSSHAIR, {12, 12}, {25, 23}}, |
| 83 {ui::kCursorGrab, IDR_AURA_CURSOR_GRAB, {8, 5}, {16, 10}}, | 83 {CursorType::kHelp, IDR_AURA_CURSOR_HELP, {4, 4}, {8, 9}}, |
| 84 {ui::kCursorGrabbing, IDR_AURA_CURSOR_GRABBING, {9, 9}, {18, 18}}, | 84 {CursorType::kVerticalText, |
| 85 IDR_AURA_CURSOR_XTERM_HORIZ, |
| 86 {12, 11}, |
| 87 {26, 23}}, |
| 88 {CursorType::kZoomIn, IDR_AURA_CURSOR_ZOOM_IN, {10, 10}, {20, 20}}, |
| 89 {CursorType::kZoomOut, IDR_AURA_CURSOR_ZOOM_OUT, {10, 10}, {20, 20}}, |
| 90 {CursorType::kRowResize, IDR_AURA_CURSOR_ROW_RESIZE, {11, 12}, {23, 23}}, |
| 91 {CursorType::kColumnResize, IDR_AURA_CURSOR_COL_RESIZE, {12, 11}, {25, 23}}, |
| 92 {CursorType::kEastWestResize, |
| 93 IDR_AURA_CURSOR_EAST_WEST_RESIZE, |
| 94 {12, 11}, |
| 95 {25, 23}}, |
| 96 {CursorType::kNorthSouthResize, |
| 97 IDR_AURA_CURSOR_NORTH_SOUTH_RESIZE, |
| 98 {11, 12}, |
| 99 {23, 23}}, |
| 100 {CursorType::kNorthEastSouthWestResize, |
| 101 IDR_AURA_CURSOR_NORTH_EAST_SOUTH_WEST_RESIZE, |
| 102 {12, 11}, |
| 103 {25, 23}}, |
| 104 {CursorType::kNorthWestSouthEastResize, |
| 105 IDR_AURA_CURSOR_NORTH_WEST_SOUTH_EAST_RESIZE, |
| 106 {11, 11}, |
| 107 {24, 23}}, |
| 108 {CursorType::kGrab, IDR_AURA_CURSOR_GRAB, {8, 5}, {16, 10}}, |
| 109 {CursorType::kGrabbing, IDR_AURA_CURSOR_GRABBING, {9, 9}, {18, 18}}, |
| 85 }; | 110 }; |
| 86 | 111 |
| 87 const CursorData kLargeCursors[] = { | 112 const CursorData kLargeCursors[] = { |
| 88 // The 2x hotspots should be double of the 1x, even though the cursors are | 113 // The 2x hotspots should be double of the 1x, even though the cursors are |
| 89 // shown as same size as 1x (64x64), because in 2x dpi screen, the 1x large | 114 // shown as same size as 1x (64x64), because in 2x dpi screen, the 1x large |
| 90 // cursor assets (64x64) are internally enlarged to the double size (128x128) | 115 // cursor assets (64x64) are internally enlarged to the double size |
| 91 // by ResourceBundleImageSource. | 116 // (128x128) |
| 92 {ui::kCursorNull, IDR_AURA_CURSOR_BIG_PTR, {10, 10}, {20, 20}}, | 117 // by ResourceBundleImageSource. |
| 93 {ui::kCursorPointer, IDR_AURA_CURSOR_BIG_PTR, {10, 10}, {20, 20}}, | 118 {CursorType::kNull, IDR_AURA_CURSOR_BIG_PTR, {10, 10}, {20, 20}}, |
| 94 {ui::kCursorNoDrop, IDR_AURA_CURSOR_BIG_NO_DROP, {10, 10}, {20, 20}}, | 119 {CursorType::kPointer, IDR_AURA_CURSOR_BIG_PTR, {10, 10}, {20, 20}}, |
| 95 {ui::kCursorNotAllowed, IDR_AURA_CURSOR_BIG_NO_DROP, {10, 10}, {20, 20}}, | 120 {CursorType::kNoDrop, IDR_AURA_CURSOR_BIG_NO_DROP, {10, 10}, {20, 20}}, |
| 96 {ui::kCursorCopy, IDR_AURA_CURSOR_BIG_COPY, {10, 10}, {20, 20}}, | 121 {CursorType::kNotAllowed, IDR_AURA_CURSOR_BIG_NO_DROP, {10, 10}, {20, 20}}, |
| 97 {ui::kCursorHand, IDR_AURA_CURSOR_BIG_HAND, {25, 7}, {50, 14}}, | 122 {CursorType::kCopy, IDR_AURA_CURSOR_BIG_COPY, {10, 10}, {20, 20}}, |
| 98 {ui::kCursorMove, IDR_AURA_CURSOR_BIG_MOVE, {32, 31}, {64, 62}}, | 123 {CursorType::kHand, IDR_AURA_CURSOR_BIG_HAND, {25, 7}, {50, 14}}, |
| 99 {ui::kCursorNorthEastResize, IDR_AURA_CURSOR_BIG_NORTH_EAST_RESIZE, | 124 {CursorType::kMove, IDR_AURA_CURSOR_BIG_MOVE, {32, 31}, {64, 62}}, |
| 100 {31, 28}, {62, 56}}, | 125 {CursorType::kNorthEastResize, |
| 101 {ui::kCursorSouthWestResize, IDR_AURA_CURSOR_BIG_SOUTH_WEST_RESIZE, | 126 IDR_AURA_CURSOR_BIG_NORTH_EAST_RESIZE, |
| 102 {31, 28}, {62, 56}}, | 127 {31, 28}, |
| 103 {ui::kCursorSouthEastResize, IDR_AURA_CURSOR_BIG_SOUTH_EAST_RESIZE, | 128 {62, 56}}, |
| 104 {28, 28}, {56, 56}}, | 129 {CursorType::kSouthWestResize, |
| 105 {ui::kCursorNorthWestResize, IDR_AURA_CURSOR_BIG_NORTH_WEST_RESIZE, | 130 IDR_AURA_CURSOR_BIG_SOUTH_WEST_RESIZE, |
| 106 {28, 28}, {56, 56}}, | 131 {31, 28}, |
| 107 {ui::kCursorNorthResize, IDR_AURA_CURSOR_BIG_NORTH_RESIZE, | 132 {62, 56}}, |
| 108 {29, 32}, {58, 64}}, | 133 {CursorType::kSouthEastResize, |
| 109 {ui::kCursorSouthResize, IDR_AURA_CURSOR_BIG_SOUTH_RESIZE, | 134 IDR_AURA_CURSOR_BIG_SOUTH_EAST_RESIZE, |
| 110 {29, 32}, {58, 64}}, | 135 {28, 28}, |
| 111 {ui::kCursorEastResize, IDR_AURA_CURSOR_BIG_EAST_RESIZE, {35, 29}, {70, 58}}, | 136 {56, 56}}, |
| 112 {ui::kCursorWestResize, IDR_AURA_CURSOR_BIG_WEST_RESIZE, {35, 29}, {70, 58}}, | 137 {CursorType::kNorthWestResize, |
| 113 {ui::kCursorIBeam, IDR_AURA_CURSOR_BIG_IBEAM, {30, 32}, {60, 64}}, | 138 IDR_AURA_CURSOR_BIG_NORTH_WEST_RESIZE, |
| 114 {ui::kCursorAlias, IDR_AURA_CURSOR_BIG_ALIAS, {19, 11}, {38, 22}}, | 139 {28, 28}, |
| 115 {ui::kCursorCell, IDR_AURA_CURSOR_BIG_CELL, {30, 30}, {60, 60}}, | 140 {56, 56}}, |
| 116 {ui::kCursorContextMenu, IDR_AURA_CURSOR_BIG_CONTEXT_MENU, | 141 {CursorType::kNorthResize, |
| 117 {11, 11}, {22, 22}}, | 142 IDR_AURA_CURSOR_BIG_NORTH_RESIZE, |
| 118 {ui::kCursorCross, IDR_AURA_CURSOR_BIG_CROSSHAIR, {31, 30}, {62, 60}}, | 143 {29, 32}, |
| 119 {ui::kCursorHelp, IDR_AURA_CURSOR_BIG_HELP, {10, 11}, {20, 22}}, | 144 {58, 64}}, |
| 120 {ui::kCursorVerticalText, IDR_AURA_CURSOR_BIG_XTERM_HORIZ, | 145 {CursorType::kSouthResize, |
| 121 {32, 30}, {64, 60}}, | 146 IDR_AURA_CURSOR_BIG_SOUTH_RESIZE, |
| 122 {ui::kCursorZoomIn, IDR_AURA_CURSOR_BIG_ZOOM_IN, {25, 26}, {50, 52}}, | 147 {29, 32}, |
| 123 {ui::kCursorZoomOut, IDR_AURA_CURSOR_BIG_ZOOM_OUT, {26, 26}, {52, 52}}, | 148 {58, 64}}, |
| 124 {ui::kCursorRowResize, IDR_AURA_CURSOR_BIG_ROW_RESIZE, {29, 32}, {58, 64}}, | 149 {CursorType::kEastResize, |
| 125 {ui::kCursorColumnResize, IDR_AURA_CURSOR_BIG_COL_RESIZE, {35, 29}, {70, 58}}, | 150 IDR_AURA_CURSOR_BIG_EAST_RESIZE, |
| 126 {ui::kCursorEastWestResize, IDR_AURA_CURSOR_BIG_EAST_WEST_RESIZE, | 151 {35, 29}, |
| 127 {35, 29}, {70, 58}}, | 152 {70, 58}}, |
| 128 {ui::kCursorNorthSouthResize, IDR_AURA_CURSOR_BIG_NORTH_SOUTH_RESIZE, | 153 {CursorType::kWestResize, |
| 129 {29, 32}, {58, 64}}, | 154 IDR_AURA_CURSOR_BIG_WEST_RESIZE, |
| 130 {ui::kCursorNorthEastSouthWestResize, | 155 {35, 29}, |
| 131 IDR_AURA_CURSOR_BIG_NORTH_EAST_SOUTH_WEST_RESIZE, {32, 30}, {64, 60}}, | 156 {70, 58}}, |
| 132 {ui::kCursorNorthWestSouthEastResize, | 157 {CursorType::kIBeam, IDR_AURA_CURSOR_BIG_IBEAM, {30, 32}, {60, 64}}, |
| 133 IDR_AURA_CURSOR_BIG_NORTH_WEST_SOUTH_EAST_RESIZE, {32, 31}, {64, 62}}, | 158 {CursorType::kAlias, IDR_AURA_CURSOR_BIG_ALIAS, {19, 11}, {38, 22}}, |
| 134 {ui::kCursorGrab, IDR_AURA_CURSOR_BIG_GRAB, {21, 11}, {42, 22}}, | 159 {CursorType::kCell, IDR_AURA_CURSOR_BIG_CELL, {30, 30}, {60, 60}}, |
| 135 {ui::kCursorGrabbing, IDR_AURA_CURSOR_BIG_GRABBING, {20, 12}, {40, 24}}, | 160 {CursorType::kContextMenu, |
| 161 IDR_AURA_CURSOR_BIG_CONTEXT_MENU, |
| 162 {11, 11}, |
| 163 {22, 22}}, |
| 164 {CursorType::kCross, IDR_AURA_CURSOR_BIG_CROSSHAIR, {31, 30}, {62, 60}}, |
| 165 {CursorType::kHelp, IDR_AURA_CURSOR_BIG_HELP, {10, 11}, {20, 22}}, |
| 166 {CursorType::kVerticalText, |
| 167 IDR_AURA_CURSOR_BIG_XTERM_HORIZ, |
| 168 {32, 30}, |
| 169 {64, 60}}, |
| 170 {CursorType::kZoomIn, IDR_AURA_CURSOR_BIG_ZOOM_IN, {25, 26}, {50, 52}}, |
| 171 {CursorType::kZoomOut, IDR_AURA_CURSOR_BIG_ZOOM_OUT, {26, 26}, {52, 52}}, |
| 172 {CursorType::kRowResize, |
| 173 IDR_AURA_CURSOR_BIG_ROW_RESIZE, |
| 174 {29, 32}, |
| 175 {58, 64}}, |
| 176 {CursorType::kColumnResize, |
| 177 IDR_AURA_CURSOR_BIG_COL_RESIZE, |
| 178 {35, 29}, |
| 179 {70, 58}}, |
| 180 {CursorType::kEastWestResize, |
| 181 IDR_AURA_CURSOR_BIG_EAST_WEST_RESIZE, |
| 182 {35, 29}, |
| 183 {70, 58}}, |
| 184 {CursorType::kNorthSouthResize, |
| 185 IDR_AURA_CURSOR_BIG_NORTH_SOUTH_RESIZE, |
| 186 {29, 32}, |
| 187 {58, 64}}, |
| 188 {CursorType::kNorthEastSouthWestResize, |
| 189 IDR_AURA_CURSOR_BIG_NORTH_EAST_SOUTH_WEST_RESIZE, |
| 190 {32, 30}, |
| 191 {64, 60}}, |
| 192 {CursorType::kNorthWestSouthEastResize, |
| 193 IDR_AURA_CURSOR_BIG_NORTH_WEST_SOUTH_EAST_RESIZE, |
| 194 {32, 31}, |
| 195 {64, 62}}, |
| 196 {CursorType::kGrab, IDR_AURA_CURSOR_BIG_GRAB, {21, 11}, {42, 22}}, |
| 197 {CursorType::kGrabbing, IDR_AURA_CURSOR_BIG_GRABBING, {20, 12}, {40, 24}}, |
| 136 }; | 198 }; |
| 137 | 199 |
| 138 const CursorData kAnimatedCursors[] = { | 200 const CursorData kAnimatedCursors[] = { |
| 139 {ui::kCursorWait, IDR_AURA_CURSOR_THROBBER, {7, 7}, {14, 14}}, | 201 {CursorType::kWait, IDR_AURA_CURSOR_THROBBER, {7, 7}, {14, 14}}, |
| 140 {ui::kCursorProgress, IDR_AURA_CURSOR_THROBBER, {7, 7}, {14, 14}}, | 202 {CursorType::kProgress, IDR_AURA_CURSOR_THROBBER, {7, 7}, {14, 14}}, |
| 141 }; | 203 }; |
| 142 | 204 |
| 143 const CursorSet kCursorSets[] = { | 205 const CursorSet kCursorSets[] = { |
| 144 { | 206 { |
| 145 CURSOR_SET_NORMAL, | 207 CURSOR_SET_NORMAL, |
| 146 kNormalCursors, arraysize(kNormalCursors), | 208 kNormalCursors, arraysize(kNormalCursors), |
| 147 kAnimatedCursors, arraysize(kAnimatedCursors) | 209 kAnimatedCursors, arraysize(kAnimatedCursors) |
| 148 }, | 210 }, |
| 149 { | 211 { |
| 150 CURSOR_SET_LARGE, | 212 CURSOR_SET_LARGE, |
| 151 kLargeCursors, arraysize(kLargeCursors), | 213 kLargeCursors, arraysize(kLargeCursors), |
| 152 // TODO(yoshiki): Replace animated cursors with big assets. crbug.com/247254 | 214 // TODO(yoshiki): Replace animated cursors with big assets. crbug.com/247254 |
| 153 kAnimatedCursors, arraysize(kAnimatedCursors) | 215 kAnimatedCursors, arraysize(kAnimatedCursors) |
| 154 }, | 216 }, |
| 155 }; | 217 }; |
| 156 | 218 |
| 157 const CursorSet* GetCursorSetByType(CursorSetType cursor_set_id) { | 219 const CursorSet* GetCursorSetByType(CursorSetType cursor_set_id) { |
| 158 for (size_t i = 0; i < arraysize(kCursorSets); ++i) { | 220 for (size_t i = 0; i < arraysize(kCursorSets); ++i) { |
| 159 if (kCursorSets[i].id == cursor_set_id) | 221 if (kCursorSets[i].id == cursor_set_id) |
| 160 return &kCursorSets[i]; | 222 return &kCursorSets[i]; |
| 161 } | 223 } |
| 162 | 224 |
| 163 return NULL; | 225 return NULL; |
| 164 } | 226 } |
| 165 | 227 |
| 166 bool SearchTable(const CursorData* table, | 228 bool SearchTable(const CursorData* table, |
| 167 size_t table_length, | 229 size_t table_length, |
| 168 int id, | 230 CursorType id, |
| 169 float scale_factor, | 231 float scale_factor, |
| 170 int* resource_id, | 232 int* resource_id, |
| 171 gfx::Point* point) { | 233 gfx::Point* point) { |
| 172 bool resource_2x_available = | 234 bool resource_2x_available = |
| 173 ResourceBundle::GetSharedInstance().GetMaxScaleFactor() == | 235 ResourceBundle::GetSharedInstance().GetMaxScaleFactor() == |
| 174 SCALE_FACTOR_200P; | 236 SCALE_FACTOR_200P; |
| 175 for (size_t i = 0; i < table_length; ++i) { | 237 for (size_t i = 0; i < table_length; ++i) { |
| 176 if (table[i].id == id) { | 238 if (table[i].id == id) { |
| 177 *resource_id = table[i].resource_id; | 239 *resource_id = table[i].resource_id; |
| 178 *point = scale_factor == 1.0f || !resource_2x_available ? | 240 *point = scale_factor == 1.0f || !resource_2x_available ? |
| 179 gfx::Point(table[i].hot_1x.x, table[i].hot_1x.y) : | 241 gfx::Point(table[i].hot_1x.x, table[i].hot_1x.y) : |
| 180 gfx::Point(table[i].hot_2x.x, table[i].hot_2x.y); | 242 gfx::Point(table[i].hot_2x.x, table[i].hot_2x.y); |
| 181 return true; | 243 return true; |
| 182 } | 244 } |
| 183 } | 245 } |
| 184 | 246 |
| 185 return false; | 247 return false; |
| 186 } | 248 } |
| 187 | 249 |
| 188 } // namespace | 250 } // namespace |
| 189 | 251 |
| 190 bool GetCursorDataFor(CursorSetType cursor_set_id, | 252 bool GetCursorDataFor(CursorSetType cursor_set_id, |
| 191 int id, | 253 CursorType id, |
| 192 float scale_factor, | 254 float scale_factor, |
| 193 int* resource_id, | 255 int* resource_id, |
| 194 gfx::Point* point) { | 256 gfx::Point* point) { |
| 195 const CursorSet* cursor_set = GetCursorSetByType(cursor_set_id); | 257 const CursorSet* cursor_set = GetCursorSetByType(cursor_set_id); |
| 196 if (cursor_set && | 258 if (cursor_set && |
| 197 SearchTable(cursor_set->cursors, | 259 SearchTable(cursor_set->cursors, |
| 198 cursor_set->length, | 260 cursor_set->length, |
| 199 id, scale_factor, resource_id, point)) { | 261 id, scale_factor, resource_id, point)) { |
| 200 return true; | 262 return true; |
| 201 } | 263 } |
| 202 | 264 |
| 203 // Falls back to the default cursor set. | 265 // Falls back to the default cursor set. |
| 204 cursor_set = GetCursorSetByType(ui::CURSOR_SET_NORMAL); | 266 cursor_set = GetCursorSetByType(ui::CURSOR_SET_NORMAL); |
| 205 DCHECK(cursor_set); | 267 DCHECK(cursor_set); |
| 206 return SearchTable(cursor_set->cursors, | 268 return SearchTable(cursor_set->cursors, |
| 207 cursor_set->length, | 269 cursor_set->length, |
| 208 id, scale_factor, resource_id, point); | 270 id, scale_factor, resource_id, point); |
| 209 } | 271 } |
| 210 | 272 |
| 211 bool GetAnimatedCursorDataFor(CursorSetType cursor_set_id, | 273 bool GetAnimatedCursorDataFor(CursorSetType cursor_set_id, |
| 212 int id, | 274 CursorType id, |
| 213 float scale_factor, | 275 float scale_factor, |
| 214 int* resource_id, | 276 int* resource_id, |
| 215 gfx::Point* point) { | 277 gfx::Point* point) { |
| 216 const CursorSet* cursor_set = GetCursorSetByType(cursor_set_id); | 278 const CursorSet* cursor_set = GetCursorSetByType(cursor_set_id); |
| 217 if (cursor_set && | 279 if (cursor_set && |
| 218 SearchTable(cursor_set->animated_cursors, | 280 SearchTable(cursor_set->animated_cursors, |
| 219 cursor_set->animated_length, | 281 cursor_set->animated_length, |
| 220 id, scale_factor, resource_id, point)) { | 282 id, scale_factor, resource_id, point)) { |
| 221 return true; | 283 return true; |
| 222 } | 284 } |
| (...skipping 30 matching lines...) Expand all Loading... |
| 253 const SkBitmap* cursor_bitmap = ResourceBundle::GetSharedInstance(). | 315 const SkBitmap* cursor_bitmap = ResourceBundle::GetSharedInstance(). |
| 254 GetImageSkiaNamed(resource_id)->bitmap(); | 316 GetImageSkiaNamed(resource_id)->bitmap(); |
| 255 #endif | 317 #endif |
| 256 if (!cursor_bitmap) | 318 if (!cursor_bitmap) |
| 257 return false; | 319 return false; |
| 258 *bitmap = *cursor_bitmap; | 320 *bitmap = *cursor_bitmap; |
| 259 return true; | 321 return true; |
| 260 } | 322 } |
| 261 | 323 |
| 262 } // namespace ui | 324 } // namespace ui |
| OLD | NEW |