| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2004, 2006, 2007 Apple Inc. All rights reserved. | 2 * Copyright (C) 2004, 2006, 2007 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 17 matching lines...) Expand all Loading... |
| 28 | 28 |
| 29 #include "core/HTMLNames.h" | 29 #include "core/HTMLNames.h" |
| 30 #include "core/css/StylePropertySet.h" | 30 #include "core/css/StylePropertySet.h" |
| 31 #include "core/dom/Document.h" | 31 #include "core/dom/Document.h" |
| 32 #include "core/dom/PseudoElement.h" | 32 #include "core/dom/PseudoElement.h" |
| 33 #include "core/editing/FrameSelection.h" | 33 #include "core/editing/FrameSelection.h" |
| 34 #include "core/frame/FrameView.h" | 34 #include "core/frame/FrameView.h" |
| 35 #include "core/frame/LocalFrame.h" | 35 #include "core/frame/LocalFrame.h" |
| 36 #include "core/frame/Settings.h" | 36 #include "core/frame/Settings.h" |
| 37 #include "core/html/HTMLElement.h" | 37 #include "core/html/HTMLElement.h" |
| 38 #include "core/layout/Layer.h" |
| 38 #include "core/layout/LayoutTableCell.h" | 39 #include "core/layout/LayoutTableCell.h" |
| 39 #include "core/layout/compositing/CompositedLayerMapping.h" | 40 #include "core/layout/compositing/CompositedLayerMapping.h" |
| 40 #include "core/page/PrintContext.h" | 41 #include "core/page/PrintContext.h" |
| 41 #include "core/rendering/InlineTextBox.h" | 42 #include "core/rendering/InlineTextBox.h" |
| 42 #include "core/rendering/RenderBR.h" | 43 #include "core/rendering/RenderBR.h" |
| 43 #include "core/rendering/RenderDetailsMarker.h" | 44 #include "core/rendering/RenderDetailsMarker.h" |
| 44 #include "core/rendering/RenderFileUploadControl.h" | 45 #include "core/rendering/RenderFileUploadControl.h" |
| 45 #include "core/rendering/RenderInline.h" | 46 #include "core/rendering/RenderInline.h" |
| 46 #include "core/rendering/RenderLayer.h" | |
| 47 #include "core/rendering/RenderListItem.h" | 47 #include "core/rendering/RenderListItem.h" |
| 48 #include "core/rendering/RenderListMarker.h" | 48 #include "core/rendering/RenderListMarker.h" |
| 49 #include "core/rendering/RenderPart.h" | 49 #include "core/rendering/RenderPart.h" |
| 50 #include "core/rendering/RenderView.h" | 50 #include "core/rendering/RenderView.h" |
| 51 #include "core/rendering/svg/RenderSVGContainer.h" | 51 #include "core/rendering/svg/RenderSVGContainer.h" |
| 52 #include "core/rendering/svg/RenderSVGGradientStop.h" | 52 #include "core/rendering/svg/RenderSVGGradientStop.h" |
| 53 #include "core/rendering/svg/RenderSVGImage.h" | 53 #include "core/rendering/svg/RenderSVGImage.h" |
| 54 #include "core/rendering/svg/RenderSVGInlineText.h" | 54 #include "core/rendering/svg/RenderSVGInlineText.h" |
| 55 #include "core/rendering/svg/RenderSVGPath.h" | 55 #include "core/rendering/svg/RenderSVGPath.h" |
| 56 #include "core/rendering/svg/RenderSVGRoot.h" | 56 #include "core/rendering/svg/RenderSVGRoot.h" |
| (...skipping 427 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 484 write(ts, *child, indent + 1, behavior); | 484 write(ts, *child, indent + 1, behavior); |
| 485 } | 485 } |
| 486 | 486 |
| 487 if (o.isRenderPart()) { | 487 if (o.isRenderPart()) { |
| 488 Widget* widget = toRenderPart(o).widget(); | 488 Widget* widget = toRenderPart(o).widget(); |
| 489 if (widget && widget->isFrameView()) { | 489 if (widget && widget->isFrameView()) { |
| 490 FrameView* view = toFrameView(widget); | 490 FrameView* view = toFrameView(widget); |
| 491 RenderView* root = view->renderView(); | 491 RenderView* root = view->renderView(); |
| 492 if (root) { | 492 if (root) { |
| 493 view->layout(); | 493 view->layout(); |
| 494 RenderLayer* layer = root->layer(); | 494 Layer* layer = root->layer(); |
| 495 if (layer) | 495 if (layer) |
| 496 LayoutTreeAsText::writeLayers(ts, layer, layer, layer->rect(
), indent + 1, behavior); | 496 LayoutTreeAsText::writeLayers(ts, layer, layer, layer->rect(
), indent + 1, behavior); |
| 497 } | 497 } |
| 498 } | 498 } |
| 499 } | 499 } |
| 500 } | 500 } |
| 501 | 501 |
| 502 enum LayerPaintPhase { | 502 enum LayerPaintPhase { |
| 503 LayerPaintPhaseAll = 0, | 503 LayerPaintPhaseAll = 0, |
| 504 LayerPaintPhaseBackground = -1, | 504 LayerPaintPhaseBackground = -1, |
| 505 LayerPaintPhaseForeground = 1 | 505 LayerPaintPhaseForeground = 1 |
| 506 }; | 506 }; |
| 507 | 507 |
| 508 static void write(TextStream& ts, RenderLayer& layer, | 508 static void write(TextStream& ts, Layer& layer, |
| 509 const LayoutRect& layerBounds, const LayoutRect& backgroundClipRect, const L
ayoutRect& clipRect, const LayoutRect& outlineClipRect, | 509 const LayoutRect& layerBounds, const LayoutRect& backgroundClipRect, const L
ayoutRect& clipRect, const LayoutRect& outlineClipRect, |
| 510 LayerPaintPhase paintPhase = LayerPaintPhaseAll, int indent = 0, LayoutAsTex
tBehavior behavior = LayoutAsTextBehaviorNormal) | 510 LayerPaintPhase paintPhase = LayerPaintPhaseAll, int indent = 0, LayoutAsTex
tBehavior behavior = LayoutAsTextBehaviorNormal) |
| 511 { | 511 { |
| 512 IntRect adjustedLayoutBounds = pixelSnappedIntRect(layerBounds); | 512 IntRect adjustedLayoutBounds = pixelSnappedIntRect(layerBounds); |
| 513 IntRect adjustedLayoutBoundsWithScrollbars = adjustedLayoutBounds; | 513 IntRect adjustedLayoutBoundsWithScrollbars = adjustedLayoutBounds; |
| 514 IntRect adjustedBackgroundClipRect = pixelSnappedIntRect(backgroundClipRect)
; | 514 IntRect adjustedBackgroundClipRect = pixelSnappedIntRect(backgroundClipRect)
; |
| 515 IntRect adjustedClipRect = pixelSnappedIntRect(clipRect); | 515 IntRect adjustedClipRect = pixelSnappedIntRect(clipRect); |
| 516 IntRect adjustedOutlineClipRect = pixelSnappedIntRect(outlineClipRect); | 516 IntRect adjustedOutlineClipRect = pixelSnappedIntRect(outlineClipRect); |
| 517 | 517 |
| 518 Settings* settings = layer.renderer()->document().settings(); | 518 Settings* settings = layer.renderer()->document().settings(); |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 584 << ")"; | 584 << ")"; |
| 585 } | 585 } |
| 586 } | 586 } |
| 587 | 587 |
| 588 ts << "\n"; | 588 ts << "\n"; |
| 589 | 589 |
| 590 if (paintPhase != LayerPaintPhaseBackground) | 590 if (paintPhase != LayerPaintPhaseBackground) |
| 591 write(ts, *layer.renderer(), indent + 1, behavior); | 591 write(ts, *layer.renderer(), indent + 1, behavior); |
| 592 } | 592 } |
| 593 | 593 |
| 594 void LayoutTreeAsText::writeLayers(TextStream& ts, const RenderLayer* rootLayer,
RenderLayer* layer, | 594 void LayoutTreeAsText::writeLayers(TextStream& ts, const Layer* rootLayer, Layer
* layer, |
| 595 const LayoutRect& paintRect, int indent, LayoutAsTextBehavior behavior) | 595 const LayoutRect& paintRect, int indent, LayoutAsTextBehavior behavior) |
| 596 { | 596 { |
| 597 // Calculate the clip rects we should use. | 597 // Calculate the clip rects we should use. |
| 598 LayoutRect layerBounds; | 598 LayoutRect layerBounds; |
| 599 ClipRect damageRect, clipRectToApply, outlineRect; | 599 ClipRect damageRect, clipRectToApply, outlineRect; |
| 600 layer->clipper().calculateRects(ClipRectsContext(rootLayer, UncachedClipRect
s), paintRect, layerBounds, damageRect, clipRectToApply, outlineRect); | 600 layer->clipper().calculateRects(ClipRectsContext(rootLayer, UncachedClipRect
s), paintRect, layerBounds, damageRect, clipRectToApply, outlineRect); |
| 601 | 601 |
| 602 // Ensure our lists are up-to-date. | 602 // Ensure our lists are up-to-date. |
| 603 layer->stackingNode()->updateLayerListsIfNeeded(); | 603 layer->stackingNode()->updateLayerListsIfNeeded(); |
| 604 | 604 |
| 605 bool shouldPaint = (behavior & LayoutAsTextShowAllLayers) ? true : layer->in
tersectsDamageRect(layerBounds, damageRect.rect(), rootLayer); | 605 bool shouldPaint = (behavior & LayoutAsTextShowAllLayers) ? true : layer->in
tersectsDamageRect(layerBounds, damageRect.rect(), rootLayer); |
| 606 | 606 |
| 607 Vector<RenderLayerStackingNode*>* negList = layer->stackingNode()->negZOrder
List(); | 607 Vector<LayerStackingNode*>* negList = layer->stackingNode()->negZOrderList()
; |
| 608 bool paintsBackgroundSeparately = negList && negList->size() > 0; | 608 bool paintsBackgroundSeparately = negList && negList->size() > 0; |
| 609 if (shouldPaint && paintsBackgroundSeparately) | 609 if (shouldPaint && paintsBackgroundSeparately) |
| 610 write(ts, *layer, layerBounds, damageRect.rect(), clipRectToApply.rect()
, outlineRect.rect(), LayerPaintPhaseBackground, indent, behavior); | 610 write(ts, *layer, layerBounds, damageRect.rect(), clipRectToApply.rect()
, outlineRect.rect(), LayerPaintPhaseBackground, indent, behavior); |
| 611 | 611 |
| 612 if (negList) { | 612 if (negList) { |
| 613 int currIndent = indent; | 613 int currIndent = indent; |
| 614 if (behavior & LayoutAsTextShowLayerNesting) { | 614 if (behavior & LayoutAsTextShowLayerNesting) { |
| 615 writeIndent(ts, indent); | 615 writeIndent(ts, indent); |
| 616 ts << " negative z-order list(" << negList->size() << ")\n"; | 616 ts << " negative z-order list(" << negList->size() << ")\n"; |
| 617 ++currIndent; | 617 ++currIndent; |
| 618 } | 618 } |
| 619 for (unsigned i = 0; i != negList->size(); ++i) | 619 for (unsigned i = 0; i != negList->size(); ++i) |
| 620 writeLayers(ts, rootLayer, negList->at(i)->layer(), paintRect, currI
ndent, behavior); | 620 writeLayers(ts, rootLayer, negList->at(i)->layer(), paintRect, currI
ndent, behavior); |
| 621 } | 621 } |
| 622 | 622 |
| 623 if (shouldPaint) | 623 if (shouldPaint) |
| 624 write(ts, *layer, layerBounds, damageRect.rect(), clipRectToApply.rect()
, outlineRect.rect(), paintsBackgroundSeparately ? LayerPaintPhaseForeground : L
ayerPaintPhaseAll, indent, behavior); | 624 write(ts, *layer, layerBounds, damageRect.rect(), clipRectToApply.rect()
, outlineRect.rect(), paintsBackgroundSeparately ? LayerPaintPhaseForeground : L
ayerPaintPhaseAll, indent, behavior); |
| 625 | 625 |
| 626 if (Vector<RenderLayerStackingNode*>* normalFlowList = layer->stackingNode()
->normalFlowList()) { | 626 if (Vector<LayerStackingNode*>* normalFlowList = layer->stackingNode()->norm
alFlowList()) { |
| 627 int currIndent = indent; | 627 int currIndent = indent; |
| 628 if (behavior & LayoutAsTextShowLayerNesting) { | 628 if (behavior & LayoutAsTextShowLayerNesting) { |
| 629 writeIndent(ts, indent); | 629 writeIndent(ts, indent); |
| 630 ts << " normal flow list(" << normalFlowList->size() << ")\n"; | 630 ts << " normal flow list(" << normalFlowList->size() << ")\n"; |
| 631 ++currIndent; | 631 ++currIndent; |
| 632 } | 632 } |
| 633 for (unsigned i = 0; i != normalFlowList->size(); ++i) | 633 for (unsigned i = 0; i != normalFlowList->size(); ++i) |
| 634 writeLayers(ts, rootLayer, normalFlowList->at(i)->layer(), paintRect
, currIndent, behavior); | 634 writeLayers(ts, rootLayer, normalFlowList->at(i)->layer(), paintRect
, currIndent, behavior); |
| 635 } | 635 } |
| 636 | 636 |
| 637 if (Vector<RenderLayerStackingNode*>* posList = layer->stackingNode()->posZO
rderList()) { | 637 if (Vector<LayerStackingNode*>* posList = layer->stackingNode()->posZOrderLi
st()) { |
| 638 int currIndent = indent; | 638 int currIndent = indent; |
| 639 if (behavior & LayoutAsTextShowLayerNesting) { | 639 if (behavior & LayoutAsTextShowLayerNesting) { |
| 640 writeIndent(ts, indent); | 640 writeIndent(ts, indent); |
| 641 ts << " positive z-order list(" << posList->size() << ")\n"; | 641 ts << " positive z-order list(" << posList->size() << ")\n"; |
| 642 ++currIndent; | 642 ++currIndent; |
| 643 } | 643 } |
| 644 for (unsigned i = 0; i != posList->size(); ++i) | 644 for (unsigned i = 0; i != posList->size(); ++i) |
| 645 writeLayers(ts, rootLayer, posList->at(i)->layer(), paintRect, currI
ndent, behavior); | 645 writeLayers(ts, rootLayer, posList->at(i)->layer(), paintRect, currI
ndent, behavior); |
| 646 } | 646 } |
| 647 } | 647 } |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 703 << "selection end: position " << selection.end().deprecatedEditing
Offset() << " of " << nodePositionAsStringForTesting(selection.end().deprecatedN
ode()) << "\n"; | 703 << "selection end: position " << selection.end().deprecatedEditing
Offset() << " of " << nodePositionAsStringForTesting(selection.end().deprecatedN
ode()) << "\n"; |
| 704 } | 704 } |
| 705 } | 705 } |
| 706 | 706 |
| 707 static String externalRepresentation(RenderBox* renderer, LayoutAsTextBehavior b
ehavior) | 707 static String externalRepresentation(RenderBox* renderer, LayoutAsTextBehavior b
ehavior) |
| 708 { | 708 { |
| 709 TextStream ts; | 709 TextStream ts; |
| 710 if (!renderer->hasLayer()) | 710 if (!renderer->hasLayer()) |
| 711 return ts.release(); | 711 return ts.release(); |
| 712 | 712 |
| 713 RenderLayer* layer = renderer->layer(); | 713 Layer* layer = renderer->layer(); |
| 714 LayoutTreeAsText::writeLayers(ts, layer, layer, layer->rect(), 0, behavior); | 714 LayoutTreeAsText::writeLayers(ts, layer, layer, layer->rect(), 0, behavior); |
| 715 writeSelection(ts, renderer); | 715 writeSelection(ts, renderer); |
| 716 return ts.release(); | 716 return ts.release(); |
| 717 } | 717 } |
| 718 | 718 |
| 719 String externalRepresentation(LocalFrame* frame, LayoutAsTextBehavior behavior) | 719 String externalRepresentation(LocalFrame* frame, LayoutAsTextBehavior behavior) |
| 720 { | 720 { |
| 721 if (!(behavior & LayoutAsTextDontUpdateLayout)) | 721 if (!(behavior & LayoutAsTextDontUpdateLayout)) |
| 722 frame->document()->updateLayout(); | 722 frame->document()->updateLayout(); |
| 723 | 723 |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 781 element->document().updateLayout(); | 781 element->document().updateLayout(); |
| 782 | 782 |
| 783 RenderObject* renderer = element->renderer(); | 783 RenderObject* renderer = element->renderer(); |
| 784 if (!renderer || !renderer->isListItem()) | 784 if (!renderer || !renderer->isListItem()) |
| 785 return String(); | 785 return String(); |
| 786 | 786 |
| 787 return toRenderListItem(renderer)->markerText(); | 787 return toRenderListItem(renderer)->markerText(); |
| 788 } | 788 } |
| 789 | 789 |
| 790 } // namespace blink | 790 } // namespace blink |
| OLD | NEW |