OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 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 "ui/gfx/ipc/gfx_param_traits.h" | 5 #include "ui/gfx/ipc/gfx_param_traits.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "third_party/skia/include/core/SkBitmap.h" | 9 #include "third_party/skia/include/core/SkBitmap.h" |
10 #include "ui/gfx/geometry/rect.h" | 10 #include "ui/gfx/geometry/rect.h" |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
50 | 50 |
51 } // namespace | 51 } // namespace |
52 | 52 |
53 namespace IPC { | 53 namespace IPC { |
54 | 54 |
55 void ParamTraits<gfx::Point>::Write(Message* m, const gfx::Point& p) { | 55 void ParamTraits<gfx::Point>::Write(Message* m, const gfx::Point& p) { |
56 m->WriteInt(p.x()); | 56 m->WriteInt(p.x()); |
57 m->WriteInt(p.y()); | 57 m->WriteInt(p.y()); |
58 } | 58 } |
59 | 59 |
60 bool ParamTraits<gfx::Point>::Read(const Message* m, PickleIterator* iter, | 60 bool ParamTraits<gfx::Point>::Read(const Message* m, |
| 61 base::PickleIterator* iter, |
61 gfx::Point* r) { | 62 gfx::Point* r) { |
62 int x, y; | 63 int x, y; |
63 if (!iter->ReadInt(&x) || | 64 if (!iter->ReadInt(&x) || |
64 !iter->ReadInt(&y)) | 65 !iter->ReadInt(&y)) |
65 return false; | 66 return false; |
66 r->set_x(x); | 67 r->set_x(x); |
67 r->set_y(y); | 68 r->set_y(y); |
68 return true; | 69 return true; |
69 } | 70 } |
70 | 71 |
71 void ParamTraits<gfx::Point>::Log(const gfx::Point& p, std::string* l) { | 72 void ParamTraits<gfx::Point>::Log(const gfx::Point& p, std::string* l) { |
72 l->append(base::StringPrintf("(%d, %d)", p.x(), p.y())); | 73 l->append(base::StringPrintf("(%d, %d)", p.x(), p.y())); |
73 } | 74 } |
74 | 75 |
75 void ParamTraits<gfx::PointF>::Write(Message* m, const gfx::PointF& v) { | 76 void ParamTraits<gfx::PointF>::Write(Message* m, const gfx::PointF& v) { |
76 ParamTraits<float>::Write(m, v.x()); | 77 ParamTraits<float>::Write(m, v.x()); |
77 ParamTraits<float>::Write(m, v.y()); | 78 ParamTraits<float>::Write(m, v.y()); |
78 } | 79 } |
79 | 80 |
80 bool ParamTraits<gfx::PointF>::Read(const Message* m, | 81 bool ParamTraits<gfx::PointF>::Read(const Message* m, |
81 PickleIterator* iter, | 82 base::PickleIterator* iter, |
82 gfx::PointF* r) { | 83 gfx::PointF* r) { |
83 float x, y; | 84 float x, y; |
84 if (!ParamTraits<float>::Read(m, iter, &x) || | 85 if (!ParamTraits<float>::Read(m, iter, &x) || |
85 !ParamTraits<float>::Read(m, iter, &y)) | 86 !ParamTraits<float>::Read(m, iter, &y)) |
86 return false; | 87 return false; |
87 r->set_x(x); | 88 r->set_x(x); |
88 r->set_y(y); | 89 r->set_y(y); |
89 return true; | 90 return true; |
90 } | 91 } |
91 | 92 |
92 void ParamTraits<gfx::PointF>::Log(const gfx::PointF& v, std::string* l) { | 93 void ParamTraits<gfx::PointF>::Log(const gfx::PointF& v, std::string* l) { |
93 l->append(base::StringPrintf("(%f, %f)", v.x(), v.y())); | 94 l->append(base::StringPrintf("(%f, %f)", v.x(), v.y())); |
94 } | 95 } |
95 | 96 |
96 void ParamTraits<gfx::Size>::Write(Message* m, const gfx::Size& p) { | 97 void ParamTraits<gfx::Size>::Write(Message* m, const gfx::Size& p) { |
97 DCHECK_GE(p.width(), 0); | 98 DCHECK_GE(p.width(), 0); |
98 DCHECK_GE(p.height(), 0); | 99 DCHECK_GE(p.height(), 0); |
99 int values[2] = { p.width(), p.height() }; | 100 int values[2] = { p.width(), p.height() }; |
100 m->WriteBytes(&values, sizeof(int) * 2); | 101 m->WriteBytes(&values, sizeof(int) * 2); |
101 } | 102 } |
102 | 103 |
103 bool ParamTraits<gfx::Size>::Read(const Message* m, | 104 bool ParamTraits<gfx::Size>::Read(const Message* m, |
104 PickleIterator* iter, | 105 base::PickleIterator* iter, |
105 gfx::Size* r) { | 106 gfx::Size* r) { |
106 const char* char_values; | 107 const char* char_values; |
107 if (!iter->ReadBytes(&char_values, sizeof(int) * 2)) | 108 if (!iter->ReadBytes(&char_values, sizeof(int) * 2)) |
108 return false; | 109 return false; |
109 const int* values = reinterpret_cast<const int*>(char_values); | 110 const int* values = reinterpret_cast<const int*>(char_values); |
110 if (values[0] < 0 || values[1] < 0) | 111 if (values[0] < 0 || values[1] < 0) |
111 return false; | 112 return false; |
112 r->set_width(values[0]); | 113 r->set_width(values[0]); |
113 r->set_height(values[1]); | 114 r->set_height(values[1]); |
114 return true; | 115 return true; |
115 } | 116 } |
116 | 117 |
117 void ParamTraits<gfx::Size>::Log(const gfx::Size& p, std::string* l) { | 118 void ParamTraits<gfx::Size>::Log(const gfx::Size& p, std::string* l) { |
118 l->append(base::StringPrintf("(%d, %d)", p.width(), p.height())); | 119 l->append(base::StringPrintf("(%d, %d)", p.width(), p.height())); |
119 } | 120 } |
120 | 121 |
121 void ParamTraits<gfx::SizeF>::Write(Message* m, const gfx::SizeF& p) { | 122 void ParamTraits<gfx::SizeF>::Write(Message* m, const gfx::SizeF& p) { |
122 float values[2] = { p.width(), p.height() }; | 123 float values[2] = { p.width(), p.height() }; |
123 m->WriteBytes(&values, sizeof(float) * 2); | 124 m->WriteBytes(&values, sizeof(float) * 2); |
124 } | 125 } |
125 | 126 |
126 bool ParamTraits<gfx::SizeF>::Read(const Message* m, | 127 bool ParamTraits<gfx::SizeF>::Read(const Message* m, |
127 PickleIterator* iter, | 128 base::PickleIterator* iter, |
128 gfx::SizeF* r) { | 129 gfx::SizeF* r) { |
129 const char* char_values; | 130 const char* char_values; |
130 if (!iter->ReadBytes(&char_values, sizeof(float) * 2)) | 131 if (!iter->ReadBytes(&char_values, sizeof(float) * 2)) |
131 return false; | 132 return false; |
132 const float* values = reinterpret_cast<const float*>(char_values); | 133 const float* values = reinterpret_cast<const float*>(char_values); |
133 r->set_width(values[0]); | 134 r->set_width(values[0]); |
134 r->set_height(values[1]); | 135 r->set_height(values[1]); |
135 return true; | 136 return true; |
136 } | 137 } |
137 | 138 |
138 void ParamTraits<gfx::SizeF>::Log(const gfx::SizeF& p, std::string* l) { | 139 void ParamTraits<gfx::SizeF>::Log(const gfx::SizeF& p, std::string* l) { |
139 l->append(base::StringPrintf("(%f, %f)", p.width(), p.height())); | 140 l->append(base::StringPrintf("(%f, %f)", p.width(), p.height())); |
140 } | 141 } |
141 | 142 |
142 void ParamTraits<gfx::Vector2d>::Write(Message* m, const gfx::Vector2d& p) { | 143 void ParamTraits<gfx::Vector2d>::Write(Message* m, const gfx::Vector2d& p) { |
143 int values[2] = { p.x(), p.y() }; | 144 int values[2] = { p.x(), p.y() }; |
144 m->WriteBytes(&values, sizeof(int) * 2); | 145 m->WriteBytes(&values, sizeof(int) * 2); |
145 } | 146 } |
146 | 147 |
147 bool ParamTraits<gfx::Vector2d>::Read(const Message* m, | 148 bool ParamTraits<gfx::Vector2d>::Read(const Message* m, |
148 PickleIterator* iter, | 149 base::PickleIterator* iter, |
149 gfx::Vector2d* r) { | 150 gfx::Vector2d* r) { |
150 const char* char_values; | 151 const char* char_values; |
151 if (!iter->ReadBytes(&char_values, sizeof(int) * 2)) | 152 if (!iter->ReadBytes(&char_values, sizeof(int) * 2)) |
152 return false; | 153 return false; |
153 const int* values = reinterpret_cast<const int*>(char_values); | 154 const int* values = reinterpret_cast<const int*>(char_values); |
154 r->set_x(values[0]); | 155 r->set_x(values[0]); |
155 r->set_y(values[1]); | 156 r->set_y(values[1]); |
156 return true; | 157 return true; |
157 } | 158 } |
158 | 159 |
159 void ParamTraits<gfx::Vector2d>::Log(const gfx::Vector2d& v, std::string* l) { | 160 void ParamTraits<gfx::Vector2d>::Log(const gfx::Vector2d& v, std::string* l) { |
160 l->append(base::StringPrintf("(%d, %d)", v.x(), v.y())); | 161 l->append(base::StringPrintf("(%d, %d)", v.x(), v.y())); |
161 } | 162 } |
162 | 163 |
163 void ParamTraits<gfx::Vector2dF>::Write(Message* m, const gfx::Vector2dF& p) { | 164 void ParamTraits<gfx::Vector2dF>::Write(Message* m, const gfx::Vector2dF& p) { |
164 float values[2] = { p.x(), p.y() }; | 165 float values[2] = { p.x(), p.y() }; |
165 m->WriteBytes(&values, sizeof(float) * 2); | 166 m->WriteBytes(&values, sizeof(float) * 2); |
166 } | 167 } |
167 | 168 |
168 bool ParamTraits<gfx::Vector2dF>::Read(const Message* m, | 169 bool ParamTraits<gfx::Vector2dF>::Read(const Message* m, |
169 PickleIterator* iter, | 170 base::PickleIterator* iter, |
170 gfx::Vector2dF* r) { | 171 gfx::Vector2dF* r) { |
171 const char* char_values; | 172 const char* char_values; |
172 if (!iter->ReadBytes(&char_values, sizeof(float) * 2)) | 173 if (!iter->ReadBytes(&char_values, sizeof(float) * 2)) |
173 return false; | 174 return false; |
174 const float* values = reinterpret_cast<const float*>(char_values); | 175 const float* values = reinterpret_cast<const float*>(char_values); |
175 r->set_x(values[0]); | 176 r->set_x(values[0]); |
176 r->set_y(values[1]); | 177 r->set_y(values[1]); |
177 return true; | 178 return true; |
178 } | 179 } |
179 | 180 |
180 void ParamTraits<gfx::Vector2dF>::Log(const gfx::Vector2dF& v, std::string* l) { | 181 void ParamTraits<gfx::Vector2dF>::Log(const gfx::Vector2dF& v, std::string* l) { |
181 l->append(base::StringPrintf("(%f, %f)", v.x(), v.y())); | 182 l->append(base::StringPrintf("(%f, %f)", v.x(), v.y())); |
182 } | 183 } |
183 | 184 |
184 void ParamTraits<gfx::Rect>::Write(Message* m, const gfx::Rect& p) { | 185 void ParamTraits<gfx::Rect>::Write(Message* m, const gfx::Rect& p) { |
185 int values[4] = { p.x(), p.y(), p.width(), p.height() }; | 186 int values[4] = { p.x(), p.y(), p.width(), p.height() }; |
186 m->WriteBytes(&values, sizeof(int) * 4); | 187 m->WriteBytes(&values, sizeof(int) * 4); |
187 } | 188 } |
188 | 189 |
189 bool ParamTraits<gfx::Rect>::Read(const Message* m, | 190 bool ParamTraits<gfx::Rect>::Read(const Message* m, |
190 PickleIterator* iter, | 191 base::PickleIterator* iter, |
191 gfx::Rect* r) { | 192 gfx::Rect* r) { |
192 const char* char_values; | 193 const char* char_values; |
193 if (!iter->ReadBytes(&char_values, sizeof(int) * 4)) | 194 if (!iter->ReadBytes(&char_values, sizeof(int) * 4)) |
194 return false; | 195 return false; |
195 const int* values = reinterpret_cast<const int*>(char_values); | 196 const int* values = reinterpret_cast<const int*>(char_values); |
196 if (values[2] < 0 || values[3] < 0) | 197 if (values[2] < 0 || values[3] < 0) |
197 return false; | 198 return false; |
198 r->SetRect(values[0], values[1], values[2], values[3]); | 199 r->SetRect(values[0], values[1], values[2], values[3]); |
199 return true; | 200 return true; |
200 } | 201 } |
201 | 202 |
202 void ParamTraits<gfx::Rect>::Log(const gfx::Rect& p, std::string* l) { | 203 void ParamTraits<gfx::Rect>::Log(const gfx::Rect& p, std::string* l) { |
203 l->append(base::StringPrintf("(%d, %d, %d, %d)", p.x(), p.y(), | 204 l->append(base::StringPrintf("(%d, %d, %d, %d)", p.x(), p.y(), |
204 p.width(), p.height())); | 205 p.width(), p.height())); |
205 } | 206 } |
206 | 207 |
207 void ParamTraits<gfx::RectF>::Write(Message* m, const gfx::RectF& p) { | 208 void ParamTraits<gfx::RectF>::Write(Message* m, const gfx::RectF& p) { |
208 float values[4] = { p.x(), p.y(), p.width(), p.height() }; | 209 float values[4] = { p.x(), p.y(), p.width(), p.height() }; |
209 m->WriteBytes(&values, sizeof(float) * 4); | 210 m->WriteBytes(&values, sizeof(float) * 4); |
210 } | 211 } |
211 | 212 |
212 bool ParamTraits<gfx::RectF>::Read(const Message* m, | 213 bool ParamTraits<gfx::RectF>::Read(const Message* m, |
213 PickleIterator* iter, | 214 base::PickleIterator* iter, |
214 gfx::RectF* r) { | 215 gfx::RectF* r) { |
215 const char* char_values; | 216 const char* char_values; |
216 if (!iter->ReadBytes(&char_values, sizeof(float) * 4)) | 217 if (!iter->ReadBytes(&char_values, sizeof(float) * 4)) |
217 return false; | 218 return false; |
218 const float* values = reinterpret_cast<const float*>(char_values); | 219 const float* values = reinterpret_cast<const float*>(char_values); |
219 r->SetRect(values[0], values[1], values[2], values[3]); | 220 r->SetRect(values[0], values[1], values[2], values[3]); |
220 return true; | 221 return true; |
221 } | 222 } |
222 | 223 |
223 void ParamTraits<gfx::RectF>::Log(const gfx::RectF& p, std::string* l) { | 224 void ParamTraits<gfx::RectF>::Log(const gfx::RectF& p, std::string* l) { |
224 l->append(base::StringPrintf("(%f, %f, %f, %f)", p.x(), p.y(), | 225 l->append(base::StringPrintf("(%f, %f, %f, %f)", p.x(), p.y(), |
225 p.width(), p.height())); | 226 p.width(), p.height())); |
226 } | 227 } |
227 | 228 |
228 void ParamTraits<SkBitmap>::Write(Message* m, const SkBitmap& p) { | 229 void ParamTraits<SkBitmap>::Write(Message* m, const SkBitmap& p) { |
229 size_t fixed_size = sizeof(SkBitmap_Data); | 230 size_t fixed_size = sizeof(SkBitmap_Data); |
230 SkBitmap_Data bmp_data; | 231 SkBitmap_Data bmp_data; |
231 bmp_data.InitSkBitmapDataForTransfer(p); | 232 bmp_data.InitSkBitmapDataForTransfer(p); |
232 m->WriteData(reinterpret_cast<const char*>(&bmp_data), | 233 m->WriteData(reinterpret_cast<const char*>(&bmp_data), |
233 static_cast<int>(fixed_size)); | 234 static_cast<int>(fixed_size)); |
234 size_t pixel_size = p.getSize(); | 235 size_t pixel_size = p.getSize(); |
235 SkAutoLockPixels p_lock(p); | 236 SkAutoLockPixels p_lock(p); |
236 m->WriteData(reinterpret_cast<const char*>(p.getPixels()), | 237 m->WriteData(reinterpret_cast<const char*>(p.getPixels()), |
237 static_cast<int>(pixel_size)); | 238 static_cast<int>(pixel_size)); |
238 } | 239 } |
239 | 240 |
240 bool ParamTraits<SkBitmap>::Read(const Message* m, | 241 bool ParamTraits<SkBitmap>::Read(const Message* m, |
241 PickleIterator* iter, | 242 base::PickleIterator* iter, |
242 SkBitmap* r) { | 243 SkBitmap* r) { |
243 const char* fixed_data; | 244 const char* fixed_data; |
244 int fixed_data_size = 0; | 245 int fixed_data_size = 0; |
245 if (!iter->ReadData(&fixed_data, &fixed_data_size) || | 246 if (!iter->ReadData(&fixed_data, &fixed_data_size) || |
246 (fixed_data_size <= 0)) { | 247 (fixed_data_size <= 0)) { |
247 NOTREACHED(); | 248 NOTREACHED(); |
248 return false; | 249 return false; |
249 } | 250 } |
250 if (fixed_data_size != sizeof(SkBitmap_Data)) | 251 if (fixed_data_size != sizeof(SkBitmap_Data)) |
251 return false; // Message is malformed. | 252 return false; // Message is malformed. |
(...skipping 13 matching lines...) Expand all Loading... |
265 void ParamTraits<SkBitmap>::Log(const SkBitmap& p, std::string* l) { | 266 void ParamTraits<SkBitmap>::Log(const SkBitmap& p, std::string* l) { |
266 l->append("<SkBitmap>"); | 267 l->append("<SkBitmap>"); |
267 } | 268 } |
268 | 269 |
269 void ParamTraits<gfx::Range>::Write(Message* m, const gfx::Range& r) { | 270 void ParamTraits<gfx::Range>::Write(Message* m, const gfx::Range& r) { |
270 m->WriteSizeT(r.start()); | 271 m->WriteSizeT(r.start()); |
271 m->WriteSizeT(r.end()); | 272 m->WriteSizeT(r.end()); |
272 } | 273 } |
273 | 274 |
274 bool ParamTraits<gfx::Range>::Read(const Message* m, | 275 bool ParamTraits<gfx::Range>::Read(const Message* m, |
275 PickleIterator* iter, | 276 base::PickleIterator* iter, |
276 gfx::Range* r) { | 277 gfx::Range* r) { |
277 size_t start, end; | 278 size_t start, end; |
278 if (!iter->ReadSizeT(&start) || !iter->ReadSizeT(&end)) | 279 if (!iter->ReadSizeT(&start) || !iter->ReadSizeT(&end)) |
279 return false; | 280 return false; |
280 r->set_start(start); | 281 r->set_start(start); |
281 r->set_end(end); | 282 r->set_end(end); |
282 return true; | 283 return true; |
283 } | 284 } |
284 | 285 |
285 void ParamTraits<gfx::Range>::Log(const gfx::Range& r, std::string* l) { | 286 void ParamTraits<gfx::Range>::Log(const gfx::Range& r, std::string* l) { |
286 l->append(base::StringPrintf("(%" PRIuS ", %" PRIuS ")", r.start(), r.end())); | 287 l->append(base::StringPrintf("(%" PRIuS ", %" PRIuS ")", r.start(), r.end())); |
287 } | 288 } |
288 | 289 |
289 | 290 |
290 } // namespace IPC | 291 } // namespace IPC |
OLD | NEW |