File indexing completed on 2024-12-01 11:10:31

0001 /*
0002     SPDX-FileCopyrightText: 2021 Michail Vourlakos <mvourlakos@gmail.com>
0003     SPDX-License-Identifier: GPL-2.0-or-later
0004 */
0005 
0006 #include "genericviewtools.h"
0007 
0008 // local
0009 #include "generictools.h"
0010 
0011 // Qt
0012 #include <QApplication>
0013 #include <QDebug>
0014 #include <QStyle>
0015 #include <QTextDocument>
0016 
0017 namespace Latte {
0018 
0019 const int ICONMARGIN = 1;
0020 const int INDICATORCHANGESLENGTH = 6;
0021 const int INDICATORCHANGESMARGIN = 5;
0022 const int MARGIN = 2;
0023 
0024 void drawView(QPainter *painter, const QStyleOption &option, const Latte::Data::View &view, const QRect &availableScreenRect, const float brushOpacity)
0025 {
0026     int thick = 4;
0027     painter->save();
0028 
0029     bool selected = Latte::isSelected(option);
0030     QPalette::ColorRole viewColorRole = !selected ? QPalette::Highlight : QPalette::Text;
0031     QPen pen; pen.setWidth(thick);
0032     QColor pencolor = option.palette.color(Latte::colorGroup(option), viewColorRole);
0033     pencolor.setAlphaF(brushOpacity);
0034     pen.setColor(pencolor);
0035     painter->setPen(pen);
0036 
0037     int x = availableScreenRect.x();
0038     int y = availableScreenRect.y();
0039 
0040     int length = view.isVertical() ? availableScreenRect.height() - thick + 1 : availableScreenRect.width() - thick + 1;
0041     int max_length = length;
0042 
0043     if (view.alignment != Latte::Types::Justify) {
0044         length = 0.5 * length;
0045     }
0046 
0047     //! provide even screen length
0048     if (length % 2 == 1) {
0049         length = qMin(max_length, length + 1);
0050     }
0051 
0052     int screen_edge = (view.screenEdgeMargin > 0) ? 2 : 0;
0053 
0054     if (view.edge == Plasma::Types::TopEdge) {
0055         y = availableScreenRect.y() + thick/2 + screen_edge;
0056     } else if (view.edge == Plasma::Types::BottomEdge) {
0057         y = availableScreenRect.y() + availableScreenRect.height() - 1 - screen_edge;
0058     } else if (view.edge == Plasma::Types::LeftEdge) {
0059         x = availableScreenRect.x() + thick/2 + screen_edge;
0060     } else if (view.edge == Plasma::Types::RightEdge) {
0061         x = availableScreenRect.x() + availableScreenRect.width() - 1 - screen_edge;
0062     }
0063 
0064     if (view.isHorizontal()) {
0065         if (view.alignment == Latte::Types::Left) {
0066             x = availableScreenRect.x() + thick / 2;
0067         } else if (view.alignment == Latte::Types::Right) {
0068             x = availableScreenRect.x() + availableScreenRect.width() - length - 1;
0069         } else if (view.alignment == Latte::Types::Center) {
0070             int leftmargin = (availableScreenRect.width()/2) - (length/2);
0071             x = availableScreenRect.x() + leftmargin + 1;
0072         } else if (view.alignment == Latte::Types::Justify) {
0073             x = availableScreenRect.x() + thick / 2;
0074         }
0075     } else if (view.isVertical()) {
0076         if (view.alignment == Latte::Types::Top) {
0077             y = availableScreenRect.y() + thick / 2;
0078         } else if (view.alignment == Latte::Types::Bottom) {
0079             y = availableScreenRect.y() + availableScreenRect.height() - length - 1;
0080         } else if (view.alignment == Latte::Types::Center) {
0081             int topmargin = (availableScreenRect.height()/2) - (length/2);
0082             y = availableScreenRect.y() + topmargin + 1;
0083         } else if (view.alignment == Latte::Types::Justify) {
0084             y = availableScreenRect.y() + thick / 2;
0085         }
0086     }
0087 
0088     if (view.isHorizontal()) {
0089         painter->drawLine(x, y, x + length, y);
0090     } else if (view.isVertical()) {
0091         painter->drawLine(x, y, x, y + length);
0092     }
0093 
0094     painter->restore();
0095 }
0096 
0097 }