OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 Google 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 are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 14 matching lines...) Expand all Loading... |
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
29 */ | 29 */ |
30 | 30 |
31 #include "config.h" | 31 #include "config.h" |
32 #include "core/platform/graphics/GraphicsContextAnnotation.h" | 32 #include "core/platform/graphics/GraphicsContextAnnotation.h" |
33 | 33 |
34 #include "core/platform/graphics/GraphicsContext.h" | 34 #include "core/platform/graphics/GraphicsContext.h" |
35 #include "core/rendering/PaintInfo.h" | |
36 #include "core/rendering/PaintPhase.h" | |
37 #include "core/rendering/RenderObject.h" | |
38 #include "wtf/text/StringBuilder.h" | |
39 | 35 |
40 namespace { | 36 namespace { |
41 | 37 |
42 const char* AnnotationKeyRendererName = "RENDERER"; | 38 const char* AnnotationKeyRendererName = "RENDERER"; |
43 const char* AnnotationKeyPaintPhase = "PHASE"; | 39 const char* AnnotationKeyPaintPhase = "PHASE"; |
44 const char* AnnotationKeyElementId = "ID"; | 40 const char* AnnotationKeyElementId = "ID"; |
45 const char* AnnotationKeyElementClass = "CLASS"; | 41 const char* AnnotationKeyElementClass = "CLASS"; |
46 const char* AnnotationKeyElementTag = "TAG"; | 42 const char* AnnotationKeyElementTag = "TAG"; |
47 | 43 |
48 static const char* paintPhaseName(WebCore::PaintPhase phase) | |
49 { | |
50 switch (phase) { | |
51 case WebCore::PaintPhaseBlockBackground: | |
52 return "BlockBackground"; | |
53 case WebCore::PaintPhaseChildBlockBackground: | |
54 return "ChildBlockBackground"; | |
55 case WebCore::PaintPhaseChildBlockBackgrounds: | |
56 return "ChildBlockBackgrounds"; | |
57 case WebCore::PaintPhaseFloat: | |
58 return "Float"; | |
59 case WebCore::PaintPhaseForeground: | |
60 return "Foreground"; | |
61 case WebCore::PaintPhaseOutline: | |
62 return "Outline"; | |
63 case WebCore::PaintPhaseChildOutlines: | |
64 return "ChildOutlines"; | |
65 case WebCore::PaintPhaseSelfOutline: | |
66 return "SelfOutline"; | |
67 case WebCore::PaintPhaseSelection: | |
68 return "Selection"; | |
69 case WebCore::PaintPhaseCollapsedTableBorders: | |
70 return "CollapsedTableBorders"; | |
71 case WebCore::PaintPhaseTextClip: | |
72 return "TextClip"; | |
73 case WebCore::PaintPhaseMask: | |
74 return "Mask"; | |
75 case WebCore::PaintPhaseClippingMask: | |
76 return "ClippingMask"; | |
77 default: | |
78 ASSERT_NOT_REACHED(); | |
79 return "<unknown>"; | |
80 } | |
81 } | |
82 | |
83 } | 44 } |
84 | 45 |
85 namespace WebCore { | 46 namespace WebCore { |
86 | 47 |
87 GraphicsContextAnnotation::GraphicsContextAnnotation(const PaintInfo& paintInfo,
const RenderObject* object) | 48 GraphicsContextAnnotation::GraphicsContextAnnotation(const char* rendererName, c
onst char* paintPhase, const String& elementId, const String& elementClass, cons
t String& elementTag) |
88 : m_rendererName(0) | 49 : m_rendererName(rendererName) |
89 , m_paintPhase(0) | 50 , m_paintPhase(paintPhase) |
| 51 , m_elementId(elementId) |
| 52 , m_elementClass(elementClass) |
| 53 , m_elementTag(elementTag) |
90 { | 54 { |
91 ASSERT(paintInfo.context); | |
92 ASSERT(object); | |
93 | |
94 AnnotationModeFlags mode = paintInfo.context->annotationMode(); | |
95 Element* element = object->node() && object->node()->isElementNode() ? toEle
ment(object->node()) : 0; | |
96 | |
97 if (mode & AnnotateRendererName) | |
98 m_rendererName = object->renderName(); | |
99 | |
100 if (mode & AnnotatePaintPhase) | |
101 m_paintPhase = paintPhaseName(paintInfo.phase); | |
102 | |
103 if ((mode & AnnotateElementId) && element) { | |
104 const AtomicString id = element->getIdAttribute(); | |
105 if (!id.isNull() && !id.isEmpty()) | |
106 m_elementId = id.string(); | |
107 } | |
108 | |
109 if ((mode & AnnotateElementClass) && element && element->hasClass()) { | |
110 SpaceSplitString classes = element->classNames(); | |
111 if (!classes.isNull() && classes.size() > 0) { | |
112 StringBuilder classBuilder; | |
113 for (size_t i = 0; i < classes.size(); ++i) { | |
114 if (i > 0) | |
115 classBuilder.append(" "); | |
116 classBuilder.append(classes[i]); | |
117 } | |
118 | |
119 m_elementClass = classBuilder.toString(); | |
120 } | |
121 } | |
122 | |
123 if ((mode & AnnotateElementTag) && element) | |
124 m_elementTag = element->tagName(); | |
125 } | 55 } |
126 | 56 |
127 void GraphicsContextAnnotation::asAnnotationList(AnnotationList &list) const | 57 void GraphicsContextAnnotation::asAnnotationList(AnnotationList &list) const |
128 { | 58 { |
129 list.clear(); | 59 list.clear(); |
130 | 60 |
131 if (m_rendererName) | 61 if (m_rendererName) |
132 list.append(std::make_pair(AnnotationKeyRendererName, m_rendererName)); | 62 list.append(std::make_pair(AnnotationKeyRendererName, m_rendererName)); |
133 | 63 |
134 if (m_paintPhase) | 64 if (m_paintPhase) |
135 list.append(std::make_pair(AnnotationKeyPaintPhase, m_paintPhase)); | 65 list.append(std::make_pair(AnnotationKeyPaintPhase, m_paintPhase)); |
136 | 66 |
137 if (!m_elementId.isEmpty()) | 67 if (!m_elementId.isEmpty()) |
138 list.append(std::make_pair(AnnotationKeyElementId, m_elementId)); | 68 list.append(std::make_pair(AnnotationKeyElementId, m_elementId)); |
139 | 69 |
140 if (!m_elementClass.isEmpty()) | 70 if (!m_elementClass.isEmpty()) |
141 list.append(std::make_pair(AnnotationKeyElementClass, m_elementClass)); | 71 list.append(std::make_pair(AnnotationKeyElementClass, m_elementClass)); |
142 | 72 |
143 if (!m_elementTag.isEmpty()) | 73 if (!m_elementTag.isEmpty()) |
144 list.append(std::make_pair(AnnotationKeyElementTag, m_elementTag)); | 74 list.append(std::make_pair(AnnotationKeyElementTag, m_elementTag)); |
145 } | 75 } |
146 | 76 |
147 void GraphicsContextAnnotator::annotate(const PaintInfo& paintInfo, const Render
Object* object) | |
148 { | |
149 ASSERT(!m_context); | |
150 | |
151 m_context = paintInfo.context; | |
152 m_context->beginAnnotation(GraphicsContextAnnotation(paintInfo, object)); | |
153 } | 77 } |
154 | |
155 void GraphicsContextAnnotator::finishAnnotation() | |
156 { | |
157 ASSERT(m_context); | |
158 m_context->endAnnotation(); | |
159 } | |
160 | |
161 } | |
OLD | NEW |