Home | History | Annotate | Download | only in cursors
      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 
     14 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 
     28 void 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 
     42 void WebCursor::InitPlatformData() {
     43   platform_cursor_ = NULL;
     44   device_scale_factor_ = 1.f;
     45   rotation_ = gfx::Display::ROTATE_0;
     46 }
     47 
     48 bool WebCursor::SerializePlatformData(Pickle* pickle) const {
     49   return true;
     50 }
     51 
     52 bool WebCursor::DeserializePlatformData(PickleIterator* iter) {
     53   return true;
     54 }
     55 
     56 bool WebCursor::IsPlatformDataEqual(const WebCursor& other) const {
     57   return true;
     58 }
     59 
     60 void WebCursor::CleanupPlatformData() {
     61   if (platform_cursor_) {
     62     ui::CursorFactoryOzone::GetInstance()->UnrefImageCursor(platform_cursor_);
     63     platform_cursor_ = NULL;
     64   }
     65 }
     66 
     67 void 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