Index: Source/core/rendering/RenderFieldset.cpp |
diff --git a/Source/core/rendering/RenderFieldset.cpp b/Source/core/rendering/RenderFieldset.cpp |
index 2dfbb342c4f968b975ac49764f62beb2e1693e03..234582fa1bfc1667e327c5723d2d5e5a6a658121 100644 |
--- a/Source/core/rendering/RenderFieldset.cpp |
+++ b/Source/core/rendering/RenderFieldset.cpp |
@@ -27,9 +27,7 @@ |
#include "core/CSSPropertyNames.h" |
#include "core/HTMLNames.h" |
#include "core/html/HTMLLegendElement.h" |
-#include "core/paint/BoxDecorationData.h" |
-#include "core/paint/BoxPainter.h" |
-#include "core/paint/DrawingRecorder.h" |
+#include "core/paint/FieldsetPainter.h" |
#include "core/rendering/PaintInfo.h" |
#include "platform/graphics/GraphicsContextStateSaver.h" |
@@ -141,82 +139,12 @@ RenderBox* RenderFieldset::findLegend(FindLegendOption option) const |
void RenderFieldset::paintBoxDecorationBackground(PaintInfo& paintInfo, const LayoutPoint& paintOffset) |
{ |
- if (!paintInfo.shouldPaintWithinRoot(this)) |
- return; |
- |
- LayoutRect paintRect(paintOffset, size()); |
- RenderBox* legend = findLegend(); |
- if (!legend) |
- return RenderBlockFlow::paintBoxDecorationBackground(paintInfo, paintOffset); |
- |
- // FIXME: We need to work with "rl" and "bt" block flow directions. In those |
- // cases the legend is embedded in the right and bottom borders respectively. |
- // https://bugs.webkit.org/show_bug.cgi?id=47236 |
- if (style()->isHorizontalWritingMode()) { |
- LayoutUnit yOff = (legend->y() > 0) ? LayoutUnit() : (legend->height() - borderTop()) / 2; |
- paintRect.setHeight(paintRect.height() - yOff); |
- paintRect.setY(paintRect.y() + yOff); |
- } else { |
- LayoutUnit xOff = (legend->x() > 0) ? LayoutUnit() : (legend->width() - borderLeft()) / 2; |
- paintRect.setWidth(paintRect.width() - xOff); |
- paintRect.setX(paintRect.x() + xOff); |
- } |
- |
- BoxDecorationData boxDecorationData(*style(), canRenderBorderImage(), backgroundHasOpaqueTopLayer(), paintInfo.context); |
- DrawingRecorder recorder(paintInfo.context, this, paintInfo.phase, pixelSnappedIntRect(paintOffset, paintRect.size())); |
- |
- if (boxDecorationData.bleedAvoidance() == BackgroundBleedNone) |
- BoxPainter::paintBoxShadow(paintInfo, paintRect, style(), Normal); |
- BoxPainter(*this).paintFillLayers(paintInfo, boxDecorationData.backgroundColor, style()->backgroundLayers(), paintRect); |
- BoxPainter::paintBoxShadow(paintInfo, paintRect, style(), Inset); |
- |
- if (!boxDecorationData.hasBorder) |
- return; |
- |
- // Create a clipping region around the legend and paint the border as normal |
- GraphicsContext* graphicsContext = paintInfo.context; |
- GraphicsContextStateSaver stateSaver(*graphicsContext); |
- |
- // FIXME: We need to work with "rl" and "bt" block flow directions. In those |
- // cases the legend is embedded in the right and bottom borders respectively. |
- // https://bugs.webkit.org/show_bug.cgi?id=47236 |
- if (style()->isHorizontalWritingMode()) { |
- LayoutUnit clipTop = paintRect.y(); |
- LayoutUnit clipHeight = max(static_cast<LayoutUnit>(style()->borderTopWidth()), legend->height() - ((legend->height() - borderTop()) / 2)); |
- graphicsContext->clipOut(pixelSnappedIntRect(paintRect.x() + legend->x(), clipTop, legend->width(), clipHeight)); |
- } else { |
- LayoutUnit clipLeft = paintRect.x(); |
- LayoutUnit clipWidth = max(static_cast<LayoutUnit>(style()->borderLeftWidth()), legend->width()); |
- graphicsContext->clipOut(pixelSnappedIntRect(clipLeft, paintRect.y() + legend->y(), clipWidth, legend->height())); |
- } |
- |
- BoxPainter::paintBorder(*this, paintInfo, paintRect, style()); |
+ FieldsetPainter(*this).paintBoxDecorationBackground(paintInfo, paintOffset); |
} |
void RenderFieldset::paintMask(PaintInfo& paintInfo, const LayoutPoint& paintOffset) |
{ |
- if (style()->visibility() != VISIBLE || paintInfo.phase != PaintPhaseMask) |
- return; |
- |
- LayoutRect paintRect = LayoutRect(paintOffset, size()); |
- RenderBox* legend = findLegend(); |
- if (!legend) |
- return RenderBlockFlow::paintMask(paintInfo, paintOffset); |
- |
- // FIXME: We need to work with "rl" and "bt" block flow directions. In those |
- // cases the legend is embedded in the right and bottom borders respectively. |
- // https://bugs.webkit.org/show_bug.cgi?id=47236 |
- if (style()->isHorizontalWritingMode()) { |
- LayoutUnit yOff = (legend->y() > 0) ? LayoutUnit() : (legend->height() - borderTop()) / 2; |
- paintRect.expand(0, -yOff); |
- paintRect.move(0, yOff); |
- } else { |
- LayoutUnit xOff = (legend->x() > 0) ? LayoutUnit() : (legend->width() - borderLeft()) / 2; |
- paintRect.expand(-xOff, 0); |
- paintRect.move(xOff, 0); |
- } |
- |
- BoxPainter(*this).paintMaskImages(paintInfo, paintRect); |
+ FieldsetPainter(*this).paintMask(paintInfo, paintOffset); |
} |
} // namespace blink |