17242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved. 27242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// Use of this source code is governed by a BSD-style license that can be 37242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// found in the LICENSE file. 47242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 57242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "config.h" 67242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "core/paint/InlinePainter.h" 77242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 87242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "core/paint/BoxPainter.h" 97242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "core/paint/LineBoxListPainter.h" 107242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "core/paint/ObjectPainter.h" 117242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "core/rendering/GraphicsContextAnnotator.h" 127242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "core/rendering/PaintInfo.h" 137242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "core/rendering/RenderInline.h" 147242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "core/rendering/RenderTheme.h" 157242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "core/rendering/RootInlineBox.h" 167242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "platform/geometry/LayoutPoint.h" 177242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 187242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccinamespace blink { 197242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 207242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccivoid InlinePainter::paint(PaintInfo& paintInfo, const LayoutPoint& paintOffset) 217242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 227242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci ANNOTATE_GRAPHICS_CONTEXT(paintInfo, &m_renderInline); 237242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci LineBoxListPainter(*m_renderInline.lineBoxes()).paint(&m_renderInline, paintInfo, paintOffset); 247242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 257242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 267242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccivoid InlinePainter::paintOutline(PaintInfo& paintInfo, const LayoutPoint& paintOffset) 277242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 287242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci RenderStyle* styleToUse = m_renderInline.style(); 297242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (!styleToUse->hasOutline()) 307242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return; 317242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 327242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (styleToUse->outlineStyleIsAuto()) { 337242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (RenderTheme::theme().shouldDrawDefaultFocusRing(&m_renderInline)) { 347242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // Only paint the focus ring by hand if the theme isn't able to draw the focus ring. 357242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci ObjectPainter(m_renderInline).paintFocusRing(paintInfo, paintOffset, styleToUse); 367242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci } 377242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return; 387242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci } 397242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 407242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (styleToUse->outlineStyle() == BNONE) 417242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return; 427242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 437242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci Vector<LayoutRect> rects; 447242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 457242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci rects.append(LayoutRect()); 467242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci for (InlineFlowBox* curr = m_renderInline.firstLineBox(); curr; curr = curr->nextLineBox()) { 477242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci RootInlineBox& root = curr->root(); 487242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci LayoutUnit top = std::max<LayoutUnit>(root.lineTop(), curr->logicalTop()); 497242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci LayoutUnit bottom = std::min<LayoutUnit>(root.lineBottom(), curr->logicalBottom()); 507242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci rects.append(LayoutRect(curr->x(), top, curr->logicalWidth(), bottom - top)); 517242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci } 527242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci rects.append(LayoutRect()); 537242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 547242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci Color outlineColor = m_renderInline.resolveColor(styleToUse, CSSPropertyOutlineColor); 557242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci bool useTransparencyLayer = outlineColor.hasAlpha(); 567242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 577242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci GraphicsContext* graphicsContext = paintInfo.context; 587242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (useTransparencyLayer) { 597242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci graphicsContext->beginTransparencyLayer(static_cast<float>(outlineColor.alpha()) / 255); 607242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci outlineColor = Color(outlineColor.red(), outlineColor.green(), outlineColor.blue()); 617242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci } 627242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 637242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci for (unsigned i = 1; i < rects.size() - 1; i++) 647242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci paintOutlineForLine(graphicsContext, paintOffset, rects.at(i - 1), rects.at(i), rects.at(i + 1), outlineColor); 657242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 667242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (useTransparencyLayer) 677242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci graphicsContext->endLayer(); 687242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 697242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 707242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccivoid InlinePainter::paintOutlineForLine(GraphicsContext* graphicsContext, const LayoutPoint& paintOffset, 717242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci const LayoutRect& lastline, const LayoutRect& thisline, const LayoutRect& nextline, const Color outlineColor) 727242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 737242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci RenderStyle* styleToUse = m_renderInline.style(); 747242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci int outlineWidth = styleToUse->outlineWidth(); 757242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci EBorderStyle outlineStyle = styleToUse->outlineStyle(); 767242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 777242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci bool antialias = BoxPainter::shouldAntialiasLines(graphicsContext); 787242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 797242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci int offset = m_renderInline.style()->outlineOffset(); 807242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 817242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci LayoutRect box(LayoutPoint(paintOffset.x() + thisline.x() - offset, paintOffset.y() + thisline.y() - offset), 827242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci LayoutSize(thisline.width() + offset, thisline.height() + offset)); 837242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 847242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci IntRect pixelSnappedBox = pixelSnappedIntRect(box); 857242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (pixelSnappedBox.width() < 0 || pixelSnappedBox.height() < 0) 867242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return; 877242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci IntRect pixelSnappedLastLine = pixelSnappedIntRect(paintOffset.x() + lastline.x(), 0, lastline.width(), 0); 887242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci IntRect pixelSnappedNextLine = pixelSnappedIntRect(paintOffset.x() + nextline.x(), 0, nextline.width(), 0); 897242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 907242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // left edge 917242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci ObjectPainter::drawLineForBoxSide(graphicsContext, 927242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci pixelSnappedBox.x() - outlineWidth, 937242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci pixelSnappedBox.y() - (lastline.isEmpty() || thisline.x() < lastline.x() || (lastline.maxX() - 1) <= thisline.x() ? outlineWidth : 0), 947242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci pixelSnappedBox.x(), 957242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci pixelSnappedBox.maxY() + (nextline.isEmpty() || thisline.x() <= nextline.x() || (nextline.maxX() - 1) <= thisline.x() ? outlineWidth : 0), 967242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci BSLeft, 977242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci outlineColor, outlineStyle, 987242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci (lastline.isEmpty() || thisline.x() < lastline.x() || (lastline.maxX() - 1) <= thisline.x() ? outlineWidth : -outlineWidth), 997242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci (nextline.isEmpty() || thisline.x() <= nextline.x() || (nextline.maxX() - 1) <= thisline.x() ? outlineWidth : -outlineWidth), 1007242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci antialias); 1017242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1027242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // right edge 1037242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci ObjectPainter::drawLineForBoxSide(graphicsContext, 1047242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci pixelSnappedBox.maxX(), 1057242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci pixelSnappedBox.y() - (lastline.isEmpty() || lastline.maxX() < thisline.maxX() || (thisline.maxX() - 1) <= lastline.x() ? outlineWidth : 0), 1067242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci pixelSnappedBox.maxX() + outlineWidth, 1077242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci pixelSnappedBox.maxY() + (nextline.isEmpty() || nextline.maxX() <= thisline.maxX() || (thisline.maxX() - 1) <= nextline.x() ? outlineWidth : 0), 1087242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci BSRight, 1097242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci outlineColor, outlineStyle, 1107242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci (lastline.isEmpty() || lastline.maxX() < thisline.maxX() || (thisline.maxX() - 1) <= lastline.x() ? outlineWidth : -outlineWidth), 1117242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci (nextline.isEmpty() || nextline.maxX() <= thisline.maxX() || (thisline.maxX() - 1) <= nextline.x() ? outlineWidth : -outlineWidth), 1127242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci antialias); 1137242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // upper edge 1147242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (thisline.x() < lastline.x()) { 1157242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci ObjectPainter::drawLineForBoxSide(graphicsContext, 1167242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci pixelSnappedBox.x() - outlineWidth, 1177242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci pixelSnappedBox.y() - outlineWidth, 1187242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci std::min(pixelSnappedBox.maxX() + outlineWidth, (lastline.isEmpty() ? 1000000 : pixelSnappedLastLine.x())), 1197242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci pixelSnappedBox.y(), 1207242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci BSTop, outlineColor, outlineStyle, 1217242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci outlineWidth, 1227242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci (!lastline.isEmpty() && paintOffset.x() + lastline.x() + 1 < pixelSnappedBox.maxX() + outlineWidth) ? -outlineWidth : outlineWidth, 1237242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci antialias); 1247242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci } 1257242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1267242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (lastline.maxX() < thisline.maxX()) { 1277242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci ObjectPainter::drawLineForBoxSide(graphicsContext, 1287242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci std::max(lastline.isEmpty() ? -1000000 : pixelSnappedLastLine.maxX(), pixelSnappedBox.x() - outlineWidth), 1297242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci pixelSnappedBox.y() - outlineWidth, 1307242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci pixelSnappedBox.maxX() + outlineWidth, 1317242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci pixelSnappedBox.y(), 1327242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci BSTop, outlineColor, outlineStyle, 1337242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci (!lastline.isEmpty() && pixelSnappedBox.x() - outlineWidth < paintOffset.x() + lastline.maxX()) ? -outlineWidth : outlineWidth, 1347242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci outlineWidth, antialias); 1357242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci } 1367242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1377242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (thisline.x() == thisline.maxX()) { 1387242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci ObjectPainter::drawLineForBoxSide(graphicsContext, 1397242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci pixelSnappedBox.x() - outlineWidth, 1407242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci pixelSnappedBox.y() - outlineWidth, 1417242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci pixelSnappedBox.maxX() + outlineWidth, 1427242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci pixelSnappedBox.y(), 1437242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci BSTop, outlineColor, outlineStyle, 1447242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci outlineWidth, 1457242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci outlineWidth, 1467242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci antialias); 1477242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci } 1487242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1497242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // lower edge 1507242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (thisline.x() < nextline.x()) { 1517242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci ObjectPainter::drawLineForBoxSide(graphicsContext, 1527242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci pixelSnappedBox.x() - outlineWidth, 1537242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci pixelSnappedBox.maxY(), 1547242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci std::min(pixelSnappedBox.maxX() + outlineWidth, !nextline.isEmpty() ? pixelSnappedNextLine.x() + 1 : 1000000), 1557242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci pixelSnappedBox.maxY() + outlineWidth, 1567242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci BSBottom, outlineColor, outlineStyle, 1577242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci outlineWidth, 1587242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci (!nextline.isEmpty() && paintOffset.x() + nextline.x() + 1 < pixelSnappedBox.maxX() + outlineWidth) ? -outlineWidth : outlineWidth, 1597242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci antialias); 1607242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci } 1617242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1627242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (nextline.maxX() < thisline.maxX()) { 1637242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci ObjectPainter::drawLineForBoxSide(graphicsContext, 1647242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci std::max(!nextline.isEmpty() ? pixelSnappedNextLine.maxX() : -1000000, pixelSnappedBox.x() - outlineWidth), 1657242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci pixelSnappedBox.maxY(), 1667242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci pixelSnappedBox.maxX() + outlineWidth, 1677242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci pixelSnappedBox.maxY() + outlineWidth, 1687242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci BSBottom, outlineColor, outlineStyle, 1697242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci (!nextline.isEmpty() && pixelSnappedBox.x() - outlineWidth < paintOffset.x() + nextline.maxX()) ? -outlineWidth : outlineWidth, 1707242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci outlineWidth, antialias); 1717242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci } 1727242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1737242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (thisline.x() == thisline.maxX()) { 1747242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci ObjectPainter::drawLineForBoxSide(graphicsContext, 1757242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci pixelSnappedBox.x() - outlineWidth, 1767242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci pixelSnappedBox.maxY(), 1777242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci pixelSnappedBox.maxX() + outlineWidth, 1787242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci pixelSnappedBox.maxY() + outlineWidth, 1797242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci BSBottom, outlineColor, outlineStyle, 1807242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci outlineWidth, 1817242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci outlineWidth, 1827242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci antialias); 1837242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci } 1847242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 1857242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1867242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} // namespace blink 187