OLD | NEW |
1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 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 "services/ui/public/interfaces/cursor/cursor_struct_traits.h" | 5 #include "services/ui/public/interfaces/cursor/cursor_struct_traits.h" |
6 | 6 |
7 #include "base/time/time.h" | 7 #include "base/time/time.h" |
8 #include "mojo/common/common_custom_types_struct_traits.h" | 8 #include "mojo/common/common_custom_types_struct_traits.h" |
| 9 #include "services/ui/public/interfaces/cursor/cursor.mojom.h" |
9 #include "skia/public/interfaces/bitmap_array_struct_traits.h" | 10 #include "skia/public/interfaces/bitmap_array_struct_traits.h" |
10 #include "skia/public/interfaces/bitmap_skbitmap_struct_traits.h" | 11 #include "skia/public/interfaces/bitmap_skbitmap_struct_traits.h" |
11 #include "third_party/skia/include/core/SkBitmap.h" | 12 #include "third_party/skia/include/core/SkBitmap.h" |
12 #include "ui/base/cursor/cursor.h" | 13 #include "ui/base/cursor/cursor.h" |
13 #include "ui/gfx/geometry/mojo/geometry_struct_traits.h" | 14 #include "ui/gfx/geometry/mojo/geometry_struct_traits.h" |
14 | 15 |
15 namespace mojo { | 16 namespace mojo { |
16 | 17 |
17 // static | 18 // static |
| 19 ui::mojom::CursorType |
| 20 EnumTraits<ui::mojom::CursorType, ui::CursorType>::ToMojom( |
| 21 ui::CursorType input) { |
| 22 switch (input) { |
| 23 case ui::CursorType::kNull: |
| 24 return ui::mojom::CursorType::kNull; |
| 25 case ui::CursorType::kPointer: |
| 26 return ui::mojom::CursorType::kPointer; |
| 27 case ui::CursorType::kCross: |
| 28 return ui::mojom::CursorType::kCross; |
| 29 case ui::CursorType::kHand: |
| 30 return ui::mojom::CursorType::kHand; |
| 31 case ui::CursorType::kIBeam: |
| 32 return ui::mojom::CursorType::kIBeam; |
| 33 case ui::CursorType::kWait: |
| 34 return ui::mojom::CursorType::kWait; |
| 35 case ui::CursorType::kHelp: |
| 36 return ui::mojom::CursorType::kHelp; |
| 37 case ui::CursorType::kEastResize: |
| 38 return ui::mojom::CursorType::kEastResize; |
| 39 case ui::CursorType::kNorthResize: |
| 40 return ui::mojom::CursorType::kNorthResize; |
| 41 case ui::CursorType::kNorthEastResize: |
| 42 return ui::mojom::CursorType::kNorthEastResize; |
| 43 case ui::CursorType::kNorthWestResize: |
| 44 return ui::mojom::CursorType::kNorthWestResize; |
| 45 case ui::CursorType::kSouthResize: |
| 46 return ui::mojom::CursorType::kSouthResize; |
| 47 case ui::CursorType::kSouthEastResize: |
| 48 return ui::mojom::CursorType::kSouthEastResize; |
| 49 case ui::CursorType::kSouthWestResize: |
| 50 return ui::mojom::CursorType::kSouthWestResize; |
| 51 case ui::CursorType::kWestResize: |
| 52 return ui::mojom::CursorType::kWestResize; |
| 53 case ui::CursorType::kNorthSouthResize: |
| 54 return ui::mojom::CursorType::kNorthSouthResize; |
| 55 case ui::CursorType::kEastWestResize: |
| 56 return ui::mojom::CursorType::kEastWestResize; |
| 57 case ui::CursorType::kNorthEastSouthWestResize: |
| 58 return ui::mojom::CursorType::kNorthEastSouthWestResize; |
| 59 case ui::CursorType::kNorthWestSouthEastResize: |
| 60 return ui::mojom::CursorType::kNorthWestSouthEastResize; |
| 61 case ui::CursorType::kColumnResize: |
| 62 return ui::mojom::CursorType::kColumnResize; |
| 63 case ui::CursorType::kRowResize: |
| 64 return ui::mojom::CursorType::kRowResize; |
| 65 case ui::CursorType::kMiddlePanning: |
| 66 return ui::mojom::CursorType::kMiddlePanning; |
| 67 case ui::CursorType::kEastPanning: |
| 68 return ui::mojom::CursorType::kEastPanning; |
| 69 case ui::CursorType::kNorthPanning: |
| 70 return ui::mojom::CursorType::kNorthPanning; |
| 71 case ui::CursorType::kNorthEastPanning: |
| 72 return ui::mojom::CursorType::kNorthEastPanning; |
| 73 case ui::CursorType::kNorthWestPanning: |
| 74 return ui::mojom::CursorType::kNorthWestPanning; |
| 75 case ui::CursorType::kSouthPanning: |
| 76 return ui::mojom::CursorType::kSouthPanning; |
| 77 case ui::CursorType::kSouthEastPanning: |
| 78 return ui::mojom::CursorType::kSouthEastPanning; |
| 79 case ui::CursorType::kSouthWestPanning: |
| 80 return ui::mojom::CursorType::kSouthWestPanning; |
| 81 case ui::CursorType::kWestPanning: |
| 82 return ui::mojom::CursorType::kWestPanning; |
| 83 case ui::CursorType::kMove: |
| 84 return ui::mojom::CursorType::kMove; |
| 85 case ui::CursorType::kVerticalText: |
| 86 return ui::mojom::CursorType::kVerticalText; |
| 87 case ui::CursorType::kCell: |
| 88 return ui::mojom::CursorType::kCell; |
| 89 case ui::CursorType::kContextMenu: |
| 90 return ui::mojom::CursorType::kContextMenu; |
| 91 case ui::CursorType::kAlias: |
| 92 return ui::mojom::CursorType::kAlias; |
| 93 case ui::CursorType::kProgress: |
| 94 return ui::mojom::CursorType::kProgress; |
| 95 case ui::CursorType::kNoDrop: |
| 96 return ui::mojom::CursorType::kNoDrop; |
| 97 case ui::CursorType::kCopy: |
| 98 return ui::mojom::CursorType::kCopy; |
| 99 case ui::CursorType::kNone: |
| 100 return ui::mojom::CursorType::kNone; |
| 101 case ui::CursorType::kNotAllowed: |
| 102 return ui::mojom::CursorType::kNotAllowed; |
| 103 case ui::CursorType::kZoomIn: |
| 104 return ui::mojom::CursorType::kZoomIn; |
| 105 case ui::CursorType::kZoomOut: |
| 106 return ui::mojom::CursorType::kZoomOut; |
| 107 case ui::CursorType::kGrab: |
| 108 return ui::mojom::CursorType::kGrab; |
| 109 case ui::CursorType::kGrabbing: |
| 110 return ui::mojom::CursorType::kGrabbing; |
| 111 case ui::CursorType::kCustom: |
| 112 return ui::mojom::CursorType::kCustom; |
| 113 case ui::CursorType::kDndNone: |
| 114 case ui::CursorType::kDndMove: |
| 115 case ui::CursorType::kDndCopy: |
| 116 case ui::CursorType::kDndLink: |
| 117 // The mojom version is the same as the restricted Webcursor constants; |
| 118 // don't allow system cursors to be transmitted. |
| 119 NOTREACHED(); |
| 120 return ui::mojom::CursorType::kNull; |
| 121 } |
| 122 NOTREACHED(); |
| 123 return ui::mojom::CursorType::kNull; |
| 124 } |
| 125 |
| 126 // static |
| 127 bool EnumTraits<ui::mojom::CursorType, ui::CursorType>::FromMojom( |
| 128 ui::mojom::CursorType input, |
| 129 ui::CursorType* out) { |
| 130 switch (input) { |
| 131 case ui::mojom::CursorType::kNull: |
| 132 *out = ui::CursorType::kNull; |
| 133 return true; |
| 134 case ui::mojom::CursorType::kPointer: |
| 135 *out = ui::CursorType::kPointer; |
| 136 return true; |
| 137 case ui::mojom::CursorType::kCross: |
| 138 *out = ui::CursorType::kCross; |
| 139 return true; |
| 140 case ui::mojom::CursorType::kHand: |
| 141 *out = ui::CursorType::kHand; |
| 142 return true; |
| 143 case ui::mojom::CursorType::kIBeam: |
| 144 *out = ui::CursorType::kIBeam; |
| 145 return true; |
| 146 case ui::mojom::CursorType::kWait: |
| 147 *out = ui::CursorType::kWait; |
| 148 return true; |
| 149 case ui::mojom::CursorType::kHelp: |
| 150 *out = ui::CursorType::kHelp; |
| 151 return true; |
| 152 case ui::mojom::CursorType::kEastResize: |
| 153 *out = ui::CursorType::kEastResize; |
| 154 return true; |
| 155 case ui::mojom::CursorType::kNorthResize: |
| 156 *out = ui::CursorType::kNorthResize; |
| 157 return true; |
| 158 case ui::mojom::CursorType::kNorthEastResize: |
| 159 *out = ui::CursorType::kNorthEastResize; |
| 160 return true; |
| 161 case ui::mojom::CursorType::kNorthWestResize: |
| 162 *out = ui::CursorType::kNorthWestResize; |
| 163 return true; |
| 164 case ui::mojom::CursorType::kSouthResize: |
| 165 *out = ui::CursorType::kSouthResize; |
| 166 return true; |
| 167 case ui::mojom::CursorType::kSouthEastResize: |
| 168 *out = ui::CursorType::kSouthEastResize; |
| 169 return true; |
| 170 case ui::mojom::CursorType::kSouthWestResize: |
| 171 *out = ui::CursorType::kSouthWestResize; |
| 172 return true; |
| 173 case ui::mojom::CursorType::kWestResize: |
| 174 *out = ui::CursorType::kWestResize; |
| 175 return true; |
| 176 case ui::mojom::CursorType::kNorthSouthResize: |
| 177 *out = ui::CursorType::kNorthSouthResize; |
| 178 return true; |
| 179 case ui::mojom::CursorType::kEastWestResize: |
| 180 *out = ui::CursorType::kEastWestResize; |
| 181 return true; |
| 182 case ui::mojom::CursorType::kNorthEastSouthWestResize: |
| 183 *out = ui::CursorType::kNorthEastSouthWestResize; |
| 184 return true; |
| 185 case ui::mojom::CursorType::kNorthWestSouthEastResize: |
| 186 *out = ui::CursorType::kNorthWestSouthEastResize; |
| 187 return true; |
| 188 case ui::mojom::CursorType::kColumnResize: |
| 189 *out = ui::CursorType::kColumnResize; |
| 190 return true; |
| 191 case ui::mojom::CursorType::kRowResize: |
| 192 *out = ui::CursorType::kRowResize; |
| 193 return true; |
| 194 case ui::mojom::CursorType::kMiddlePanning: |
| 195 *out = ui::CursorType::kMiddlePanning; |
| 196 return true; |
| 197 case ui::mojom::CursorType::kEastPanning: |
| 198 *out = ui::CursorType::kEastPanning; |
| 199 return true; |
| 200 case ui::mojom::CursorType::kNorthPanning: |
| 201 *out = ui::CursorType::kNorthPanning; |
| 202 return true; |
| 203 case ui::mojom::CursorType::kNorthEastPanning: |
| 204 *out = ui::CursorType::kNorthEastPanning; |
| 205 return true; |
| 206 case ui::mojom::CursorType::kNorthWestPanning: |
| 207 *out = ui::CursorType::kNorthWestPanning; |
| 208 return true; |
| 209 case ui::mojom::CursorType::kSouthPanning: |
| 210 *out = ui::CursorType::kSouthPanning; |
| 211 return true; |
| 212 case ui::mojom::CursorType::kSouthEastPanning: |
| 213 *out = ui::CursorType::kSouthEastPanning; |
| 214 return true; |
| 215 case ui::mojom::CursorType::kSouthWestPanning: |
| 216 *out = ui::CursorType::kSouthWestPanning; |
| 217 return true; |
| 218 case ui::mojom::CursorType::kWestPanning: |
| 219 *out = ui::CursorType::kWestPanning; |
| 220 return true; |
| 221 case ui::mojom::CursorType::kMove: |
| 222 *out = ui::CursorType::kMove; |
| 223 return true; |
| 224 case ui::mojom::CursorType::kVerticalText: |
| 225 *out = ui::CursorType::kVerticalText; |
| 226 return true; |
| 227 case ui::mojom::CursorType::kCell: |
| 228 *out = ui::CursorType::kCell; |
| 229 return true; |
| 230 case ui::mojom::CursorType::kContextMenu: |
| 231 *out = ui::CursorType::kContextMenu; |
| 232 return true; |
| 233 case ui::mojom::CursorType::kAlias: |
| 234 *out = ui::CursorType::kAlias; |
| 235 return true; |
| 236 case ui::mojom::CursorType::kProgress: |
| 237 *out = ui::CursorType::kProgress; |
| 238 return true; |
| 239 case ui::mojom::CursorType::kNoDrop: |
| 240 *out = ui::CursorType::kNoDrop; |
| 241 return true; |
| 242 case ui::mojom::CursorType::kCopy: |
| 243 *out = ui::CursorType::kCopy; |
| 244 return true; |
| 245 case ui::mojom::CursorType::kNone: |
| 246 *out = ui::CursorType::kNone; |
| 247 return true; |
| 248 case ui::mojom::CursorType::kNotAllowed: |
| 249 *out = ui::CursorType::kNotAllowed; |
| 250 return true; |
| 251 case ui::mojom::CursorType::kZoomIn: |
| 252 *out = ui::CursorType::kZoomIn; |
| 253 return true; |
| 254 case ui::mojom::CursorType::kZoomOut: |
| 255 *out = ui::CursorType::kZoomOut; |
| 256 return true; |
| 257 case ui::mojom::CursorType::kGrab: |
| 258 *out = ui::CursorType::kGrab; |
| 259 return true; |
| 260 case ui::mojom::CursorType::kGrabbing: |
| 261 *out = ui::CursorType::kGrabbing; |
| 262 return true; |
| 263 case ui::mojom::CursorType::kCustom: |
| 264 *out = ui::CursorType::kCustom; |
| 265 return true; |
| 266 } |
| 267 |
| 268 NOTREACHED(); |
| 269 return false; |
| 270 } |
| 271 |
| 272 // static |
18 const base::TimeDelta& | 273 const base::TimeDelta& |
19 StructTraits<ui::mojom::CursorDataDataView, ui::CursorData>::frame_delay( | 274 StructTraits<ui::mojom::CursorDataDataView, ui::CursorData>::frame_delay( |
20 const ui::CursorData& c) { | 275 const ui::CursorData& c) { |
21 return c.frame_delay(); | 276 return c.frame_delay(); |
22 } | 277 } |
23 | 278 |
24 // static | 279 // static |
25 const gfx::Point& | 280 const gfx::Point& |
26 StructTraits<ui::mojom::CursorDataDataView, ui::CursorData>::hotspot_in_pixels( | 281 StructTraits<ui::mojom::CursorDataDataView, ui::CursorData>::hotspot_in_pixels( |
27 const ui::CursorData& c) { | 282 const ui::CursorData& c) { |
28 return c.hotspot_in_pixels(); | 283 return c.hotspot_in_pixels(); |
29 } | 284 } |
30 | 285 |
31 // static | 286 // static |
32 const std::vector<SkBitmap>& | 287 const std::vector<SkBitmap>& |
33 StructTraits<ui::mojom::CursorDataDataView, ui::CursorData>::cursor_frames( | 288 StructTraits<ui::mojom::CursorDataDataView, ui::CursorData>::cursor_frames( |
34 const ui::CursorData& c) { | 289 const ui::CursorData& c) { |
35 return c.cursor_frames(); | 290 return c.cursor_frames(); |
36 } | 291 } |
37 | 292 |
38 // static | 293 // static |
39 bool StructTraits<ui::mojom::CursorDataDataView, ui::CursorData>::Read( | 294 bool StructTraits<ui::mojom::CursorDataDataView, ui::CursorData>::Read( |
40 ui::mojom::CursorDataDataView data, | 295 ui::mojom::CursorDataDataView data, |
41 ui::CursorData* out) { | 296 ui::CursorData* out) { |
42 ui::mojom::CursorType type = data.cursor_type(); | 297 ui::CursorType type; |
43 if (type != ui::mojom::CursorType::CUSTOM) { | 298 if (!data.ReadCursorType(&type)) |
44 *out = ui::CursorData(static_cast<int>(type)); | 299 return false; |
| 300 |
| 301 if (type != ui::CursorType::kCustom) { |
| 302 *out = ui::CursorData(type); |
45 return true; | 303 return true; |
46 } | 304 } |
47 | 305 |
48 gfx::Point hotspot_in_pixels; | 306 gfx::Point hotspot_in_pixels; |
49 std::vector<SkBitmap> cursor_frames; | 307 std::vector<SkBitmap> cursor_frames; |
50 float scale_factor = data.scale_factor(); | 308 float scale_factor = data.scale_factor(); |
51 base::TimeDelta frame_delay; | 309 base::TimeDelta frame_delay; |
52 | 310 |
53 if (!data.ReadHotspotInPixels(&hotspot_in_pixels) || | 311 if (!data.ReadHotspotInPixels(&hotspot_in_pixels) || |
54 !data.ReadCursorFrames(&cursor_frames) || | 312 !data.ReadCursorFrames(&cursor_frames) || |
55 !data.ReadFrameDelay(&frame_delay)) { | 313 !data.ReadFrameDelay(&frame_delay)) { |
56 return false; | 314 return false; |
57 } | 315 } |
58 | 316 |
59 *out = ui::CursorData(hotspot_in_pixels, cursor_frames, scale_factor, | 317 *out = ui::CursorData(hotspot_in_pixels, cursor_frames, scale_factor, |
60 frame_delay); | 318 frame_delay); |
61 return true; | 319 return true; |
62 } | 320 } |
63 | 321 |
64 } // namespace mojo | 322 } // namespace mojo |
OLD | NEW |