Skip to content

Commit f71c8ff

Browse files
Tested various pin buttons
1 parent 381acb2 commit f71c8ff

File tree

5 files changed

+73
-25
lines changed

5 files changed

+73
-25
lines changed

src/DockOverlay.cpp

Lines changed: 66 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
#include <QDebug>
3636
#include <QMap>
3737
#include <QWindow>
38+
#include <QSvgRenderer>
3839

3940
#include "DockAreaWidget.h"
4041
#include "DockAreaTitleBar.h"
@@ -204,6 +205,11 @@ struct DockOverlayCrossPrivate
204205
{
205206
QColor borderColor = iconColor(CDockOverlayCross::FrameColor);
206207
QColor backgroundColor = iconColor(CDockOverlayCross::WindowBackgroundColor);
208+
QColor overlayColor = iconColor(CDockOverlayCross::OverlayColor);
209+
if (overlayColor.alpha() == 255)
210+
{
211+
overlayColor.setAlpha(64);
212+
}
207213

208214
#if QT_VERSION >= 0x050600
209215
double DevicePixelRatio = _this->window()->devicePixelRatioF();
@@ -261,22 +267,25 @@ struct DockOverlayCrossPrivate
261267
}
262268

263269
QSizeF baseSize = baseRect.size();
264-
if (CDockOverlay::ModeContainerOverlay == Mode && DockWidgetArea != CenterDockWidgetArea)
270+
bool IsOuterContainerArea = (CDockOverlay::ModeContainerOverlay == Mode)
271+
&& (DockWidgetArea != CenterDockWidgetArea)
272+
&& !internal::isSideBarArea(DockWidgetArea);
273+
274+
if (IsOuterContainerArea)
265275
{
266276
baseRect = areaRect;
267277
}
268278

269-
p.fillRect(baseRect, backgroundColor);
279+
//if (!internal::isSideBarArea(DockWidgetArea))
280+
//{
281+
p.fillRect(baseRect, backgroundColor);
282+
//}
283+
270284
if (areaRect.isValid())
271285
{
272286
pen = p.pen();
273287
pen.setColor(borderColor);
274-
QColor Color = iconColor(CDockOverlayCross::OverlayColor);
275-
if (Color.alpha() == 255)
276-
{
277-
Color.setAlpha(64);
278-
}
279-
p.setBrush(Color);
288+
p.setBrush(overlayColor);
280289
p.setPen(Qt::NoPen);
281290
p.drawRect(areaRect);
282291

@@ -289,23 +298,26 @@ struct DockOverlayCrossPrivate
289298
}
290299
p.restore();
291300

292-
p.save();
293-
// Draw outer border
294-
pen = p.pen();
295-
pen.setColor(borderColor);
296-
pen.setWidth(1);
297-
p.setBrush(Qt::NoBrush);
298-
p.setPen(pen);
299-
p.drawRect(baseRect);
300-
301-
// draw window title bar
302-
p.setBrush(borderColor);
303-
QRectF FrameRect(baseRect.topLeft(), QSizeF(baseRect.width(), baseSize.height() / 10));
304-
p.drawRect(FrameRect);
305-
p.restore();
301+
//if (!internal::isSideBarArea(DockWidgetArea))
302+
//{
303+
p.save();
304+
// Draw outer border
305+
pen = p.pen();
306+
pen.setColor(borderColor);
307+
pen.setWidth(1);
308+
p.setBrush(Qt::NoBrush);
309+
p.setPen(pen);
310+
p.drawRect(baseRect);
311+
312+
// draw window title bar
313+
p.setBrush(borderColor);
314+
QRectF FrameRect(baseRect.topLeft(), QSizeF(baseRect.width(), baseSize.height() / 10));
315+
p.drawRect(FrameRect);
316+
p.restore();
317+
//}
306318

307319
// Draw arrow for outer container drop indicators
308-
/*if (CDockOverlay::ModeContainerOverlay == Mode && DockWidgetArea != CenterDockWidgetArea)
320+
if (IsOuterContainerArea)
309321
{
310322
QRectF ArrowRect;
311323
ArrowRect.setSize(baseSize);
@@ -339,7 +351,37 @@ struct DockOverlayCrossPrivate
339351
}
340352

341353
p.drawPolygon(Arrow);
342-
}*/
354+
}
355+
356+
// Draw the pin icons
357+
if (internal::isSideBarArea(DockWidgetArea))
358+
{
359+
static QIcon PinIcon;
360+
if (PinIcon.isNull())
361+
{
362+
std::cout << "Initializing pin icon" << std::endl;
363+
QFile file(":/ads/images/vs-pin-button.svg");
364+
file.open(QIODevice::ReadOnly);
365+
QByteArray baData = file.readAll();
366+
baData.replace("#000000", borderColor.name(QColor::HexRgb).toLatin1());
367+
//baData.replace("#ffffff", overlayColor.name(QColor::HexArgb).toLatin1());
368+
//std::cout << borderColor.name(QColor::HexRgb) << std::endl;
369+
QSvgRenderer svgRenderer(baData);
370+
QPixmap pix(svgRenderer.defaultSize());
371+
pix.fill(Qt::transparent);
372+
// create painter to act over pixmap
373+
QPainter pixPainter(&pix);
374+
svgRenderer.render(&pixPainter);
375+
PinIcon = QIcon(pix);
376+
}
377+
//p.drawPixmap(0, PinIcon.paint(painter, rect, alignment, mode, state));
378+
auto Rect = QRect(0, 0, 16, 16);
379+
//Rect.setSize(baseRect.size() * 0.8);
380+
Rect.moveCenter(baseRect.center().toPoint());
381+
PinIcon.paint(&p, Rect, Qt::AlignCenter);
382+
//auto Pixmap = PinIcon.pixmap(_this->windowHandle(), QSize(16, 16));
383+
//p.drawPixmap(QPoint(0, 0), Pixmap);
384+
}
343385

344386
pm.setDevicePixelRatio(DevicePixelRatio);
345387
return pm;

src/ads.qrc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,7 @@
1818
<file>images/vs-pin-button.svg</file>
1919
<file>images/vs-pin-button-pinned.svg</file>
2020
<file>images/vs-pin-button-pinned-focused.svg</file>
21+
<file>images/vs-pin-button_45.svg</file>
22+
<file>images/pin-button-big.svg</file>
2123
</qresource>
2224
</RCC>

src/images/pin-button-big.svg

Lines changed: 2 additions & 0 deletions
Loading

src/images/vs-pin-button_45.svg

Lines changed: 2 additions & 0 deletions
Loading

src/src.pro

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ TARGET = $$qtLibraryTarget(qtadvanceddocking)
55
DEFINES += QT_DEPRECATED_WARNINGS
66
TEMPLATE = lib
77
DESTDIR = $${ADS_OUT_ROOT}/lib
8-
QT += core gui widgets
8+
QT += core gui widgets svg
99

1010
!adsBuildStatic {
1111
CONFIG += shared

0 commit comments

Comments
 (0)