• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • workspace API Reference
  • KDE Home
  • Contact Us
 

liblancelot

  • sources
  • kde-4.14
  • workspace
  • kdeplasma-addons
  • libs
  • lancelot
  • widgets
ResizeBordersPanel.cpp
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2007, 2008, 2009, 2010 Ivan Cukic <ivan.cukic(at)kde.org>
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU Lesser/Library General Public License version 2,
6  * or (at your option) any later version, as published by the Free
7  * Software Foundation
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU Lesser/Library General Public License for more details
13  *
14  * You should have received a copy of the GNU Lesser/Library General Public
15  * License along with this program; if not, write to the
16  * Free Software Foundation, Inc.,
17  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18  */
19 
20 #include "ResizeBordersPanel.h"
21 #include "Widget.h"
22 
23 #define COLOR 255,0,0
24 
25 // TODO: Make ResizeBordersPanel use FullBorderLayout
26 // TODO: Make the resize feedback themable
27 
28 namespace Lancelot
29 {
30 
31 class ResizeBordersPanel::Private {
32 public:
33  class BorderItem: public Widget {
34  public:
35  BorderItem(QGraphicsItem * parent = 0, ResizeBordersPanel::Private * d = 0, int position = 0)
36  : Widget(parent), m_position(position), m_d(d)
37  {
38  setAcceptsHoverEvents(true);
39  }
40 
41  protected:
42  void hoverEnterEvent(QGraphicsSceneHoverEvent * event)
43  {
44  Widget::hoverEnterEvent(event);
45  m_d->activePosition = m_position;
46  m_d->updateChildren();
47  }
48 
49  void hoverLeaveEvent(QGraphicsSceneHoverEvent * event)
50  {
51  Widget::hoverLeaveEvent(event);
52  m_d->activePosition = 0;
53  m_d->updateChildren();
54  }
55 
56  int m_position;
57  ResizeBordersPanel::Private * m_d;
58  };
59 
60  void add(int where)
61  {
62  BorderItem * item = new BorderItem(q, this, where);
63  borderItems[where] = item;
64 
65  // Setting the cursor
66  if (where == Left || where == Right) {
67  item->setCursor(Qt::SizeHorCursor);
68  } else if (where == Top || where == Bottom) {
69  item->setCursor(Qt::SizeVerCursor);
70  } else if (where == (Left | Bottom) || where == (Right | Top)) {
71  item->setCursor(Qt::SizeBDiagCursor);
72  } else if (where == (Left | Top) || where == (Right | Bottom)) {
73  item->setCursor(Qt::SizeFDiagCursor);
74  }
75  }
76 
77  Private(ResizeBordersPanel * parent)
78  : activePosition(0), q(parent)
79  {
80  add(Left);
81  add(Right);
82  add(Top);
83  add(Bottom);
84 
85  add(Left | Top);
86  add(Left | Bottom);
87  add(Right | Top);
88  add(Right | Bottom);
89  }
90 
91  enum Edge {
92  Left = 1,
93  Right = 2,
94  Top = 4,
95  Bottom = 8
96  };
97 
98  void updateChildren()
99  {
100  foreach (QGraphicsWidget * item, borderItems) {
101  item->update();
102  }
103  }
104 
105  QMap < int, QGraphicsWidget * > borderItems;
106  int activePosition;
107  ResizeBordersPanel * q;
108 };
109 
110 ResizeBordersPanel::ResizeBordersPanel(QGraphicsItem * parent)
111  : Panel(parent), d(new Private(this))
112 {
113 }
114 
115 ResizeBordersPanel::~ResizeBordersPanel()
116 {
117  delete d;
118 }
119 
120 void ResizeBordersPanel::resizeEvent(QGraphicsSceneResizeEvent * event)
121 {
122  Panel::resizeEvent(event);
123 
124  qreal left = borderSize(Plasma::LeftMargin);
125  qreal right = borderSize(Plasma::RightMargin);
126  qreal top = borderSize(Plasma::TopMargin);
127  qreal bottom = borderSize(Plasma::BottomMargin);
128 
129  QRectF g;
130 
131  // Top edge
132  g.setBottomRight(QPointF(left, top));
133  d->borderItems[Private::Left | Private::Top]->setGeometry(g);
134 
135  g.setLeft(g.right());
136  g.setWidth(geometry().width() - left - right);
137  d->borderItems[Private::Top]->setGeometry(g);
138 
139  g.setLeft(g.right());
140  g.setWidth(right);
141  d->borderItems[Private::Right | Private::Top]->setGeometry(g);
142 
143  // Middle items
144  g = QRectF();
145  g.setTop(top);
146  g.setHeight(geometry().height() - top - bottom);
147 
148  g.setWidth(left);
149  d->borderItems[Private::Left]->setGeometry(g);
150 
151  g.setWidth(right);
152  g.moveRight(geometry().width());
153  d->borderItems[Private::Right]->setGeometry(g);
154 
155  // Bottom edge
156  g = QRectF();
157  g.setHeight(bottom);
158  g.moveBottom(geometry().height());
159 
160  g.setWidth(left);
161  d->borderItems[Private::Left | Private::Bottom]->setGeometry(g);
162 
163  g.setLeft(g.right());
164  g.setWidth(geometry().width() - left - right);
165  d->borderItems[Private::Bottom]->setGeometry(g);
166 
167  g.setLeft(g.right());
168  g.setWidth(right);
169  d->borderItems[Private::Right | Private::Bottom]->setGeometry(g);
170 }
171 
172 } // namespace Lancelot
173 
Lancelot::ResizeBordersPanel::ResizeBordersPanel
ResizeBordersPanel(QGraphicsItem *parent=0)
Creates a new ResizeBordersPanel.
Definition: ResizeBordersPanel.cpp:110
QGraphicsLayoutItem::geometry
QRectF geometry() const
QMap< int, QGraphicsWidget * >
QGraphicsItem
QGraphicsWidget::event
virtual bool event(QEvent *event)
ResizeBordersPanel.h
Lancelot::ResizeBordersPanel::~ResizeBordersPanel
~ResizeBordersPanel()
Destroys this Lancelot::ResizeBordersPanel.
Definition: ResizeBordersPanel.cpp:115
QGraphicsItem::update
void update(const QRectF &rect)
Lancelot::Panel::borderSize
qreal borderSize(Plasma::MarginEdge edge) const
Definition: Panel.cpp:132
QRectF::setLeft
void setLeft(qreal x)
QRectF::setHeight
void setHeight(qreal height)
QPointF
QRectF::moveRight
void moveRight(qreal x)
QGraphicsWidget
Lancelot::Panel
A container widget with optional title-bar.
Definition: Panel.h:38
QGraphicsSceneResizeEvent
QGraphicsSceneHoverEvent
QRectF::right
qreal right() const
Lancelot::Widget::Widget
Widget(QGraphicsItem *parent=0)
Creates a new Lancelot::Widget.
Definition: Widget.cpp:46
Widget.h
Lancelot::Panel::resizeEvent
L_Override void resizeEvent(QGraphicsSceneResizeEvent *event)
Definition: Panel.cpp:182
QGraphicsItem::setAcceptsHoverEvents
void setAcceptsHoverEvents(bool enabled)
QRectF
QRectF::setTop
void setTop(qreal y)
QRectF::setWidth
void setWidth(qreal width)
Lancelot::Widget::hoverEnterEvent
L_Override void hoverEnterEvent(QGraphicsSceneHoverEvent *event)
Definition: Widget.cpp:59
QRectF::moveBottom
void moveBottom(qreal y)
Lancelot::Widget::hoverLeaveEvent
L_Override void hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
Definition: Widget.cpp:71
Lancelot::ResizeBordersPanel::resizeEvent
L_Override void resizeEvent(QGraphicsSceneResizeEvent *event)
Definition: ResizeBordersPanel.cpp:120
QObject::parent
QObject * parent() const
QRectF::setBottomRight
void setBottomRight(const QPointF &position)
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:43:01 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

liblancelot

Skip menu "liblancelot"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

workspace API Reference

Skip menu "workspace API Reference"
  • kdeplasma-addons
  •       GroupingDesktop
  •     liblancelot

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal