1 /*
2     This file is part of the Okteta Gui library, made within the KDE community.
3 
4     SPDX-FileCopyrightText: 2003, 2008, 2019 Friedrich W. H. Kossebau <kossebau@kde.org>
5 
6     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
7 */
8 
9 #include "bordercolumnrenderer_p.hpp"
10 
11 // lib
12 #include <abstractcolumnstylist.hpp>
13 // Qt
14 #include <QPainter>
15 #include <QStyle>
16 
17 namespace Okteta {
18 
19 static constexpr PixelX BorderMargin = 4;
20 static constexpr PixelX LineWidth = 1;
21 static constexpr PixelX BorderWidth = 2 * BorderMargin + LineWidth;
22 static constexpr PixelX LineX = BorderMargin;
23 
init()24 void BorderColumnRendererPrivate::init()
25 {
26     Q_Q(BorderColumnRenderer);
27 
28     q->setWidth(m_lineDrawn ? BorderWidth : BorderMargin);
29 }
30 
renderColumn(QPainter * painter,const PixelXRange & Xs,const PixelYRange & Ys)31 void BorderColumnRendererPrivate::renderColumn(QPainter* painter, const PixelXRange& Xs, const PixelYRange& Ys)
32 {
33     Q_Q(BorderColumnRenderer);
34 
35     q->AbstractColumnRenderer::renderColumn(painter, Xs, Ys);
36 
37     renderBorderLine(painter, Xs, Ys);
38 }
39 
renderEmptyColumn(QPainter * painter,const PixelXRange & Xs,const PixelYRange & Ys)40 void BorderColumnRendererPrivate::renderEmptyColumn(QPainter* painter, const PixelXRange& Xs, const PixelYRange& Ys)
41 {
42     Q_Q(BorderColumnRenderer);
43 
44     q->AbstractColumnRenderer::renderEmptyColumn(painter, Xs, Ys);
45 
46     if (m_inEmpty) {
47         renderBorderLine(painter, Xs, Ys);
48     }
49 }
50 
renderBorderLine(QPainter * painter,const PixelXRange & Xs,const PixelYRange & Ys)51 void BorderColumnRendererPrivate::renderBorderLine(QPainter* painter, const PixelXRange& Xs, const PixelYRange& Ys)
52 {
53     Q_Q(BorderColumnRenderer);
54 
55     const PixelX viewGlobalLineX = q->x() + LineX;
56 
57     if (m_lineDrawn && Xs.includes(viewGlobalLineX)) {
58         const int lineColor = -1; // TODO: viewport->style()->styleHint( QStyle::SH_Table_GridLineColor, 0, viewport );
59 
60         painter->setPen(lineColor != -1 ? (QRgb)lineColor : mStylist->palette().mid().color());
61         painter->drawLine(viewGlobalLineX, Ys.start(), viewGlobalLineX, Ys.end());
62     }
63 }
64 
65 }
66