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 3// found in the LICENSE file. 4 5#include "ui/base/cursor/cursors_aura.h" 6 7#include "grit/ui_resources.h" 8#include "ui/base/cursor/cursor.h" 9#include "ui/base/resource/resource_bundle.h" 10#include "ui/gfx/point.h" 11 12namespace ui { 13namespace { 14 15struct HotPoint { 16 int x; 17 int y; 18}; 19 20struct CursorData { 21 int id; 22 int resource_id; 23 HotPoint hot_1x; 24 HotPoint hot_2x; 25}; 26 27const CursorData kImageCursors[] = { 28 {ui::kCursorNull, IDR_AURA_CURSOR_PTR, {4, 4}, {8, 9}}, 29 {ui::kCursorPointer, IDR_AURA_CURSOR_PTR, {4, 4}, {8, 9}}, 30 {ui::kCursorNoDrop, IDR_AURA_CURSOR_NO_DROP, {9, 9}, {18, 18}}, 31 {ui::kCursorNotAllowed, IDR_AURA_CURSOR_NO_DROP, {9, 9}, {18, 18}}, 32 {ui::kCursorCopy, IDR_AURA_CURSOR_COPY, {9, 9}, {18, 18}}, 33 {ui::kCursorHand, IDR_AURA_CURSOR_HAND, {9, 4}, {19, 8}}, 34 {ui::kCursorMove, IDR_AURA_CURSOR_MOVE, {11, 11}, {23, 23}}, 35 {ui::kCursorNorthEastResize, IDR_AURA_CURSOR_NORTH_EAST_RESIZE, 36 {12, 11}, {25, 23}}, 37 {ui::kCursorSouthWestResize, IDR_AURA_CURSOR_SOUTH_WEST_RESIZE, 38 {12, 11}, {25, 23}}, 39 {ui::kCursorSouthEastResize, IDR_AURA_CURSOR_SOUTH_EAST_RESIZE, 40 {11, 11}, {24, 23}}, 41 {ui::kCursorNorthWestResize, IDR_AURA_CURSOR_NORTH_WEST_RESIZE, 42 {11, 11}, {24, 23}}, 43 {ui::kCursorNorthResize, IDR_AURA_CURSOR_NORTH_RESIZE, {11, 12}, {23, 23}}, 44 {ui::kCursorSouthResize, IDR_AURA_CURSOR_SOUTH_RESIZE, {11, 12}, {23, 23}}, 45 {ui::kCursorEastResize, IDR_AURA_CURSOR_EAST_RESIZE, {12, 11}, {25, 23}}, 46 {ui::kCursorWestResize, IDR_AURA_CURSOR_WEST_RESIZE, {12, 11}, {25, 23}}, 47 {ui::kCursorIBeam, IDR_AURA_CURSOR_IBEAM, {12, 12}, {24, 25}}, 48 {ui::kCursorAlias, IDR_AURA_CURSOR_ALIAS, {8, 6}, {15, 11}}, 49 {ui::kCursorCell, IDR_AURA_CURSOR_CELL, {11, 11}, {24, 23}}, 50 {ui::kCursorContextMenu, IDR_AURA_CURSOR_CONTEXT_MENU, {4, 4}, {8, 9}}, 51 {ui::kCursorCross, IDR_AURA_CURSOR_CROSSHAIR, {12, 12}, {25, 23}}, 52 {ui::kCursorHelp, IDR_AURA_CURSOR_HELP, {4, 4}, {8, 9}}, 53 {ui::kCursorVerticalText, IDR_AURA_CURSOR_XTERM_HORIZ, {12, 11}, {26, 23}}, 54 {ui::kCursorZoomIn, IDR_AURA_CURSOR_ZOOM_IN, {10, 10}, {20, 20}}, 55 {ui::kCursorZoomOut, IDR_AURA_CURSOR_ZOOM_OUT, {10, 10}, {20, 20}}, 56 {ui::kCursorRowResize, IDR_AURA_CURSOR_ROW_RESIZE, {11, 12}, {23, 23}}, 57 {ui::kCursorColumnResize, IDR_AURA_CURSOR_COL_RESIZE, {12, 11}, {25, 23}}, 58 {ui::kCursorEastWestResize, IDR_AURA_CURSOR_EAST_WEST_RESIZE, 59 {12, 11}, {25, 23}}, 60 {ui::kCursorNorthSouthResize, IDR_AURA_CURSOR_NORTH_SOUTH_RESIZE, 61 {11, 12}, {23, 23}}, 62 {ui::kCursorNorthEastSouthWestResize, 63 IDR_AURA_CURSOR_NORTH_EAST_SOUTH_WEST_RESIZE, {12, 11}, {25, 23}}, 64 {ui::kCursorNorthWestSouthEastResize, 65 IDR_AURA_CURSOR_NORTH_WEST_SOUTH_EAST_RESIZE, {11, 11}, {24, 23}}, 66 {ui::kCursorGrab, IDR_AURA_CURSOR_GRAB, {8, 5}, {16, 10}}, 67 {ui::kCursorGrabbing, IDR_AURA_CURSOR_GRABBING, {9, 9}, {18, 18}}, 68}; 69 70const CursorData kAnimatedCursors[] = { 71 {ui::kCursorWait, IDR_THROBBER, {7, 7}, {14, 14}}, 72 {ui::kCursorProgress, IDR_THROBBER, {7, 7}, {14, 14}}, 73}; 74 75bool SearchTable(const CursorData* table, 76 size_t table_length, 77 int id, 78 float scale_factor, 79 int* resource_id, 80 gfx::Point* point) { 81 bool resource_2x_available = 82 ResourceBundle::GetSharedInstance().max_scale_factor() == 83 SCALE_FACTOR_200P; 84 for (size_t i = 0; i < table_length; ++i) { 85 if (table[i].id == id) { 86 *resource_id = table[i].resource_id; 87 *point = scale_factor == 1.0f || !resource_2x_available ? 88 gfx::Point(table[i].hot_1x.x, table[i].hot_1x.y) : 89 gfx::Point(table[i].hot_2x.x, table[i].hot_2x.y); 90 return true; 91 } 92 } 93 94 return false; 95} 96 97} // namespace 98 99bool GetCursorDataFor(int id, 100 float scale_factor, 101 int* resource_id, 102 gfx::Point* point) { 103 return SearchTable(kImageCursors, arraysize(kImageCursors), 104 id, scale_factor, resource_id, point); 105} 106 107bool GetAnimatedCursorDataFor(int id, 108 float scale_factor, 109 int* resource_id, 110 gfx::Point* point) { 111 return SearchTable(kAnimatedCursors, arraysize(kAnimatedCursors), 112 id, scale_factor, resource_id, point); 113} 114 115} // namespace ui 116