<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[188183] trunk/Source/WebCore</title>
</head>
<body>
<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; }
#msg dl a { font-weight: bold}
#msg dl a:link { color:#fc3; }
#msg dl a:active { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/188183">188183</a></dd>
<dt>Author</dt> <dd>zalan@apple.com</dd>
<dt>Date</dt> <dd>2015-08-07 20:06:52 -0700 (Fri, 07 Aug 2015)</dd>
</dl>
<h3>Log Message</h3>
<pre>Move painting functions from RenderObject to RenderElement.
https://bugs.webkit.org/show_bug.cgi?id=147764
Reviewed by Simon Fraser.
Ideally they should live in RenderBoxModelObject, but the current SVG architecture makes is difficult
to move them there.
No change in functionality.
* platform/graphics/FloatRect.h:
(WebCore::FloatRect::FloatRect):
* rendering/RenderBoxModelObject.cpp:
(WebCore::RenderBoxModelObject::paintOneBorderSide):
* rendering/RenderElement.cpp:
(WebCore::RenderElement::drawLineForBoxSide):
(WebCore::RenderElement::paintFocusRing):
(WebCore::RenderElement::paintOutline):
* rendering/RenderElement.h:
* rendering/RenderInline.cpp:
(WebCore::RenderInline::paintOutline):
(WebCore::RenderInline::paintOutlineForLine):
* rendering/RenderMultiColumnSet.cpp:
(WebCore::RenderMultiColumnSet::paintColumnRules):
* rendering/RenderObject.cpp:
(WebCore::RenderObject::drawLineForBoxSide): Deleted.
(WebCore::RenderObject::paintFocusRing): Deleted.
(WebCore::RenderObject::paintOutline): Deleted.
* rendering/RenderObject.h:
* rendering/RenderTableCell.cpp:
(WebCore::RenderTableCell::paintCollapsedBorders):
* rendering/RenderTableSection.cpp:
(WebCore::RenderTableSection::paintRowGroupBorder):
* rendering/RenderTheme.h:
(WebCore::RenderTheme::paintMenuListButtonDecorations):
* rendering/RenderThemeIOS.h:
* rendering/RenderThemeIOS.mm:
(WebCore::RenderThemeIOS::paintMenuListButtonDecorations):
* rendering/RenderThemeMac.h:
* rendering/RenderThemeMac.mm:
(WebCore::RenderThemeMac::paintMenuListButtonDecorations):</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreplatformeflRenderThemeEflcpp">trunk/Source/WebCore/platform/efl/RenderThemeEfl.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformeflRenderThemeEflh">trunk/Source/WebCore/platform/efl/RenderThemeEfl.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsFloatRecth">trunk/Source/WebCore/platform/graphics/FloatRect.h</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderBoxModelObjectcpp">trunk/Source/WebCore/rendering/RenderBoxModelObject.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderElementcpp">trunk/Source/WebCore/rendering/RenderElement.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderElementh">trunk/Source/WebCore/rendering/RenderElement.h</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderInlinecpp">trunk/Source/WebCore/rendering/RenderInline.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderMultiColumnSetcpp">trunk/Source/WebCore/rendering/RenderMultiColumnSet.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderObjectcpp">trunk/Source/WebCore/rendering/RenderObject.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderObjecth">trunk/Source/WebCore/rendering/RenderObject.h</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderTableCellcpp">trunk/Source/WebCore/rendering/RenderTableCell.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderTableSectioncpp">trunk/Source/WebCore/rendering/RenderTableSection.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderThemeh">trunk/Source/WebCore/rendering/RenderTheme.h</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderThemeGtkcpp">trunk/Source/WebCore/rendering/RenderThemeGtk.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderThemeGtkh">trunk/Source/WebCore/rendering/RenderThemeGtk.h</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderThemeIOSh">trunk/Source/WebCore/rendering/RenderThemeIOS.h</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderThemeIOSmm">trunk/Source/WebCore/rendering/RenderThemeIOS.mm</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderThemeMach">trunk/Source/WebCore/rendering/RenderThemeMac.h</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderThemeMacmm">trunk/Source/WebCore/rendering/RenderThemeMac.mm</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderThemeWincpp">trunk/Source/WebCore/rendering/RenderThemeWin.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderThemeWinh">trunk/Source/WebCore/rendering/RenderThemeWin.h</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (188182 => 188183)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2015-08-08 02:14:43 UTC (rev 188182)
+++ trunk/Source/WebCore/ChangeLog        2015-08-08 03:06:52 UTC (rev 188183)
</span><span class="lines">@@ -1,3 +1,47 @@
</span><ins>+2015-08-07 Zalan Bujtas <zalan@apple.com>
+
+ Move painting functions from RenderObject to RenderElement.
+ https://bugs.webkit.org/show_bug.cgi?id=147764
+
+ Reviewed by Simon Fraser.
+
+ Ideally they should live in RenderBoxModelObject, but the current SVG architecture makes is difficult
+ to move them there.
+
+ No change in functionality.
+
+ * platform/graphics/FloatRect.h:
+ (WebCore::FloatRect::FloatRect):
+ * rendering/RenderBoxModelObject.cpp:
+ (WebCore::RenderBoxModelObject::paintOneBorderSide):
+ * rendering/RenderElement.cpp:
+ (WebCore::RenderElement::drawLineForBoxSide):
+ (WebCore::RenderElement::paintFocusRing):
+ (WebCore::RenderElement::paintOutline):
+ * rendering/RenderElement.h:
+ * rendering/RenderInline.cpp:
+ (WebCore::RenderInline::paintOutline):
+ (WebCore::RenderInline::paintOutlineForLine):
+ * rendering/RenderMultiColumnSet.cpp:
+ (WebCore::RenderMultiColumnSet::paintColumnRules):
+ * rendering/RenderObject.cpp:
+ (WebCore::RenderObject::drawLineForBoxSide): Deleted.
+ (WebCore::RenderObject::paintFocusRing): Deleted.
+ (WebCore::RenderObject::paintOutline): Deleted.
+ * rendering/RenderObject.h:
+ * rendering/RenderTableCell.cpp:
+ (WebCore::RenderTableCell::paintCollapsedBorders):
+ * rendering/RenderTableSection.cpp:
+ (WebCore::RenderTableSection::paintRowGroupBorder):
+ * rendering/RenderTheme.h:
+ (WebCore::RenderTheme::paintMenuListButtonDecorations):
+ * rendering/RenderThemeIOS.h:
+ * rendering/RenderThemeIOS.mm:
+ (WebCore::RenderThemeIOS::paintMenuListButtonDecorations):
+ * rendering/RenderThemeMac.h:
+ * rendering/RenderThemeMac.mm:
+ (WebCore::RenderThemeMac::paintMenuListButtonDecorations):
+
</ins><span class="cx"> 2015-08-07 James Craig <jcraig@apple.com>
</span><span class="cx">
</span><span class="cx"> REGRESSION(r184722) AX: WebKit video playback toolbar removed from DOM; no longer accessible to VoiceOver
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformeflRenderThemeEflcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/efl/RenderThemeEfl.cpp (188182 => 188183)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/efl/RenderThemeEfl.cpp        2015-08-08 02:14:43 UTC (rev 188182)
+++ trunk/Source/WebCore/platform/efl/RenderThemeEfl.cpp        2015-08-08 03:06:52 UTC (rev 188183)
</span><span class="lines">@@ -874,7 +874,7 @@
</span><span class="cx"> adjustMenuListStyle(styleResolver, style, element);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-bool RenderThemeEfl::paintMenuListButtonDecorations(const RenderObject& object, const PaintInfo& info, const FloatRect& rect)
</del><ins>+bool RenderThemeEfl::paintMenuListButtonDecorations(const RenderBox& object, const PaintInfo& info, const FloatRect& rect)
</ins><span class="cx"> {
</span><span class="cx"> return paintMenuList(object, info, rect);
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformeflRenderThemeEflh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/efl/RenderThemeEfl.h (188182 => 188183)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/efl/RenderThemeEfl.h        2015-08-08 02:14:43 UTC (rev 188182)
+++ trunk/Source/WebCore/platform/efl/RenderThemeEfl.h        2015-08-08 03:06:52 UTC (rev 188183)
</span><span class="lines">@@ -127,7 +127,7 @@
</span><span class="cx"> virtual bool paintMenuList(const RenderObject&, const PaintInfo&, const FloatRect&) override;
</span><span class="cx">
</span><span class="cx"> virtual void adjustMenuListButtonStyle(StyleResolver&, RenderStyle&, Element*) const override;
</span><del>- virtual bool paintMenuListButtonDecorations(const RenderObject&, const PaintInfo&, const FloatRect&) override;
</del><ins>+ virtual bool paintMenuListButtonDecorations(const RenderBox&, const PaintInfo&, const FloatRect&) override;
</ins><span class="cx">
</span><span class="cx"> virtual void adjustSearchFieldResultsDecorationPartStyle(StyleResolver&, RenderStyle&, Element*) const override;
</span><span class="cx"> virtual bool paintSearchFieldResultsDecorationPart(const RenderObject&, const PaintInfo&, const IntRect&) override;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsFloatRecth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/FloatRect.h (188182 => 188183)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/FloatRect.h        2015-08-08 02:14:43 UTC (rev 188182)
+++ trunk/Source/WebCore/platform/graphics/FloatRect.h        2015-08-08 03:06:52 UTC (rev 188183)
</span><span class="lines">@@ -62,6 +62,8 @@
</span><span class="cx"> : m_location(location), m_size(size) { }
</span><span class="cx"> FloatRect(float x, float y, float width, float height)
</span><span class="cx"> : m_location(FloatPoint(x, y)), m_size(FloatSize(width, height)) { }
</span><ins>+ FloatRect(const FloatPoint& topLeft, const FloatPoint& bottomRight)
+ : m_location(topLeft), m_size(FloatSize(bottomRight.x() - topLeft.x(), bottomRight.y() - topLeft.y())) { }
</ins><span class="cx"> WEBCORE_EXPORT FloatRect(const IntRect&);
</span><span class="cx">
</span><span class="cx"> static FloatRect narrowPrecision(double x, double y, double width, double height);
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderBoxModelObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderBoxModelObject.cpp (188182 => 188183)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderBoxModelObject.cpp        2015-08-08 02:14:43 UTC (rev 188182)
+++ trunk/Source/WebCore/rendering/RenderBoxModelObject.cpp        2015-08-08 03:06:52 UTC (rev 188183)
</span><span class="lines">@@ -1479,9 +1479,7 @@
</span><span class="cx"> mitreAdjacentSide1 = false;
</span><span class="cx"> mitreAdjacentSide2 = false;
</span><span class="cx"> }
</span><del>-
- drawLineForBoxSide(graphicsContext, sideRect.x(), sideRect.y(), sideRect.maxX(), sideRect.maxY(), side, colorToPaint, edgeToRender.style(),
- mitreAdjacentSide1 ? adjacentEdge1.widthForPainting() : 0, mitreAdjacentSide2 ? adjacentEdge2.widthForPainting() : 0, antialias);
</del><ins>+ drawLineForBoxSide(*graphicsContext, sideRect, side, colorToPaint, edgeToRender.style(), mitreAdjacentSide1 ? adjacentEdge1.widthForPainting() : 0, mitreAdjacentSide2 ? adjacentEdge2.widthForPainting() : 0, antialias);
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderElement.cpp (188182 => 188183)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderElement.cpp        2015-08-08 02:14:43 UTC (rev 188182)
+++ trunk/Source/WebCore/rendering/RenderElement.cpp        2015-08-08 03:06:52 UTC (rev 188183)
</span><span class="lines">@@ -31,6 +31,7 @@
</span><span class="cx"> #include "CursorList.h"
</span><span class="cx"> #include "ElementChildIterator.h"
</span><span class="cx"> #include "EventHandler.h"
</span><ins>+#include "FocusController.h"
</ins><span class="cx"> #include "Frame.h"
</span><span class="cx"> #include "FrameSelection.h"
</span><span class="cx"> #include "HTMLBodyElement.h"
</span><span class="lines">@@ -1783,4 +1784,339 @@
</span><span class="cx"> return current;
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+void RenderElement::drawLineForBoxSide(GraphicsContext& graphicsContext, const FloatRect& rect, BoxSide side, Color color, EBorderStyle borderStyle, float adjacentWidth1, float adjacentWidth2, bool antialias) const
+{
+ float x1 = rect.x();
+ float x2 = rect.maxX();
+ float y1 = rect.y();
+ float y2 = rect.maxY();
+ float thickness;
+ float length;
+ if (side == BSTop || side == BSBottom) {
+ thickness = y2 - y1;
+ length = x2 - x1;
+ } else {
+ thickness = x2 - x1;
+ length = y2 - y1;
+ }
+ // FIXME: We really would like this check to be an ASSERT as we don't want to draw empty borders. However
+ // nothing guarantees that the following recursive calls to drawLineForBoxSide will have non-null dimensions.
+ if (!thickness || !length)
+ return;
+
+ float deviceScaleFactor = document().deviceScaleFactor();
+ if (borderStyle == DOUBLE && (thickness * deviceScaleFactor) < 3)
+ borderStyle = SOLID;
+
+ const RenderStyle& style = this->style();
+ switch (borderStyle) {
+ case BNONE:
+ case BHIDDEN:
+ return;
+ case DOTTED:
+ case DASHED: {
+ bool wasAntialiased = graphicsContext.shouldAntialias();
+ StrokeStyle oldStrokeStyle = graphicsContext.strokeStyle();
+ graphicsContext.setShouldAntialias(antialias);
+ graphicsContext.setStrokeColor(color, style.colorSpace());
+ graphicsContext.setStrokeThickness(thickness);
+ graphicsContext.setStrokeStyle(borderStyle == DASHED ? DashedStroke : DottedStroke);
+ graphicsContext.drawLine(roundPointToDevicePixels(LayoutPoint(x1, y1), deviceScaleFactor), roundPointToDevicePixels(LayoutPoint(x2, y2), deviceScaleFactor));
+ graphicsContext.setShouldAntialias(wasAntialiased);
+ graphicsContext.setStrokeStyle(oldStrokeStyle);
+ break;
+ }
+ case DOUBLE: {
+ float thirdOfThickness = ceilToDevicePixel(thickness / 3, deviceScaleFactor);
+ ASSERT(thirdOfThickness);
+
+ if (!adjacentWidth1 && !adjacentWidth2) {
+ StrokeStyle oldStrokeStyle = graphicsContext.strokeStyle();
+ graphicsContext.setStrokeStyle(NoStroke);
+ graphicsContext.setFillColor(color, style.colorSpace());
+
+ bool wasAntialiased = graphicsContext.shouldAntialias();
+ graphicsContext.setShouldAntialias(antialias);
+
+ switch (side) {
+ case BSTop:
+ case BSBottom:
+ graphicsContext.drawRect(snapRectToDevicePixels(x1, y1, length, thirdOfThickness, deviceScaleFactor));
+ graphicsContext.drawRect(snapRectToDevicePixels(x1, y2 - thirdOfThickness, length, thirdOfThickness, deviceScaleFactor));
+ break;
+ case BSLeft:
+ case BSRight:
+ graphicsContext.drawRect(snapRectToDevicePixels(x1, y1, thirdOfThickness, length, deviceScaleFactor));
+ graphicsContext.drawRect(snapRectToDevicePixels(x2 - thirdOfThickness, y1, thirdOfThickness, length, deviceScaleFactor));
+ break;
+ }
+
+ graphicsContext.setShouldAntialias(wasAntialiased);
+ graphicsContext.setStrokeStyle(oldStrokeStyle);
+ } else {
+ float adjacent1BigThird = ceilToDevicePixel(adjacentWidth1 / 3, deviceScaleFactor);
+ float adjacent2BigThird = ceilToDevicePixel(adjacentWidth2 / 3, deviceScaleFactor);
+
+ float offset1 = floorToDevicePixel(fabs(adjacentWidth1) * 2 / 3, deviceScaleFactor);
+ float offset2 = floorToDevicePixel(fabs(adjacentWidth2) * 2 / 3, deviceScaleFactor);
+
+ float mitreOffset1 = adjacentWidth1 < 0 ? offset1 : 0;
+ float mitreOffset2 = adjacentWidth1 > 0 ? offset1 : 0;
+ float mitreOffset3 = adjacentWidth2 < 0 ? offset2 : 0;
+ float mitreOffset4 = adjacentWidth2 > 0 ? offset2 : 0;
+
+ FloatRect paintBorderRect;
+ switch (side) {
+ case BSTop:
+ paintBorderRect = snapRectToDevicePixels(LayoutRect(x1 + mitreOffset1, y1, (x2 - mitreOffset3) - (x1 + mitreOffset1), thirdOfThickness), deviceScaleFactor);
+ drawLineForBoxSide(graphicsContext, paintBorderRect, side, color, SOLID,
+ adjacent1BigThird, adjacent2BigThird, antialias);
+
+ paintBorderRect = snapRectToDevicePixels(LayoutRect(x1 + mitreOffset2, y2 - thirdOfThickness, (x2 - mitreOffset4) - (x1 + mitreOffset2), thirdOfThickness), deviceScaleFactor);
+ drawLineForBoxSide(graphicsContext, paintBorderRect, side, color, SOLID,
+ adjacent1BigThird, adjacent2BigThird, antialias);
+ break;
+ case BSLeft:
+ paintBorderRect = snapRectToDevicePixels(LayoutRect(x1, y1 + mitreOffset1, thirdOfThickness, (y2 - mitreOffset3) - (y1 + mitreOffset1)), deviceScaleFactor);
+ drawLineForBoxSide(graphicsContext, paintBorderRect, side, color, SOLID,
+ adjacent1BigThird, adjacent2BigThird, antialias);
+
+ paintBorderRect = snapRectToDevicePixels(LayoutRect(x2 - thirdOfThickness, y1 + mitreOffset2, thirdOfThickness, (y2 - mitreOffset4) - (y1 + mitreOffset2)), deviceScaleFactor);
+ drawLineForBoxSide(graphicsContext, paintBorderRect, side, color, SOLID,
+ adjacent1BigThird, adjacent2BigThird, antialias);
+ break;
+ case BSBottom:
+ paintBorderRect = snapRectToDevicePixels(LayoutRect(x1 + mitreOffset2, y1, (x2 - mitreOffset4) - (x1 + mitreOffset2), thirdOfThickness), deviceScaleFactor);
+ drawLineForBoxSide(graphicsContext, paintBorderRect, side, color, SOLID,
+ adjacent1BigThird, adjacent2BigThird, antialias);
+
+ paintBorderRect = snapRectToDevicePixels(LayoutRect(x1 + mitreOffset1, y2 - thirdOfThickness, (x2 - mitreOffset3) - (x1 + mitreOffset1), thirdOfThickness), deviceScaleFactor);
+ drawLineForBoxSide(graphicsContext, paintBorderRect, side, color, SOLID,
+ adjacent1BigThird, adjacent2BigThird, antialias);
+ break;
+ case BSRight:
+ paintBorderRect = snapRectToDevicePixels(LayoutRect(x1, y1 + mitreOffset2, thirdOfThickness, (y2 - mitreOffset4) - (y1 + mitreOffset2)), deviceScaleFactor);
+ drawLineForBoxSide(graphicsContext, paintBorderRect, side, color, SOLID,
+ adjacent1BigThird, adjacent2BigThird, antialias);
+
+ paintBorderRect = snapRectToDevicePixels(LayoutRect(x2 - thirdOfThickness, y1 + mitreOffset1, thirdOfThickness, (y2 - mitreOffset3) - (y1 + mitreOffset1)), deviceScaleFactor);
+ drawLineForBoxSide(graphicsContext, paintBorderRect, side, color, SOLID,
+ adjacent1BigThird, adjacent2BigThird, antialias);
+ break;
+ default:
+ break;
+ }
+ }
+ break;
+ }
+ case RIDGE:
+ case GROOVE: {
+ EBorderStyle s1;
+ EBorderStyle s2;
+ if (borderStyle == GROOVE) {
+ s1 = INSET;
+ s2 = OUTSET;
+ } else {
+ s1 = OUTSET;
+ s2 = INSET;
+ }
+
+ float adjacent1BigHalf = ceilToDevicePixel(adjacentWidth1 / 2, deviceScaleFactor);
+ float adjacent2BigHalf = ceilToDevicePixel(adjacentWidth2 / 2, deviceScaleFactor);
+
+ float adjacent1SmallHalf = floorToDevicePixel(adjacentWidth1 / 2, deviceScaleFactor);
+ float adjacent2SmallHalf = floorToDevicePixel(adjacentWidth2 / 2, deviceScaleFactor);
+
+ float offset1 = 0;
+ float offset2 = 0;
+ float offset3 = 0;
+ float offset4 = 0;
+
+ if (((side == BSTop || side == BSLeft) && adjacentWidth1 < 0) || ((side == BSBottom || side == BSRight) && adjacentWidth1 > 0))
+ offset1 = floorToDevicePixel(adjacentWidth1 / 2, deviceScaleFactor);
+
+ if (((side == BSTop || side == BSLeft) && adjacentWidth2 < 0) || ((side == BSBottom || side == BSRight) && adjacentWidth2 > 0))
+ offset2 = ceilToDevicePixel(adjacentWidth2 / 2, deviceScaleFactor);
+
+ if (((side == BSTop || side == BSLeft) && adjacentWidth1 > 0) || ((side == BSBottom || side == BSRight) && adjacentWidth1 < 0))
+ offset3 = floorToDevicePixel(fabs(adjacentWidth1) / 2, deviceScaleFactor);
+
+ if (((side == BSTop || side == BSLeft) && adjacentWidth2 > 0) || ((side == BSBottom || side == BSRight) && adjacentWidth2 < 0))
+ offset4 = ceilToDevicePixel(adjacentWidth2 / 2, deviceScaleFactor);
+
+ float adjustedX = ceilToDevicePixel((x1 + x2) / 2, deviceScaleFactor);
+ float adjustedY = ceilToDevicePixel((y1 + y2) / 2, deviceScaleFactor);
+ // Quads can't use the default snapping rect functions.
+ x1 = roundToDevicePixel(x1, deviceScaleFactor);
+ x2 = roundToDevicePixel(x2, deviceScaleFactor);
+ y1 = roundToDevicePixel(y1, deviceScaleFactor);
+ y2 = roundToDevicePixel(y2, deviceScaleFactor);
+
+ switch (side) {
+ case BSTop:
+ drawLineForBoxSide(graphicsContext, FloatRect(FloatPoint(x1 + offset1, y1), FloatPoint(x2 - offset2, adjustedY)), side, color, s1, adjacent1BigHalf, adjacent2BigHalf, antialias);
+ drawLineForBoxSide(graphicsContext, FloatRect(FloatPoint(x1 + offset3, adjustedY), FloatPoint(x2 - offset4, y2)), side, color, s2, adjacent1SmallHalf, adjacent2SmallHalf, antialias);
+ break;
+ case BSLeft:
+ drawLineForBoxSide(graphicsContext, FloatRect(FloatPoint(x1, y1 + offset1), FloatPoint(adjustedX, y2 - offset2)), side, color, s1, adjacent1BigHalf, adjacent2BigHalf, antialias);
+ drawLineForBoxSide(graphicsContext, FloatRect(FloatPoint(adjustedX, y1 + offset3), FloatPoint(x2, y2 - offset4)), side, color, s2, adjacent1SmallHalf, adjacent2SmallHalf, antialias);
+ break;
+ case BSBottom:
+ drawLineForBoxSide(graphicsContext, FloatRect(FloatPoint(x1 + offset1, y1), FloatPoint(x2 - offset2, adjustedY)), side, color, s2, adjacent1BigHalf, adjacent2BigHalf, antialias);
+ drawLineForBoxSide(graphicsContext, FloatRect(FloatPoint(x1 + offset3, adjustedY), FloatPoint(x2 - offset4, y2)), side, color, s1, adjacent1SmallHalf, adjacent2SmallHalf, antialias);
+ break;
+ case BSRight:
+ drawLineForBoxSide(graphicsContext, FloatRect(FloatPoint(x1, y1 + offset1), FloatPoint(adjustedX, y2 - offset2)), side, color, s2, adjacent1BigHalf, adjacent2BigHalf, antialias);
+ drawLineForBoxSide(graphicsContext, FloatRect(FloatPoint(adjustedX, y1 + offset3), FloatPoint(x2, y2 - offset4)), side, color, s1, adjacent1SmallHalf, adjacent2SmallHalf, antialias);
+ break;
+ }
+ break;
+ }
+ case INSET:
+ case OUTSET:
+ calculateBorderStyleColor(borderStyle, side, color);
+ FALLTHROUGH;
+ case SOLID: {
+ StrokeStyle oldStrokeStyle = graphicsContext.strokeStyle();
+ ASSERT(x2 >= x1);
+ ASSERT(y2 >= y1);
+ if (!adjacentWidth1 && !adjacentWidth2) {
+ // Turn off antialiasing to match the behavior of drawConvexPolygon();
+ // this matters for rects in transformed contexts.
+ graphicsContext.setStrokeStyle(NoStroke);
+ graphicsContext.setFillColor(color, style.colorSpace());
+ bool wasAntialiased = graphicsContext.shouldAntialias();
+ graphicsContext.setShouldAntialias(antialias);
+ graphicsContext.drawRect(snapRectToDevicePixels(x1, y1, x2 - x1, y2 - y1, deviceScaleFactor));
+ graphicsContext.setShouldAntialias(wasAntialiased);
+ graphicsContext.setStrokeStyle(oldStrokeStyle);
+ return;
+ }
+
+ // FIXME: These roundings should be replaced by ASSERT(device pixel positioned) when all the callers have transitioned to device pixels.
+ x1 = roundToDevicePixel(x1, deviceScaleFactor);
+ y1 = roundToDevicePixel(y1, deviceScaleFactor);
+ x2 = roundToDevicePixel(x2, deviceScaleFactor);
+ y2 = roundToDevicePixel(y2, deviceScaleFactor);
+
+ FloatPoint quad[4];
+ switch (side) {
+ case BSTop:
+ quad[0] = FloatPoint(x1 + std::max<float>(-adjacentWidth1, 0), y1);
+ quad[1] = FloatPoint(x1 + std::max<float>(adjacentWidth1, 0), y2);
+ quad[2] = FloatPoint(x2 - std::max<float>(adjacentWidth2, 0), y2);
+ quad[3] = FloatPoint(x2 - std::max<float>(-adjacentWidth2, 0), y1);
+ break;
+ case BSBottom:
+ quad[0] = FloatPoint(x1 + std::max<float>(adjacentWidth1, 0), y1);
+ quad[1] = FloatPoint(x1 + std::max<float>(-adjacentWidth1, 0), y2);
+ quad[2] = FloatPoint(x2 - std::max<float>(-adjacentWidth2, 0), y2);
+ quad[3] = FloatPoint(x2 - std::max<float>(adjacentWidth2, 0), y1);
+ break;
+ case BSLeft:
+ quad[0] = FloatPoint(x1, y1 + std::max<float>(-adjacentWidth1, 0));
+ quad[1] = FloatPoint(x1, y2 - std::max<float>(-adjacentWidth2, 0));
+ quad[2] = FloatPoint(x2, y2 - std::max<float>(adjacentWidth2, 0));
+ quad[3] = FloatPoint(x2, y1 + std::max<float>(adjacentWidth1, 0));
+ break;
+ case BSRight:
+ quad[0] = FloatPoint(x1, y1 + std::max<float>(adjacentWidth1, 0));
+ quad[1] = FloatPoint(x1, y2 - std::max<float>(adjacentWidth2, 0));
+ quad[2] = FloatPoint(x2, y2 - std::max<float>(-adjacentWidth2, 0));
+ quad[3] = FloatPoint(x2, y1 + std::max<float>(-adjacentWidth1, 0));
+ break;
+ }
+
+ graphicsContext.setStrokeStyle(NoStroke);
+ graphicsContext.setFillColor(color, style.colorSpace());
+ graphicsContext.drawConvexPolygon(4, quad, antialias);
+ graphicsContext.setStrokeStyle(oldStrokeStyle);
+ break;
+ }
+ }
</ins><span class="cx"> }
</span><ins>+
+void RenderElement::paintFocusRing(PaintInfo& paintInfo, const LayoutPoint& paintOffset, const RenderStyle& style)
+{
+ ASSERT(style.outlineStyleIsAuto());
+
+ Vector<IntRect> focusRingRects;
+ addFocusRingRects(focusRingRects, paintOffset, paintInfo.paintContainer);
+#if PLATFORM(MAC)
+ bool needsRepaint;
+ paintInfo.context->drawFocusRing(focusRingRects, style.outlineWidth(), style.outlineOffset(), document().page()->focusController().timeSinceFocusWasSet(), needsRepaint);
+ if (needsRepaint)
+ document().page()->focusController().setFocusedElementNeedsRepaint();
+#else
+ paintInfo.context->drawFocusRing(focusRingRects, style.outlineWidth(), style.outlineOffset(), style.visitedDependentColor(CSSPropertyOutlineColor));
+#endif
+}
+
+void RenderElement::paintOutline(PaintInfo& paintInfo, const LayoutRect& paintRect)
+{
+ if (!hasOutline())
+ return;
+
+ RenderStyle& styleToUse = style();
+ LayoutUnit outlineWidth = styleToUse.outlineWidth();
+
+ int outlineOffset = styleToUse.outlineOffset();
+
+ // Only paint the focus ring by hand if the theme isn't able to draw it.
+ if (styleToUse.outlineStyleIsAuto() && !theme().supportsFocusRing(styleToUse))
+ paintFocusRing(paintInfo, paintRect.location(), styleToUse);
+
+ if (hasOutlineAnnotation() && !styleToUse.outlineStyleIsAuto() && !theme().supportsFocusRing(styleToUse))
+ addPDFURLRect(paintInfo, paintRect.location());
+
+ if (styleToUse.outlineStyleIsAuto() || styleToUse.outlineStyle() == BNONE)
+ return;
+
+ IntRect inner = snappedIntRect(paintRect);
+ inner.inflate(outlineOffset);
+
+ IntRect outer = snappedIntRect(inner);
+ outer.inflate(outlineWidth);
+
+ // FIXME: This prevents outlines from painting inside the object. See bug 12042
+ if (outer.isEmpty())
+ return;
+
+ EBorderStyle outlineStyle = styleToUse.outlineStyle();
+ Color outlineColor = styleToUse.visitedDependentColor(CSSPropertyOutlineColor);
+
+ GraphicsContext& graphicsContext = *paintInfo.context;
+ bool useTransparencyLayer = outlineColor.hasAlpha();
+ if (useTransparencyLayer) {
+ if (outlineStyle == SOLID) {
+ Path path;
+ path.addRect(outer);
+ path.addRect(inner);
+ graphicsContext.setFillRule(RULE_EVENODD);
+ graphicsContext.setFillColor(outlineColor, styleToUse.colorSpace());
+ graphicsContext.fillPath(path);
+ return;
+ }
+ graphicsContext.beginTransparencyLayer(static_cast<float>(outlineColor.alpha()) / 255);
+ outlineColor = Color(outlineColor.red(), outlineColor.green(), outlineColor.blue());
+ }
+
+ int leftOuter = outer.x();
+ int leftInner = inner.x();
+ int rightOuter = outer.maxX();
+ int rightInner = inner.maxX();
+ int topOuter = outer.y();
+ int topInner = inner.y();
+ int bottomOuter = outer.maxY();
+ int bottomInner = inner.maxY();
+
+ drawLineForBoxSide(graphicsContext, FloatRect(FloatPoint(leftOuter, topOuter), FloatPoint(leftInner, bottomOuter)), BSLeft, outlineColor, outlineStyle, outlineWidth, outlineWidth);
+ drawLineForBoxSide(graphicsContext, FloatRect(FloatPoint(leftOuter, topOuter), FloatPoint(rightOuter, topInner)), BSTop, outlineColor, outlineStyle, outlineWidth, outlineWidth);
+ drawLineForBoxSide(graphicsContext, FloatRect(FloatPoint(rightInner, topOuter), FloatPoint(rightOuter, bottomOuter)), BSRight, outlineColor, outlineStyle, outlineWidth, outlineWidth);
+ drawLineForBoxSide(graphicsContext, FloatRect(FloatPoint(leftOuter, bottomInner), FloatPoint(rightOuter, bottomOuter)), BSBottom, outlineColor, outlineStyle, outlineWidth, outlineWidth);
+
+ if (useTransparencyLayer)
+ graphicsContext.endTransparencyLayer();
+}
+
+}
</ins></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderElement.h (188182 => 188183)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderElement.h        2015-08-08 02:14:43 UTC (rev 188182)
+++ trunk/Source/WebCore/rendering/RenderElement.h        2015-08-08 03:06:52 UTC (rev 188183)
</span><span class="lines">@@ -208,6 +208,7 @@
</span><span class="cx"> void setIsCSSAnimating(bool b) { m_isCSSAnimating = b; }
</span><span class="cx">
</span><span class="cx"> const RenderElement* enclosingRendererWithTextDecoration(TextDecoration, bool firstLine) const;
</span><ins>+ void drawLineForBoxSide(GraphicsContext&, const FloatRect&, BoxSide, Color, EBorderStyle, float adjacentWidth1, float adjacentWidth2, bool antialias = false) const;
</ins><span class="cx">
</span><span class="cx"> protected:
</span><span class="cx"> enum BaseTypeFlags {
</span><span class="lines">@@ -264,6 +265,9 @@
</span><span class="cx"> unsigned renderBlockFlowLineLayoutPath() const { return m_renderBlockFlowLineLayoutPath; }
</span><span class="cx"> bool renderBlockFlowHasMarkupTruncation() const { return m_renderBlockFlowHasMarkupTruncation; }
</span><span class="cx">
</span><ins>+ void paintFocusRing(PaintInfo&, const LayoutPoint&, const RenderStyle&);
+ void paintOutline(PaintInfo&, const LayoutRect&);
+
</ins><span class="cx"> private:
</span><span class="cx"> RenderElement(ContainerNode&, Ref<RenderStyle>&&, unsigned baseTypeFlags);
</span><span class="cx"> void node() const = delete;
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderInlinecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderInline.cpp (188182 => 188183)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderInline.cpp        2015-08-08 02:14:43 UTC (rev 188182)
+++ trunk/Source/WebCore/rendering/RenderInline.cpp        2015-08-08 03:06:52 UTC (rev 188183)
</span><span class="lines">@@ -1555,7 +1555,7 @@
</span><span class="cx"> RenderStyle& styleToUse = style();
</span><span class="cx"> // Only paint the focus ring by hand if the theme isn't able to draw it.
</span><span class="cx"> if (styleToUse.outlineStyleIsAuto() && !theme().supportsFocusRing(styleToUse))
</span><del>- paintFocusRing(paintInfo, paintOffset, &styleToUse);
</del><ins>+ paintFocusRing(paintInfo, paintOffset, styleToUse);
</ins><span class="cx">
</span><span class="cx"> if (hasOutlineAnnotation() && !styleToUse.outlineStyleIsAuto() && !theme().supportsFocusRing(styleToUse))
</span><span class="cx"> addPDFURLRect(paintInfo, paintOffset);
</span><span class="lines">@@ -1614,11 +1614,11 @@
</span><span class="cx"> IntRect pixelSnappedNextLine = snappedIntRect(paintOffset.x() + nextline.x(), 0, nextline.width(), 0);
</span><span class="cx">
</span><span class="cx"> // left edge
</span><del>- drawLineForBoxSide(graphicsContext,
- pixelSnappedBox.x() - outlineWidth,
- pixelSnappedBox.y() - (lastline.isEmpty() || thisline.x() < lastline.x() || (lastline.maxX() - 1) <= thisline.x() ? outlineWidth : 0),
- pixelSnappedBox.x(),
- pixelSnappedBox.maxY() + (nextline.isEmpty() || thisline.x() <= nextline.x() || (nextline.maxX() - 1) <= thisline.x() ? outlineWidth : 0),
</del><ins>+ drawLineForBoxSide(*graphicsContext,
+ FloatRect(FloatPoint(pixelSnappedBox.x() - outlineWidth,
+ pixelSnappedBox.y() - (lastline.isEmpty() || thisline.x() < lastline.x() || (lastline.maxX() - 1) <= thisline.x() ? outlineWidth : 0)),
+ FloatPoint(pixelSnappedBox.x(),
+ pixelSnappedBox.maxY() + (nextline.isEmpty() || thisline.x() <= nextline.x() || (nextline.maxX() - 1) <= thisline.x() ? outlineWidth : 0))),
</ins><span class="cx"> BSLeft,
</span><span class="cx"> outlineColor, outlineStyle,
</span><span class="cx"> (lastline.isEmpty() || thisline.x() < lastline.x() || (lastline.maxX() - 1) <= thisline.x() ? outlineWidth : -outlineWidth),
</span><span class="lines">@@ -1626,11 +1626,11 @@
</span><span class="cx"> antialias);
</span><span class="cx">
</span><span class="cx"> // right edge
</span><del>- drawLineForBoxSide(graphicsContext,
- pixelSnappedBox.maxX(),
- pixelSnappedBox.y() - (lastline.isEmpty() || lastline.maxX() < thisline.maxX() || (thisline.maxX() - 1) <= lastline.x() ? outlineWidth : 0),
- pixelSnappedBox.maxX() + outlineWidth,
- pixelSnappedBox.maxY() + (nextline.isEmpty() || nextline.maxX() <= thisline.maxX() || (thisline.maxX() - 1) <= nextline.x() ? outlineWidth : 0),
</del><ins>+ drawLineForBoxSide(*graphicsContext,
+ FloatRect(FloatPoint(pixelSnappedBox.maxX(),
+ pixelSnappedBox.y() - (lastline.isEmpty() || lastline.maxX() < thisline.maxX() || (thisline.maxX() - 1) <= lastline.x() ? outlineWidth : 0)),
+ FloatPoint(pixelSnappedBox.maxX() + outlineWidth,
+ pixelSnappedBox.maxY() + (nextline.isEmpty() || nextline.maxX() <= thisline.maxX() || (thisline.maxX() - 1) <= nextline.x() ? outlineWidth : 0))),
</ins><span class="cx"> BSRight,
</span><span class="cx"> outlineColor, outlineStyle,
</span><span class="cx"> (lastline.isEmpty() || lastline.maxX() < thisline.maxX() || (thisline.maxX() - 1) <= lastline.x() ? outlineWidth : -outlineWidth),
</span><span class="lines">@@ -1638,32 +1638,32 @@
</span><span class="cx"> antialias);
</span><span class="cx"> // upper edge
</span><span class="cx"> if (thisline.x() < lastline.x())
</span><del>- drawLineForBoxSide(graphicsContext,
- pixelSnappedBox.x() - outlineWidth,
- pixelSnappedBox.y() - outlineWidth,
- std::min(pixelSnappedBox.maxX() + outlineWidth, (lastline.isEmpty() ? 1000000 : pixelSnappedLastLine.x())),
- pixelSnappedBox.y(),
</del><ins>+ drawLineForBoxSide(*graphicsContext,
+ FloatRect(FloatPoint(pixelSnappedBox.x() - outlineWidth,
+ pixelSnappedBox.y() - outlineWidth),
+ FloatPoint(std::min(pixelSnappedBox.maxX() + outlineWidth, (lastline.isEmpty() ? 1000000 : pixelSnappedLastLine.x())),
+ pixelSnappedBox.y())),
</ins><span class="cx"> BSTop, outlineColor, outlineStyle,
</span><span class="cx"> outlineWidth,
</span><span class="cx"> (!lastline.isEmpty() && paintOffset.x() + lastline.x() + 1 < pixelSnappedBox.maxX() + outlineWidth) ? -outlineWidth : outlineWidth,
</span><span class="cx"> antialias);
</span><span class="cx">
</span><span class="cx"> if (lastline.maxX() < thisline.maxX())
</span><del>- drawLineForBoxSide(graphicsContext,
- std::max(lastline.isEmpty() ? -1000000 : pixelSnappedLastLine.maxX(), pixelSnappedBox.x() - outlineWidth),
- pixelSnappedBox.y() - outlineWidth,
- pixelSnappedBox.maxX() + outlineWidth,
- pixelSnappedBox.y(),
</del><ins>+ drawLineForBoxSide(*graphicsContext,
+ FloatRect(FloatPoint(std::max(lastline.isEmpty() ? -1000000 : pixelSnappedLastLine.maxX(), pixelSnappedBox.x() - outlineWidth),
+ pixelSnappedBox.y() - outlineWidth),
+ FloatPoint(pixelSnappedBox.maxX() + outlineWidth,
+ pixelSnappedBox.y())),
</ins><span class="cx"> BSTop, outlineColor, outlineStyle,
</span><span class="cx"> (!lastline.isEmpty() && pixelSnappedBox.x() - outlineWidth < paintOffset.x() + lastline.maxX()) ? -outlineWidth : outlineWidth,
</span><span class="cx"> outlineWidth, antialias);
</span><span class="cx">
</span><span class="cx"> if (thisline.x() == thisline.maxX())
</span><del>- drawLineForBoxSide(graphicsContext,
- pixelSnappedBox.x() - outlineWidth,
- pixelSnappedBox.y() - outlineWidth,
- pixelSnappedBox.maxX() + outlineWidth,
- pixelSnappedBox.y(),
</del><ins>+ drawLineForBoxSide(*graphicsContext,
+ FloatRect(FloatPoint(pixelSnappedBox.x() - outlineWidth,
+ pixelSnappedBox.y() - outlineWidth),
+ FloatPoint(pixelSnappedBox.maxX() + outlineWidth,
+ pixelSnappedBox.y())),
</ins><span class="cx"> BSTop, outlineColor, outlineStyle,
</span><span class="cx"> outlineWidth,
</span><span class="cx"> outlineWidth,
</span><span class="lines">@@ -1671,32 +1671,32 @@
</span><span class="cx">
</span><span class="cx"> // lower edge
</span><span class="cx"> if (thisline.x() < nextline.x())
</span><del>- drawLineForBoxSide(graphicsContext,
- pixelSnappedBox.x() - outlineWidth,
- pixelSnappedBox.maxY(),
- std::min(pixelSnappedBox.maxX() + outlineWidth, !nextline.isEmpty() ? pixelSnappedNextLine.x() + 1 : 1000000),
- pixelSnappedBox.maxY() + outlineWidth,
</del><ins>+ drawLineForBoxSide(*graphicsContext,
+ FloatRect(FloatPoint(pixelSnappedBox.x() - outlineWidth,
+ pixelSnappedBox.maxY()),
+ FloatPoint(std::min(pixelSnappedBox.maxX() + outlineWidth, !nextline.isEmpty() ? pixelSnappedNextLine.x() + 1 : 1000000),
+ pixelSnappedBox.maxY() + outlineWidth)),
</ins><span class="cx"> BSBottom, outlineColor, outlineStyle,
</span><span class="cx"> outlineWidth,
</span><span class="cx"> (!nextline.isEmpty() && paintOffset.x() + nextline.x() + 1 < pixelSnappedBox.maxX() + outlineWidth) ? -outlineWidth : outlineWidth,
</span><span class="cx"> antialias);
</span><span class="cx">
</span><span class="cx"> if (nextline.maxX() < thisline.maxX())
</span><del>- drawLineForBoxSide(graphicsContext,
- std::max(!nextline.isEmpty() ? pixelSnappedNextLine.maxX() : -1000000, pixelSnappedBox.x() - outlineWidth),
- pixelSnappedBox.maxY(),
- pixelSnappedBox.maxX() + outlineWidth,
- pixelSnappedBox.maxY() + outlineWidth,
</del><ins>+ drawLineForBoxSide(*graphicsContext,
+ FloatRect(FloatPoint(std::max(!nextline.isEmpty() ? pixelSnappedNextLine.maxX() : -1000000, pixelSnappedBox.x() - outlineWidth),
+ pixelSnappedBox.maxY()),
+ FloatPoint(pixelSnappedBox.maxX() + outlineWidth,
+ pixelSnappedBox.maxY() + outlineWidth)),
</ins><span class="cx"> BSBottom, outlineColor, outlineStyle,
</span><span class="cx"> (!nextline.isEmpty() && pixelSnappedBox.x() - outlineWidth < paintOffset.x() + nextline.maxX()) ? -outlineWidth : outlineWidth,
</span><span class="cx"> outlineWidth, antialias);
</span><span class="cx">
</span><span class="cx"> if (thisline.x() == thisline.maxX())
</span><del>- drawLineForBoxSide(graphicsContext,
- pixelSnappedBox.x() - outlineWidth,
- pixelSnappedBox.maxY(),
- pixelSnappedBox.maxX() + outlineWidth,
- pixelSnappedBox.maxY() + outlineWidth,
</del><ins>+ drawLineForBoxSide(*graphicsContext,
+ FloatRect(FloatPoint(pixelSnappedBox.x() - outlineWidth,
+ pixelSnappedBox.maxY()),
+ FloatPoint(pixelSnappedBox.maxX() + outlineWidth,
+ pixelSnappedBox.maxY() + outlineWidth)),
</ins><span class="cx"> BSBottom, outlineColor, outlineStyle,
</span><span class="cx"> outlineWidth,
</span><span class="cx"> outlineWidth,
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderMultiColumnSetcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderMultiColumnSet.cpp (188182 => 188183)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderMultiColumnSet.cpp        2015-08-08 02:14:43 UTC (rev 188182)
+++ trunk/Source/WebCore/rendering/RenderMultiColumnSet.cpp        2015-08-08 03:06:52 UTC (rev 188183)
</span><span class="lines">@@ -620,7 +620,7 @@
</span><span class="cx"> LayoutUnit ruleTop = isHorizontalWritingMode() ? paintOffset.y() + borderTop() + paddingTop() : paintOffset.y() + ruleLogicalLeft - ruleThickness / 2 + ruleAdd;
</span><span class="cx"> LayoutUnit ruleBottom = isHorizontalWritingMode() ? ruleTop + contentHeight() : ruleTop + ruleThickness;
</span><span class="cx"> IntRect pixelSnappedRuleRect = snappedIntRect(ruleLeft, ruleTop, ruleRight - ruleLeft, ruleBottom - ruleTop);
</span><del>- drawLineForBoxSide(paintInfo.context, pixelSnappedRuleRect.x(), pixelSnappedRuleRect.y(), pixelSnappedRuleRect.maxX(), pixelSnappedRuleRect.maxY(), boxSide, ruleColor, ruleStyle, 0, 0, antialias);
</del><ins>+ drawLineForBoxSide(*paintInfo.context, pixelSnappedRuleRect, boxSide, ruleColor, ruleStyle, 0, 0, antialias);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> ruleLogicalLeft = currLogicalLeftOffset;
</span><span class="lines">@@ -651,7 +651,7 @@
</span><span class="cx"> for (unsigned i = 1; i < colCount; i++) {
</span><span class="cx"> ruleRect.move(step);
</span><span class="cx"> IntRect pixelSnappedRuleRect = snappedIntRect(ruleRect);
</span><del>- drawLineForBoxSide(paintInfo.context, pixelSnappedRuleRect.x(), pixelSnappedRuleRect.y(), pixelSnappedRuleRect.maxX(), pixelSnappedRuleRect.maxY(), boxSide, ruleColor, ruleStyle, 0, 0, antialias);
</del><ins>+ drawLineForBoxSide(*paintInfo.context, pixelSnappedRuleRect, boxSide, ruleColor, ruleStyle, 0, 0, antialias);
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderObject.cpp (188182 => 188183)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderObject.cpp        2015-08-08 02:14:43 UTC (rev 188182)
+++ trunk/Source/WebCore/rendering/RenderObject.cpp        2015-08-08 03:06:52 UTC (rev 188183)
</span><span class="lines">@@ -32,7 +32,6 @@
</span><span class="cx"> #include "EventHandler.h"
</span><span class="cx"> #include "FloatQuad.h"
</span><span class="cx"> #include "FlowThreadController.h"
</span><del>-#include "FocusController.h"
</del><span class="cx"> #include "FrameSelection.h"
</span><span class="cx"> #include "FrameView.h"
</span><span class="cx"> #include "GeometryUtilities.h"
</span><span class="lines">@@ -708,271 +707,6 @@
</span><span class="cx"> return downcast<RenderBlock>(parent);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void RenderObject::drawLineForBoxSide(GraphicsContext* graphicsContext, float x1, float y1, float x2, float y2,
- BoxSide side, Color color, EBorderStyle borderStyle, float adjacentWidth1, float adjacentWidth2, bool antialias) const
-{
- float deviceScaleFactor = document().deviceScaleFactor();
- float thickness;
- float length;
- if (side == BSTop || side == BSBottom) {
- thickness = y2 - y1;
- length = x2 - x1;
- } else {
- thickness = x2 - x1;
- length = y2 - y1;
- }
- if (borderStyle == DOUBLE && (thickness * deviceScaleFactor) < 3)
- borderStyle = SOLID;
-
- // FIXME: We really would like this check to be an ASSERT as we don't want to draw empty borders. However
- // nothing guarantees that the following recursive calls to drawLineForBoxSide will have non-null dimensions.
- if (!thickness || !length)
- return;
-
- const RenderStyle& style = this->style();
- switch (borderStyle) {
- case BNONE:
- case BHIDDEN:
- return;
- case DOTTED:
- case DASHED: {
- bool wasAntialiased = graphicsContext->shouldAntialias();
- StrokeStyle oldStrokeStyle = graphicsContext->strokeStyle();
- graphicsContext->setShouldAntialias(antialias);
- graphicsContext->setStrokeColor(color, style.colorSpace());
- graphicsContext->setStrokeThickness(thickness);
- graphicsContext->setStrokeStyle(borderStyle == DASHED ? DashedStroke : DottedStroke);
- graphicsContext->drawLine(roundPointToDevicePixels(LayoutPoint(x1, y1), deviceScaleFactor), roundPointToDevicePixels(LayoutPoint(x2, y2), deviceScaleFactor));
- graphicsContext->setShouldAntialias(wasAntialiased);
- graphicsContext->setStrokeStyle(oldStrokeStyle);
- break;
- }
- case DOUBLE: {
- float thirdOfThickness = ceilToDevicePixel(thickness / 3, deviceScaleFactor);
- ASSERT(thirdOfThickness);
-
- if (adjacentWidth1 == 0 && adjacentWidth2 == 0) {
- StrokeStyle oldStrokeStyle = graphicsContext->strokeStyle();
- graphicsContext->setStrokeStyle(NoStroke);
- graphicsContext->setFillColor(color, style.colorSpace());
-
- bool wasAntialiased = graphicsContext->shouldAntialias();
- graphicsContext->setShouldAntialias(antialias);
-
- switch (side) {
- case BSTop:
- case BSBottom:
- graphicsContext->drawRect(snapRectToDevicePixels(x1, y1, length, thirdOfThickness, deviceScaleFactor));
- graphicsContext->drawRect(snapRectToDevicePixels(x1, y2 - thirdOfThickness, length, thirdOfThickness, deviceScaleFactor));
- break;
- case BSLeft:
- case BSRight:
- graphicsContext->drawRect(snapRectToDevicePixels(x1, y1, thirdOfThickness, length, deviceScaleFactor));
- graphicsContext->drawRect(snapRectToDevicePixels(x2 - thirdOfThickness, y1, thirdOfThickness, length, deviceScaleFactor));
- break;
- }
-
- graphicsContext->setShouldAntialias(wasAntialiased);
- graphicsContext->setStrokeStyle(oldStrokeStyle);
- } else {
- float adjacent1BigThird = ceilToDevicePixel(adjacentWidth1 / 3, deviceScaleFactor);
- float adjacent2BigThird = ceilToDevicePixel(adjacentWidth2 / 3, deviceScaleFactor);
-
- float offset1 = floorToDevicePixel(fabs(adjacentWidth1) * 2 / 3, deviceScaleFactor);
- float offset2 = floorToDevicePixel(fabs(adjacentWidth2) * 2 / 3, deviceScaleFactor);
-
- float mitreOffset1 = adjacentWidth1 < 0 ? offset1 : 0;
- float mitreOffset2 = adjacentWidth1 > 0 ? offset1 : 0;
- float mitreOffset3 = adjacentWidth2 < 0 ? offset2 : 0;
- float mitreOffset4 = adjacentWidth2 > 0 ? offset2 : 0;
-
- FloatRect paintBorderRect;
- switch (side) {
- case BSTop:
- paintBorderRect = snapRectToDevicePixels(LayoutRect(x1 + mitreOffset1, y1, (x2 - mitreOffset3) - (x1 + mitreOffset1), thirdOfThickness), deviceScaleFactor);
- drawLineForBoxSide(graphicsContext, paintBorderRect.x(), paintBorderRect.y(), paintBorderRect.maxX(), paintBorderRect.maxY(), side, color, SOLID,
- adjacent1BigThird, adjacent2BigThird, antialias);
-
- paintBorderRect = snapRectToDevicePixels(LayoutRect(x1 + mitreOffset2, y2 - thirdOfThickness, (x2 - mitreOffset4) - (x1 + mitreOffset2), thirdOfThickness), deviceScaleFactor);
- drawLineForBoxSide(graphicsContext, paintBorderRect.x(), paintBorderRect.y(), paintBorderRect.maxX(), paintBorderRect.maxY(), side, color, SOLID,
- adjacent1BigThird, adjacent2BigThird, antialias);
- break;
- case BSLeft:
- paintBorderRect = snapRectToDevicePixels(LayoutRect(x1, y1 + mitreOffset1, thirdOfThickness, (y2 - mitreOffset3) - (y1 + mitreOffset1)), deviceScaleFactor);
- drawLineForBoxSide(graphicsContext, paintBorderRect.x(), paintBorderRect.y(), paintBorderRect.maxX(), paintBorderRect.maxY(), side, color, SOLID,
- adjacent1BigThird, adjacent2BigThird, antialias);
-
- paintBorderRect = snapRectToDevicePixels(LayoutRect(x2 - thirdOfThickness, y1 + mitreOffset2, thirdOfThickness, (y2 - mitreOffset4) - (y1 + mitreOffset2)), deviceScaleFactor);
- drawLineForBoxSide(graphicsContext, paintBorderRect.x(), paintBorderRect.y(), paintBorderRect.maxX(), paintBorderRect.maxY(), side, color, SOLID,
- adjacent1BigThird, adjacent2BigThird, antialias);
- break;
- case BSBottom:
- paintBorderRect = snapRectToDevicePixels(LayoutRect(x1 + mitreOffset2, y1, (x2 - mitreOffset4) - (x1 + mitreOffset2), thirdOfThickness), deviceScaleFactor);
- drawLineForBoxSide(graphicsContext, paintBorderRect.x(), paintBorderRect.y(), paintBorderRect.maxX(), paintBorderRect.maxY(), side, color, SOLID,
- adjacent1BigThird, adjacent2BigThird, antialias);
-
- paintBorderRect = snapRectToDevicePixels(LayoutRect(x1 + mitreOffset1, y2 - thirdOfThickness, (x2 - mitreOffset3) - (x1 + mitreOffset1), thirdOfThickness), deviceScaleFactor);
- drawLineForBoxSide(graphicsContext, paintBorderRect.x(), paintBorderRect.y(), paintBorderRect.maxX(), paintBorderRect.maxY(), side, color, SOLID,
- adjacent1BigThird, adjacent2BigThird, antialias);
- break;
- case BSRight:
- paintBorderRect = snapRectToDevicePixels(LayoutRect(x1, y1 + mitreOffset2, thirdOfThickness, (y2 - mitreOffset4) - (y1 + mitreOffset2)), deviceScaleFactor);
- drawLineForBoxSide(graphicsContext, paintBorderRect.x(), paintBorderRect.y(), paintBorderRect.maxX(), paintBorderRect.maxY(), side, color, SOLID,
- adjacent1BigThird, adjacent2BigThird, antialias);
-
- paintBorderRect = snapRectToDevicePixels(LayoutRect(x2 - thirdOfThickness, y1 + mitreOffset1, thirdOfThickness, (y2 - mitreOffset3) - (y1 + mitreOffset1)), deviceScaleFactor);
- drawLineForBoxSide(graphicsContext, paintBorderRect.x(), paintBorderRect.y(), paintBorderRect.maxX(), paintBorderRect.maxY(), side, color, SOLID,
- adjacent1BigThird, adjacent2BigThird, antialias);
- break;
- default:
- break;
- }
- }
- break;
- }
- case RIDGE:
- case GROOVE: {
- EBorderStyle s1;
- EBorderStyle s2;
- if (borderStyle == GROOVE) {
- s1 = INSET;
- s2 = OUTSET;
- } else {
- s1 = OUTSET;
- s2 = INSET;
- }
-
- float adjacent1BigHalf = ceilToDevicePixel(adjacentWidth1 / 2, deviceScaleFactor);
- float adjacent2BigHalf = ceilToDevicePixel(adjacentWidth2 / 2, deviceScaleFactor);
-
- float adjacent1SmallHalf = floorToDevicePixel(adjacentWidth1 / 2, deviceScaleFactor);
- float adjacent2SmallHalf = floorToDevicePixel(adjacentWidth2 / 2, deviceScaleFactor);
-
- float offset1 = 0;
- float offset2 = 0;
- float offset3 = 0;
- float offset4 = 0;
-
- if (((side == BSTop || side == BSLeft) && adjacentWidth1 < 0) || ((side == BSBottom || side == BSRight) && adjacentWidth1 > 0))
- offset1 = floorToDevicePixel(adjacentWidth1 / 2, deviceScaleFactor);
-
- if (((side == BSTop || side == BSLeft) && adjacentWidth2 < 0) || ((side == BSBottom || side == BSRight) && adjacentWidth2 > 0))
- offset2 = ceilToDevicePixel(adjacentWidth2 / 2, deviceScaleFactor);
-
- if (((side == BSTop || side == BSLeft) && adjacentWidth1 > 0) || ((side == BSBottom || side == BSRight) && adjacentWidth1 < 0))
- offset3 = floorToDevicePixel(fabs(adjacentWidth1) / 2, deviceScaleFactor);
-
- if (((side == BSTop || side == BSLeft) && adjacentWidth2 > 0) || ((side == BSBottom || side == BSRight) && adjacentWidth2 < 0))
- offset4 = ceilToDevicePixel(adjacentWidth2 / 2, deviceScaleFactor);
-
- float adjustedX = ceilToDevicePixel((x1 + x2) / 2, deviceScaleFactor);
- float adjustedY = ceilToDevicePixel((y1 + y2) / 2, deviceScaleFactor);
- /// Quads can't use the default snapping rect functions.
- x1 = roundToDevicePixel(x1, deviceScaleFactor);
- x2 = roundToDevicePixel(x2, deviceScaleFactor);
- y1 = roundToDevicePixel(y1, deviceScaleFactor);
- y2 = roundToDevicePixel(y2, deviceScaleFactor);
-
- switch (side) {
- case BSTop:
- drawLineForBoxSide(graphicsContext, x1 + offset1, y1, x2 - offset2, adjustedY, side, color, s1, adjacent1BigHalf, adjacent2BigHalf, antialias);
- drawLineForBoxSide(graphicsContext, x1 + offset3, adjustedY, x2 - offset4, y2, side, color, s2, adjacent1SmallHalf, adjacent2SmallHalf, antialias);
- break;
- case BSLeft:
- drawLineForBoxSide(graphicsContext, x1, y1 + offset1, adjustedX, y2 - offset2, side, color, s1, adjacent1BigHalf, adjacent2BigHalf, antialias);
- drawLineForBoxSide(graphicsContext, adjustedX, y1 + offset3, x2, y2 - offset4, side, color, s2, adjacent1SmallHalf, adjacent2SmallHalf, antialias);
- break;
- case BSBottom:
- drawLineForBoxSide(graphicsContext, x1 + offset1, y1, x2 - offset2, adjustedY, side, color, s2, adjacent1BigHalf, adjacent2BigHalf, antialias);
- drawLineForBoxSide(graphicsContext, x1 + offset3, adjustedY, x2 - offset4, y2, side, color, s1, adjacent1SmallHalf, adjacent2SmallHalf, antialias);
- break;
- case BSRight:
- drawLineForBoxSide(graphicsContext, x1, y1 + offset1, adjustedX, y2 - offset2, side, color, s2, adjacent1BigHalf, adjacent2BigHalf, antialias);
- drawLineForBoxSide(graphicsContext, adjustedX, y1 + offset3, x2, y2 - offset4, side, color, s1, adjacent1SmallHalf, adjacent2SmallHalf, antialias);
- break;
- }
- break;
- }
- case INSET:
- case OUTSET:
- calculateBorderStyleColor(borderStyle, side, color);
- FALLTHROUGH;
- case SOLID: {
- StrokeStyle oldStrokeStyle = graphicsContext->strokeStyle();
- ASSERT(x2 >= x1);
- ASSERT(y2 >= y1);
- if (!adjacentWidth1 && !adjacentWidth2) {
- // Turn off antialiasing to match the behavior of drawConvexPolygon();
- // this matters for rects in transformed contexts.
- graphicsContext->setStrokeStyle(NoStroke);
- graphicsContext->setFillColor(color, style.colorSpace());
- bool wasAntialiased = graphicsContext->shouldAntialias();
- graphicsContext->setShouldAntialias(antialias);
- graphicsContext->drawRect(snapRectToDevicePixels(x1, y1, x2 - x1, y2 - y1, deviceScaleFactor));
- graphicsContext->setShouldAntialias(wasAntialiased);
- graphicsContext->setStrokeStyle(oldStrokeStyle);
- return;
- }
-
- // FIXME: These roundings should be replaced by ASSERT(device pixel positioned) when all the callers transitioned to device pixels.
- x1 = roundToDevicePixel(x1, deviceScaleFactor);
- y1 = roundToDevicePixel(y1, deviceScaleFactor);
- x2 = roundToDevicePixel(x2, deviceScaleFactor);
- y2 = roundToDevicePixel(y2, deviceScaleFactor);
-
- FloatPoint quad[4];
- switch (side) {
- case BSTop:
- quad[0] = FloatPoint(x1 + std::max<float>(-adjacentWidth1, 0), y1);
- quad[1] = FloatPoint(x1 + std::max<float>(adjacentWidth1, 0), y2);
- quad[2] = FloatPoint(x2 - std::max<float>(adjacentWidth2, 0), y2);
- quad[3] = FloatPoint(x2 - std::max<float>(-adjacentWidth2, 0), y1);
- break;
- case BSBottom:
- quad[0] = FloatPoint(x1 + std::max<float>(adjacentWidth1, 0), y1);
- quad[1] = FloatPoint(x1 + std::max<float>(-adjacentWidth1, 0), y2);
- quad[2] = FloatPoint(x2 - std::max<float>(-adjacentWidth2, 0), y2);
- quad[3] = FloatPoint(x2 - std::max<float>(adjacentWidth2, 0), y1);
- break;
- case BSLeft:
- quad[0] = FloatPoint(x1, y1 + std::max<float>(-adjacentWidth1, 0));
- quad[1] = FloatPoint(x1, y2 - std::max<float>(-adjacentWidth2, 0));
- quad[2] = FloatPoint(x2, y2 - std::max<float>(adjacentWidth2, 0));
- quad[3] = FloatPoint(x2, y1 + std::max<float>(adjacentWidth1, 0));
- break;
- case BSRight:
- quad[0] = FloatPoint(x1, y1 + std::max<float>(adjacentWidth1, 0));
- quad[1] = FloatPoint(x1, y2 - std::max<float>(adjacentWidth2, 0));
- quad[2] = FloatPoint(x2, y2 - std::max<float>(-adjacentWidth2, 0));
- quad[3] = FloatPoint(x2, y1 + std::max<float>(-adjacentWidth1, 0));
- break;
- }
-
- graphicsContext->setStrokeStyle(NoStroke);
- graphicsContext->setFillColor(color, style.colorSpace());
- graphicsContext->drawConvexPolygon(4, quad, antialias);
- graphicsContext->setStrokeStyle(oldStrokeStyle);
- break;
- }
- }
-}
-
-void RenderObject::paintFocusRing(PaintInfo& paintInfo, const LayoutPoint& paintOffset, RenderStyle* style)
-{
- ASSERT(style->outlineStyleIsAuto());
-
- Vector<IntRect> focusRingRects;
- addFocusRingRects(focusRingRects, paintOffset, paintInfo.paintContainer);
-#if PLATFORM(MAC)
- bool needsRepaint;
- paintInfo.context->drawFocusRing(focusRingRects, style->outlineWidth(), style->outlineOffset(), document().page()->focusController().timeSinceFocusWasSet(), needsRepaint);
- if (needsRepaint)
- document().page()->focusController().setFocusedElementNeedsRepaint();
-#else
- paintInfo.context->drawFocusRing(focusRingRects, style->outlineWidth(), style->outlineOffset(), style->visitedDependentColor(CSSPropertyOutlineColor));
-#endif
-}
-
</del><span class="cx"> void RenderObject::addPDFURLRect(PaintInfo& paintInfo, const LayoutPoint& paintOffset)
</span><span class="cx"> {
</span><span class="cx"> Vector<IntRect> focusRingRects;
</span><span class="lines">@@ -990,73 +724,6 @@
</span><span class="cx"> paintInfo.context->setURLForRect(node->document().completeURL(href), snappedIntRect(urlRect));
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void RenderObject::paintOutline(PaintInfo& paintInfo, const LayoutRect& paintRect)
-{
- if (!hasOutline())
- return;
-
- RenderStyle& styleToUse = style();
- LayoutUnit outlineWidth = styleToUse.outlineWidth();
-
- int outlineOffset = styleToUse.outlineOffset();
-
- // Only paint the focus ring by hand if the theme isn't able to draw it.
- if (styleToUse.outlineStyleIsAuto() && !theme().supportsFocusRing(styleToUse))
- paintFocusRing(paintInfo, paintRect.location(), &styleToUse);
-
- if (hasOutlineAnnotation() && !styleToUse.outlineStyleIsAuto() && !theme().supportsFocusRing(styleToUse))
- addPDFURLRect(paintInfo, paintRect.location());
-
- if (styleToUse.outlineStyleIsAuto() || styleToUse.outlineStyle() == BNONE)
- return;
-
- IntRect inner = snappedIntRect(paintRect);
- inner.inflate(outlineOffset);
-
- IntRect outer = snappedIntRect(inner);
- outer.inflate(outlineWidth);
-
- // FIXME: This prevents outlines from painting inside the object. See bug 12042
- if (outer.isEmpty())
- return;
-
- EBorderStyle outlineStyle = styleToUse.outlineStyle();
- Color outlineColor = styleToUse.visitedDependentColor(CSSPropertyOutlineColor);
-
- GraphicsContext* graphicsContext = paintInfo.context;
- bool useTransparencyLayer = outlineColor.hasAlpha();
- if (useTransparencyLayer) {
- if (outlineStyle == SOLID) {
- Path path;
- path.addRect(outer);
- path.addRect(inner);
- graphicsContext->setFillRule(RULE_EVENODD);
- graphicsContext->setFillColor(outlineColor, styleToUse.colorSpace());
- graphicsContext->fillPath(path);
- return;
- }
- graphicsContext->beginTransparencyLayer(static_cast<float>(outlineColor.alpha()) / 255);
- outlineColor = Color(outlineColor.red(), outlineColor.green(), outlineColor.blue());
- }
-
- int leftOuter = outer.x();
- int leftInner = inner.x();
- int rightOuter = outer.maxX();
- int rightInner = inner.maxX();
- int topOuter = outer.y();
- int topInner = inner.y();
- int bottomOuter = outer.maxY();
- int bottomInner = inner.maxY();
-
- drawLineForBoxSide(graphicsContext, leftOuter, topOuter, leftInner, bottomOuter, BSLeft, outlineColor, outlineStyle, outlineWidth, outlineWidth);
- drawLineForBoxSide(graphicsContext, leftOuter, topOuter, rightOuter, topInner, BSTop, outlineColor, outlineStyle, outlineWidth, outlineWidth);
- drawLineForBoxSide(graphicsContext, rightInner, topOuter, rightOuter, bottomOuter, BSRight, outlineColor, outlineStyle, outlineWidth, outlineWidth);
- drawLineForBoxSide(graphicsContext, leftOuter, bottomInner, rightOuter, bottomOuter, BSBottom, outlineColor, outlineStyle, outlineWidth, outlineWidth);
-
- if (useTransparencyLayer)
- graphicsContext->endTransparencyLayer();
-}
-
</del><span class="cx"> #if PLATFORM(IOS)
</span><span class="cx"> // This function is similar in spirit to RenderText::absoluteRectsForRange, but returns rectangles
</span><span class="cx"> // which are annotated with additional state which helps iOS draw selections in its unique way.
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderObjecth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderObject.h (188182 => 188183)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderObject.h        2015-08-08 02:14:43 UTC (rev 188182)
+++ trunk/Source/WebCore/rendering/RenderObject.h        2015-08-08 03:06:52 UTC (rev 188183)
</span><span class="lines">@@ -857,10 +857,7 @@
</span><span class="cx">
</span><span class="cx"> RespectImageOrientationEnum shouldRespectImageOrientation() const;
</span><span class="cx">
</span><del>- void drawLineForBoxSide(GraphicsContext*, float x1, float y1, float x2, float y2, BoxSide, Color, EBorderStyle, float adjbw1, float adjbw2, bool antialias = false) const;
</del><span class="cx"> protected:
</span><del>- void paintFocusRing(PaintInfo&, const LayoutPoint&, RenderStyle*);
- void paintOutline(PaintInfo&, const LayoutRect&);
</del><span class="cx"> void addPDFURLRect(PaintInfo&, const LayoutPoint&);
</span><span class="cx"> Node& nodeForNonAnonymous() const { ASSERT(!isAnonymous()); return m_node; }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderTableCellcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderTableCell.cpp (188182 => 188183)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderTableCell.cpp        2015-08-08 02:14:43 UTC (rev 188182)
+++ trunk/Source/WebCore/rendering/RenderTableCell.cpp        2015-08-08 03:06:52 UTC (rev 188183)
</span><span class="lines">@@ -1244,7 +1244,7 @@
</span><span class="cx">
</span><span class="cx"> for (CollapsedBorder* border = borders.nextBorder(); border; border = borders.nextBorder()) {
</span><span class="cx"> if (border->borderValue.isSameIgnoringColor(*table()->currentBorderValue()))
</span><del>- drawLineForBoxSide(graphicsContext, border->x1, border->y1, border->x2, border->y2, border->side,
</del><ins>+ drawLineForBoxSide(*graphicsContext, FloatRect(FloatPoint(border->x1, border->y1), FloatPoint(border->x2, border->y2)), border->side,
</ins><span class="cx"> border->borderValue.color(), border->style, 0, 0, antialias);
</span><span class="cx"> }
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderTableSectioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderTableSection.cpp (188182 => 188183)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderTableSection.cpp        2015-08-08 02:14:43 UTC (rev 188182)
+++ trunk/Source/WebCore/rendering/RenderTableSection.cpp        2015-08-08 03:06:52 UTC (rev 188183)
</span><span class="lines">@@ -1120,7 +1120,7 @@
</span><span class="cx"> rect.intersect(paintInfo.rect);
</span><span class="cx"> if (rect.isEmpty())
</span><span class="cx"> return;
</span><del>- drawLineForBoxSide(paintInfo.context, rect.x(), rect.y(), rect.x() + rect.width(), rect.y() + rect.height(), side, style().visitedDependentColor(borderColor), borderStyle, 0, 0, antialias);
</del><ins>+ drawLineForBoxSide(*paintInfo.context, rect, side, style().visitedDependentColor(borderColor), borderStyle, 0, 0, antialias);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> int RenderTableSection::offsetLeftForRowGroupBorder(RenderTableCell* cell, const LayoutRect& rowGroupRect, unsigned row)
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderThemeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderTheme.h (188182 => 188183)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderTheme.h        2015-08-08 02:14:43 UTC (rev 188182)
+++ trunk/Source/WebCore/rendering/RenderTheme.h        2015-08-08 03:06:52 UTC (rev 188183)
</span><span class="lines">@@ -307,7 +307,7 @@
</span><span class="cx"> virtual bool paintMenuListDecorations(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
</span><span class="cx">
</span><span class="cx"> virtual void adjustMenuListButtonStyle(StyleResolver&, RenderStyle&, Element*) const;
</span><del>- virtual bool paintMenuListButtonDecorations(const RenderObject&, const PaintInfo&, const FloatRect&) { return true; }
</del><ins>+ virtual bool paintMenuListButtonDecorations(const RenderBox&, const PaintInfo&, const FloatRect&) { return true; }
</ins><span class="cx">
</span><span class="cx"> virtual bool paintPushButtonDecorations(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
</span><span class="cx"> virtual bool paintSquareButtonDecorations(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderThemeGtkcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderThemeGtk.cpp (188182 => 188183)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderThemeGtk.cpp        2015-08-08 02:14:43 UTC (rev 188182)
+++ trunk/Source/WebCore/rendering/RenderThemeGtk.cpp        2015-08-08 03:06:52 UTC (rev 188183)
</span><span class="lines">@@ -860,7 +860,7 @@
</span><span class="cx"> return false;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-bool RenderThemeGtk::paintMenuListButtonDecorations(const RenderObject& object, const PaintInfo& info, const FloatRect& rect)
</del><ins>+bool RenderThemeGtk::paintMenuListButtonDecorations(const RenderBox& object, const PaintInfo& info, const FloatRect& rect)
</ins><span class="cx"> {
</span><span class="cx"> return paintMenuList(object, info, rect);
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderThemeGtkh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderThemeGtk.h (188182 => 188183)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderThemeGtk.h        2015-08-08 02:14:43 UTC (rev 188182)
+++ trunk/Source/WebCore/rendering/RenderThemeGtk.h        2015-08-08 03:06:52 UTC (rev 188183)
</span><span class="lines">@@ -130,7 +130,7 @@
</span><span class="cx"> virtual void adjustMenuListStyle(StyleResolver&, RenderStyle&, Element*) const override;
</span><span class="cx"> virtual void adjustMenuListButtonStyle(StyleResolver&, RenderStyle&, Element*) const override;
</span><span class="cx"> virtual bool paintMenuList(const RenderObject&, const PaintInfo&, const FloatRect&) override;
</span><del>- virtual bool paintMenuListButtonDecorations(const RenderObject&, const PaintInfo&, const FloatRect&) override;
</del><ins>+ virtual bool paintMenuListButtonDecorations(const RenderBox&, const PaintInfo&, const FloatRect&) override;
</ins><span class="cx">
</span><span class="cx"> virtual void adjustSearchFieldResultsDecorationPartStyle(StyleResolver&, RenderStyle&, Element*) const override;
</span><span class="cx"> virtual bool paintSearchFieldResultsDecorationPart(const RenderObject&, const PaintInfo&, const IntRect&) override;
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderThemeIOSh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderThemeIOS.h (188182 => 188183)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderThemeIOS.h        2015-08-08 02:14:43 UTC (rev 188182)
+++ trunk/Source/WebCore/rendering/RenderThemeIOS.h        2015-08-08 03:06:52 UTC (rev 188183)
</span><span class="lines">@@ -72,7 +72,7 @@
</span><span class="cx"> virtual bool paintTextAreaDecorations(const RenderObject&, const PaintInfo&, const FloatRect&) override;
</span><span class="cx">
</span><span class="cx"> virtual void adjustMenuListButtonStyle(StyleResolver&, RenderStyle&, Element*) const override;
</span><del>- virtual bool paintMenuListButtonDecorations(const RenderObject&, const PaintInfo&, const FloatRect&) override;
</del><ins>+ virtual bool paintMenuListButtonDecorations(const RenderBox&, const PaintInfo&, const FloatRect&) override;
</ins><span class="cx">
</span><span class="cx"> virtual void adjustSliderTrackStyle(StyleResolver&, RenderStyle&, Element*) const override;
</span><span class="cx"> virtual bool paintSliderTrack(const RenderObject&, const PaintInfo&, const IntRect&) override;
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderThemeIOSmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderThemeIOS.mm (188182 => 188183)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderThemeIOS.mm        2015-08-08 02:14:43 UTC (rev 188182)
+++ trunk/Source/WebCore/rendering/RenderThemeIOS.mm        2015-08-08 03:06:52 UTC (rev 188183)
</span><span class="lines">@@ -613,7 +613,7 @@
</span><span class="cx"> adjustInputElementButtonStyle(style, static_cast<HTMLInputElement&>(*element));
</span><span class="cx"> }
</span><span class="cx">
</span><del>-bool RenderThemeIOS::paintMenuListButtonDecorations(const RenderObject& box, const PaintInfo& paintInfo, const FloatRect& rect)
</del><ins>+bool RenderThemeIOS::paintMenuListButtonDecorations(const RenderBox& box, const PaintInfo& paintInfo, const FloatRect& rect)
</ins><span class="cx"> {
</span><span class="cx"> RenderStyle& style = box.style();
</span><span class="cx"> float borderTopWidth = style.borderTopWidth();
</span><span class="lines">@@ -643,7 +643,7 @@
</span><span class="cx">
</span><span class="cx"> float separator = clip.maxX() - MenuListButtonPaddingRight;
</span><span class="cx">
</span><del>- box.drawLineForBoxSide(paintInfo.context, separator - borderTopWidth, clip.y(), separator, clip.maxY(), BSRight, style.visitedDependentColor(CSSPropertyBorderTopColor), style.borderTopStyle(), 0, 0);
</del><ins>+ box.drawLineForBoxSide(*paintInfo.context, FloatRect(FloatPoint(separator - borderTopWidth, clip.y()), FloatPoint(separator, clip.maxY())), BSRight, style.visitedDependentColor(CSSPropertyBorderTopColor), style.borderTopStyle(), 0, 0);
</ins><span class="cx">
</span><span class="cx"> FloatRect buttonClip(separator - adjustTop, clip.y() - adjustTop, MenuListButtonPaddingRight + adjustTop + adjustRight, clip.height() + adjustTop + adjustBottom);
</span><span class="cx">
</span><span class="lines">@@ -662,7 +662,7 @@
</span><span class="cx">
</span><span class="cx"> // Paint Indicators.
</span><span class="cx">
</span><del>- if (box.isMenuList() && downcast<HTMLSelectElement>(box.node())->multiple()) {
</del><ins>+ if (box.isMenuList() && downcast<HTMLSelectElement>(box.element())->multiple()) {
</ins><span class="cx"> int size = 2;
</span><span class="cx"> int count = 3;
</span><span class="cx"> int padding = 3;
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderThemeMach"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderThemeMac.h (188182 => 188183)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderThemeMac.h        2015-08-08 02:14:43 UTC (rev 188182)
+++ trunk/Source/WebCore/rendering/RenderThemeMac.h        2015-08-08 03:06:52 UTC (rev 188183)
</span><span class="lines">@@ -131,7 +131,7 @@
</span><span class="cx"> virtual bool paintMenuList(const RenderObject&, const PaintInfo&, const FloatRect&) override;
</span><span class="cx"> virtual void adjustMenuListStyle(StyleResolver&, RenderStyle&, Element*) const override;
</span><span class="cx">
</span><del>- virtual bool paintMenuListButtonDecorations(const RenderObject&, const PaintInfo&, const FloatRect&) override;
</del><ins>+ virtual bool paintMenuListButtonDecorations(const RenderBox&, const PaintInfo&, const FloatRect&) override;
</ins><span class="cx"> virtual void adjustMenuListButtonStyle(StyleResolver&, RenderStyle&, Element*) const override;
</span><span class="cx">
</span><span class="cx"> virtual void adjustProgressBarStyle(StyleResolver&, RenderStyle&, Element*) const override;
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderThemeMacmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderThemeMac.mm (188182 => 188183)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderThemeMac.mm        2015-08-08 02:14:43 UTC (rev 188182)
+++ trunk/Source/WebCore/rendering/RenderThemeMac.mm        2015-08-08 03:06:52 UTC (rev 188183)
</span><span class="lines">@@ -1285,7 +1285,7 @@
</span><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><del>-bool RenderThemeMac::paintMenuListButtonDecorations(const RenderObject& renderer, const PaintInfo& paintInfo, const FloatRect& rect)
</del><ins>+bool RenderThemeMac::paintMenuListButtonDecorations(const RenderBox& renderer, const PaintInfo& paintInfo, const FloatRect& rect)
</ins><span class="cx"> {
</span><span class="cx"> IntRect bounds = IntRect(rect.x() + renderer.style().borderLeftWidth(),
</span><span class="cx"> rect.y() + renderer.style().borderTopWidth(),
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderThemeWincpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderThemeWin.cpp (188182 => 188183)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderThemeWin.cpp        2015-08-08 02:14:43 UTC (rev 188182)
+++ trunk/Source/WebCore/rendering/RenderThemeWin.cpp        2015-08-08 03:06:52 UTC (rev 188183)
</span><span class="lines">@@ -747,7 +747,7 @@
</span><span class="cx">
</span><span class="cx"> drawControl(paintInfo.context, renderer, theme, ThemeData(part, determineState(renderer)), IntRect(rect));
</span><span class="cx">
</span><del>- return paintMenuListButtonDecorations(renderer, paintInfo, FloatRect(rect));
</del><ins>+ return paintMenuListButtonDecorations(downcast<RenderBox>(renderer), paintInfo, FloatRect(rect));
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void RenderThemeWin::adjustMenuListStyle(StyleResolver& styleResolver, RenderStyle& style, Element* e) const
</span><span class="lines">@@ -787,7 +787,7 @@
</span><span class="cx"> style.setWhiteSpace(PRE);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-bool RenderThemeWin::paintMenuListButtonDecorations(const RenderObject& renderer, const PaintInfo& paintInfo, const FloatRect& rect)
</del><ins>+bool RenderThemeWin::paintMenuListButtonDecorations(const RenderBox& renderer, const PaintInfo& paintInfo, const FloatRect& rect)
</ins><span class="cx"> {
</span><span class="cx"> // FIXME: Don't make hardcoded assumptions about the thickness of the textfield border.
</span><span class="cx"> int borderThickness = haveTheme ? 1 : 2;
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderThemeWinh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderThemeWin.h (188182 => 188183)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderThemeWin.h        2015-08-08 02:14:43 UTC (rev 188182)
+++ trunk/Source/WebCore/rendering/RenderThemeWin.h        2015-08-08 03:06:52 UTC (rev 188183)
</span><span class="lines">@@ -87,7 +87,7 @@
</span><span class="cx"> virtual bool paintMenuList(const RenderObject&, const PaintInfo&, const FloatRect&) override;
</span><span class="cx"> virtual void adjustMenuListButtonStyle(StyleResolver&, RenderStyle&, Element*) const override;
</span><span class="cx">
</span><del>- virtual bool paintMenuListButtonDecorations(const RenderObject&, const PaintInfo&, const FloatRect&) override;
</del><ins>+ virtual bool paintMenuListButtonDecorations(const RenderBox&, const PaintInfo&, const FloatRect&) override;
</ins><span class="cx">
</span><span class="cx"> virtual bool paintSliderTrack(const RenderObject&, const PaintInfo&, const IntRect&) override;
</span><span class="cx"> virtual bool paintSliderThumb(const RenderObject&, const PaintInfo&, const IntRect&) override;
</span></span></pre>
</div>
</div>
</body>
</html>