Create drop indicator images on the fly. No longer use PNG resources
(better in case of license issues). Drop images should be scalable now!
@ -1,17 +1,5 @@
|
|||||||
<RCC>
|
<RCC>
|
||||||
<qresource prefix="/">
|
<qresource prefix="/">
|
||||||
<file>img/dnd-thumbnail.png</file>
|
|
||||||
<file>img/dock-bottom.png</file>
|
|
||||||
<file>img/dock-center.png</file>
|
|
||||||
<file>img/dock-left.png</file>
|
|
||||||
<file>img/dock-right.png</file>
|
|
||||||
<file>img/dock-top.png</file>
|
|
||||||
<file>img/split-bottom.png</file>
|
|
||||||
<file>img/split-left.png</file>
|
|
||||||
<file>img/split-right.png</file>
|
|
||||||
<file>img/split-top.png</file>
|
|
||||||
<file>img/splitter-horizontal.png</file>
|
|
||||||
<file>img/splitter-vertical.png</file>
|
|
||||||
<file>stylesheets/default-windows.css</file>
|
<file>stylesheets/default-windows.css</file>
|
||||||
<file>stylesheets/vendor-partsolutions.css</file>
|
<file>stylesheets/vendor-partsolutions.css</file>
|
||||||
<file>stylesheets/modern-windows.css</file>
|
<file>stylesheets/modern-windows.css</file>
|
||||||
|
Before Width: | Height: | Size: 249 B |
Before Width: | Height: | Size: 489 B |
Before Width: | Height: | Size: 402 B |
Before Width: | Height: | Size: 527 B |
Before Width: | Height: | Size: 516 B |
Before Width: | Height: | Size: 498 B |
Before Width: | Height: | Size: 628 B |
Before Width: | Height: | Size: 638 B |
Before Width: | Height: | Size: 647 B |
Before Width: | Height: | Size: 619 B |
Before Width: | Height: | Size: 326 B |
Before Width: | Height: | Size: 406 B |
@ -14,12 +14,104 @@ ADS_NAMESPACE_BEGIN
|
|||||||
|
|
||||||
// Helper /////////////////////////////////////////////////////////////
|
// Helper /////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
static QWidget* createDropWidget(const QString& img)
|
static QPixmap createDropIndicatorPixmap(const QPalette& pal, const QSizeF& size, DropArea dropArea)
|
||||||
{
|
{
|
||||||
QLabel* label = new QLabel();
|
const QColor borderColor = pal.color(QPalette::Active, QPalette::Highlight);
|
||||||
label->setObjectName("DropAreaLabel");
|
const QColor backgroundColor = pal.color(QPalette::Active, QPalette::Base);
|
||||||
label->setPixmap(QPixmap(img));
|
const QColor areaBackgroundColor = pal.color(QPalette::Active, QPalette::Highlight).lighter(150);
|
||||||
return label;
|
|
||||||
|
QPixmap pm(size.width(), size.height());
|
||||||
|
pm.fill(QColor(0, 0, 0, 0));
|
||||||
|
|
||||||
|
QPainter p(&pm);
|
||||||
|
QPen pen = p.pen();
|
||||||
|
QRectF baseRect(pm.rect());
|
||||||
|
|
||||||
|
// Fill
|
||||||
|
p.fillRect(baseRect, backgroundColor);
|
||||||
|
|
||||||
|
// Drop area rect.
|
||||||
|
if (true)
|
||||||
|
{
|
||||||
|
p.save();
|
||||||
|
QRectF areaRect;
|
||||||
|
QLineF areaLine;
|
||||||
|
QLinearGradient gradient;
|
||||||
|
switch (dropArea)
|
||||||
|
{
|
||||||
|
case TopDropArea:
|
||||||
|
areaRect = QRectF(baseRect.x(), baseRect.y(), baseRect.width(), baseRect.height() * .5f);
|
||||||
|
areaLine = QLineF(areaRect.bottomLeft(), areaRect.bottomRight());
|
||||||
|
gradient.setStart(areaRect.topLeft());
|
||||||
|
gradient.setFinalStop(areaRect.bottomLeft());
|
||||||
|
gradient.setColorAt(0.f, areaBackgroundColor);
|
||||||
|
gradient.setColorAt(1.f, areaBackgroundColor.lighter(120));
|
||||||
|
break;
|
||||||
|
case RightDropArea:
|
||||||
|
areaRect = QRectF(baseRect.width() * .5f, baseRect.y(), baseRect.width() * .5f, baseRect.height());
|
||||||
|
areaLine = QLineF(areaRect.topLeft(), areaRect.bottomLeft());
|
||||||
|
gradient.setStart(areaRect.topLeft());
|
||||||
|
gradient.setFinalStop(areaRect.topRight());
|
||||||
|
gradient.setColorAt(0.f, areaBackgroundColor.lighter(120));
|
||||||
|
gradient.setColorAt(1.f, areaBackgroundColor);
|
||||||
|
break;
|
||||||
|
case BottomDropArea:
|
||||||
|
areaRect = QRectF(baseRect.x(), baseRect.height() * .5f, baseRect.width(), baseRect.height() * .5f);
|
||||||
|
areaLine = QLineF(areaRect.topLeft(), areaRect.topRight());
|
||||||
|
gradient.setStart(areaRect.topLeft());
|
||||||
|
gradient.setFinalStop(areaRect.bottomLeft());
|
||||||
|
gradient.setColorAt(0.f, areaBackgroundColor.lighter(120));
|
||||||
|
gradient.setColorAt(1.f, areaBackgroundColor);
|
||||||
|
break;
|
||||||
|
case LeftDropArea:
|
||||||
|
areaRect = QRectF(baseRect.x(), baseRect.y(), baseRect.width() * .5f, baseRect.height());
|
||||||
|
areaLine = QLineF(areaRect.topRight(), areaRect.bottomRight());
|
||||||
|
gradient.setStart(areaRect.topLeft());
|
||||||
|
gradient.setFinalStop(areaRect.topRight());
|
||||||
|
gradient.setColorAt(0.f, areaBackgroundColor);
|
||||||
|
gradient.setColorAt(1.f, areaBackgroundColor.lighter(120));
|
||||||
|
break;
|
||||||
|
case CenterDropArea:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (areaRect.isValid())
|
||||||
|
{
|
||||||
|
p.fillRect(areaRect, gradient);
|
||||||
|
|
||||||
|
pen = p.pen();
|
||||||
|
pen.setColor(borderColor);
|
||||||
|
pen.setStyle(Qt::DashLine);
|
||||||
|
p.setPen(pen);
|
||||||
|
p.drawLine(areaLine);
|
||||||
|
}
|
||||||
|
p.restore();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Border
|
||||||
|
if (true)
|
||||||
|
{
|
||||||
|
p.save();
|
||||||
|
pen = p.pen();
|
||||||
|
pen.setColor(borderColor);
|
||||||
|
pen.setWidth(1);
|
||||||
|
|
||||||
|
p.setPen(pen);
|
||||||
|
p.drawRect(baseRect.adjusted(0, 0, -pen.width(), -pen.width()));
|
||||||
|
p.restore();
|
||||||
|
}
|
||||||
|
return pm;
|
||||||
|
}
|
||||||
|
|
||||||
|
static QWidget* createDropIndicatorWidget(DropArea dropArea)
|
||||||
|
{
|
||||||
|
QLabel* l = new QLabel();
|
||||||
|
l->setObjectName("DropAreaLabel");
|
||||||
|
|
||||||
|
const qreal metric = static_cast<qreal>(l->fontMetrics().height()) * 2.f;
|
||||||
|
const QSizeF size(metric, metric);
|
||||||
|
|
||||||
|
l->setPixmap(createDropIndicatorPixmap(l->palette(), size, dropArea));
|
||||||
|
return l;
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////
|
||||||
@ -42,11 +134,11 @@ DropOverlay::DropOverlay(QWidget* parent) :
|
|||||||
|
|
||||||
// Cross with default drop area widgets.
|
// Cross with default drop area widgets.
|
||||||
QHash<DropArea, QWidget*> areaWidgets;
|
QHash<DropArea, QWidget*> areaWidgets;
|
||||||
areaWidgets.insert(ADS_NS::TopDropArea, createDropWidget(":/img/split-top.png"));
|
areaWidgets.insert(ADS_NS::TopDropArea, createDropIndicatorWidget(TopDropArea)); //createDropWidget(":/img/split-top.png"));
|
||||||
areaWidgets.insert(ADS_NS::RightDropArea, createDropWidget(":/img/split-right.png"));
|
areaWidgets.insert(ADS_NS::RightDropArea, createDropIndicatorWidget(RightDropArea));//createDropWidget(":/img/split-right.png"));
|
||||||
areaWidgets.insert(ADS_NS::BottomDropArea, createDropWidget(":/img/split-bottom.png"));
|
areaWidgets.insert(ADS_NS::BottomDropArea, createDropIndicatorWidget(BottomDropArea));//createDropWidget(":/img/split-bottom.png"));
|
||||||
areaWidgets.insert(ADS_NS::LeftDropArea, createDropWidget(":/img/split-left.png"));
|
areaWidgets.insert(ADS_NS::LeftDropArea, createDropIndicatorWidget(LeftDropArea));//createDropWidget(":/img/split-left.png"));
|
||||||
areaWidgets.insert(ADS_NS::CenterDropArea, createDropWidget(":/img/dock-center.png"));
|
areaWidgets.insert(ADS_NS::CenterDropArea, createDropIndicatorWidget(CenterDropArea));//createDropWidget(":/img/dock-center.png"));
|
||||||
_cross->setAreaWidgets(areaWidgets);
|
_cross->setAreaWidgets(areaWidgets);
|
||||||
|
|
||||||
_cross->setVisible(false);
|
_cross->setVisible(false);
|
||||||
|
@ -71,6 +71,3 @@ This projects uses the [WTFPL license](http://www.wtfpl.net/)
|
|||||||
(Do **W**hat **T**he **F**uck You Want To **P**ublic **L**icense)
|
(Do **W**hat **T**he **F**uck You Want To **P**ublic **L**icense)
|
||||||
|
|
||||||
Using it? Let us know by creating a [new issue](https://github.com/mfreiholz/qt-docks/issues/new) (You don't have to, of course).
|
Using it? Let us know by creating a [new issue](https://github.com/mfreiholz/qt-docks/issues/new) (You don't have to, of course).
|
||||||
|
|
||||||
## Credits
|
|
||||||
- Drop indicator images from [Code Project Article](http://www.codeproject.com/Articles/140209/Building-a-Docking-Window-Management-Solution-in-W)
|
|
||||||
|