From 88c7f697085bd208b4fe776f7bbcf0664886d062 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Martin=20Gr=C3=A4=C3=9Flin?= <kde@martin-graesslin.com>
Date: Sun, 8 Nov 2009 20:35:34 +0000
Subject: [PATCH] Aurorae supports border sizes.

svn path=/trunk/KDE/kdebase/workspace/; revision=1046472
---
 clients/aurorae/src/aurorae.cpp | 47 ++++++++++++++++++++++++++++++---
 clients/aurorae/src/aurorae.h   |  1 +
 2 files changed, 45 insertions(+), 3 deletions(-)

diff --git a/clients/aurorae/src/aurorae.cpp b/clients/aurorae/src/aurorae.cpp
index 56e93cdafe..32309450d9 100644
--- a/clients/aurorae/src/aurorae.cpp
+++ b/clients/aurorae/src/aurorae.cpp
@@ -172,6 +172,13 @@ Plasma::FrameSvg *AuroraeFactory::button(const QString &b)
     }
 }
 
+QList< KDecorationDefines::BorderSize > AuroraeFactory::borderSizes() const
+{
+    return QList< BorderSize >() << BorderTiny << BorderNormal <<
+        BorderLarge << BorderVeryLarge <<  BorderHuge <<
+        BorderVeryHuge << BorderOversized;
+}
+
 
 AuroraeFactory *AuroraeFactory::s_instance = NULL;
 
@@ -552,13 +559,47 @@ int AuroraeClient::layoutMetric(LayoutMetric lm, bool respectWindowState,
     bool maximized = maximizeMode() == MaximizeFull &&
                      !options()->moveResizeMaximizedWindows();
     const ThemeConfig &conf = AuroraeFactory::instance()->themeConfig();
+    qreal left, top, right, bottom;
+    AuroraeFactory::instance()->frame()->getMargins(left, top, right, bottom);
+    int borderLeft, borderRight, borderBottom;;
+    switch (KDecoration::options()->preferredBorderSize(AuroraeFactory::instance())) {
+        case BorderTiny:
+            if (compositingActive()) {
+                borderLeft = qMin(0, (int)left - conf.borderLeft() - conf.paddingLeft());
+                borderRight = qMin(0, (int)right - conf.borderRight() - conf.paddingRight());
+                borderBottom = qMin(0, (int)bottom - conf.borderBottom() - conf.paddingBottom());
+            } else {
+                borderLeft = qMin(0, (int)left - conf.borderLeft());
+                borderRight = qMin(0, (int)right - conf.borderRight());
+                borderBottom = qMin(0, (int)bottom - conf.borderBottom());
+            }
+            break;
+        case BorderLarge:
+            borderLeft = borderRight = borderBottom = 4;
+            break;
+        case BorderVeryLarge:
+            borderLeft = borderRight = borderBottom = 8;
+            break;
+        case BorderHuge:
+            borderLeft = borderRight = borderBottom = 12;
+            break;
+        case BorderVeryHuge:
+            borderLeft = borderRight = borderBottom = 23;
+            break;
+        case BorderOversized:
+            borderLeft = borderRight = borderBottom = 36;
+            break;
+        case BorderNormal:
+        default:
+            borderLeft = borderRight = borderBottom =  0;
+    }
     switch (lm) {
     case LM_BorderLeft:
-        return maximized && respectWindowState ? 0 : conf.borderLeft();
+        return maximized && respectWindowState ? 0 : conf.borderLeft() + borderLeft;
     case LM_BorderRight:
-        return maximized && respectWindowState ? 0 : conf.borderRight();
+        return maximized && respectWindowState ? 0 : conf.borderRight() + borderRight;
     case LM_BorderBottom:
-        return maximized && respectWindowState ? 0 : conf.borderBottom();
+        return maximized && respectWindowState ? 0 : conf.borderBottom() + borderBottom;
 
     case LM_OuterPaddingLeft:
         return conf.paddingLeft();
diff --git a/clients/aurorae/src/aurorae.h b/clients/aurorae/src/aurorae.h
index 10fb682899..85735ae511 100644
--- a/clients/aurorae/src/aurorae.h
+++ b/clients/aurorae/src/aurorae.h
@@ -38,6 +38,7 @@ public:
     bool reset(unsigned long changed);
     KDecoration *createDecoration(KDecorationBridge*);
     bool supports(Ability ability) const;
+    virtual QList< BorderSize > borderSizes() const;
 
     Plasma::FrameSvg *frame() {
         return &m_frame;