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

Side by Side Diff: webkit/glue/webcursor.cc

Issue 15088: Add support for custom cursors set by windowless plugins. Windowless plugins... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 11 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « webkit/glue/webcursor.h ('k') | webkit/glue/webcursor_gtk.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "webkit/glue/webcursor.h" 5 #include "webkit/glue/webcursor.h"
6 6
7 #include "config.h" 7 #include "config.h"
8 #include "NativeImageSkia.h" 8 #include "NativeImageSkia.h"
9 #include "PlatformCursor.h" 9 #include "PlatformCursor.h"
10 10
11 #undef LOG 11 #undef LOG
12 #include "base/logging.h" 12 #include "base/logging.h"
13 #include "base/pickle.h" 13 #include "base/pickle.h"
14 14
15 WebCursor::WebCursor() 15 WebCursor::WebCursor()
16 : type_(WebCore::PlatformCursor::typePointer) { 16 : type_(WebCore::PlatformCursor::typePointer) {
17 InitPlatformData();
17 } 18 }
18 19
19 WebCursor::WebCursor(const WebCore::PlatformCursor& platform_cursor) 20 WebCursor::WebCursor(const WebCore::PlatformCursor& platform_cursor)
20 : type_(platform_cursor.type()), 21 : type_(platform_cursor.type()),
21 hotspot_(platform_cursor.hotSpot().x(), platform_cursor.hotSpot().y()) { 22 hotspot_(platform_cursor.hotSpot().x(), platform_cursor.hotSpot().y()) {
22 if (IsCustom()) 23 if (IsCustom())
23 SetCustomData(platform_cursor.customImage().get()); 24 SetCustomData(platform_cursor.customImage().get());
25
26 InitPlatformData();
27 }
28
29 WebCursor::~WebCursor() {
30 Clear();
31 }
32
33 WebCursor::WebCursor(const WebCursor& other) {
34 InitPlatformData();
35 Copy(other);
36 }
37
38 const WebCursor& WebCursor::operator=(const WebCursor& other) {
39 if (this == &other)
40 return *this;
41
42 Clear();
43 Copy(other);
44 return *this;
24 } 45 }
25 46
26 bool WebCursor::Deserialize(const Pickle* pickle, void** iter) { 47 bool WebCursor::Deserialize(const Pickle* pickle, void** iter) {
27 int type, hotspot_x, hotspot_y, size_x, size_y, data_len; 48 int type, hotspot_x, hotspot_y, size_x, size_y, data_len;
49
28 const char* data; 50 const char* data;
29 51
30 // Leave |this| unmodified unless we are going to return success. 52 // Leave |this| unmodified unless we are going to return success.
31 if (!pickle->ReadInt(iter, &type) || 53 if (!pickle->ReadInt(iter, &type) ||
32 !pickle->ReadInt(iter, &hotspot_x) || 54 !pickle->ReadInt(iter, &hotspot_x) ||
33 !pickle->ReadInt(iter, &hotspot_y) || 55 !pickle->ReadInt(iter, &hotspot_y) ||
34 !pickle->ReadInt(iter, &size_x) || 56 !pickle->ReadInt(iter, &size_x) ||
35 !pickle->ReadInt(iter, &size_y) || 57 !pickle->ReadInt(iter, &size_y) ||
36 !pickle->ReadData(iter, &data, &data_len)) 58 !pickle->ReadData(iter, &data, &data_len))
37 return false; 59 return false;
38 60
39 type_ = type; 61 type_ = type;
40 hotspot_.set_x(hotspot_x); 62 hotspot_.set_x(hotspot_x);
41 hotspot_.set_y(hotspot_y); 63 hotspot_.set_y(hotspot_y);
42 custom_size_.set_width(size_x); 64 custom_size_.set_width(size_x);
43 custom_size_.set_height(size_y); 65 custom_size_.set_height(size_y);
44 66
45 custom_data_.clear(); 67 custom_data_.clear();
46 if (data_len > 0) { 68 if (data_len > 0) {
47 custom_data_.resize(data_len); 69 custom_data_.resize(data_len);
48 memcpy(&custom_data_[0], data, data_len); 70 memcpy(&custom_data_[0], data, data_len);
49 } 71 }
50 72
51 return true; 73 return DeserializePlatformData(pickle, iter);
52 } 74 }
53 75
54 bool WebCursor::Serialize(Pickle* pickle) const { 76 bool WebCursor::Serialize(Pickle* pickle) const {
55 if (!pickle->WriteInt(type_) || 77 if (!pickle->WriteInt(type_) ||
56 !pickle->WriteInt(hotspot_.x()) || 78 !pickle->WriteInt(hotspot_.x()) ||
57 !pickle->WriteInt(hotspot_.y()) || 79 !pickle->WriteInt(hotspot_.y()) ||
58 !pickle->WriteInt(custom_size_.width()) || 80 !pickle->WriteInt(custom_size_.width()) ||
59 !pickle->WriteInt(custom_size_.height())) 81 !pickle->WriteInt(custom_size_.height()))
60 return false; 82 return false;
61 83
62 const char* data = NULL; 84 const char* data = NULL;
63 if (!custom_data_.empty()) 85 if (!custom_data_.empty())
64 data = &custom_data_[0]; 86 data = &custom_data_[0];
65 return pickle->WriteData(data, custom_data_.size()); 87 if (!pickle->WriteData(data, custom_data_.size()))
88 return false;
89
90 return SerializePlatformData(pickle);
66 } 91 }
67 92
68 bool WebCursor::IsCustom() const { 93 bool WebCursor::IsCustom() const {
69 return type_ == WebCore::PlatformCursor::typeCustom; 94 return type_ == WebCore::PlatformCursor::typeCustom;
70 } 95 }
71 96
72 bool WebCursor::IsEqual(const WebCursor& other) const { 97 bool WebCursor::IsEqual(const WebCursor& other) const {
73 if (!IsCustom()) 98 if (type_ != other.type_)
74 return type_ == other.type_; 99 return false;
100
101 if (!IsPlatformDataEqual(other))
102 return false;
75 103
76 return hotspot_ == other.hotspot_ && 104 return hotspot_ == other.hotspot_ &&
77 custom_size_ == other.custom_size_ && 105 custom_size_ == other.custom_size_ &&
78 custom_data_ == other.custom_data_; 106 custom_data_ == other.custom_data_;
79 } 107 }
80 108
109 void WebCursor::Clear() {
110 type_ = WebCore::PlatformCursor::typePointer;
111 hotspot_.set_x(0);
112 hotspot_.set_y(0);
113 custom_size_.set_width(0);
114 custom_size_.set_height(0);
115 custom_data_.clear();
116 CleanupPlatformData();
117 }
118
119 void WebCursor::Copy(const WebCursor& other) {
120 type_ = other.type_;
121 hotspot_ = other.hotspot_;
122 custom_size_ = other.custom_size_;
123 custom_data_ = other.custom_data_;
124 CopyPlatformData(other);
125 }
126
81 #if !defined(OS_MACOSX) 127 #if !defined(OS_MACOSX)
82 // The Mac version of Chromium is built with PLATFORM(CG) while all other 128 // The Mac version of Chromium is built with PLATFORM(CG) while all other
83 // versions are PLATFORM(SKIA). We'll keep this Skia implementation here for 129 // versions are PLATFORM(SKIA). We'll keep this Skia implementation here for
84 // common use and put the Mac implementation in webcursor_mac.mm. 130 // common use and put the Mac implementation in webcursor_mac.mm.
85 void WebCursor::SetCustomData(WebCore::Image* image) { 131 void WebCursor::SetCustomData(WebCore::Image* image) {
132 if (!image)
133 return;
134
86 WebCore::NativeImagePtr image_ptr = image->nativeImageForCurrentFrame(); 135 WebCore::NativeImagePtr image_ptr = image->nativeImageForCurrentFrame();
87 if (!image_ptr) 136 if (!image_ptr)
88 return; 137 return;
89 138
90 // Fill custom_data_ directly with the NativeImage pixels. 139 // Fill custom_data_ directly with the NativeImage pixels.
91 SkAutoLockPixels bitmap_lock(*image_ptr); 140 SkAutoLockPixels bitmap_lock(*image_ptr);
92 custom_data_.resize(image_ptr->getSize()); 141 custom_data_.resize(image_ptr->getSize());
93 memcpy(&custom_data_[0], image_ptr->getPixels(), image_ptr->getSize()); 142 memcpy(&custom_data_[0], image_ptr->getPixels(), image_ptr->getSize());
94 custom_size_.set_width(image_ptr->width()); 143 custom_size_.set_width(image_ptr->width());
95 custom_size_.set_height(image_ptr->height()); 144 custom_size_.set_height(image_ptr->height());
96 } 145 }
97 #endif 146 #endif
OLDNEW
« no previous file with comments | « webkit/glue/webcursor.h ('k') | webkit/glue/webcursor_gtk.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698