From e763becde379da84d4ffa0a575995b9303212844 Mon Sep 17 00:00:00 2001 From: Marco Martin Date: Fri, 2 Aug 2013 17:33:57 +0200 Subject: [PATCH] adjust borders when the panel moves --- panelview.cpp | 4 ++ panelview.h | 1 + qmlpackages/desktop/contents/views/Panel.qml | 74 +++++++++++++++----- 3 files changed, 62 insertions(+), 17 deletions(-) diff --git a/panelview.cpp b/panelview.cpp index 2d0dac636..9598c2129 100644 --- a/panelview.cpp +++ b/panelview.cpp @@ -22,6 +22,8 @@ #include #include #include +#include +#include #include #include @@ -100,6 +102,8 @@ void PanelView::init() } setResizeMode(View::SizeRootObjectToView); + qmlRegisterType(); + engine()->rootContext()->setContextProperty("panel", this); setSource(QUrl::fromLocalFile(m_corona->package().filePath("views", "Panel.qml"))); positionPanel(); } diff --git a/panelview.h b/panelview.h index d8d86a798..d9deb1db7 100644 --- a/panelview.h +++ b/panelview.h @@ -35,6 +35,7 @@ class PanelView : public View Q_PROPERTY(int length READ length WRITE setLength NOTIFY lengthChanged) Q_PROPERTY(int maximumLength READ maximumLength WRITE setMaximumLength NOTIFY maximumLengthChanged) Q_PROPERTY(int minimumLength READ minimumLength WRITE setMinimumLength NOTIFY minimumLengthChanged) + Q_PROPERTY(QScreen *screen READ screen /*NOTIFY screenChanged*/) public: explicit PanelView(DesktopCorona *corona, QWindow *parent = 0); diff --git a/qmlpackages/desktop/contents/views/Panel.qml b/qmlpackages/desktop/contents/views/Panel.qml index 06fed2175..f57327829 100644 --- a/qmlpackages/desktop/contents/views/Panel.qml +++ b/qmlpackages/desktop/contents/views/Panel.qml @@ -30,6 +30,41 @@ PlasmaCore.FrameSvgItem { property Item containment + function adjustBorders() { + var borders = PlasmaCore.FrameSvg.AllBorders; + + switch (containment.location) { + case PlasmaCore.Types.TopEdge: + borders = borders & ~PlasmaCore.FrameSvg.TopBorder; + break; + case PlasmaCore.Types.LeftEdge: + borders = borders & ~PlasmaCore.FrameSvg.LeftBorder; + break; + case PlasmaCore.Types.RightEdge: + borders = borders & ~PlasmaCore.FrameSvg.RightBorder; + break; + case PlasmaCore.Types.BottomEdge: + default: + borders = borders & ~PlasmaCore.FrameSvg.BottomBorder; + break; + } + + if (panel.x <= panel.screen.geometry.x) { + borders = borders & ~PlasmaCore.FrameSvg.LeftBorder; + } + if (panel.x + panel.width >= panel.screen.geometry.x + panel.screen.geometry.width) { + borders = borders & ~PlasmaCore.FrameSvg.RightBorder; + } + if (panel.y <= panel.screen.geometry.y) { + borders = borders & ~PlasmaCore.FrameSvg.TopBorder; + } + if (panel.y + panel.height >= panel.screen.geometry.y + panel.screen.geometry.height) { + borders = borders & ~PlasmaCore.FrameSvg.BottomBorder; + } + + root.enabledBorders = borders; + } + onContainmentChanged: { print("New panel Containment: " + containment) //containment.parent = root @@ -40,25 +75,30 @@ PlasmaCore.FrameSvgItem { Connections { target: containment onLocationChanged: { - var borders = PlasmaCore.FrameSvg.AllBorders; + adjustBorders() + } + } - switch (containment.location) { - case PlasmaCore.Types.TopEdge: - borders = borders & ~PlasmaCore.FrameSvg.TopBorder; - break; - case PlasmaCore.Types.LeftEdge: - borders = borders & ~PlasmaCore.FrameSvg.LeftBorder; - break; - case PlasmaCore.Types.RightEdge: - borders = borders & ~PlasmaCore.FrameSvg.RightBorder; - break; - case PlasmaCore.Types.BottomEdge: - default: - borders = borders & ~PlasmaCore.FrameSvg.BottomBorder; - break; - } + Connections { + target: panel + onXChanged: { + adjustBorders(); + } + onYChanged: { + adjustBorders(); + } + onWidthChanged: { + adjustBorders(); + } + onHeightChanged: { + adjustBorders(); + } + } - root.enabledBorders = borders; + Connections { + target: panel.screen + onGeometryChanged: { + adjustBorders(); } }