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

Side by Side Diff: cc/layers/nine_patch_layer_impl.cc

Issue 22870016: Update the nine patch layer to use UI resources (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebased Created 7 years, 3 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
« no previous file with comments | « cc/layers/nine_patch_layer_impl.h ('k') | cc/layers/nine_patch_layer_impl_unittest.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 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 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 "cc/layers/nine_patch_layer_impl.h" 5 #include "cc/layers/nine_patch_layer_impl.h"
6 6
7 #include "base/strings/stringprintf.h" 7 #include "base/strings/stringprintf.h"
8 #include "base/values.h" 8 #include "base/values.h"
9 #include "cc/base/math_util.h"
9 #include "cc/layers/quad_sink.h" 10 #include "cc/layers/quad_sink.h"
10 #include "cc/quads/texture_draw_quad.h" 11 #include "cc/quads/texture_draw_quad.h"
12 #include "cc/trees/layer_tree_impl.h"
11 #include "ui/gfx/rect_f.h" 13 #include "ui/gfx/rect_f.h"
12 14
13 namespace cc { 15 namespace cc {
14 16
15 NinePatchLayerImpl::NinePatchLayerImpl(LayerTreeImpl* tree_impl, int id) 17 NinePatchLayerImpl::NinePatchLayerImpl(LayerTreeImpl* tree_impl, int id)
16 : LayerImpl(tree_impl, id), 18 : LayerImpl(tree_impl, id),
17 resource_id_(0) {} 19 fill_center_(false),
20 ui_resource_id_(0) {}
18 21
19 NinePatchLayerImpl::~NinePatchLayerImpl() {} 22 NinePatchLayerImpl::~NinePatchLayerImpl() {}
20 23
21 ResourceProvider::ResourceId NinePatchLayerImpl::ContentsResourceId() const { 24 ResourceProvider::ResourceId NinePatchLayerImpl::ContentsResourceId() const {
22 return 0; 25 return 0;
23 } 26 }
24 27
25 scoped_ptr<LayerImpl> NinePatchLayerImpl::CreateLayerImpl( 28 scoped_ptr<LayerImpl> NinePatchLayerImpl::CreateLayerImpl(
26 LayerTreeImpl* tree_impl) { 29 LayerTreeImpl* tree_impl) {
27 return NinePatchLayerImpl::Create(tree_impl, id()).PassAs<LayerImpl>(); 30 return NinePatchLayerImpl::Create(tree_impl, id()).PassAs<LayerImpl>();
28 } 31 }
29 32
30 void NinePatchLayerImpl::PushPropertiesTo(LayerImpl* layer) { 33 void NinePatchLayerImpl::PushPropertiesTo(LayerImpl* layer) {
31 LayerImpl::PushPropertiesTo(layer); 34 LayerImpl::PushPropertiesTo(layer);
32 NinePatchLayerImpl* layer_impl = static_cast<NinePatchLayerImpl*>(layer); 35 NinePatchLayerImpl* layer_impl = static_cast<NinePatchLayerImpl*>(layer);
33 36
34 if (!resource_id_) 37 layer_impl->SetUIResourceId(ui_resource_id_);
35 return; 38 layer_impl->SetLayout(image_bounds_, image_aperture_, border_, fill_center_);
36
37 layer_impl->SetResourceId(resource_id_);
38 layer_impl->SetLayout(image_bounds_, image_aperture_);
39 } 39 }
40 40
41 static gfx::RectF NormalizedRect(float x, 41 static gfx::RectF NormalizedRect(float x,
42 float y, 42 float y,
43 float width, 43 float width,
44 float height, 44 float height,
45 float total_width, 45 float total_width,
46 float total_height) { 46 float total_height) {
47 return gfx::RectF(x / total_width, 47 return gfx::RectF(x / total_width,
48 y / total_height, 48 y / total_height,
49 width / total_width, 49 width / total_width,
50 height / total_height); 50 height / total_height);
51 } 51 }
52 52
53 void NinePatchLayerImpl::SetLayout(gfx::Size image_bounds, gfx::Rect aperture) { 53 void NinePatchLayerImpl::SetUIResourceId(UIResourceId uid) {
54 if (uid == ui_resource_id_)
55 return;
56 ui_resource_id_ = uid;
57 NoteLayerPropertyChanged();
58 }
59
60 void NinePatchLayerImpl::SetLayout(gfx::Size image_bounds,
61 gfx::Rect aperture,
62 gfx::Rect border,
63 bool fill_center) {
64 // This check imposes an ordering on the call sequence. An UIResource must
65 // exist before SetLayout can be called.
66 DCHECK(ui_resource_id_);
67
68 // TODO(ccameron): the following "greater than or equal to" (GE) checks should
69 // be greater than (GT) to avoid degenerate nine-patches. The relaxed
70 // condition "equal to" is a workaround for the overhang shadow use case and
71 // should be investigated further.
72
73 // |border| is in layer space. It cannot exceed the bounds of the layer.
74 DCHECK(!border.size().IsEmpty());
75 DCHECK_GE(bounds().width(), border.width());
76 DCHECK_GE(bounds().height(), border.height());
77
78 // Sanity Check on |border|
79 DCHECK_LT(border.x(), border.width());
80 DCHECK_LT(border.y(), border.height());
81 DCHECK_GE(border.x(), 0);
82 DCHECK_GE(border.y(), 0);
83
84 // |aperture| is in image space. It cannot exceed the bounds of the bitmap.
85 DCHECK(!aperture.size().IsEmpty());
86 DCHECK(gfx::Rect(image_bounds.width(), image_bounds.height())
87 .Contains(aperture));
88
89 // Avoid the degenerate cases where the aperture touches the edge of the
90 // image.
91 DCHECK_LT(aperture.width(), image_bounds.width() - 1);
92 DCHECK_LT(aperture.height(), image_bounds.height() - 1);
93 DCHECK_GT(aperture.x(), 0);
94 DCHECK_GT(aperture.y(), 0);
95
96 if (image_bounds_ == image_bounds && image_aperture_ == aperture &&
97 border_ == border && fill_center_ == fill_center)
98 return;
99
54 image_bounds_ = image_bounds; 100 image_bounds_ = image_bounds;
55 image_aperture_ = aperture; 101 image_aperture_ = aperture;
102 border_ = border;
103 fill_center_ = fill_center;
104
105 NoteLayerPropertyChanged();
56 } 106 }
57 107
58 bool NinePatchLayerImpl::WillDraw(DrawMode draw_mode, 108 bool NinePatchLayerImpl::WillDraw(DrawMode draw_mode,
59 ResourceProvider* resource_provider) { 109 ResourceProvider* resource_provider) {
60 if (!resource_id_ || draw_mode == DRAW_MODE_RESOURCELESS_SOFTWARE) 110 if (!ui_resource_id_ || draw_mode == DRAW_MODE_RESOURCELESS_SOFTWARE)
61 return false; 111 return false;
62 return LayerImpl::WillDraw(draw_mode, resource_provider); 112 return LayerImpl::WillDraw(draw_mode, resource_provider);
63 } 113 }
64 114
65 void NinePatchLayerImpl::AppendQuads(QuadSink* quad_sink, 115 void NinePatchLayerImpl::AppendQuads(QuadSink* quad_sink,
66 AppendQuadsData* append_quads_data) { 116 AppendQuadsData* append_quads_data) {
67 SharedQuadState* shared_quad_state = 117 SharedQuadState* shared_quad_state =
68 quad_sink->UseSharedQuadState(CreateSharedQuadState()); 118 quad_sink->UseSharedQuadState(CreateSharedQuadState());
69 AppendDebugBorderQuad(quad_sink, shared_quad_state, append_quads_data); 119 AppendDebugBorderQuad(quad_sink, shared_quad_state, append_quads_data);
70 120
71 if (!resource_id_) 121 if (!ui_resource_id_)
122 return;
123
124 ResourceProvider::ResourceId resource =
125 layer_tree_impl()->ResourceIdForUIResource(ui_resource_id_);
126
127 if (!resource)
72 return; 128 return;
73 129
74 static const bool flipped = false; 130 static const bool flipped = false;
75 static const bool premultiplied_alpha = true; 131 static const bool premultiplied_alpha = true;
76 132
77 DCHECK(!bounds().IsEmpty()); 133 DCHECK(!bounds().IsEmpty());
78 134
79 // NinePatch border widths in bitmap pixel space 135 // NinePatch border widths in layer space.
80 int left_width = image_aperture_.x(); 136 int layer_left_width = border_.x();
81 int top_height = image_aperture_.y(); 137 int layer_top_height = border_.y();
82 int right_width = image_bounds_.width() - image_aperture_.right(); 138 int layer_right_width = border_.width() - layer_left_width;
83 int bottom_height = image_bounds_.height() - image_aperture_.bottom(); 139 int layer_bottom_height = border_.height() - layer_top_height;
84 140
85 // If layer can't fit the corners, clip to show the outer edges of the 141 int layer_middle_width = bounds().width() - border_.width();
86 // image. 142 int layer_middle_height = bounds().height() - border_.height();
87 int corner_total_width = left_width + right_width;
88 int middle_width = bounds().width() - corner_total_width;
89 if (middle_width < 0) {
90 float left_width_proportion =
91 static_cast<float>(left_width) / corner_total_width;
92 int left_width_crop = middle_width * left_width_proportion;
93 left_width += left_width_crop;
94 right_width = bounds().width() - left_width;
95 middle_width = 0;
96 }
97 int corner_total_height = top_height + bottom_height;
98 int middle_height = bounds().height() - corner_total_height;
99 if (middle_height < 0) {
100 float top_height_proportion =
101 static_cast<float>(top_height) / corner_total_height;
102 int top_height_crop = middle_height * top_height_proportion;
103 top_height += top_height_crop;
104 bottom_height = bounds().height() - top_height;
105 middle_height = 0;
106 }
107 143
108 // Patch positions in layer space 144 // Patch positions in layer space
109 gfx::Rect top_left(0, 0, left_width, top_height); 145 gfx::Rect layer_top_left(0, 0, layer_left_width, layer_top_height);
110 gfx::Rect top_right( 146 gfx::Rect layer_top_right(bounds().width() - layer_right_width,
111 bounds().width() - right_width, 0, right_width, top_height); 147 0,
112 gfx::Rect bottom_left( 148 layer_right_width,
113 0, bounds().height() - bottom_height, left_width, bottom_height); 149 layer_top_height);
114 gfx::Rect bottom_right( 150 gfx::Rect layer_bottom_left(0,
115 top_right.x(), bottom_left.y(), right_width, bottom_height); 151 bounds().height() - layer_bottom_height,
116 gfx::Rect top(top_left.right(), 0, middle_width, top_height); 152 layer_left_width,
117 gfx::Rect left(0, top_left.bottom(), left_width, middle_height); 153 layer_bottom_height);
118 gfx::Rect right(top_right.x(), 154 gfx::Rect layer_bottom_right(layer_top_right.x(),
119 top_right.bottom(), 155 layer_bottom_left.y(),
120 right_width, 156 layer_right_width,
121 left.height()); 157 layer_bottom_height);
122 gfx::Rect bottom(top.x(), bottom_left.y(), top.width(), bottom_height); 158 gfx::Rect layer_top(
159 layer_top_left.right(), 0, layer_middle_width, layer_top_height);
160 gfx::Rect layer_left(
161 0, layer_top_left.bottom(), layer_left_width, layer_middle_height);
162 gfx::Rect layer_right(layer_top_right.x(),
163 layer_top_right.bottom(),
164 layer_right_width,
165 layer_left.height());
166 gfx::Rect layer_bottom(layer_top.x(),
167 layer_bottom_left.y(),
168 layer_top.width(),
169 layer_bottom_height);
170 gfx::Rect layer_center(layer_left_width,
171 layer_top_height,
172 layer_middle_width,
173 layer_middle_height);
123 174
124 float img_width = image_bounds_.width(); 175 // Note the following values are in image (bitmap) space.
125 float img_height = image_bounds_.height(); 176 float image_width = image_bounds_.width();
177 float image_height = image_bounds_.height();
126 178
179 int image_aperture_left_width = image_aperture_.x();
180 int image_aperture_top_height = image_aperture_.y();
181 int image_aperture_right_width = image_width - image_aperture_.right();
182 int image_aperture_bottom_height = image_height - image_aperture_.bottom();
127 // Patch positions in bitmap UV space (from zero to one) 183 // Patch positions in bitmap UV space (from zero to one)
128 gfx::RectF uv_top_left = NormalizedRect(0, 184 gfx::RectF uv_top_left = NormalizedRect(0,
129 0, 185 0,
130 left_width, 186 image_aperture_left_width,
131 top_height, 187 image_aperture_top_height,
132 img_width, 188 image_width,
133 img_height); 189 image_height);
134 gfx::RectF uv_top_right = NormalizedRect(img_width - right_width, 190 gfx::RectF uv_top_right =
135 0, 191 NormalizedRect(image_width - image_aperture_right_width,
136 right_width, 192 0,
137 top_height, 193 image_aperture_right_width,
138 img_width, 194 image_aperture_top_height,
139 img_height); 195 image_width,
140 gfx::RectF uv_bottom_left = NormalizedRect(0, 196 image_height);
141 img_height - bottom_height, 197 gfx::RectF uv_bottom_left =
142 left_width, 198 NormalizedRect(0,
143 bottom_height, 199 image_height - image_aperture_bottom_height,
144 img_width, 200 image_aperture_left_width,
145 img_height); 201 image_aperture_bottom_height,
146 gfx::RectF uv_bottom_right = NormalizedRect(img_width - right_width, 202 image_width,
147 img_height - bottom_height, 203 image_height);
148 right_width, 204 gfx::RectF uv_bottom_right =
149 bottom_height, 205 NormalizedRect(image_width - image_aperture_right_width,
150 img_width, 206 image_height - image_aperture_bottom_height,
151 img_height); 207 image_aperture_right_width,
152 gfx::RectF uv_top(uv_top_left.right(), 208 image_aperture_bottom_height,
153 0, 209 image_width,
154 (img_width - left_width - right_width) / img_width, 210 image_height);
155 (top_height) / img_height); 211 gfx::RectF uv_top(
212 uv_top_left.right(),
213 0,
214 (image_width - image_aperture_left_width - image_aperture_right_width) /
215 image_width,
216 (image_aperture_top_height) / image_height);
156 gfx::RectF uv_left(0, 217 gfx::RectF uv_left(0,
157 uv_top_left.bottom(), 218 uv_top_left.bottom(),
158 left_width / img_width, 219 image_aperture_left_width / image_width,
159 (img_height - top_height - bottom_height) / img_height); 220 (image_height - image_aperture_top_height -
221 image_aperture_bottom_height) /
222 image_height);
160 gfx::RectF uv_right(uv_top_right.x(), 223 gfx::RectF uv_right(uv_top_right.x(),
161 uv_top_right.bottom(), 224 uv_top_right.bottom(),
162 right_width / img_width, 225 image_aperture_right_width / image_width,
163 uv_left.height()); 226 uv_left.height());
164 gfx::RectF uv_bottom(uv_top.x(), 227 gfx::RectF uv_bottom(uv_top.x(),
165 uv_bottom_left.y(), 228 uv_bottom_left.y(),
166 uv_top.width(), 229 uv_top.width(),
167 bottom_height / img_height); 230 image_aperture_bottom_height / image_height);
231 gfx::RectF uv_center(uv_top_left.right(),
232 uv_top_left.bottom(),
233 uv_top.width(),
234 uv_left.height());
168 235
169 // Nothing is opaque here. 236 // Nothing is opaque here.
170 // TODO(danakj): Should we look at the SkBitmaps to determine opaqueness? 237 // TODO(danakj): Should we look at the SkBitmaps to determine opaqueness?
171 gfx::Rect opaque_rect; 238 gfx::Rect opaque_rect;
172 const float vertex_opacity[] = {1.0f, 1.0f, 1.0f, 1.0f}; 239 const float vertex_opacity[] = {1.0f, 1.0f, 1.0f, 1.0f};
173 scoped_ptr<TextureDrawQuad> quad; 240 scoped_ptr<TextureDrawQuad> quad;
174 241
175 quad = TextureDrawQuad::Create(); 242 quad = TextureDrawQuad::Create();
176 quad->SetNew(shared_quad_state, 243 quad->SetNew(shared_quad_state,
177 top_left, 244 layer_top_left,
178 opaque_rect, 245 opaque_rect,
179 resource_id_, 246 resource,
180 premultiplied_alpha, 247 premultiplied_alpha,
181 uv_top_left.origin(), 248 uv_top_left.origin(),
182 uv_top_left.bottom_right(), 249 uv_top_left.bottom_right(),
183 SK_ColorTRANSPARENT, 250 SK_ColorTRANSPARENT,
184 vertex_opacity, 251 vertex_opacity,
185 flipped); 252 flipped);
186 quad_sink->Append(quad.PassAs<DrawQuad>(), append_quads_data); 253 quad_sink->Append(quad.PassAs<DrawQuad>(), append_quads_data);
187 254
188 quad = TextureDrawQuad::Create(); 255 quad = TextureDrawQuad::Create();
189 quad->SetNew(shared_quad_state, 256 quad->SetNew(shared_quad_state,
190 top_right, 257 layer_top_right,
191 opaque_rect, 258 opaque_rect,
192 resource_id_, 259 resource,
193 premultiplied_alpha, 260 premultiplied_alpha,
194 uv_top_right.origin(), 261 uv_top_right.origin(),
195 uv_top_right.bottom_right(), 262 uv_top_right.bottom_right(),
196 SK_ColorTRANSPARENT, 263 SK_ColorTRANSPARENT,
197 vertex_opacity, 264 vertex_opacity,
198 flipped); 265 flipped);
199 quad_sink->Append(quad.PassAs<DrawQuad>(), append_quads_data); 266 quad_sink->Append(quad.PassAs<DrawQuad>(), append_quads_data);
200 267
201 quad = TextureDrawQuad::Create(); 268 quad = TextureDrawQuad::Create();
202 quad->SetNew(shared_quad_state, 269 quad->SetNew(shared_quad_state,
203 bottom_left, 270 layer_bottom_left,
204 opaque_rect, 271 opaque_rect,
205 resource_id_, 272 resource,
206 premultiplied_alpha, 273 premultiplied_alpha,
207 uv_bottom_left.origin(), 274 uv_bottom_left.origin(),
208 uv_bottom_left.bottom_right(), 275 uv_bottom_left.bottom_right(),
209 SK_ColorTRANSPARENT, 276 SK_ColorTRANSPARENT,
210 vertex_opacity, 277 vertex_opacity,
211 flipped); 278 flipped);
212 quad_sink->Append(quad.PassAs<DrawQuad>(), append_quads_data); 279 quad_sink->Append(quad.PassAs<DrawQuad>(), append_quads_data);
213 280
214 quad = TextureDrawQuad::Create(); 281 quad = TextureDrawQuad::Create();
215 quad->SetNew(shared_quad_state, 282 quad->SetNew(shared_quad_state,
216 bottom_right, 283 layer_bottom_right,
217 opaque_rect, 284 opaque_rect,
218 resource_id_, 285 resource,
219 premultiplied_alpha, 286 premultiplied_alpha,
220 uv_bottom_right.origin(), 287 uv_bottom_right.origin(),
221 uv_bottom_right.bottom_right(), 288 uv_bottom_right.bottom_right(),
222 SK_ColorTRANSPARENT, 289 SK_ColorTRANSPARENT,
223 vertex_opacity, 290 vertex_opacity,
224 flipped); 291 flipped);
225 quad_sink->Append(quad.PassAs<DrawQuad>(), append_quads_data); 292 quad_sink->Append(quad.PassAs<DrawQuad>(), append_quads_data);
226 293
227 quad = TextureDrawQuad::Create(); 294 quad = TextureDrawQuad::Create();
228 quad->SetNew(shared_quad_state, 295 quad->SetNew(shared_quad_state,
229 top, 296 layer_top,
230 opaque_rect, 297 opaque_rect,
231 resource_id_, 298 resource,
232 premultiplied_alpha, 299 premultiplied_alpha,
233 uv_top.origin(), 300 uv_top.origin(),
234 uv_top.bottom_right(), 301 uv_top.bottom_right(),
235 SK_ColorTRANSPARENT, 302 SK_ColorTRANSPARENT,
236 vertex_opacity, 303 vertex_opacity,
237 flipped); 304 flipped);
238 quad_sink->Append(quad.PassAs<DrawQuad>(), append_quads_data); 305 quad_sink->Append(quad.PassAs<DrawQuad>(), append_quads_data);
239 306
240 quad = TextureDrawQuad::Create(); 307 quad = TextureDrawQuad::Create();
241 quad->SetNew(shared_quad_state, 308 quad->SetNew(shared_quad_state,
242 left, 309 layer_left,
243 opaque_rect, 310 opaque_rect,
244 resource_id_, 311 resource,
245 premultiplied_alpha, 312 premultiplied_alpha,
246 uv_left.origin(), 313 uv_left.origin(),
247 uv_left.bottom_right(), 314 uv_left.bottom_right(),
248 SK_ColorTRANSPARENT, 315 SK_ColorTRANSPARENT,
249 vertex_opacity, 316 vertex_opacity,
250 flipped); 317 flipped);
251 quad_sink->Append(quad.PassAs<DrawQuad>(), append_quads_data); 318 quad_sink->Append(quad.PassAs<DrawQuad>(), append_quads_data);
252 319
253 quad = TextureDrawQuad::Create(); 320 quad = TextureDrawQuad::Create();
254 quad->SetNew(shared_quad_state, 321 quad->SetNew(shared_quad_state,
255 right, 322 layer_right,
256 opaque_rect, 323 opaque_rect,
257 resource_id_, 324 resource,
258 premultiplied_alpha, 325 premultiplied_alpha,
259 uv_right.origin(), 326 uv_right.origin(),
260 uv_right.bottom_right(), 327 uv_right.bottom_right(),
261 SK_ColorTRANSPARENT, 328 SK_ColorTRANSPARENT,
262 vertex_opacity, 329 vertex_opacity,
263 flipped); 330 flipped);
264 quad_sink->Append(quad.PassAs<DrawQuad>(), append_quads_data); 331 quad_sink->Append(quad.PassAs<DrawQuad>(), append_quads_data);
265 332
266 quad = TextureDrawQuad::Create(); 333 quad = TextureDrawQuad::Create();
267 quad->SetNew(shared_quad_state, 334 quad->SetNew(shared_quad_state,
268 bottom, 335 layer_bottom,
269 opaque_rect, 336 opaque_rect,
270 resource_id_, 337 resource,
271 premultiplied_alpha, 338 premultiplied_alpha,
272 uv_bottom.origin(), 339 uv_bottom.origin(),
273 uv_bottom.bottom_right(), 340 uv_bottom.bottom_right(),
274 SK_ColorTRANSPARENT, 341 SK_ColorTRANSPARENT,
275 vertex_opacity, 342 vertex_opacity,
276 flipped); 343 flipped);
277 quad_sink->Append(quad.PassAs<DrawQuad>(), append_quads_data); 344 quad_sink->Append(quad.PassAs<DrawQuad>(), append_quads_data);
278 }
279 345
280 void NinePatchLayerImpl::DidLoseOutputSurface() { 346 if (fill_center_) {
281 resource_id_ = 0; 347 quad = TextureDrawQuad::Create();
348 quad->SetNew(shared_quad_state,
349 layer_center,
350 opaque_rect,
351 resource,
352 premultiplied_alpha,
353 uv_center.origin(),
354 uv_center.bottom_right(),
355 SK_ColorTRANSPARENT,
356 vertex_opacity,
357 flipped);
358 quad_sink->Append(quad.PassAs<DrawQuad>(), append_quads_data);
359 }
282 } 360 }
283 361
284 const char* NinePatchLayerImpl::LayerTypeAsString() const { 362 const char* NinePatchLayerImpl::LayerTypeAsString() const {
285 return "cc::NinePatchLayerImpl"; 363 return "cc::NinePatchLayerImpl";
286 } 364 }
287 365
288 base::DictionaryValue* NinePatchLayerImpl::LayerTreeAsJson() const { 366 base::DictionaryValue* NinePatchLayerImpl::LayerTreeAsJson() const {
289 base::DictionaryValue* result = LayerImpl::LayerTreeAsJson(); 367 base::DictionaryValue* result = LayerImpl::LayerTreeAsJson();
290 368
291 base::ListValue* list = new base::ListValue; 369 base::ListValue* list = new base::ListValue;
292 list->AppendInteger(image_aperture_.origin().x()); 370 list->AppendInteger(image_aperture_.origin().x());
293 list->AppendInteger(image_aperture_.origin().y()); 371 list->AppendInteger(image_aperture_.origin().y());
294 list->AppendInteger(image_aperture_.size().width()); 372 list->AppendInteger(image_aperture_.size().width());
295 list->AppendInteger(image_aperture_.size().height()); 373 list->AppendInteger(image_aperture_.size().height());
296 result->Set("ImageAperture", list); 374 result->Set("ImageAperture", list);
297 375
298 list = new base::ListValue; 376 result->Set("ImageBounds", MathUtil::AsValue(image_bounds_).release());
299 list->AppendInteger(image_bounds_.width()); 377 result->Set("Border", MathUtil::AsValue(border_).release());
300 list->AppendInteger(image_bounds_.height()); 378
301 result->Set("ImageBounds", list); 379 base::FundamentalValue* fill_center =
380 base::Value::CreateBooleanValue(fill_center_);
381 result->Set("FillCenter", fill_center);
302 382
303 return result; 383 return result;
304 } 384 }
305 385
306 } // namespace cc 386 } // namespace cc
OLDNEW
« no previous file with comments | « cc/layers/nine_patch_layer_impl.h ('k') | cc/layers/nine_patch_layer_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698