forked from qt-creator/qt-creator
QuickToolBar: refine gradient editing
This patch solves minor usablity issues in the gradient editing. Reviewed-by: Lasse Holmstedt
This commit is contained in:
@@ -193,6 +193,8 @@ void GradientLine::paintEvent(QPaintEvent *event)
|
|||||||
int pos = qreal((width() - 16)) * m_stops.at(i) + 9;
|
int pos = qreal((width() - 16)) * m_stops.at(i) + 9;
|
||||||
p.setBrush(arrowColor);
|
p.setBrush(arrowColor);
|
||||||
QVector<QPointF> points;
|
QVector<QPointF> points;
|
||||||
|
if (localYOffset < -8)
|
||||||
|
p.setOpacity(0.5);
|
||||||
points.append(QPointF(pos + 0.5, 28.5 + localYOffset)); //triangle
|
points.append(QPointF(pos + 0.5, 28.5 + localYOffset)); //triangle
|
||||||
points.append(QPointF(pos - 3.5, 22.5 + localYOffset));
|
points.append(QPointF(pos - 3.5, 22.5 + localYOffset));
|
||||||
points.append(QPointF(pos + 4.5, 22.5 + localYOffset));
|
points.append(QPointF(pos + 4.5, 22.5 + localYOffset));
|
||||||
@@ -210,6 +212,7 @@ void GradientLine::paintEvent(QPaintEvent *event)
|
|||||||
p.setBrush(Qt::NoBrush);
|
p.setBrush(Qt::NoBrush);
|
||||||
p.setPen(QColor(255, 255, 255, 30));
|
p.setPen(QColor(255, 255, 255, 30));
|
||||||
p.drawRect(pos - 4, 9 + localYOffset, 8, 9);
|
p.drawRect(pos - 4, 9 + localYOffset, 8, 9);
|
||||||
|
p.setOpacity(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -220,6 +223,7 @@ void GradientLine::mousePressEvent(QMouseEvent *event)
|
|||||||
event->accept();
|
event->accept();
|
||||||
int xPos = event->pos().x();
|
int xPos = event->pos().x();
|
||||||
int yPos = event->pos().y();
|
int yPos = event->pos().y();
|
||||||
|
m_dragStart = event->pos();
|
||||||
|
|
||||||
int draggedIndex = -1;
|
int draggedIndex = -1;
|
||||||
m_create = false;
|
m_create = false;
|
||||||
@@ -227,10 +231,9 @@ void GradientLine::mousePressEvent(QMouseEvent *event)
|
|||||||
if ((yPos > 10) && (yPos < 30))
|
if ((yPos > 10) && (yPos < 30))
|
||||||
for (int i =0; i < m_stops.size(); i++) {
|
for (int i =0; i < m_stops.size(); i++) {
|
||||||
int pos = qreal((width() - 16)) * m_stops.at(i) + 9;
|
int pos = qreal((width() - 16)) * m_stops.at(i) + 9;
|
||||||
if (((xPos + 5) > pos) && ((xPos - 5) < pos)) {
|
if (((xPos + 8) > pos) && ((xPos - 8) < pos)) {
|
||||||
draggedIndex = i;
|
draggedIndex = i;
|
||||||
m_dragActive = true;
|
m_dragActive = true;
|
||||||
m_dragStart = event->pos();
|
|
||||||
setCurrentIndex(draggedIndex);
|
setCurrentIndex(draggedIndex);
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
@@ -253,6 +256,22 @@ void GradientLine::mouseReleaseEvent(QMouseEvent *event)
|
|||||||
{
|
{
|
||||||
if (event->button() == Qt::LeftButton) {
|
if (event->button() == Qt::LeftButton) {
|
||||||
event->accept();
|
event->accept();
|
||||||
|
|
||||||
|
if (m_dragActive) {
|
||||||
|
m_yOffset += event->pos().y() - 14;
|
||||||
|
if (m_yOffset > 0) {
|
||||||
|
m_yOffset = 0;
|
||||||
|
} else if ((m_yOffset < - 8) && (currentColorIndex()) != 0 && (currentColorIndex() < m_stops.size() - 1)) {
|
||||||
|
m_yOffset = 0;
|
||||||
|
m_dragActive = false;
|
||||||
|
m_stops.removeAt(currentColorIndex());
|
||||||
|
m_colorList.removeAt(currentColorIndex());
|
||||||
|
updateGradient();
|
||||||
|
setCurrentIndex(0);
|
||||||
|
//delete item
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (m_dragActive == false && m_create) {
|
if (m_dragActive == false && m_create) {
|
||||||
qreal stopPos = qreal(event->pos().x() - 9) / qreal((width() - 15));
|
qreal stopPos = qreal(event->pos().x() - 9) / qreal((width() - 15));
|
||||||
int index = -1;
|
int index = -1;
|
||||||
@@ -260,7 +279,7 @@ void GradientLine::mouseReleaseEvent(QMouseEvent *event)
|
|||||||
if ((stopPos > m_stops.at(i)) && (index == -1))
|
if ((stopPos > m_stops.at(i)) && (index == -1))
|
||||||
index = i +1;
|
index = i +1;
|
||||||
}
|
}
|
||||||
if (index != -1 && (m_useGradient)) { //creating of items only in base state
|
if (index != -1 && (m_useGradient) && abs(m_dragStart.x() - event->pos().x()) < 10) { //creating of items only in base state
|
||||||
m_stops.insert(index, stopPos);
|
m_stops.insert(index, stopPos);
|
||||||
m_colorList.insert(index, QColor(Qt::white));
|
m_colorList.insert(index, QColor(Qt::white));
|
||||||
setCurrentIndex(index);
|
setCurrentIndex(index);
|
||||||
@@ -278,32 +297,24 @@ void GradientLine::mouseMoveEvent(QMouseEvent *event)
|
|||||||
{
|
{
|
||||||
if (m_dragActive) {
|
if (m_dragActive) {
|
||||||
event->accept();
|
event->accept();
|
||||||
int xPos = event->pos().x();
|
|
||||||
int pos = qreal((width() - 20)) * m_stops.at(currentColorIndex()) + 8;
|
int pos = qreal((width() - 20)) * m_stops.at(currentColorIndex()) + 8;
|
||||||
int offset = m_dragOff ? 2 : 20;
|
|
||||||
if (xPos < pos + offset && xPos > pos - offset) {
|
m_dragOff = false;
|
||||||
m_dragOff = false;
|
int xDistance = event->pos().x() - pos;
|
||||||
int xDistance = event->pos().x() - m_dragStart.x();
|
qreal distance = qreal(xDistance) / qreal((width() - 20));
|
||||||
qreal distance = qreal(xDistance) / qreal((width() - 20));
|
qreal newStopPosition = m_stops.at(currentColorIndex()) + distance;
|
||||||
qreal newStop = m_stops.at(currentColorIndex()) + distance;
|
if (newStopPosition > 0.98) //snap to 1
|
||||||
if ((newStop >=0) && (newStop <= 1))
|
newStopPosition = 1;
|
||||||
m_stops[currentColorIndex()] = newStop;
|
if (newStopPosition < 0.02) //snap to 0
|
||||||
m_yOffset += event->pos().y() - m_dragStart.y();
|
newStopPosition = 0;
|
||||||
if (m_yOffset > 0) { //deleting only in base state
|
if ((newStopPosition >=0) && (newStopPosition <= 1))
|
||||||
m_yOffset = 0;
|
m_stops[currentColorIndex()] = newStopPosition;
|
||||||
} else if ((m_yOffset < - 12) && (currentColorIndex()) != 0 && (currentColorIndex() < m_stops.size() - 1)) {
|
m_yOffset += event->pos().y() - 14;
|
||||||
m_yOffset = 0;
|
if (m_yOffset > 0)
|
||||||
m_dragActive = false;
|
m_yOffset = 0;
|
||||||
m_stops.removeAt(currentColorIndex());
|
else if ((m_yOffset < - 10))
|
||||||
m_colorList.removeAt(currentColorIndex());
|
m_yOffset = -10;
|
||||||
updateGradient();
|
|
||||||
setCurrentIndex(0);
|
|
||||||
//delete item
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
m_dragOff = true;
|
|
||||||
}
|
|
||||||
m_dragStart = event->pos();
|
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user