diff options
author | mazda@chromium.org <mazda@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-09-11 20:18:35 +0000 |
---|---|---|
committer | mazda@chromium.org <mazda@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-09-11 20:18:35 +0000 |
commit | 151ffdff429adc13dea9afbe18602745981a9dcc (patch) | |
tree | 65ea7ff184d3e543d2a6213e29a96119eed4081b /ash/wm/image_cursors.cc | |
parent | 843fe4276bb2a001d6bdbb74dda7ef44a707cec7 (diff) | |
download | chromium_src-151ffdff429adc13dea9afbe18602745981a9dcc.zip chromium_src-151ffdff429adc13dea9afbe18602745981a9dcc.tar.gz chromium_src-151ffdff429adc13dea9afbe18602745981a9dcc.tar.bz2 |
Move ash specific cursor code to CursorManager.
Main changes are as follows.
- Move the responsibility of managing cursors to ash::CursorManager from aura::RootWindowHostLinux.
- Set the same cursor to all root windows with CursorManager so that cursor is updated properly while dragging across displays
- Introduce CursorLoader class, which implements platform specific cursor loading.
- Add SetDeviceScaleFactor to CursorClient, which sets the device scale factor used for the cursor.
BUG=132862,144756
Review URL: https://chromiumcodereview.appspot.com/10919135
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@156109 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ash/wm/image_cursors.cc')
-rw-r--r-- | ash/wm/image_cursors.cc | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/ash/wm/image_cursors.cc b/ash/wm/image_cursors.cc new file mode 100644 index 0000000..b0ec3f5 --- /dev/null +++ b/ash/wm/image_cursors.cc @@ -0,0 +1,123 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "ash/wm/image_cursors.h" + +#include "base/logging.h" +#include "ui/base/cursor/cursor_loader.h" +#include "ui/base/cursor/cursor.h" +#include "ui/gfx/point.h" +#include "grit/ui_resources.h" + +namespace { + +const int kAnimatedCursorFrameDelayMs = 25; + +struct HotPoint { + int x; + int y; +}; + +struct CursorData { + int id; + int resource_id; + HotPoint hot_1x; + HotPoint hot_2x; +}; + +// TODO(oshima): Remove this comment (http://crbug.com/141586). +// The cursor's hot points are defined in chromeos cursor images at: +// http://folder/kuscher/projects/Chrome_OS/Pointers/focuspoint +const CursorData kImageCursors[] = { + {ui::kCursorNull, IDR_AURA_CURSOR_PTR, {4, 4}, {8, 9}}, + {ui::kCursorPointer, IDR_AURA_CURSOR_PTR, {4, 4}, {8, 9}}, + {ui::kCursorNoDrop, IDR_AURA_CURSOR_NO_DROP, {4, 4}, {8, 9}}, + {ui::kCursorNotAllowed, IDR_AURA_CURSOR_NO_DROP, {4, 4}, {8, 9}}, + {ui::kCursorCopy, IDR_AURA_CURSOR_COPY, {4, 4}, {8, 9}}, + {ui::kCursorHand, IDR_AURA_CURSOR_HAND, {9, 4}, {19, 8}}, + {ui::kCursorMove, IDR_AURA_CURSOR_MOVE, {11, 11}, {23, 23}}, + {ui::kCursorNorthEastResize, IDR_AURA_CURSOR_NORTH_EAST_RESIZE, + {12, 11}, {25, 23}}, + {ui::kCursorSouthWestResize, IDR_AURA_CURSOR_SOUTH_WEST_RESIZE, + {12, 11}, {25, 23}}, + {ui::kCursorSouthEastResize, IDR_AURA_CURSOR_SOUTH_EAST_RESIZE, + {11, 11}, {24, 23}}, + {ui::kCursorNorthWestResize, IDR_AURA_CURSOR_NORTH_WEST_RESIZE, + {11, 11}, {24, 23}}, + {ui::kCursorNorthResize, IDR_AURA_CURSOR_NORTH_RESIZE, {11, 12}, {23, 23}}, + {ui::kCursorSouthResize, IDR_AURA_CURSOR_SOUTH_RESIZE, {11, 12}, {23, 23}}, + {ui::kCursorEastResize, IDR_AURA_CURSOR_EAST_RESIZE, {12, 11}, {25, 23}}, + {ui::kCursorWestResize, IDR_AURA_CURSOR_WEST_RESIZE, {12, 11}, {25, 23}}, + {ui::kCursorIBeam, IDR_AURA_CURSOR_IBEAM, {12, 12}, {24, 25}}, + {ui::kCursorAlias, IDR_AURA_CURSOR_ALIAS, {8, 6}, {15, 11}}, + {ui::kCursorCell, IDR_AURA_CURSOR_CELL, {11, 11}, {24, 23}}, + {ui::kCursorContextMenu, IDR_AURA_CURSOR_CONTEXT_MENU, {4, 4}, {8, 9}}, + {ui::kCursorCross, IDR_AURA_CURSOR_CROSSHAIR, {12, 12}, {25, 23}}, + {ui::kCursorHelp, IDR_AURA_CURSOR_HELP, {4, 4}, {8, 9}}, + {ui::kCursorVerticalText, IDR_AURA_CURSOR_XTERM_HORIZ, {12, 11}, {26, 23}}, + {ui::kCursorZoomIn, IDR_AURA_CURSOR_ZOOM_IN, {10, 10}, {20, 20}}, + {ui::kCursorZoomOut, IDR_AURA_CURSOR_ZOOM_OUT, {10, 10}, {20, 20}}, + {ui::kCursorRowResize, IDR_AURA_CURSOR_ROW_RESIZE, {11, 12}, {23, 23}}, + {ui::kCursorColumnResize, IDR_AURA_CURSOR_COL_RESIZE, {12, 11}, {25, 23}}, + {ui::kCursorEastWestResize, IDR_AURA_CURSOR_EAST_WEST_RESIZE, + {12, 11}, {25, 23}}, + {ui::kCursorNorthSouthResize, IDR_AURA_CURSOR_NORTH_SOUTH_RESIZE, + {11, 12}, {23, 23}}, + {ui::kCursorNorthEastSouthWestResize, + IDR_AURA_CURSOR_NORTH_EAST_SOUTH_WEST_RESIZE, {12, 11}, {25, 23}}, + {ui::kCursorNorthWestSouthEastResize, + IDR_AURA_CURSOR_NORTH_WEST_SOUTH_EAST_RESIZE, {11, 11}, {24, 23}}, + {ui::kCursorGrab, IDR_AURA_CURSOR_GRAB, {8, 5}, {16, 10}}, + {ui::kCursorGrabbing, IDR_AURA_CURSOR_GRABBING, {9, 9}, {18, 18}}, +}; + +const CursorData kAnimatedCursors[] = { + {ui::kCursorWait, IDR_THROBBER, {7, 7}, {14, 14}}, + {ui::kCursorProgress, IDR_THROBBER, {7, 7}, {14, 14}}, +}; + +} // namespace + +namespace ash { + +ImageCursors::ImageCursors() + : cursor_loader_(ui::CursorLoader::Create()) { +} + +ImageCursors::~ImageCursors() { +} + +float ImageCursors::GetDeviceScaleFactor() const { + return cursor_loader_->device_scale_factor(); +} + +void ImageCursors::SetDeviceScaleFactor(float device_scale_factor) { + if (GetDeviceScaleFactor() == device_scale_factor) + return; + + cursor_loader_->UnloadAll(); + cursor_loader_->set_device_scale_factor(device_scale_factor); + + for (size_t i = 0; i < arraysize(kImageCursors); ++i) { + const HotPoint& hot = device_scale_factor == 1.0f ? + kImageCursors[i].hot_1x : kImageCursors[i].hot_2x; + cursor_loader_->LoadImageCursor(kImageCursors[i].id, + kImageCursors[i].resource_id, + gfx::Point(hot.x, hot.y)); + } + for (size_t i = 0; i < arraysize(kAnimatedCursors); ++i) { + const HotPoint& hot = device_scale_factor == 1.0f ? + kAnimatedCursors[i].hot_1x : kAnimatedCursors[i].hot_2x; + cursor_loader_->LoadAnimatedCursor(kAnimatedCursors[i].id, + kAnimatedCursors[i].resource_id, + gfx::Point(hot.x, hot.y), + kAnimatedCursorFrameDelayMs); + } +} + +void ImageCursors::SetPlatformCursor(gfx::NativeCursor* cursor) { + cursor_loader_->SetPlatformCursor(cursor); +} + +} // namespace ash |