Merge lp:~ahayzen/webbrowser-app/dnd-handle-design-001 into lp:webbrowser-app/staging

Proposed by Andrew Hayzen
Status: Merged
Merged at revision: 1581
Proposed branch: lp:~ahayzen/webbrowser-app/dnd-handle-design-001
Merge into: lp:webbrowser-app/staging
Prerequisite: lp:~ahayzen/webbrowser-app/dnd-tabs-001
Diff against target: 234 lines (+108/-17)
3 files modified
src/app/webbrowser/TabsBar.qml (+4/-1)
src/app/webbrowser/drag-helper.cpp (+85/-16)
src/app/webbrowser/drag-helper.h (+19/-0)
To merge this branch: bzr merge lp:~ahayzen/webbrowser-app/dnd-handle-design-001
Reviewer Review Type Date Requested Status
Olivier Tilloy Approve
Review via email: mp+309342@code.launchpad.net

Commit message

* Improve styling for drag handle to match design
* Add extra properties to DragHelper to allow for changing border size and handle size etc

Description of the change

* Improve styling for drag handle to match design
* Add extra properties to DragHelper to allow for changing border size and handle size etc

To post a comment you must log in.
1537. By Andrew Hayzen

* Merge of changes in lp:~ahayzen/webbrowser-app/dnd-tabs-001

1538. By Andrew Hayzen

* Merge of upstream

1539. By Andrew Hayzen

* Revert .pot change

1540. By Andrew Hayzen

* Merge of upstream

1541. By Andrew Hayzen

* Merge of upstream

1542. By Andrew Hayzen

* Ensure pot is same as upstream

1543. By Andrew Hayzen

* Pull of upstream

1544. By Andrew Hayzen

* Merge of upstream

Revision history for this message
Olivier Tilloy (osomon) wrote :

In setPreviewBorderWidth(), previewBorderWidthChanged should be emitted, not previewTopCropChanged.

In drag-helper.cpp, the include of <QtCore/QSizeF> is not needed, as it’s already included in drag-helper.h. Same for <QtGui/QColor>.

review: Needs Fixing
1545. By Andrew Hayzen

* Update typo on emit for previewTopCropChanged instead of previewBorderWidthChanged
* Remove unneeded includes from drag-helper.cpp

Revision history for this message
Andrew Hayzen (ahayzen) wrote :

Fixed the issues, please retest :-)

Revision history for this message
Olivier Tilloy (osomon) wrote :

LGTM now, thanks!

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/app/webbrowser/TabsBar.qml'
2--- src/app/webbrowser/TabsBar.qml 2016-11-18 15:10:47 +0000
3+++ src/app/webbrowser/TabsBar.qml 2016-11-29 15:55:52 +0000
4@@ -242,7 +242,10 @@
5 // Generate tab preview for drag handle
6 DragHelper.expectedAction = Qt.IgnoreAction | Qt.CopyAction | Qt.MoveAction
7 DragHelper.mimeType = "webbrowser/tab-" + (root.incognito ? "incognito" : "public")
8- DragHelper.previewUrl = PreviewManager.previewPathFromUrl(tab.url);
9+ DragHelper.previewBorderWidth = units.gu(1)
10+ DragHelper.previewSize = Qt.size(units.gu(35), units.gu(22.5))
11+ DragHelper.previewTopCrop = chrome.height
12+ DragHelper.previewUrl = PreviewManager.previewPathFromUrl(tab.url)
13 DragHelper.source = tabDelegate
14
15 var dropAction = DragHelper.execDrag(tab.url);
16
17=== modified file 'src/app/webbrowser/drag-helper.cpp'
18--- src/app/webbrowser/drag-helper.cpp 2016-11-18 15:10:47 +0000
19+++ src/app/webbrowser/drag-helper.cpp 2016-11-29 15:55:52 +0000
20@@ -22,10 +22,10 @@
21 #include <QtCore/QPoint>
22 #include <QtCore/QSize>
23 #include <QtCore/QString>
24-#include <QtGui/QColor>
25 #include <QtGui/QDrag>
26 #include <QtGui/QDropEvent>
27 #include <QtGui/QPainter>
28+#include <QtGui/QPen>
29 #include <QtGui/QPixmap>
30 #include <QtQuick/QQuickItem>
31
32@@ -35,9 +35,39 @@
33 m_dragging(false),
34 m_expected_action(Qt::IgnoreAction),
35 m_mime_type(QStringLiteral("webbrowser/tab")),
36+ m_preview_border_width(8),
37+ m_preview_size(QSizeF(200, 150)),
38+ m_preview_top_crop(0),
39 m_preview_url(""),
40 m_source(Q_NULLPTR)
41 {
42+
43+}
44+
45+QPixmap DragHelper::drawPixmapWithBorder(QPixmap pixmap, int borderWidth, QColor color)
46+{
47+ // Create a transparent pixmap to draw to
48+ QPixmap output(pixmap.width() + borderWidth * 2, pixmap.height() + borderWidth * 2);
49+ output.fill(QColor(0, 0, 0, 0));
50+
51+ // Draw the pixmap with space around the edge for a border
52+ QPainter borderPainter(&output);
53+ borderPainter.setRenderHint(QPainter::Antialiasing);
54+ borderPainter.drawPixmap(borderWidth, borderWidth, pixmap);
55+
56+ // Define a pen to use for the border
57+ QPen borderPen;
58+ borderPen.setColor(color);
59+ borderPen.setJoinStyle(Qt::MiterJoin);
60+ borderPen.setStyle(Qt::SolidLine);
61+ borderPen.setWidth(borderWidth);
62+
63+ // Set the pen and draw the border
64+ borderPainter.setPen(borderPen);
65+ borderPainter.drawRect(borderWidth / 2, borderWidth / 2,
66+ output.width() - borderWidth, output.height() - borderWidth);
67+
68+ return output;
69 }
70
71 Qt::DropAction DragHelper::execDrag(QString tabId)
72@@ -48,8 +78,29 @@
73 QMimeData *mimeData = new QMimeData;
74 mimeData->setData(mimeType(), tabId.toLatin1());
75
76- // Build a pixmap for the drag handle
77- QSize pixmapSize(200, 150);
78+ // Get a bordered pixmap of the previewUrl
79+ QSize size = previewSize().toSize();
80+
81+ QPixmap pixmap = drawPixmapWithBorder(getPreviewUrlAsPixmap(size.width(), size.height()),
82+ previewBorderWidth(), QColor(205, 205, 205, 255 * 0.6)); // #cdcdcd
83+
84+ // Setup the drag and then execute it
85+ drag->setHotSpot(QPoint(size.width() * 0.1, size.height() * 0.1));
86+ drag->setMimeData(mimeData);
87+ drag->setPixmap(pixmap);
88+
89+ setDragging(true);
90+
91+ Qt::DropAction action = drag->exec(expectedAction());
92+
93+ setDragging(false);
94+
95+ return action;
96+}
97+
98+QPixmap DragHelper::getPreviewUrlAsPixmap(int width, int height)
99+{
100+ QSize pixmapSize(width, height);
101 QPixmap pixmap(previewUrl());
102
103 if (pixmap.isNull()) {
104@@ -59,23 +110,14 @@
105 painter.eraseRect(0, 0, pixmapSize.width(), pixmapSize.height());
106 painter.fillRect(0, 0, pixmapSize.width(), pixmapSize.height(), QColor(255, 255, 255, 255));
107 } else {
108+ // Crop transparent part off the top of the image
109+ pixmap = pixmap.copy(0, previewTopCrop(), pixmap.width(), pixmap.height() - previewTopCrop());
110+
111 // Scale image to fit the expected size
112 pixmap = pixmap.scaled(pixmapSize, Qt::KeepAspectRatio, Qt::SmoothTransformation);
113 }
114
115- // Setup the drag and then execute it
116- drag->setHotSpot(QPoint(0, 0));
117- drag->setMimeData(mimeData);
118- drag->setPixmap(pixmap);
119-
120-
121- setDragging(true);
122-
123- Qt::DropAction action = drag->exec(expectedAction());
124-
125- setDragging(false);
126-
127- return action;
128+ return pixmap;
129 }
130
131 void DragHelper::setActive(bool active)
132@@ -114,6 +156,33 @@
133 }
134 }
135
136+void DragHelper::setPreviewBorderWidth(int previewBorderWidth)
137+{
138+ if (m_preview_border_width != previewBorderWidth) {
139+ m_preview_border_width = previewBorderWidth;
140+
141+ Q_EMIT previewBorderWidthChanged();
142+ }
143+}
144+
145+void DragHelper::setPreviewSize(QSizeF previewSize)
146+{
147+ if (m_preview_size != previewSize) {
148+ m_preview_size = previewSize;
149+
150+ Q_EMIT previewSizeChanged();
151+ }
152+}
153+
154+void DragHelper::setPreviewTopCrop(int previewTopCrop)
155+{
156+ if (m_preview_top_crop != previewTopCrop) {
157+ m_preview_top_crop = previewTopCrop;
158+
159+ Q_EMIT previewTopCropChanged();
160+ }
161+}
162+
163 void DragHelper::setPreviewUrl(QString previewUrl)
164 {
165 if (m_preview_url != previewUrl) {
166
167=== modified file 'src/app/webbrowser/drag-helper.h'
168--- src/app/webbrowser/drag-helper.h 2016-11-18 16:26:35 +0000
169+++ src/app/webbrowser/drag-helper.h 2016-11-29 15:55:52 +0000
170@@ -19,8 +19,10 @@
171 #ifndef __DRAGHELPER_H__
172 #define __DRAGHELPER_H__
173
174+#include <QtCore/QSizeF>
175 #include <QtCore/QObject>
176 #include <QtCore/QString>
177+#include <QtGui/QColor>
178 #include <QtGui/QMouseEvent>
179
180 class QQuickItem;
181@@ -33,6 +35,9 @@
182 Q_PROPERTY(bool dragging READ dragging NOTIFY draggingChanged)
183 Q_PROPERTY(Qt::DropAction expectedAction READ expectedAction WRITE setExpectedAction NOTIFY expectedActionChanged)
184 Q_PROPERTY(QString mimeType READ mimeType WRITE setMimeType NOTIFY mimeTypeChanged)
185+ Q_PROPERTY(int previewBorderWidth READ previewBorderWidth WRITE setPreviewBorderWidth NOTIFY previewBorderWidthChanged)
186+ Q_PROPERTY(QSizeF previewSize READ previewSize WRITE setPreviewSize NOTIFY previewSizeChanged)
187+ Q_PROPERTY(int previewTopCrop READ previewTopCrop WRITE setPreviewTopCrop NOTIFY previewTopCropChanged)
188 Q_PROPERTY(QString previewUrl READ previewUrl WRITE setPreviewUrl NOTIFY previewUrlChanged)
189 Q_PROPERTY(QQuickItem* source READ source WRITE setSource NOTIFY sourceChanged)
190 public:
191@@ -41,6 +46,9 @@
192 bool dragging() { return m_dragging; }
193 Qt::DropAction expectedAction() { return m_expected_action; }
194 QString mimeType() { return m_mime_type; }
195+ int previewBorderWidth() { return m_preview_border_width; }
196+ QSizeF previewSize() { return m_preview_size; }
197+ int previewTopCrop() { return m_preview_top_crop; }
198 QString previewUrl() { return m_preview_url; }
199 QQuickItem *source() { return m_source; }
200 signals:
201@@ -48,6 +56,9 @@
202 void draggingChanged();
203 void expectedActionChanged();
204 void mimeTypeChanged();
205+ void previewBorderWidthChanged();
206+ void previewSizeChanged();
207+ void previewTopCropChanged();
208 void previewUrlChanged();
209 void sourceChanged();
210 public slots:
211@@ -55,15 +66,23 @@
212 void setActive(bool active);
213 void setExpectedAction(Qt::DropAction expectedAction);
214 void setMimeType(QString mimeType);
215+ void setPreviewBorderWidth(int previewBorderWidth);
216+ void setPreviewSize(QSizeF previewSize);
217+ void setPreviewTopCrop(int previewTopCrop);
218 void setPreviewUrl(QString previewUrl);
219 void setSource(QQuickItem *source);
220 private:
221+ QPixmap drawPixmapWithBorder(QPixmap pixmap, int borderWidth, QColor color);
222+ QPixmap getPreviewUrlAsPixmap(int width, int height);
223 void setDragging(bool dragging);
224
225 bool m_active;
226 bool m_dragging;
227 Qt::DropAction m_expected_action;
228 QString m_mime_type;
229+ int m_preview_border_width;
230+ QSizeF m_preview_size;
231+ int m_preview_top_crop;
232 QString m_preview_url;
233 QQuickItem *m_source;
234 };

Subscribers

People subscribed via source and target branches