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

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

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