summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPier Luigi Fiorini <pierluigi.fiorini@gmail.com>2013-01-14 19:32:24 +0100
committerAndy Nichols <andy.nichols@digia.com>2013-01-15 12:05:27 +0100
commita41548a2100c0aeccdf1c90dde09e5c5138f384b (patch)
tree84ce1e695d5f98b4b7cd2e2f03e5f475533cf4fd /src
parentebb7d2cd7d7c4b52dd2ba36a1e702d15b4eb1e16 (diff)
Draw window icon
Draw window icon to the left of the title. Change-Id: I35921a8f9326d04e8601336d318fb8ec9a2c2b4e Reviewed-by: Andy Nichols <andy.nichols@digia.com>
Diffstat (limited to 'src')
-rw-r--r--src/plugins/platforms/wayland/qwaylanddecoration.cpp15
-rw-r--r--src/plugins/platforms/wayland/qwaylandwindow.cpp8
-rw-r--r--src/plugins/platforms/wayland/qwaylandwindow.h14
3 files changed, 35 insertions, 2 deletions
diff --git a/src/plugins/platforms/wayland/qwaylanddecoration.cpp b/src/plugins/platforms/wayland/qwaylanddecoration.cpp
index 258a54495..f8c374a6c 100644
--- a/src/plugins/platforms/wayland/qwaylanddecoration.cpp
+++ b/src/plugins/platforms/wayland/qwaylanddecoration.cpp
@@ -108,6 +108,18 @@ void QWaylandDecoration::paint(QPaintDevice *device)
p.restore();
}
+ // Window icon
+ QIcon icon = m_wayland_window->windowIcon();
+ if (!icon.isNull()) {
+ QPixmap pixmap = icon.pixmap(QSize(128, 128));
+ QPixmap scaled = pixmap.scaled(22, 22, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
+
+ QRectF iconRect(0, 0, 22, 22);
+ p.drawPixmap(iconRect.adjusted(margins().left() + BUTTON_SPACING, 4,
+ margins().left() + BUTTON_SPACING, 4),
+ scaled, iconRect);
+ }
+
// Window title
QString windowTitleText = window()->title();
if (!windowTitleText.isEmpty()) {
@@ -117,7 +129,8 @@ void QWaylandDecoration::paint(QPaintDevice *device)
}
QRect titleBar = top;
- titleBar.setLeft(m_margins.left() + BUTTON_SPACING);
+ titleBar.setLeft(m_margins.left() + BUTTON_SPACING +
+ (icon.isNull() ? 0 : 22 + BUTTON_SPACING));
titleBar.setRight(minimizeButtonRect().left() - BUTTON_SPACING);
p.save();
diff --git a/src/plugins/platforms/wayland/qwaylandwindow.cpp b/src/plugins/platforms/wayland/qwaylandwindow.cpp
index 64170d24a..dc95aa93c 100644
--- a/src/plugins/platforms/wayland/qwaylandwindow.cpp
+++ b/src/plugins/platforms/wayland/qwaylandwindow.cpp
@@ -148,6 +148,14 @@ void QWaylandWindow::setWindowTitle(const QString &title)
}
}
+void QWaylandWindow::setWindowIcon(const QIcon &icon)
+{
+ mWindowIcon = icon;
+
+ if (mWindowDecoration && window()->isVisible())
+ mWindowDecoration->paintDecoration();
+}
+
void QWaylandWindow::setGeometry(const QRect &rect)
{
QPlatformWindow::setGeometry(rect);
diff --git a/src/plugins/platforms/wayland/qwaylandwindow.h b/src/plugins/platforms/wayland/qwaylandwindow.h
index 0e379e5df..a58e49db1 100644
--- a/src/plugins/platforms/wayland/qwaylandwindow.h
+++ b/src/plugins/platforms/wayland/qwaylandwindow.h
@@ -42,8 +42,10 @@
#ifndef QWAYLANDWINDOW_H
#define QWAYLANDWINDOW_H
-#include <qpa/qplatformwindow.h>
#include <QtCore/QWaitCondition>
+#include <QtGui/QIcon>
+
+#include <qpa/qplatformwindow.h>
#include "qwaylanddisplay.h"
@@ -74,6 +76,9 @@ public:
void setWindowTitle(const QString &title);
+ inline QIcon windowIcon() const;
+ void setWindowIcon(const QIcon &icon);
+
void setGeometry(const QRect &rect);
void configure(uint32_t edges, int32_t width, int32_t height);
@@ -141,6 +146,8 @@ protected:
bool mSentInitialResize;
QPoint mOffset;
+ QIcon mWindowIcon;
+
private:
void handleMouseEventWithDecoration(QWaylandInputDevice *inputDevice,
ulong timestamp,
@@ -154,6 +161,11 @@ private:
};
+inline QIcon QWaylandWindow::windowIcon() const
+{
+ return mWindowIcon;
+}
+
inline QPoint QWaylandWindow::attachOffset() const
{
return mOffset;