Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(85)

Unified Diff: webkit/common/cursors/webcursor.cc

Issue 201473002: Move webcursors code from webkit/ to content. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: gfx image include Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webkit/common/cursors/webcursor.h ('k') | webkit/common/cursors/webcursor_android.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webkit/common/cursors/webcursor.cc
diff --git a/webkit/common/cursors/webcursor.cc b/webkit/common/cursors/webcursor.cc
deleted file mode 100644
index b3036a7bad4ffc982e9985eded2caec347ac313d..0000000000000000000000000000000000000000
--- a/webkit/common/cursors/webcursor.cc
+++ /dev/null
@@ -1,261 +0,0 @@
-// 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 "webkit/common/cursors/webcursor.h"
-
-#include "base/logging.h"
-#include "base/pickle.h"
-#include "third_party/WebKit/public/platform/WebImage.h"
-
-using blink::WebCursorInfo;
-
-static const int kMaxCursorDimension = 1024;
-
-WebCursor::WebCursor()
- : type_(WebCursorInfo::TypePointer),
- custom_scale_(1) {
-#if defined(OS_WIN)
- external_cursor_ = NULL;
-#endif
- InitPlatformData();
-}
-
-WebCursor::WebCursor(const CursorInfo& cursor_info)
- : type_(WebCursorInfo::TypePointer) {
-#if defined(OS_WIN)
- external_cursor_ = NULL;
-#endif
- InitPlatformData();
- InitFromCursorInfo(cursor_info);
-}
-
-WebCursor::~WebCursor() {
- Clear();
-}
-
-WebCursor::WebCursor(const WebCursor& other) {
- InitPlatformData();
- Copy(other);
-}
-
-const WebCursor& WebCursor::operator=(const WebCursor& other) {
- if (this == &other)
- return *this;
-
- Clear();
- Copy(other);
- return *this;
-}
-
-void WebCursor::InitFromCursorInfo(const CursorInfo& cursor_info) {
- Clear();
-
-#if defined(OS_WIN)
- if (cursor_info.external_handle) {
- InitFromExternalCursor(cursor_info.external_handle);
- return;
- }
-#endif
-
- type_ = cursor_info.type;
- hotspot_ = cursor_info.hotspot;
- if (IsCustom())
- SetCustomData(cursor_info.custom_image);
- custom_scale_ = cursor_info.image_scale_factor;
- CHECK(custom_scale_ > 0);
- ClampHotspot();
-}
-
-void WebCursor::GetCursorInfo(CursorInfo* cursor_info) const {
- cursor_info->type = static_cast<WebCursorInfo::Type>(type_);
- cursor_info->hotspot = hotspot_;
- ImageFromCustomData(&cursor_info->custom_image);
- cursor_info->image_scale_factor = custom_scale_;
-
-#if defined(OS_WIN)
- cursor_info->external_handle = external_cursor_;
-#endif
-}
-
-bool WebCursor::Deserialize(PickleIterator* iter) {
- int type, hotspot_x, hotspot_y, size_x, size_y, data_len;
- float scale;
- const char* data;
-
- // Leave |this| unmodified unless we are going to return success.
- if (!iter->ReadInt(&type) ||
- !iter->ReadInt(&hotspot_x) ||
- !iter->ReadInt(&hotspot_y) ||
- !iter->ReadLength(&size_x) ||
- !iter->ReadLength(&size_y) ||
- !iter->ReadFloat(&scale) ||
- !iter->ReadData(&data, &data_len))
- return false;
-
- // Ensure the size is sane, and there is enough data.
- if (size_x > kMaxCursorDimension ||
- size_y > kMaxCursorDimension)
- return false;
-
- // Ensure scale isn't ridiculous, and the scaled image size is still sane.
- if (scale < 0.01 || scale > 100 ||
- size_x / scale > kMaxCursorDimension ||
- size_y / scale > kMaxCursorDimension)
- return false;
-
- type_ = type;
-
- if (type == WebCursorInfo::TypeCustom) {
- if (size_x > 0 && size_y > 0) {
- // The * 4 is because the expected format is an array of RGBA pixel
- // values.
- if (size_x * size_y * 4 > data_len)
- return false;
-
- hotspot_.set_x(hotspot_x);
- hotspot_.set_y(hotspot_y);
- custom_size_.set_width(size_x);
- custom_size_.set_height(size_y);
- custom_scale_ = scale;
- ClampHotspot();
-
- custom_data_.clear();
- if (data_len > 0) {
- custom_data_.resize(data_len);
- memcpy(&custom_data_[0], data, data_len);
- }
- }
- }
- return DeserializePlatformData(iter);
-}
-
-bool WebCursor::Serialize(Pickle* pickle) const {
- if (!pickle->WriteInt(type_) ||
- !pickle->WriteInt(hotspot_.x()) ||
- !pickle->WriteInt(hotspot_.y()) ||
- !pickle->WriteInt(custom_size_.width()) ||
- !pickle->WriteInt(custom_size_.height()) ||
- !pickle->WriteFloat(custom_scale_))
- return false;
-
- const char* data = NULL;
- if (!custom_data_.empty())
- data = &custom_data_[0];
- if (!pickle->WriteData(data, custom_data_.size()))
- return false;
-
- return SerializePlatformData(pickle);
-}
-
-bool WebCursor::IsCustom() const {
- return type_ == WebCursorInfo::TypeCustom;
-}
-
-bool WebCursor::IsEqual(const WebCursor& other) const {
- if (type_ != other.type_)
- return false;
-
- if (!IsPlatformDataEqual(other))
- return false;
-
- return hotspot_ == other.hotspot_ &&
- custom_size_ == other.custom_size_ &&
- custom_scale_ == other.custom_scale_ &&
- custom_data_ == other.custom_data_;
-}
-
-#if defined(OS_WIN)
-
-static WebCursorInfo::Type ToCursorType(HCURSOR cursor) {
- static struct {
- HCURSOR cursor;
- WebCursorInfo::Type type;
- } kStandardCursors[] = {
- { LoadCursor(NULL, IDC_ARROW), WebCursorInfo::TypePointer },
- { LoadCursor(NULL, IDC_CROSS), WebCursorInfo::TypeCross },
- { LoadCursor(NULL, IDC_HAND), WebCursorInfo::TypeHand },
- { LoadCursor(NULL, IDC_IBEAM), WebCursorInfo::TypeIBeam },
- { LoadCursor(NULL, IDC_WAIT), WebCursorInfo::TypeWait },
- { LoadCursor(NULL, IDC_HELP), WebCursorInfo::TypeHelp },
- { LoadCursor(NULL, IDC_SIZENESW), WebCursorInfo::TypeNorthEastResize },
- { LoadCursor(NULL, IDC_SIZENWSE), WebCursorInfo::TypeNorthWestResize },
- { LoadCursor(NULL, IDC_SIZENS), WebCursorInfo::TypeNorthSouthResize },
- { LoadCursor(NULL, IDC_SIZEWE), WebCursorInfo::TypeEastWestResize },
- { LoadCursor(NULL, IDC_SIZEALL), WebCursorInfo::TypeMove },
- { LoadCursor(NULL, IDC_APPSTARTING), WebCursorInfo::TypeProgress },
- { LoadCursor(NULL, IDC_NO), WebCursorInfo::TypeNotAllowed },
- };
- for (int i = 0; i < arraysize(kStandardCursors); ++i) {
- if (cursor == kStandardCursors[i].cursor)
- return kStandardCursors[i].type;
- }
- return WebCursorInfo::TypeCustom;
-}
-
-void WebCursor::InitFromExternalCursor(HCURSOR cursor) {
- WebCursorInfo::Type cursor_type = ToCursorType(cursor);
-
- InitFromCursorInfo(CursorInfo(cursor_type));
-
- if (cursor_type == WebCursorInfo::TypeCustom)
- external_cursor_ = cursor;
-}
-
-#endif // defined(OS_WIN)
-
-void WebCursor::Clear() {
- type_ = WebCursorInfo::TypePointer;
- hotspot_.set_x(0);
- hotspot_.set_y(0);
- custom_size_.set_width(0);
- custom_size_.set_height(0);
- custom_scale_ = 1;
- custom_data_.clear();
- CleanupPlatformData();
-}
-
-void WebCursor::Copy(const WebCursor& other) {
- type_ = other.type_;
- hotspot_ = other.hotspot_;
- custom_size_ = other.custom_size_;
- custom_scale_ = other.custom_scale_;
- custom_data_ = other.custom_data_;
- CopyPlatformData(other);
-}
-
-void WebCursor::SetCustomData(const SkBitmap& bitmap) {
- if (bitmap.empty())
- return;
-
- // Fill custom_data_ directly with the NativeImage pixels.
- SkAutoLockPixels bitmap_lock(bitmap);
- custom_data_.resize(bitmap.getSize());
- if (!custom_data_.empty())
- memcpy(&custom_data_[0], bitmap.getPixels(), bitmap.getSize());
- custom_size_.set_width(bitmap.width());
- custom_size_.set_height(bitmap.height());
-}
-
-void WebCursor::ImageFromCustomData(SkBitmap* image) const {
- if (custom_data_.empty())
- return;
-
- image->setConfig(SkBitmap::kARGB_8888_Config,
- custom_size_.width(),
- custom_size_.height());
- if (!image->allocPixels())
- return;
- memcpy(image->getPixels(), &custom_data_[0], custom_data_.size());
-}
-
-void WebCursor::ClampHotspot() {
- if (!IsCustom())
- return;
-
- // Clamp the hotspot to the custom image's dimensions.
- hotspot_.set_x(std::max(0,
- std::min(custom_size_.width() - 1, hotspot_.x())));
- hotspot_.set_y(std::max(0,
- std::min(custom_size_.height() - 1, hotspot_.y())));
-}
« no previous file with comments | « webkit/common/cursors/webcursor.h ('k') | webkit/common/cursors/webcursor_android.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698