From f94bd35ad929326976995c00ef63458035bb1723 Mon Sep 17 00:00:00 2001 From: Michail Vourlakos Date: Sun, 11 Apr 2021 10:19:14 +0300 Subject: [PATCH] viewsdialog:support vertical screens --- app/settings/generic/generictools.cpp | 12 ++++----- app/settings/generic/generictools.h | 2 +- .../viewsdialog/delegates/namedelegate.cpp | 11 +++++++- app/settings/viewsdialog/viewsmodel.cpp | 26 +++++++++++++++++++ app/settings/viewsdialog/viewsmodel.h | 3 +++ 5 files changed, 46 insertions(+), 8 deletions(-) diff --git a/app/settings/generic/generictools.cpp b/app/settings/generic/generictools.cpp index 0a0e96e4c..70cfd07bb 100644 --- a/app/settings/generic/generictools.cpp +++ b/app/settings/generic/generictools.cpp @@ -241,7 +241,7 @@ void drawChangesIndicator(QPainter *painter, const QStyleOptionViewItem &option) QRect remainedFromScreenDrawing(const QStyleOptionViewItem &option) { - int total_length = option.rect.height() * 1.8 + MARGIN * 2; + int total_length = option.rect.height() * 1.7 + MARGIN * 2; QRect optionRemainedRect = (qApp->layoutDirection() == Qt::RightToLeft) ? QRect(option.rect.x(), option.rect.y(), option.rect.width() - total_length, option.rect.height()) : QRect(option.rect.x() + total_length, option.rect.y(), option.rect.width() - total_length, option.rect.height()); @@ -251,7 +251,7 @@ QRect remainedFromScreenDrawing(const QStyleOptionViewItem &option) void drawScreenBackground(QPainter *painter, const QStyleOptionViewItem &option) { - int total_length = option.rect.height() * 1.8 + MARGIN * 2; + int total_length = option.rect.height() * 1.7 + MARGIN * 2; QStyleOptionViewItem screenOption = option; screenOption.text = ""; @@ -267,17 +267,17 @@ void drawScreenBackground(QPainter *painter, const QStyleOptionViewItem &option) option.widget->style()->drawControl(QStyle::CE_ItemViewItem, &screenOption, painter); } -QRect drawScreen(QPainter *painter, const QStyleOptionViewItem &option) +QRect drawScreen(QPainter *painter, const QStyleOptionViewItem &option, bool isVertical) { - int total_length = option.rect.height() * 1.8 + MARGIN * 2; + int total_length = option.rect.height() * 1.7 + MARGIN * 2; int pen_width = 2; painter->save(); painter->setRenderHint(QPainter::Antialiasing, true); //! horizontal layout scenario - int scr_height = option.rect.height() - MARGIN * 6; - int scr_width = 1.6 * scr_height; + int scr_height = (!isVertical ? option.rect.height() - MARGIN * 6 : option.rect.height() - MARGIN * 4); + int scr_width = (!isVertical ? 1.7 * scr_height : 0.8 * scr_height); QRect screenMaximumRect = (qApp->layoutDirection() == Qt::RightToLeft) ? QRect(option.rect.x() + option.rect.width() - total_length + MARGIN, option.rect.y() + MARGIN, total_length, option.rect.height() - MARGIN*2) : diff --git a/app/settings/generic/generictools.h b/app/settings/generic/generictools.h index b74dce3e4..07158d6f9 100644 --- a/app/settings/generic/generictools.h +++ b/app/settings/generic/generictools.h @@ -58,7 +58,7 @@ void drawChangesIndicator(QPainter *painter, const QStyleOptionViewItem &option) //! screen icon QRect remainedFromScreenDrawing(const QStyleOptionViewItem &option); -QRect drawScreen(QPainter *painter, const QStyleOptionViewItem &option); // returns screen available rect +QRect drawScreen(QPainter *painter, const QStyleOptionViewItem &option, bool isVertical = false); // returns screen available rect void drawScreenBackground(QPainter *painter, const QStyleOptionViewItem &option); // returns option.rect remained rect void drawView(QPainter *painter, const QStyleOptionViewItem &option, const Latte::Data::View &view, const QRect &availableScreenRect); diff --git a/app/settings/viewsdialog/delegates/namedelegate.cpp b/app/settings/viewsdialog/delegates/namedelegate.cpp index c3878dca5..d50b346d4 100644 --- a/app/settings/viewsdialog/delegates/namedelegate.cpp +++ b/app/settings/viewsdialog/delegates/namedelegate.cpp @@ -22,6 +22,7 @@ // local #include "../viewsmodel.h" #include "../../generic/generictools.h" +#include "../../../data/screendata.h" #include "../../../data/viewdata.h" // KDE @@ -54,6 +55,7 @@ void NameDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, bool isActive = index.data(Model::Views::ISACTIVEROLE).toBool(); bool isChanged = (index.data(Model::Views::ISCHANGEDROLE).toBool() || index.data(Model::Views::HASCHANGEDVIEWROLE).toBool()); + Latte::Data::Screen screen = index.data(Model::Views::SCREENROLE).value(); Latte::Data::View view = index.data(Model::Views::VIEWROLE).value(); if (isEmpty) { @@ -90,10 +92,17 @@ void NameDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, myOptions.rect = availableTextRect; // draw screen icon + bool viewisvertical{false}; + + if (!screen.geometry.isEmpty()) { + float scrratio = screen.geometry.width() / screen.geometry.height(); + viewisvertical = (scrratio < 1.0); + } + availableTextRect = Latte::remainedFromScreenDrawing(myOptions); Latte::drawScreenBackground(painter, myOptions); - QRect availableScreenRect = Latte::drawScreen(painter, myOptions); + QRect availableScreenRect = Latte::drawScreen(painter, myOptions, viewisvertical); Latte::drawView(painter, myOptions, view, availableScreenRect); myOptions.rect = availableTextRect; diff --git a/app/settings/viewsdialog/viewsmodel.cpp b/app/settings/viewsdialog/viewsmodel.cpp index e676ea021..d8ef16d22 100644 --- a/app/settings/viewsdialog/viewsmodel.cpp +++ b/app/settings/viewsdialog/viewsmodel.cpp @@ -208,6 +208,27 @@ bool Views::isVertical(const Plasma::Types::Location &location) const return (location == Plasma::Types::LeftEdge || location == Plasma::Types::RightEdge); } +Latte::Data::Screen Views::screenData(const QString &viewId) const +{ + int row = rowForId(viewId); + + if (row < 0) { + return Latte::Data::Screen(); + } + + QString primaryid = QString::number(m_corona->screenPool()->primaryScreenId()); + QString explicitid = QString::number(m_viewsTable[row].screen); + + if (m_viewsTable[row].onPrimary && s_screens.containsId(primaryid)) { + return s_screens[primaryid]; + } else if (!m_viewsTable[row].onPrimary && s_screens.containsId(explicitid)) { + return s_screens[explicitid]; + } + + return Latte::Data::Screen(); +} + + void Views::populateScreens() { s_screens.clear(); @@ -450,6 +471,11 @@ QVariant Views::data(const QModelIndex &index, int role) const } } else if (role == HASCHANGEDVIEWROLE) { return (isNewView || (m_viewsTable[row] != o_viewsTable[origviewid])); + } else if (role == SCREENROLE) { + QVariant scrVariant; + Latte::Data::Screen scrdata = screenData(m_viewsTable[row].id); + scrVariant.setValue(scrdata); + return scrVariant; } else if (role == VIEWROLE) { QVariant viewVariant; viewVariant.setValue(m_viewsTable[row]); diff --git a/app/settings/viewsdialog/viewsmodel.h b/app/settings/viewsdialog/viewsmodel.h index aabe8465a..3d52b2b14 100644 --- a/app/settings/viewsdialog/viewsmodel.h +++ b/app/settings/viewsdialog/viewsmodel.h @@ -60,6 +60,7 @@ public: ISCHANGEDROLE, HASCHANGEDVIEWROLE, CHOICESROLE, + SCREENROLE, VIEWROLE, SORTINGROLE }; @@ -120,6 +121,8 @@ private slots: private: bool isVertical(const Plasma::Types::Location &location) const; + Latte::Data::Screen screenData(const QString &viewId) const; + private: Latte::Data::ViewsTable m_viewsTable; Latte::Data::ViewsTable o_viewsTable;