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

Side by Side Diff: ui/compositor/layer.cc

Issue 10832355: Prepare ui/compositor for WebLayer type change (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: addresses feedback Created 8 years, 4 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 | « ui/compositor/layer.h ('k') | ui/compositor/layer_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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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 "ui/compositor/layer.h" 5 #include "ui/compositor/layer.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/debug/trace_event.h" 10 #include "base/debug/trace_event.h"
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
54 layer_updated_externally_(false), 54 layer_updated_externally_(false),
55 opacity_(1.0f), 55 opacity_(1.0f),
56 background_blur_radius_(0), 56 background_blur_radius_(0),
57 layer_saturation_(0.0f), 57 layer_saturation_(0.0f),
58 layer_brightness_(0.0f), 58 layer_brightness_(0.0f),
59 layer_grayscale_(0.0f), 59 layer_grayscale_(0.0f),
60 layer_inverted_(false), 60 layer_inverted_(false),
61 layer_mask_(NULL), 61 layer_mask_(NULL),
62 layer_mask_back_link_(NULL), 62 layer_mask_back_link_(NULL),
63 delegate_(NULL), 63 delegate_(NULL),
64 #if defined(WEBLAYER_IS_PURE_VIRTUAL)
65 web_layer_(NULL),
66 #endif
64 scale_content_(true), 67 scale_content_(true),
65 device_scale_factor_(1.0f) { 68 device_scale_factor_(1.0f) {
66 CreateWebLayer(); 69 CreateWebLayer();
67 } 70 }
68 71
69 Layer::Layer(LayerType type) 72 Layer::Layer(LayerType type)
70 : type_(type), 73 : type_(type),
71 compositor_(NULL), 74 compositor_(NULL),
72 parent_(NULL), 75 parent_(NULL),
73 visible_(true), 76 visible_(true),
(...skipping 22 matching lines...) Expand all
96 if (compositor_) 99 if (compositor_)
97 compositor_->SetRootLayer(NULL); 100 compositor_->SetRootLayer(NULL);
98 if (parent_) 101 if (parent_)
99 parent_->Remove(this); 102 parent_->Remove(this);
100 if (layer_mask_) 103 if (layer_mask_)
101 SetMaskLayer(NULL); 104 SetMaskLayer(NULL);
102 if (layer_mask_back_link_) 105 if (layer_mask_back_link_)
103 layer_mask_back_link_->SetMaskLayer(NULL); 106 layer_mask_back_link_->SetMaskLayer(NULL);
104 for (size_t i = 0; i < children_.size(); ++i) 107 for (size_t i = 0; i < children_.size(); ++i)
105 children_[i]->parent_ = NULL; 108 children_[i]->parent_ = NULL;
109 #if defined(WEBLAYER_IS_PURE_VIRTUAL)
110 web_layer_->removeFromParent();
111 #else
106 web_layer_.removeFromParent(); 112 web_layer_.removeFromParent();
113 #endif
107 } 114 }
108 115
109 Compositor* Layer::GetCompositor() { 116 Compositor* Layer::GetCompositor() {
110 return GetRoot(this)->compositor_; 117 return GetRoot(this)->compositor_;
111 } 118 }
112 119
113 void Layer::SetCompositor(Compositor* compositor) { 120 void Layer::SetCompositor(Compositor* compositor) {
114 // This function must only be called to set the compositor on the root layer, 121 // This function must only be called to set the compositor on the root layer,
115 // or to reset it. 122 // or to reset it.
116 DCHECK(!compositor || !compositor_); 123 DCHECK(!compositor || !compositor_);
117 DCHECK(!compositor || compositor->root_layer() == this); 124 DCHECK(!compositor || compositor->root_layer() == this);
118 DCHECK(!parent_); 125 DCHECK(!parent_);
119 compositor_ = compositor; 126 compositor_ = compositor;
120 if (compositor) 127 if (compositor)
121 OnDeviceScaleFactorChanged(compositor->device_scale_factor()); 128 OnDeviceScaleFactorChanged(compositor->device_scale_factor());
122 } 129 }
123 130
124 void Layer::Add(Layer* child) { 131 void Layer::Add(Layer* child) {
125 DCHECK(!child->compositor_); 132 DCHECK(!child->compositor_);
126 if (child->parent_) 133 if (child->parent_)
127 child->parent_->Remove(child); 134 child->parent_->Remove(child);
128 child->parent_ = this; 135 child->parent_ = this;
129 children_.push_back(child); 136 children_.push_back(child);
137 #if defined(WEBLAYER_IS_PURE_VIRTUAL)
138 web_layer_->addChild(child->web_layer_);
139 #else
130 web_layer_.addChild(child->web_layer_); 140 web_layer_.addChild(child->web_layer_);
141 #endif
131 child->OnDeviceScaleFactorChanged(device_scale_factor_); 142 child->OnDeviceScaleFactorChanged(device_scale_factor_);
132 } 143 }
133 144
134 void Layer::Remove(Layer* child) { 145 void Layer::Remove(Layer* child) {
135 std::vector<Layer*>::iterator i = 146 std::vector<Layer*>::iterator i =
136 std::find(children_.begin(), children_.end(), child); 147 std::find(children_.begin(), children_.end(), child);
137 DCHECK(i != children_.end()); 148 DCHECK(i != children_.end());
138 children_.erase(i); 149 children_.erase(i);
139 child->parent_ = NULL; 150 child->parent_ = NULL;
151 #if defined(WEBLAYER_IS_PURE_VIRTUAL)
152 child->web_layer_->removeFromParent();
153 #else
140 child->web_layer_.removeFromParent(); 154 child->web_layer_.removeFromParent();
155 #endif
141 } 156 }
142 157
143 void Layer::StackAtTop(Layer* child) { 158 void Layer::StackAtTop(Layer* child) {
144 if (children_.size() <= 1 || child == children_.back()) 159 if (children_.size() <= 1 || child == children_.back())
145 return; // Already in front. 160 return; // Already in front.
146 StackAbove(child, children_.back()); 161 StackAbove(child, children_.back());
147 } 162 }
148 163
149 void Layer::StackAbove(Layer* child, Layer* other) { 164 void Layer::StackAbove(Layer* child, Layer* other) {
150 StackRelativeTo(child, other, true); 165 StackRelativeTo(child, other, true);
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
198 213
199 gfx::Rect Layer::GetTargetBounds() const { 214 gfx::Rect Layer::GetTargetBounds() const {
200 if (animator_.get() && animator_->IsAnimatingProperty( 215 if (animator_.get() && animator_->IsAnimatingProperty(
201 LayerAnimationElement::BOUNDS)) { 216 LayerAnimationElement::BOUNDS)) {
202 return animator_->GetTargetBounds(); 217 return animator_->GetTargetBounds();
203 } 218 }
204 return bounds_; 219 return bounds_;
205 } 220 }
206 221
207 void Layer::SetMasksToBounds(bool masks_to_bounds) { 222 void Layer::SetMasksToBounds(bool masks_to_bounds) {
223 #if defined(WEBLAYER_IS_PURE_VIRTUAL)
224 web_layer_->setMasksToBounds(masks_to_bounds);
225 #else
208 web_layer_.setMasksToBounds(masks_to_bounds); 226 web_layer_.setMasksToBounds(masks_to_bounds);
227 #endif
209 } 228 }
210 229
211 bool Layer::GetMasksToBounds() const { 230 bool Layer::GetMasksToBounds() const {
231 #if defined(WEBLAYER_IS_PURE_VIRTUAL)
232 return web_layer_->masksToBounds();
233 #else
212 return web_layer_.masksToBounds(); 234 return web_layer_.masksToBounds();
235 #endif
213 } 236 }
214 237
215 void Layer::SetOpacity(float opacity) { 238 void Layer::SetOpacity(float opacity) {
216 GetAnimator()->SetOpacity(opacity); 239 GetAnimator()->SetOpacity(opacity);
217 } 240 }
218 241
219 void Layer::SetBackgroundBlur(int blur_radius) { 242 void Layer::SetBackgroundBlur(int blur_radius) {
220 background_blur_radius_ = blur_radius; 243 background_blur_radius_ = blur_radius;
221 244
222 WebKit::WebFilterOperations filters; 245 WebKit::WebFilterOperations filters;
223 if (background_blur_radius_) { 246 if (background_blur_radius_) {
224 filters.append(WebKit::WebFilterOperation::createBlurFilter( 247 filters.append(WebKit::WebFilterOperation::createBlurFilter(
225 background_blur_radius_)); 248 background_blur_radius_));
226 } 249 }
250 #if defined(WEBLAYER_IS_PURE_VIRTUAL)
251 web_layer_->setBackgroundFilters(filters);
252 #else
227 web_layer_.setBackgroundFilters(filters); 253 web_layer_.setBackgroundFilters(filters);
254 #endif
228 } 255 }
229 256
230 void Layer::SetLayerSaturation(float saturation) { 257 void Layer::SetLayerSaturation(float saturation) {
231 layer_saturation_ = saturation; 258 layer_saturation_ = saturation;
232 SetLayerFilters(); 259 SetLayerFilters();
233 } 260 }
234 261
235 void Layer::SetLayerBrightness(float brightness) { 262 void Layer::SetLayerBrightness(float brightness) {
236 GetAnimator()->SetBrightness(brightness); 263 GetAnimator()->SetBrightness(brightness);
237 } 264 }
(...skipping 30 matching lines...) Expand all
268 layer_mask->children().empty() && 295 layer_mask->children().empty() &&
269 !layer_mask->layer_mask_back_link_)); 296 !layer_mask->layer_mask_back_link_));
270 DCHECK(!layer_mask_back_link_); 297 DCHECK(!layer_mask_back_link_);
271 if (layer_mask_ == layer_mask) 298 if (layer_mask_ == layer_mask)
272 return; 299 return;
273 // We need to de-reference the currently linked object so that no problem 300 // We need to de-reference the currently linked object so that no problem
274 // arises if the mask layer gets deleted before this object. 301 // arises if the mask layer gets deleted before this object.
275 if (layer_mask_) 302 if (layer_mask_)
276 layer_mask_->layer_mask_back_link_ = NULL; 303 layer_mask_->layer_mask_back_link_ = NULL;
277 layer_mask_ = layer_mask; 304 layer_mask_ = layer_mask;
305 #if defined(WEBLAYER_IS_PURE_VIRTUAL)
306 web_layer_->setMaskLayer(
307 layer_mask ? layer_mask->web_layer() : NULL);
308 #else
278 web_layer_.setMaskLayer( 309 web_layer_.setMaskLayer(
279 layer_mask ? layer_mask->web_layer() : WebKit::WebLayer()); 310 layer_mask ? layer_mask->web_layer() : WebKit::WebLayer());
311 #endif
280 // We need to reference the linked object so that it can properly break the 312 // We need to reference the linked object so that it can properly break the
281 // link to us when it gets deleted. 313 // link to us when it gets deleted.
282 if (layer_mask) 314 if (layer_mask)
283 layer_mask->layer_mask_back_link_ = this; 315 layer_mask->layer_mask_back_link_ = this;
284 } 316 }
285 317
286 void Layer::SetLayerFilters() { 318 void Layer::SetLayerFilters() {
287 WebKit::WebFilterOperations filters; 319 WebKit::WebFilterOperations filters;
288 if (layer_saturation_) { 320 if (layer_saturation_) {
289 filters.append(WebKit::WebFilterOperation::createSaturateFilter( 321 filters.append(WebKit::WebFilterOperation::createSaturateFilter(
290 layer_saturation_)); 322 layer_saturation_));
291 } 323 }
292 if (layer_grayscale_) { 324 if (layer_grayscale_) {
293 filters.append(WebKit::WebFilterOperation::createGrayscaleFilter( 325 filters.append(WebKit::WebFilterOperation::createGrayscaleFilter(
294 layer_grayscale_)); 326 layer_grayscale_));
295 } 327 }
296 if (layer_inverted_) 328 if (layer_inverted_)
297 filters.append(WebKit::WebFilterOperation::createInvertFilter(1.0)); 329 filters.append(WebKit::WebFilterOperation::createInvertFilter(1.0));
298 // Brightness goes last, because the resulting colors neeed clamping, which 330 // Brightness goes last, because the resulting colors neeed clamping, which
299 // cause further color matrix filters to be applied separately. In this order, 331 // cause further color matrix filters to be applied separately. In this order,
300 // they all can be combined in a single pass. 332 // they all can be combined in a single pass.
301 if (layer_brightness_) { 333 if (layer_brightness_) {
302 filters.append(WebKit::WebFilterOperation::createBrightnessFilter( 334 filters.append(WebKit::WebFilterOperation::createBrightnessFilter(
303 layer_brightness_)); 335 layer_brightness_));
304 } 336 }
305 337
338 #if defined(WEBLAYER_IS_PURE_VIRTUAL)
339 web_layer_->setFilters(filters);
340 #else
306 web_layer_.setFilters(filters); 341 web_layer_.setFilters(filters);
342 #endif
307 } 343 }
308 344
309 float Layer::GetTargetOpacity() const { 345 float Layer::GetTargetOpacity() const {
310 if (animator_.get() && animator_->IsAnimatingProperty( 346 if (animator_.get() && animator_->IsAnimatingProperty(
311 LayerAnimationElement::OPACITY)) 347 LayerAnimationElement::OPACITY))
312 return animator_->GetTargetOpacity(); 348 return animator_->GetTargetOpacity();
313 return opacity_; 349 return opacity_;
314 } 350 }
315 351
316 void Layer::SetVisible(bool visible) { 352 void Layer::SetVisible(bool visible) {
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
350 if (target != root_layer) 386 if (target != root_layer)
351 target->ConvertPointFromAncestor(root_layer, point); 387 target->ConvertPointFromAncestor(root_layer, point);
352 } 388 }
353 389
354 void Layer::SetFillsBoundsOpaquely(bool fills_bounds_opaquely) { 390 void Layer::SetFillsBoundsOpaquely(bool fills_bounds_opaquely) {
355 if (fills_bounds_opaquely_ == fills_bounds_opaquely) 391 if (fills_bounds_opaquely_ == fills_bounds_opaquely)
356 return; 392 return;
357 393
358 fills_bounds_opaquely_ = fills_bounds_opaquely; 394 fills_bounds_opaquely_ = fills_bounds_opaquely;
359 395
396 #if defined(WEBLAYER_IS_PURE_VIRTUAL)
397 web_layer_->setOpaque(fills_bounds_opaquely);
398 #else
360 web_layer_.setOpaque(fills_bounds_opaquely); 399 web_layer_.setOpaque(fills_bounds_opaquely);
400 #endif
361 RecomputeDebugBorderColor(); 401 RecomputeDebugBorderColor();
362 } 402 }
363 403
364 void Layer::SetExternalTexture(Texture* texture) { 404 void Layer::SetExternalTexture(Texture* texture) {
365 DCHECK_EQ(type_, LAYER_TEXTURED); 405 DCHECK_EQ(type_, LAYER_TEXTURED);
366 layer_updated_externally_ = !!texture; 406 layer_updated_externally_ = !!texture;
367 texture_ = texture; 407 texture_ = texture;
368 if (web_layer_is_accelerated_ != layer_updated_externally_) { 408 if (web_layer_is_accelerated_ != layer_updated_externally_) {
369 // Switch to a different type of layer. 409 // Switch to a different type of layer.
410 #if defined(WEBLAYER_IS_PURE_VIRTUAL)
411 web_layer_->removeAllChildren();
412 content_layer_.reset();
413 solid_color_layer_.reset();
414 WebKit::WebLayer* new_layer = NULL;
415 #else
370 web_layer_.removeAllChildren(); 416 web_layer_.removeAllChildren();
371 WebKit::WebLayer new_layer; 417 WebKit::WebLayer new_layer;
418 #endif
372 if (layer_updated_externally_) { 419 if (layer_updated_externally_) {
420 #if defined(WEBLAYER_IS_PURE_VIRTUAL)
421 texture_layer_.reset(WebKit::WebExternalTextureLayer::create());
422 texture_layer_->setFlipped(texture_->flipped());
423 new_layer = texture_layer_->layer();
424 #else
373 WebKit::WebExternalTextureLayer texture_layer = 425 WebKit::WebExternalTextureLayer texture_layer =
374 WebKit::WebExternalTextureLayer::create(); 426 WebKit::WebExternalTextureLayer::create();
375 texture_layer.setFlipped(texture_->flipped()); 427 texture_layer.setFlipped(texture_->flipped());
376 new_layer = texture_layer; 428 new_layer = texture_layer;
429 #endif
377 } else { 430 } else {
431 #if defined(WEBLAYER_IS_PURE_VIRTUAL)
432 texture_layer_.reset();
433 solid_color_layer_.reset();
434 content_layer_.reset(WebKit::WebContentLayer::create(this));
435 new_layer = content_layer_->layer();
436 #else
378 new_layer = WebKit::WebContentLayer::create(this); 437 new_layer = WebKit::WebContentLayer::create(this);
438 #endif
379 } 439 }
380 if (parent_) { 440 if (parent_) {
441 #if defined(WEBLAYER_IS_PURE_VIRTUAL)
442 DCHECK(parent_->web_layer_);
443 parent_->web_layer_->replaceChild(web_layer_, new_layer);
444 #else
381 DCHECK(!parent_->web_layer_.isNull()); 445 DCHECK(!parent_->web_layer_.isNull());
382 parent_->web_layer_.replaceChild(web_layer_, new_layer); 446 parent_->web_layer_.replaceChild(web_layer_, new_layer);
447 #endif
383 } 448 }
449 #if defined(WEBLAYER_IS_PURE_VIRTUAL)
450 web_layer_= new_layer;
451 #else
384 web_layer_ = new_layer; 452 web_layer_ = new_layer;
453 #endif
385 web_layer_is_accelerated_ = layer_updated_externally_; 454 web_layer_is_accelerated_ = layer_updated_externally_;
386 for (size_t i = 0; i < children_.size(); ++i) { 455 for (size_t i = 0; i < children_.size(); ++i) {
456 #if defined(WEBLAYER_IS_PURE_VIRTUAL)
457 DCHECK(children_[i]->web_layer_);
458 web_layer_->addChild(children_[i]->web_layer_);
459 #else
387 DCHECK(!children_[i]->web_layer_.isNull()); 460 DCHECK(!children_[i]->web_layer_.isNull());
388 web_layer_.addChild(children_[i]->web_layer_); 461 web_layer_.addChild(children_[i]->web_layer_);
462 #endif
389 } 463 }
464 #if defined(WEBLAYER_IS_PURE_VIRTUAL)
465 web_layer_->setAnchorPoint(WebKit::WebFloatPoint(0.f, 0.f));
466 web_layer_->setOpaque(fills_bounds_opaquely_);
467 web_layer_->setOpacity(visible_ ? opacity_ : 0.f);
468 web_layer_->setDebugBorderWidth(show_debug_borders_ ? 2 : 0);
469 web_layer_->setForceRenderSurface(force_render_surface_);
470 #else
390 web_layer_.setAnchorPoint(WebKit::WebFloatPoint(0.f, 0.f)); 471 web_layer_.setAnchorPoint(WebKit::WebFloatPoint(0.f, 0.f));
391 web_layer_.setOpaque(fills_bounds_opaquely_); 472 web_layer_.setOpaque(fills_bounds_opaquely_);
392 web_layer_.setOpacity(visible_ ? opacity_ : 0.f); 473 web_layer_.setOpacity(visible_ ? opacity_ : 0.f);
393 web_layer_.setDebugBorderWidth(show_debug_borders_ ? 2 : 0); 474 web_layer_.setDebugBorderWidth(show_debug_borders_ ? 2 : 0);
394 web_layer_.setForceRenderSurface(force_render_surface_); 475 web_layer_.setForceRenderSurface(force_render_surface_);
476 #endif
395 RecomputeTransform(); 477 RecomputeTransform();
396 RecomputeDebugBorderColor(); 478 RecomputeDebugBorderColor();
397 } 479 }
398 RecomputeDrawsContentAndUVRect(); 480 RecomputeDrawsContentAndUVRect();
399 } 481 }
400 482
401 void Layer::SetColor(SkColor color) { 483 void Layer::SetColor(SkColor color) {
402 DCHECK_EQ(type_, LAYER_SOLID_COLOR); 484 DCHECK_EQ(type_, LAYER_SOLID_COLOR);
403 // WebColor is equivalent to SkColor, per WebColor.h. 485 // WebColor is equivalent to SkColor, per WebColor.h.
486 #if defined(WEBLAYER_IS_PURE_VIRTUAL)
487 solid_color_layer_->setBackgroundColor(static_cast<WebKit::WebColor>(color));
488 #else
404 web_layer_.to<WebKit::WebSolidColorLayer>().setBackgroundColor( 489 web_layer_.to<WebKit::WebSolidColorLayer>().setBackgroundColor(
405 static_cast<WebKit::WebColor>(color)); 490 static_cast<WebKit::WebColor>(color));
491 #endif
406 SetFillsBoundsOpaquely(SkColorGetA(color) == 0xFF); 492 SetFillsBoundsOpaquely(SkColorGetA(color) == 0xFF);
407 } 493 }
408 494
409 bool Layer::SchedulePaint(const gfx::Rect& invalid_rect) { 495 bool Layer::SchedulePaint(const gfx::Rect& invalid_rect) {
410 if (type_ == LAYER_SOLID_COLOR || (!delegate_ && !texture_)) 496 if (type_ == LAYER_SOLID_COLOR || (!delegate_ && !texture_))
411 return false; 497 return false;
412 498
413 damaged_region_.op(invalid_rect.x(), 499 damaged_region_.op(invalid_rect.x(),
414 invalid_rect.y(), 500 invalid_rect.y(),
415 invalid_rect.right(), 501 invalid_rect.right(),
(...skipping 24 matching lines...) Expand all
440 damaged.Inset(-1, -1); 526 damaged.Inset(-1, -1);
441 damaged = damaged.Intersect(gfx::Rect(bounds_.size())); 527 damaged = damaged.Intersect(gfx::Rect(bounds_.size()));
442 } 528 }
443 529
444 gfx::Rect damaged_in_pixel = ConvertRectToPixel(this, damaged); 530 gfx::Rect damaged_in_pixel = ConvertRectToPixel(this, damaged);
445 WebKit::WebFloatRect web_rect( 531 WebKit::WebFloatRect web_rect(
446 damaged_in_pixel.x(), 532 damaged_in_pixel.x(),
447 damaged_in_pixel.y(), 533 damaged_in_pixel.y(),
448 damaged_in_pixel.width(), 534 damaged_in_pixel.width(),
449 damaged_in_pixel.height()); 535 damaged_in_pixel.height());
536 #if defined(WEBLAYER_IS_PURE_VIRTUAL)
537 web_layer_->invalidateRect(web_rect);
538 #else
450 if (!web_layer_is_accelerated_) 539 if (!web_layer_is_accelerated_)
451 web_layer_.to<WebKit::WebContentLayer>().invalidateRect(web_rect); 540 web_layer_.to<WebKit::WebContentLayer>().invalidateRect(web_rect);
452 else 541 else
453 web_layer_.to<WebKit::WebExternalTextureLayer>().invalidateRect( 542 web_layer_.to<WebKit::WebExternalTextureLayer>().invalidateRect(
454 web_rect); 543 web_rect);
544 #endif
455 } 545 }
456 damaged_region_.setEmpty(); 546 damaged_region_.setEmpty();
457 } 547 }
458 for (size_t i = 0; i < children_.size(); ++i) 548 for (size_t i = 0; i < children_.size(); ++i)
459 children_[i]->SendDamagedRects(); 549 children_[i]->SendDamagedRects();
460 } 550 }
461 551
462 void Layer::SuppressPaint() { 552 void Layer::SuppressPaint() {
463 if (!delegate_) 553 if (!delegate_)
464 return; 554 return;
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
501 delegate_->OnPaintLayer(canvas.get()); 591 delegate_->OnPaintLayer(canvas.get());
502 if (scale_content_) 592 if (scale_content_)
503 canvas->Restore(); 593 canvas->Restore();
504 } 594 }
505 595
506 void Layer::SetForceRenderSurface(bool force) { 596 void Layer::SetForceRenderSurface(bool force) {
507 if (force_render_surface_ == force) 597 if (force_render_surface_ == force)
508 return; 598 return;
509 599
510 force_render_surface_ = force; 600 force_render_surface_ = force;
601 #if defined(WEBLAYER_IS_PURE_VIRTUAL)
602 web_layer_->setForceRenderSurface(force_render_surface_);
603 #else
511 web_layer_.setForceRenderSurface(force_render_surface_); 604 web_layer_.setForceRenderSurface(force_render_surface_);
605 #endif
512 } 606 }
513 607
514 float Layer::GetCombinedOpacity() const { 608 float Layer::GetCombinedOpacity() const {
515 float opacity = opacity_; 609 float opacity = opacity_;
516 Layer* current = this->parent_; 610 Layer* current = this->parent_;
517 while (current) { 611 while (current) {
518 opacity *= current->opacity_; 612 opacity *= current->opacity_;
519 current = current->parent_; 613 current = current->parent_;
520 } 614 }
521 return opacity; 615 return opacity;
(...skipping 11 matching lines...) Expand all
533 if ((above && child_i == other_i + 1) || (!above && child_i + 1 == other_i)) 627 if ((above && child_i == other_i + 1) || (!above && child_i + 1 == other_i))
534 return; 628 return;
535 629
536 const size_t dest_i = 630 const size_t dest_i =
537 above ? 631 above ?
538 (child_i < other_i ? other_i : other_i + 1) : 632 (child_i < other_i ? other_i : other_i + 1) :
539 (child_i < other_i ? other_i - 1 : other_i); 633 (child_i < other_i ? other_i - 1 : other_i);
540 children_.erase(children_.begin() + child_i); 634 children_.erase(children_.begin() + child_i);
541 children_.insert(children_.begin() + dest_i, child); 635 children_.insert(children_.begin() + dest_i, child);
542 636
637 #if defined(WEBLAYER_IS_PURE_VIRTUAL)
638 child->web_layer_->removeFromParent();
639 web_layer_->insertChild(child->web_layer_, dest_i);
640 #else
543 child->web_layer_.removeFromParent(); 641 child->web_layer_.removeFromParent();
544 web_layer_.insertChild(child->web_layer_, dest_i); 642 web_layer_.insertChild(child->web_layer_, dest_i);
643 #endif
545 } 644 }
546 645
547 bool Layer::ConvertPointForAncestor(const Layer* ancestor, 646 bool Layer::ConvertPointForAncestor(const Layer* ancestor,
548 gfx::Point* point) const { 647 gfx::Point* point) const {
549 ui::Transform transform; 648 ui::Transform transform;
550 bool result = GetTransformRelativeTo(ancestor, &transform); 649 bool result = GetTransformRelativeTo(ancestor, &transform);
551 gfx::Point3f p(*point); 650 gfx::Point3f p(*point);
552 transform.TransformPoint(p); 651 transform.TransformPoint(p);
553 *point = p.AsPoint(); 652 *point = p.AsPoint();
554 return result; 653 return result;
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
606 transform_ = transform; 705 transform_ = transform;
607 706
608 RecomputeTransform(); 707 RecomputeTransform();
609 } 708 }
610 709
611 void Layer::SetOpacityImmediately(float opacity) { 710 void Layer::SetOpacityImmediately(float opacity) {
612 bool schedule_draw = (opacity != opacity_ && IsDrawn()); 711 bool schedule_draw = (opacity != opacity_ && IsDrawn());
613 opacity_ = opacity; 712 opacity_ = opacity;
614 713
615 if (visible_) 714 if (visible_)
715 #if defined(WEBLAYER_IS_PURE_VIRTUAL)
716 web_layer_->setOpacity(opacity);
717 #else
616 web_layer_.setOpacity(opacity); 718 web_layer_.setOpacity(opacity);
719 #endif
617 RecomputeDebugBorderColor(); 720 RecomputeDebugBorderColor();
618 if (schedule_draw) 721 if (schedule_draw)
619 ScheduleDraw(); 722 ScheduleDraw();
620 } 723 }
621 724
622 void Layer::SetVisibilityImmediately(bool visible) { 725 void Layer::SetVisibilityImmediately(bool visible) {
623 if (visible_ == visible) 726 if (visible_ == visible)
624 return; 727 return;
625 728
626 visible_ = visible; 729 visible_ = visible;
627 // TODO(piman): Expose a visibility flag on WebLayer. 730 // TODO(piman): Expose a visibility flag on WebLayer.
731 #if defined(WEBLAYER_IS_PURE_VIRTUAL)
732 web_layer_->setOpacity(visible_ ? opacity_ : 0.f);
733 #else
628 web_layer_.setOpacity(visible_ ? opacity_ : 0.f); 734 web_layer_.setOpacity(visible_ ? opacity_ : 0.f);
735 #endif
629 } 736 }
630 737
631 void Layer::SetBrightnessImmediately(float brightness) { 738 void Layer::SetBrightnessImmediately(float brightness) {
632 layer_brightness_ = brightness; 739 layer_brightness_ = brightness;
633 SetLayerFilters(); 740 SetLayerFilters();
634 } 741 }
635 742
636 void Layer::SetGrayscaleImmediately(float grayscale) { 743 void Layer::SetGrayscaleImmediately(float grayscale) {
637 layer_grayscale_ = grayscale; 744 layer_grayscale_ = grayscale;
638 SetLayerFilters(); 745 SetLayerFilters();
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
683 790
684 float Layer::GetBrightnessForAnimation() const { 791 float Layer::GetBrightnessForAnimation() const {
685 return layer_brightness(); 792 return layer_brightness();
686 } 793 }
687 794
688 float Layer::GetGrayscaleForAnimation() const { 795 float Layer::GetGrayscaleForAnimation() const {
689 return layer_grayscale(); 796 return layer_grayscale();
690 } 797 }
691 798
692 void Layer::CreateWebLayer() { 799 void Layer::CreateWebLayer() {
800 #if defined(WEBLAYER_IS_PURE_VIRTUAL)
801 if (type_ == LAYER_SOLID_COLOR) {
802 solid_color_layer_.reset(WebKit::WebSolidColorLayer::create());
803 web_layer_ = solid_color_layer_->layer();
804 } else {
805 solid_color_layer_.reset();
806 texture_layer_.reset();
piman 2012/08/18 00:34:18 nit: you can get rid of those 2 as well.
jamesr 2012/08/18 00:35:41 I see, I missed that this was private and just cal
807 content_layer_.reset(WebKit::WebContentLayer::create(this));
808 web_layer_ = content_layer_->layer();
809 }
810 #else
693 if (type_ == LAYER_SOLID_COLOR) 811 if (type_ == LAYER_SOLID_COLOR)
694 web_layer_ = WebKit::WebSolidColorLayer::create(); 812 web_layer_ = WebKit::WebSolidColorLayer::create();
695 else 813 else
696 web_layer_ = WebKit::WebContentLayer::create(this); 814 web_layer_ = WebKit::WebContentLayer::create(this);
697 web_layer_.setAnchorPoint(WebKit::WebFloatPoint(0.f, 0.f)); 815 #endif
698 web_layer_.setOpaque(true);
699 web_layer_is_accelerated_ = false; 816 web_layer_is_accelerated_ = false;
700 show_debug_borders_ = CommandLine::ForCurrentProcess()->HasSwitch( 817 show_debug_borders_ = CommandLine::ForCurrentProcess()->HasSwitch(
701 switches::kUIShowLayerBorders); 818 switches::kUIShowLayerBorders);
819 #if defined(WEBLAYER_IS_PURE_VIRTUAL)
820 web_layer_->setAnchorPoint(WebKit::WebFloatPoint(0.f, 0.f));
821 web_layer_->setOpaque(true);
822 web_layer_->setDebugBorderWidth(show_debug_borders_ ? 2 : 0);
823 #else
824 web_layer_.setAnchorPoint(WebKit::WebFloatPoint(0.f, 0.f));
825 web_layer_.setOpaque(true);
702 web_layer_.setDebugBorderWidth(show_debug_borders_ ? 2 : 0); 826 web_layer_.setDebugBorderWidth(show_debug_borders_ ? 2 : 0);
827 #endif
703 } 828 }
704 829
705 void Layer::RecomputeTransform() { 830 void Layer::RecomputeTransform() {
706 ui::Transform scale_translate; 831 ui::Transform scale_translate;
707 scale_translate.matrix().set3x3(device_scale_factor_, 0, 0, 832 scale_translate.matrix().set3x3(device_scale_factor_, 0, 0,
708 0, device_scale_factor_, 0, 833 0, device_scale_factor_, 0,
709 0, 0, 1); 834 0, 0, 1);
710 // Start with the inverse matrix of above. 835 // Start with the inverse matrix of above.
711 Transform transform; 836 Transform transform;
712 transform.matrix().set3x3(1.0f / device_scale_factor_, 0, 0, 837 transform.matrix().set3x3(1.0f / device_scale_factor_, 0, 0,
713 0, 1.0f / device_scale_factor_, 0, 838 0, 1.0f / device_scale_factor_, 0,
714 0, 0, 1); 839 0, 0, 1);
715 transform.ConcatTransform(transform_); 840 transform.ConcatTransform(transform_);
716 transform.ConcatTranslate(bounds_.x(), bounds_.y()); 841 transform.ConcatTranslate(bounds_.x(), bounds_.y());
717 transform.ConcatTransform(scale_translate); 842 transform.ConcatTransform(scale_translate);
843 #if defined(WEBLAYER_IS_PURE_VIRTUAL)
844 web_layer_->setTransform(transform.matrix());
845 #else
718 web_layer_.setTransform(transform.matrix()); 846 web_layer_.setTransform(transform.matrix());
847 #endif
719 } 848 }
720 849
721 void Layer::RecomputeDrawsContentAndUVRect() { 850 void Layer::RecomputeDrawsContentAndUVRect() {
851 #if defined(WEBLAYER_IS_PURE_VIRTUAL)
852 DCHECK(web_layer_);
853 #else
722 DCHECK(!web_layer_.isNull()); 854 DCHECK(!web_layer_.isNull());
855 #endif
723 bool should_draw = type_ != LAYER_NOT_DRAWN; 856 bool should_draw = type_ != LAYER_NOT_DRAWN;
724 if (!web_layer_is_accelerated_) { 857 if (!web_layer_is_accelerated_) {
725 if (type_ != LAYER_SOLID_COLOR) 858 if (type_ != LAYER_SOLID_COLOR) {
859 #if defined(WEBLAYER_IS_PURE_VIRTUAL)
860 web_layer_->setDrawsContent(should_draw);
861 #else
726 web_layer_.to<WebKit::WebContentLayer>().setDrawsContent(should_draw); 862 web_layer_.to<WebKit::WebContentLayer>().setDrawsContent(should_draw);
863 #endif
864 }
865 #if defined(WEBLAYER_IS_PURE_VIRTUAL)
866 web_layer_->setBounds(ConvertSizeToPixel(this, bounds_.size()));
867 #else
727 web_layer_.setBounds(ConvertSizeToPixel(this, bounds_.size())); 868 web_layer_.setBounds(ConvertSizeToPixel(this, bounds_.size()));
869 #endif
728 } else { 870 } else {
729 DCHECK(texture_); 871 DCHECK(texture_);
730 unsigned int texture_id = texture_->texture_id(); 872 unsigned int texture_id = texture_->texture_id();
873 #if defined(WEBLAYER_IS_PURE_VIRTUAL)
874 texture_layer_->setTextureId(should_draw ? texture_id : 0);
875 #else
731 WebKit::WebExternalTextureLayer texture_layer = 876 WebKit::WebExternalTextureLayer texture_layer =
732 web_layer_.to<WebKit::WebExternalTextureLayer>(); 877 web_layer_.to<WebKit::WebExternalTextureLayer>();
733 texture_layer.setTextureId(should_draw ? texture_id : 0); 878 texture_layer.setTextureId(should_draw ? texture_id : 0);
879 #endif
734 880
735 gfx::Size texture_size; 881 gfx::Size texture_size;
736 if (scale_content_) 882 if (scale_content_)
737 texture_size = texture_->size(); 883 texture_size = texture_->size();
738 else 884 else
739 texture_size = ConvertSizeToDIP(this, texture_->size()); 885 texture_size = ConvertSizeToDIP(this, texture_->size());
740 886
741 gfx::Size size(std::min(bounds().width(), texture_size.width()), 887 gfx::Size size(std::min(bounds().width(), texture_size.width()),
742 std::min(bounds().height(), texture_size.height())); 888 std::min(bounds().height(), texture_size.height()));
743 WebKit::WebFloatRect rect( 889 WebKit::WebFloatRect rect(
744 0, 890 0,
745 0, 891 0,
746 static_cast<float>(size.width())/texture_size.width(), 892 static_cast<float>(size.width())/texture_size.width(),
747 static_cast<float>(size.height())/texture_size.height()); 893 static_cast<float>(size.height())/texture_size.height());
894 #if defined(WEBLAYER_IS_PURE_VIRTUAL)
895 texture_layer_->setUVRect(rect);
896 #else
748 texture_layer.setUVRect(rect); 897 texture_layer.setUVRect(rect);
898 #endif
749 899
750 gfx::Size size_in_pixel = ConvertSizeToPixel(this, size); 900 gfx::Size size_in_pixel = ConvertSizeToPixel(this, size);
901 #if defined(WEBLAYER_IS_PURE_VIRTUAL)
902 web_layer_->setBounds(size_in_pixel);
903 #else
751 web_layer_.setBounds(size_in_pixel); 904 web_layer_.setBounds(size_in_pixel);
905 #endif
752 } 906 }
753 } 907 }
754 908
755 void Layer::RecomputeDebugBorderColor() { 909 void Layer::RecomputeDebugBorderColor() {
756 if (!show_debug_borders_) 910 if (!show_debug_borders_)
757 return; 911 return;
758 unsigned int color = 0xFF000000; 912 unsigned int color = 0xFF000000;
759 color |= web_layer_is_accelerated_ ? 0x0000FF00 : 0x00FF0000; 913 color |= web_layer_is_accelerated_ ? 0x0000FF00 : 0x00FF0000;
760 bool opaque = fills_bounds_opaquely_ && (GetCombinedOpacity() == 1.f); 914 bool opaque = fills_bounds_opaquely_ && (GetCombinedOpacity() == 1.f);
761 if (!opaque) 915 if (!opaque)
762 color |= 0xFF; 916 color |= 0xFF;
917 #if defined(WEBLAYER_IS_PURE_VIRTUAL)
918 web_layer_->setDebugBorderColor(color);
919 #else
763 web_layer_.setDebugBorderColor(color); 920 web_layer_.setDebugBorderColor(color);
921 #endif
764 } 922 }
765 923
766 } // namespace ui 924 } // namespace ui
OLDNEW
« no previous file with comments | « ui/compositor/layer.h ('k') | ui/compositor/layer_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698