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

Side by Side Diff: Source/core/platform/graphics/GraphicsLayer.cpp

Issue 16688004: Large canvas does not honor containing div's border radius (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Replaced explicit baselines with NeedsRebaseline 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2009 Apple Inc. All rights reserved. 2 * Copyright (C) 2009 Apple Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
91 , m_contentsOpaque(false) 91 , m_contentsOpaque(false)
92 , m_preserves3D(false) 92 , m_preserves3D(false)
93 , m_backfaceVisibility(true) 93 , m_backfaceVisibility(true)
94 , m_masksToBounds(false) 94 , m_masksToBounds(false)
95 , m_drawsContent(false) 95 , m_drawsContent(false)
96 , m_contentsVisible(true) 96 , m_contentsVisible(true)
97 , m_paintingPhase(GraphicsLayerPaintAllWithOverflowClip) 97 , m_paintingPhase(GraphicsLayerPaintAllWithOverflowClip)
98 , m_contentsOrientation(CompositingCoordinatesTopDown) 98 , m_contentsOrientation(CompositingCoordinatesTopDown)
99 , m_parent(0) 99 , m_parent(0)
100 , m_maskLayer(0) 100 , m_maskLayer(0)
101 , m_contentsClippingMaskLayer(0)
101 , m_replicaLayer(0) 102 , m_replicaLayer(0)
102 , m_replicatedLayer(0) 103 , m_replicatedLayer(0)
103 , m_paintCount(0) 104 , m_paintCount(0)
104 , m_contentsLayer(0) 105 , m_contentsLayer(0)
105 , m_contentsLayerId(0) 106 , m_contentsLayerId(0)
106 , m_contentsLayerPurpose(NoContentsLayer) 107 , m_contentsLayerPurpose(NoContentsLayer)
107 , m_scrollableArea(0) 108 , m_scrollableArea(0)
108 , m_compositingReasons(WebKit::CompositingReasonUnknown) 109 , m_compositingReasons(WebKit::CompositingReasonUnknown)
109 { 110 {
110 #ifndef NDEBUG 111 #ifndef NDEBUG
(...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after
424 } 425 }
425 426
426 void GraphicsLayer::updateContentsRect() 427 void GraphicsLayer::updateContentsRect()
427 { 428 {
428 WebLayer* contentsLayer = contentsLayerIfRegistered(); 429 WebLayer* contentsLayer = contentsLayerIfRegistered();
429 if (!contentsLayer) 430 if (!contentsLayer)
430 return; 431 return;
431 432
432 contentsLayer->setPosition(FloatPoint(m_contentsRect.x(), m_contentsRect.y() )); 433 contentsLayer->setPosition(FloatPoint(m_contentsRect.x(), m_contentsRect.y() ));
433 contentsLayer->setBounds(IntSize(m_contentsRect.width(), m_contentsRect.heig ht())); 434 contentsLayer->setBounds(IntSize(m_contentsRect.width(), m_contentsRect.heig ht()));
435
436 if (m_contentsClippingMaskLayer) {
437 if (m_contentsClippingMaskLayer->size() != m_contentsRect.size()) {
438 m_contentsClippingMaskLayer->setSize(m_contentsRect.size());
439 m_contentsClippingMaskLayer->setNeedsDisplay();
440 }
441 m_contentsClippingMaskLayer->setPosition(FloatPoint());
442 m_contentsClippingMaskLayer->setOffsetFromRenderer(offsetFromRenderer() + IntSize(m_contentsRect.location().x(), m_contentsRect.location().y()));
443 }
434 } 444 }
435 445
436 static HashSet<int>* s_registeredLayerSet; 446 static HashSet<int>* s_registeredLayerSet;
437 447
438 void GraphicsLayer::registerContentsLayer(WebLayer* layer) 448 void GraphicsLayer::registerContentsLayer(WebLayer* layer)
439 { 449 {
440 if (!s_registeredLayerSet) 450 if (!s_registeredLayerSet)
441 s_registeredLayerSet = new HashSet<int>; 451 s_registeredLayerSet = new HashSet<int>;
442 if (s_registeredLayerSet->contains(layer->id())) 452 if (s_registeredLayerSet->contains(layer->id()))
443 CRASH(); 453 CRASH();
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
489 m_contentsLayer->setAnchorPoint(FloatPoint(0, 0)); 499 m_contentsLayer->setAnchorPoint(FloatPoint(0, 0));
490 m_contentsLayer->setUseParentBackfaceVisibility(true); 500 m_contentsLayer->setUseParentBackfaceVisibility(true);
491 501
492 // It is necessary to call setDrawsContent as soon as we receive the new contentsLayer, for 502 // It is necessary to call setDrawsContent as soon as we receive the new contentsLayer, for
493 // the correctness of early exit conditions in setDrawsContent() and set ContentsVisible(). 503 // the correctness of early exit conditions in setDrawsContent() and set ContentsVisible().
494 m_contentsLayer->setDrawsContent(m_contentsVisible); 504 m_contentsLayer->setDrawsContent(m_contentsVisible);
495 505
496 // Insert the content layer first. Video elements require this, because they have 506 // Insert the content layer first. Video elements require this, because they have
497 // shadow content that must display in front of the video. 507 // shadow content that must display in front of the video.
498 m_layer->layer()->insertChild(m_contentsLayer, 0); 508 m_layer->layer()->insertChild(m_contentsLayer, 0);
509 WebLayer* borderWebLayer = m_contentsClippingMaskLayer ? m_contentsClipp ingMaskLayer->platformLayer() : 0;
510 m_contentsLayer->setMaskLayer(borderWebLayer);
499 } 511 }
500 } 512 }
501 513
502 void GraphicsLayer::clearContentsLayerIfUnregistered() 514 void GraphicsLayer::clearContentsLayerIfUnregistered()
503 { 515 {
504 if (!m_contentsLayerId || s_registeredLayerSet->contains(m_contentsLayerId)) 516 if (!m_contentsLayerId || s_registeredLayerSet->contains(m_contentsLayerId))
505 return; 517 return;
506 518
507 m_contentsLayer = 0; 519 m_contentsLayer = 0;
508 m_contentsLayerId = 0; 520 m_contentsLayerId = 0;
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
697 ts << "GraphicsLayerPaintBackground\n"; 709 ts << "GraphicsLayerPaintBackground\n";
698 } 710 }
699 if (paintingPhase() & GraphicsLayerPaintForeground) { 711 if (paintingPhase() & GraphicsLayerPaintForeground) {
700 writeIndent(ts, indent + 2); 712 writeIndent(ts, indent + 2);
701 ts << "GraphicsLayerPaintForeground\n"; 713 ts << "GraphicsLayerPaintForeground\n";
702 } 714 }
703 if (paintingPhase() & GraphicsLayerPaintMask) { 715 if (paintingPhase() & GraphicsLayerPaintMask) {
704 writeIndent(ts, indent + 2); 716 writeIndent(ts, indent + 2);
705 ts << "GraphicsLayerPaintMask\n"; 717 ts << "GraphicsLayerPaintMask\n";
706 } 718 }
719 if (paintingPhase() & GraphicsLayerPaintChildClippingMask) {
720 writeIndent(ts, indent + 2);
721 ts << "GraphicsLayerPaintChildClippingMask\n";
722 }
707 if (paintingPhase() & GraphicsLayerPaintOverflowContents) { 723 if (paintingPhase() & GraphicsLayerPaintOverflowContents) {
708 writeIndent(ts, indent + 2); 724 writeIndent(ts, indent + 2);
709 ts << "GraphicsLayerPaintOverflowContents\n"; 725 ts << "GraphicsLayerPaintOverflowContents\n";
710 } 726 }
711 if (paintingPhase() & GraphicsLayerPaintCompositedScroll) { 727 if (paintingPhase() & GraphicsLayerPaintCompositedScroll) {
712 writeIndent(ts, indent + 2); 728 writeIndent(ts, indent + 2);
713 ts << "GraphicsLayerPaintCompositedScroll\n"; 729 ts << "GraphicsLayerPaintCompositedScroll\n";
714 } 730 }
715 writeIndent(ts, indent + 1); 731 writeIndent(ts, indent + 1);
716 ts << ")\n"; 732 ts << ")\n";
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
869 void GraphicsLayer::setMaskLayer(GraphicsLayer* maskLayer) 885 void GraphicsLayer::setMaskLayer(GraphicsLayer* maskLayer)
870 { 886 {
871 if (maskLayer == m_maskLayer) 887 if (maskLayer == m_maskLayer)
872 return; 888 return;
873 889
874 m_maskLayer = maskLayer; 890 m_maskLayer = maskLayer;
875 WebLayer* maskWebLayer = m_maskLayer ? m_maskLayer->platformLayer() : 0; 891 WebLayer* maskWebLayer = m_maskLayer ? m_maskLayer->platformLayer() : 0;
876 m_layer->layer()->setMaskLayer(maskWebLayer); 892 m_layer->layer()->setMaskLayer(maskWebLayer);
877 } 893 }
878 894
895 void GraphicsLayer::setContentsClippingMaskLayer(GraphicsLayer* contentsClipping MaskLayer)
896 {
897 if (contentsClippingMaskLayer == m_contentsClippingMaskLayer)
898 return;
899
900 m_contentsClippingMaskLayer = contentsClippingMaskLayer;
901 WebLayer* contentsClippingMaskWebLayer = m_contentsClippingMaskLayer ? m_con tentsClippingMaskLayer->platformLayer() : 0;
902 if (hasContentsLayer())
903 contentsLayer()->setMaskLayer(contentsClippingMaskWebLayer);
904 updateContentsRect();
905 }
906
879 void GraphicsLayer::setBackfaceVisibility(bool visible) 907 void GraphicsLayer::setBackfaceVisibility(bool visible)
880 { 908 {
881 m_backfaceVisibility = visible; 909 m_backfaceVisibility = visible;
882 m_layer->setDoubleSided(m_backfaceVisibility); 910 m_layer->setDoubleSided(m_backfaceVisibility);
883 } 911 }
884 912
885 void GraphicsLayer::setOpacity(float opacity) 913 void GraphicsLayer::setOpacity(float opacity)
886 { 914 {
887 float clampedOpacity = std::max(std::min(opacity, 1.0f), 0.0f); 915 float clampedOpacity = std::max(std::min(opacity, 1.0f), 0.0f);
888 m_opacity = clampedOpacity; 916 m_opacity = clampedOpacity;
(...skipping 322 matching lines...) Expand 10 before | Expand all | Expand 10 after
1211 #ifndef NDEBUG 1239 #ifndef NDEBUG
1212 void showGraphicsLayerTree(const WebCore::GraphicsLayer* layer) 1240 void showGraphicsLayerTree(const WebCore::GraphicsLayer* layer)
1213 { 1241 {
1214 if (!layer) 1242 if (!layer)
1215 return; 1243 return;
1216 1244
1217 String output = layer->layerTreeAsText(WebCore::LayerTreeIncludesDebugInfo); 1245 String output = layer->layerTreeAsText(WebCore::LayerTreeIncludesDebugInfo);
1218 fprintf(stderr, "%s\n", output.utf8().data()); 1246 fprintf(stderr, "%s\n", output.utf8().data());
1219 } 1247 }
1220 #endif 1248 #endif
OLDNEW
« no previous file with comments | « Source/core/platform/graphics/GraphicsLayer.h ('k') | Source/core/platform/graphics/GraphicsLayerClient.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698