1d2592a34a059e7cbb2b11dc53649ac4912422909Argyrios Kyrtzidis// Copyright 2014 The Chromium Authors. All rights reserved. 264924859b6b09d1cfb62fecf5954ec6c27cb58feTed Kremenek// Use of this source code is governed by a BSD-style license that can be 34af84313df0d2710fd57af89132e680294225cadTed Kremenek// found in the LICENSE file. 4d27f8169f4b68337a489547a41ac45bf7a5d1ddfTed Kremenek 5d27f8169f4b68337a489547a41ac45bf7a5d1ddfTed Kremenek#include "config.h" 6d27f8169f4b68337a489547a41ac45bf7a5d1ddfTed Kremenek#include "core/paint/DetailsMarkerPainter.h" 7d27f8169f4b68337a489547a41ac45bf7a5d1ddfTed Kremenek 8d27f8169f4b68337a489547a41ac45bf7a5d1ddfTed Kremenek#include "core/paint/BlockPainter.h" 9d27f8169f4b68337a489547a41ac45bf7a5d1ddfTed Kremenek#include "core/rendering/PaintInfo.h" 1077349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek#include "core/rendering/RenderDetailsMarker.h" 1177349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek#include "platform/geometry/LayoutPoint.h" 1277349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek#include "platform/graphics/Path.h" 13d27f8169f4b68337a489547a41ac45bf7a5d1ddfTed Kremenek 14d27f8169f4b68337a489547a41ac45bf7a5d1ddfTed Kremeneknamespace blink { 15a7af5ea88a6c5bdf87497cca6c20831e8c546751Argyrios Kyrtzidis 169b663716449b618ba0390b1dbebc54fa8e971124Ted Kremenekvoid DetailsMarkerPainter::paint(PaintInfo& paintInfo, const LayoutPoint& paintOffset) 17ac7cc2d37e82181e73fcc265c1d0a619d18b7605Jordan Rose{ 18199c3d6cd16aebbb9c7f0d42af9d922c9628bf70Ken Dyck if (paintInfo.phase != PaintPhaseForeground || m_renderDetailsMarker.style()->visibility() != VISIBLE) { 1916f0049415ec596504891259e2a83e19871c0d52Chris Lattner BlockPainter(m_renderDetailsMarker).paint(paintInfo, paintOffset); 20337e4dbc6859589b8878146a88bebf754e916702Ted Kremenek return; 2155fc873017f10f6f566b182b70f6fc22aefa3464Chandler Carruth } 221b63e4f732dbc73d90abf886b4d21f8e3a165f6dChris Lattner 230bed8a12f2878d3cd94fb8bdba55b593d92dd11aTed Kremenek LayoutPoint boxOrigin(paintOffset + m_renderDetailsMarker.location()); 2455fc873017f10f6f566b182b70f6fc22aefa3464Chandler Carruth LayoutRect overflowRect(m_renderDetailsMarker.visualOverflowRect()); 2555fc873017f10f6f566b182b70f6fc22aefa3464Chandler Carruth overflowRect.moveBy(boxOrigin); 2655fc873017f10f6f566b182b70f6fc22aefa3464Chandler Carruth 2755fc873017f10f6f566b182b70f6fc22aefa3464Chandler Carruth if (!paintInfo.rect.intersects(pixelSnappedIntRect(overflowRect))) 2855fc873017f10f6f566b182b70f6fc22aefa3464Chandler Carruth return; 296cb7c1a43b0c8f739d1f54b7fdae5ede86033496Benjamin Kramer 30c2994283aa7538b7420c8e398cde7afa328d7042Anna Zaks const Color color(m_renderDetailsMarker.resolveColor(CSSPropertyColor)); 3155fc873017f10f6f566b182b70f6fc22aefa3464Chandler Carruth paintInfo.context->setStrokeColor(color); 324323a57627e796dcfdfdb7d47672dc09ed308edaTed Kremenek paintInfo.context->setStrokeStyle(SolidStroke); 330f5f0595d6a038843a7051c5a65fca7bce2915a0Ted Kremenek paintInfo.context->setStrokeThickness(1.0f); 340f5f0595d6a038843a7051c5a65fca7bce2915a0Ted Kremenek paintInfo.context->setFillColor(color); 350f5f0595d6a038843a7051c5a65fca7bce2915a0Ted Kremenek 360f5f0595d6a038843a7051c5a65fca7bce2915a0Ted Kremenek boxOrigin.move(m_renderDetailsMarker.borderLeft() + m_renderDetailsMarker.paddingLeft(), m_renderDetailsMarker.borderTop() + m_renderDetailsMarker.paddingTop()); 37b387a3f23e423d62c053be86294b703da1d1a222Ted Kremenek paintInfo.context->fillPath(getPath(boxOrigin)); 389ef6537a894c33003359b1f9b9676e9178e028b7Ted Kremenek} 39b387a3f23e423d62c053be86294b703da1d1a222Ted Kremenek 40ab2b8c54bca82866876f91e756788916d3fa20c3Ted Kremenekstatic Path createPath(const FloatPoint* path) 416bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines{ 426bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines Path result; 43c2994283aa7538b7420c8e398cde7afa328d7042Anna Zaks result.moveTo(FloatPoint(path[0].x(), path[0].y())); 44c2994283aa7538b7420c8e398cde7afa328d7042Anna Zaks for (int i = 1; i < 4; ++i) 45749bbe6f5f23676244f12a0d41511c8e73516febAnna Zaks result.addLineTo(FloatPoint(path[i].x(), path[i].y())); 46749bbe6f5f23676244f12a0d41511c8e73516febAnna Zaks return result; 47749bbe6f5f23676244f12a0d41511c8e73516febAnna Zaks} 48749bbe6f5f23676244f12a0d41511c8e73516febAnna Zaks 49749bbe6f5f23676244f12a0d41511c8e73516febAnna Zaksstatic Path createDownArrowPath() 50749bbe6f5f23676244f12a0d41511c8e73516febAnna Zaks{ 515903a373db3d27794c90b25687e0dd6adb0e497dAnna Zaks FloatPoint points[4] = { FloatPoint(0.0f, 0.07f), FloatPoint(0.5f, 0.93f), FloatPoint(1.0f, 0.07f), FloatPoint(0.0f, 0.07f) }; 525903a373db3d27794c90b25687e0dd6adb0e497dAnna Zaks return createPath(points); 535903a373db3d27794c90b25687e0dd6adb0e497dAnna Zaks} 54e695e1cd7d8a579455e8969be36cbaf10a316a64Ted Kremenek 55e695e1cd7d8a579455e8969be36cbaf10a316a64Ted Kremenekstatic Path createUpArrowPath() 56e695e1cd7d8a579455e8969be36cbaf10a316a64Ted Kremenek{ 57e695e1cd7d8a579455e8969be36cbaf10a316a64Ted Kremenek FloatPoint points[4] = { FloatPoint(0.0f, 0.93f), FloatPoint(0.5f, 0.07f), FloatPoint(1.0f, 0.93f), FloatPoint(0.0f, 0.93f) }; 58651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return createPath(points); 59651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 603fd5f370a28552976c52e76c3035d79012d78ddaAnna Zaks 61fbcb3f11fc90e9f00e6074e9b118b8dc11ca604cAnna Zaksstatic Path createLeftArrowPath() 6275f31c4862643ab09479c979fabf754e7ffe1460Anna Zaks{ 6375f31c4862643ab09479c979fabf754e7ffe1460Anna Zaks FloatPoint points[4] = { FloatPoint(1.0f, 0.0f), FloatPoint(0.14f, 0.5f), FloatPoint(1.0f, 1.0f), FloatPoint(1.0f, 0.0f) }; 6425e695b2d574d919cc1bbddf3a2efe073d449b1cZhongxing Xu return createPath(points); 651d26f48dc2eea1c07431ca1519d7034a21b9bcffTed Kremenek} 66fbcb3f11fc90e9f00e6074e9b118b8dc11ca604cAnna Zaks 67d2592a34a059e7cbb2b11dc53649ac4912422909Argyrios Kyrtzidisstatic Path createRightArrowPath() 68c77a55126fcad66fb086f8e100a494caa2496a2dZhongxing Xu{ 6932a58084a4c53e6938dd81bfce224db25a5976d1Ted Kremenek FloatPoint points[4] = { FloatPoint(0.0f, 0.0f), FloatPoint(0.86f, 0.5f), FloatPoint(0.0f, 1.0f), FloatPoint(0.0f, 0.0f) }; 70ca5d78d0bc3010164f2f9682967d64d7e305a167Jordan Rose return createPath(points); 7150a6d0ce344c02782e0207574005c3b2aaa5077cTed Kremenek} 72c8413fd03f73084a5c93028f8b4db619fc388087Ted Kremenek 736bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen HinesPath DetailsMarkerPainter::getCanonicalPath() const 744ef19205b6912316296db74a9073ad6fa60e4ccaTed Kremenek{ 75fbcb3f11fc90e9f00e6074e9b118b8dc11ca604cAnna Zaks switch (m_renderDetailsMarker.orientation()) { 7675f31c4862643ab09479c979fabf754e7ffe1460Anna Zaks case RenderDetailsMarker::Left: return createLeftArrowPath(); 7775f31c4862643ab09479c979fabf754e7ffe1460Anna Zaks case RenderDetailsMarker::Right: return createRightArrowPath(); 78255d4d4226b24036ceb11228fbb74286e58620f7Ted Kremenek case RenderDetailsMarker::Up: return createUpArrowPath(); 794d9e497a2b1eab3b1214848216050c64fc3acfd6Jordan Rose case RenderDetailsMarker::Down: return createDownArrowPath(); 804d9e497a2b1eab3b1214848216050c64fc3acfd6Jordan Rose } 814d9e497a2b1eab3b1214848216050c64fc3acfd6Jordan Rose 824d9e497a2b1eab3b1214848216050c64fc3acfd6Jordan Rose return Path(); 834d9e497a2b1eab3b1214848216050c64fc3acfd6Jordan Rose} 84c80135ba857da48173578b9c528fce6777e18168Ted Kremenek 8550a6d0ce344c02782e0207574005c3b2aaa5077cTed KremenekPath DetailsMarkerPainter::getPath(const LayoutPoint& origin) const 86d2592a34a059e7cbb2b11dc53649ac4912422909Argyrios Kyrtzidis{ 87cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek Path result = getCanonicalPath(); 8850a6d0ce344c02782e0207574005c3b2aaa5077cTed Kremenek result.transform(AffineTransform().scale(m_renderDetailsMarker.contentWidth().toFloat(), m_renderDetailsMarker.contentHeight().toFloat())); 8950a6d0ce344c02782e0207574005c3b2aaa5077cTed Kremenek result.translate(FloatSize(origin.x().toFloat(), origin.y().toFloat())); 90e695e1cd7d8a579455e8969be36cbaf10a316a64Ted Kremenek return result; 91e695e1cd7d8a579455e8969be36cbaf10a316a64Ted Kremenek} 92e695e1cd7d8a579455e8969be36cbaf10a316a64Ted Kremenek 93e695e1cd7d8a579455e8969be36cbaf10a316a64Ted Kremenek} // namespace paint 948bef8238181a30e52dea380789a7e2d760eac532Ted Kremenek