From ed5640d8b587fbcfed7dd7967f3de04b37a76f26 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 11:06:44 +0200 Subject: Adding upstream version 4:7.4.7. Signed-off-by: Daniel Baumann --- sw/source/uibase/docvw/DashedLine.cxx | 91 +++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 sw/source/uibase/docvw/DashedLine.cxx (limited to 'sw/source/uibase/docvw/DashedLine.cxx') diff --git a/sw/source/uibase/docvw/DashedLine.cxx b/sw/source/uibase/docvw/DashedLine.cxx new file mode 100644 index 000000000..5727cf280 --- /dev/null +++ b/sw/source/uibase/docvw/DashedLine.cxx @@ -0,0 +1,91 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +SwDashedLine::SwDashedLine( vcl::Window* pParent, Color& ( *pColorFn )() ) + : Control( pParent, WB_DIALOGCONTROL | WB_HORZ ) + , m_pColorFn( pColorFn ) +{ +} + +SwDashedLine::~SwDashedLine( ) +{ +} + +void SwDashedLine::Paint(vcl::RenderContext& rRenderContext, const tools::Rectangle&) +{ + const drawinglayer::geometry::ViewInformation2D aNewViewInfos; + std::unique_ptr pProcessor( + drawinglayer::processor2d::createBaseProcessor2DFromOutputDevice(rRenderContext, aNewViewInfos)); + + // Compute the start and end points + const tools::Rectangle aRect(tools::Rectangle(Point(0, 0), rRenderContext.PixelToLogic(GetSizePixel()))); + double nHalfWidth = double(aRect.Top() + aRect.Bottom()) / 2.0; + + basegfx::B2DPoint aStart(double(aRect.Left()), nHalfWidth); + basegfx::B2DPoint aEnd(double(aRect.Right()), nHalfWidth); + + basegfx::B2DPolygon aPolygon; + aPolygon.append(aStart); + aPolygon.append(aEnd); + + drawinglayer::primitive2d::Primitive2DContainer aSeq(1); + + const StyleSettings& rSettings = Application::GetSettings().GetStyleSettings(); + + std::vector aStrokePattern; + basegfx::BColor aColor = m_pColorFn().getBColor(); + if (rSettings.GetHighContrastMode()) + { + // Only a solid line in high contrast mode + aColor = rSettings.GetDialogTextColor().getBColor(); + } + else + { + // Get a color for the contrast + basegfx::BColor aHslLine = basegfx::utils::rgb2hsl(aColor); + double nLuminance = aHslLine.getZ(); + nLuminance += (1.0 - nLuminance) * 0.75; + if (aHslLine.getZ() > 0.7) + nLuminance = aHslLine.getZ() * 0.7; + aHslLine.setZ(nLuminance); + const basegfx::BColor aOtherColor = basegfx::utils::hsl2rgb(aHslLine); + + // Compute the plain line + aSeq[0] = new drawinglayer::primitive2d::PolygonHairlinePrimitive2D(aPolygon, aOtherColor); + + // Dashed line in twips + aStrokePattern.push_back(3); + aStrokePattern.push_back(3); + + aSeq.resize(2); + } + + // Compute the dashed line primitive + aSeq[aSeq.size() - 1] = + new drawinglayer::primitive2d::PolyPolygonStrokePrimitive2D( + basegfx::B2DPolyPolygon(aPolygon), + drawinglayer::attribute::LineAttribute(m_pColorFn().getBColor()), + drawinglayer::attribute::StrokeAttribute(std::move(aStrokePattern))); + + pProcessor->process(aSeq); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -- cgit v1.2.3