1 // Copyright 2014 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 "content/common/cursors/webcursor.h" 6 7 #include "third_party/WebKit/public/platform/WebCursorInfo.h" 8 #include "ui/base/cursor/cursor.h" 9 #include "ui/base/cursor/cursor_util.h" 10 #include "ui/ozone/public/cursor_factory_ozone.h" 11 12 namespace content { 13 GetPlatformCursor()14const ui::PlatformCursor WebCursor::GetPlatformCursor() { 15 if (platform_cursor_) 16 return platform_cursor_; 17 18 SkBitmap bitmap; 19 ImageFromCustomData(&bitmap); 20 gfx::Point hotspot = hotspot_; 21 ui::ScaleAndRotateCursorBitmapAndHotpoint( 22 device_scale_factor_, rotation_, &bitmap, &hotspot); 23 24 return ui::CursorFactoryOzone::GetInstance()->CreateImageCursor(bitmap, 25 hotspot); 26 } 27 SetDisplayInfo(const gfx::Display & display)28void WebCursor::SetDisplayInfo(const gfx::Display& display) { 29 if (rotation_ == display.rotation() && 30 device_scale_factor_ == display.device_scale_factor()) 31 return; 32 33 device_scale_factor_ = display.device_scale_factor(); 34 rotation_ = display.rotation(); 35 if (platform_cursor_) 36 ui::CursorFactoryOzone::GetInstance()->UnrefImageCursor(platform_cursor_); 37 platform_cursor_ = NULL; 38 // It is not necessary to recreate platform_cursor_ yet, since it will be 39 // recreated on demand when GetPlatformCursor is called. 40 } 41 InitPlatformData()42void WebCursor::InitPlatformData() { 43 platform_cursor_ = NULL; 44 device_scale_factor_ = 1.f; 45 rotation_ = gfx::Display::ROTATE_0; 46 } 47 SerializePlatformData(Pickle * pickle) const48bool WebCursor::SerializePlatformData(Pickle* pickle) const { 49 return true; 50 } 51 DeserializePlatformData(PickleIterator * iter)52bool WebCursor::DeserializePlatformData(PickleIterator* iter) { 53 return true; 54 } 55 IsPlatformDataEqual(const WebCursor & other) const56bool WebCursor::IsPlatformDataEqual(const WebCursor& other) const { 57 return true; 58 } 59 CleanupPlatformData()60void WebCursor::CleanupPlatformData() { 61 if (platform_cursor_) { 62 ui::CursorFactoryOzone::GetInstance()->UnrefImageCursor(platform_cursor_); 63 platform_cursor_ = NULL; 64 } 65 } 66 CopyPlatformData(const WebCursor & other)67void WebCursor::CopyPlatformData(const WebCursor& other) { 68 if (platform_cursor_) 69 ui::CursorFactoryOzone::GetInstance()->UnrefImageCursor(platform_cursor_); 70 platform_cursor_ = other.platform_cursor_; 71 if (platform_cursor_) 72 ui::CursorFactoryOzone::GetInstance()->RefImageCursor(platform_cursor_); 73 74 device_scale_factor_ = other.device_scale_factor_; 75 } 76 77 } // namespace content 78