File indexing completed on 2023-10-01 04:11:44

0001 /*
0002     SPDX-FileCopyrightText: 2005 Aaron Seigo <aseigo@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include <plasma/plasma.h>
0008 
0009 #include <QAction>
0010 #include <QApplication>
0011 #include <QMenu>
0012 
0013 #include "containment.h"
0014 
0015 namespace Plasma
0016 {
0017 Types::Types(QObject *parent)
0018     : QObject(parent)
0019 {
0020 }
0021 
0022 Types::~Types()
0023 {
0024 }
0025 
0026 Types::Direction locationToDirection(Types::Location location)
0027 {
0028     switch (location) {
0029     case Types::Floating:
0030     case Types::Desktop:
0031     case Types::TopEdge:
0032     case Types::FullScreen:
0033         // TODO: should we be smarter for floating and planer?
0034         //      perhaps we should take a QRect and/or QPos as well?
0035         return Types::Down;
0036     case Types::BottomEdge:
0037         return Types::Up;
0038     case Types::LeftEdge:
0039         return Types::Right;
0040     case Types::RightEdge:
0041         return Types::Left;
0042     }
0043 
0044     return Types::Down;
0045 }
0046 
0047 Types::Direction locationToInverseDirection(Types::Location location)
0048 {
0049     switch (location) {
0050     case Types::Floating:
0051     case Types::Desktop:
0052     case Types::TopEdge:
0053     case Types::FullScreen:
0054         // TODO: should we be smarter for floating and planer?
0055         //      perhaps we should take a QRect and/or QPos as well?
0056         return Types::Up;
0057     case Types::BottomEdge:
0058         return Types::Down;
0059     case Types::LeftEdge:
0060         return Types::Left;
0061     case Types::RightEdge:
0062         return Types::Right;
0063     }
0064 
0065     return Types::Up;
0066 }
0067 
0068 Types::PopupPlacement visualPopupPlacement(Types::PopupPlacement placement, Qt::LayoutDirection layoutDirection)
0069 {
0070     const bool mirrored = (layoutDirection == Qt::LayoutDirectionAuto) ? qApp->isRightToLeft() : (layoutDirection == Qt::RightToLeft);
0071 
0072     if (!mirrored) {
0073         return placement;
0074     }
0075 
0076     switch (placement) {
0077     case Types::TopPosedLeftAlignedPopup:
0078         return Types::TopPosedRightAlignedPopup;
0079     case Types::TopPosedRightAlignedPopup:
0080         return Types::TopPosedLeftAlignedPopup;
0081     case Types::LeftPosedTopAlignedPopup:
0082         return Types::RightPosedTopAlignedPopup;
0083     case Types::LeftPosedBottomAlignedPopup:
0084         return Types::RightPosedBottomAlignedPopup;
0085     case Types::BottomPosedLeftAlignedPopup:
0086         return Types::BottomPosedRightAlignedPopup;
0087     case Types::BottomPosedRightAlignedPopup:
0088         return Types::BottomPosedLeftAlignedPopup;
0089     case Types::RightPosedTopAlignedPopup:
0090         return Types::LeftPosedTopAlignedPopup;
0091     case Types::RightPosedBottomAlignedPopup:
0092         return Types::LeftPosedBottomAlignedPopup;
0093     case Types::FloatingPopup:
0094     default:
0095         return placement;
0096     }
0097 }
0098 
0099 } // Plasma namespace
0100 
0101 #include "moc_plasma.cpp"