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