Немного подправил прямоугольные зоны. А именно, при создании такой зоны чуть изменил градиент окраски её линий - в первом варианте было так, что каждая из 4 линий зоны имела свой полный градиент - что было не очень красиво, а теперь у меня полный градиент раскидывается уже на 2 линии - а не на 4.
Т.е. сейчас градиент будет от начальной точки до конечной - а не отдельно по каждой грани зоны. Вот код исправления (вся функция целиком):
C:\build\scantailor-0.9.11.1\zones\ZoneCreationInteraction.cpp
void
ZoneCreationInteraction::onPaint(QPainter& painter, InteractionState const& interaction)
{
painter.setWorldMatrixEnabled(false);
painter.setRenderHint(QPainter::Antialiasing);
QTransform const to_screen(m_rContext.imageView().imageToWidget());
QTransform const from_screen(m_rContext.imageView().widgetToImage());
m_visualizer.drawSplines(painter, to_screen, m_rContext.zones());
QPen solid_line_pen(m_visualizer.solidColor());
solid_line_pen.setCosmetic(true);
solid_line_pen.setWidthF(1.5);
QLinearGradient gradient; // From inactive to active point.
gradient.setColorAt(0.0, m_visualizer.solidColor());
gradient.setColorAt(1.0, m_visualizer.highlightDarkColor());
QPen gradient_pen;
gradient_pen.setCosmetic(true);
gradient_pen.setWidthF(1.5);
painter.setPen(solid_line_pen);
painter.setBrush(Qt::NoBrush);
//begin of added by monday2000
QColor start_color = m_visualizer.solidColor();
QColor stop_color = m_visualizer.highlightDarkColor();
QColor mid_color;
int red = (start_color.red() + stop_color.red())/2;
int green = (start_color.green() + stop_color.green())/2;
int blue = (start_color.blue() + stop_color.blue())/2;
mid_color.setRgb(red, green, blue);
QLinearGradient gradient_mid1;
gradient_mid1.setColorAt(0.0, start_color);
gradient_mid1.setColorAt(1.0, mid_color);
QLinearGradient gradient_mid2;
gradient_mid2.setColorAt(0.0, mid_color);
gradient_mid2.setColorAt(1.0, stop_color);
if(m_nextVertexImagePos != m_nextVertexImagePos_mid1 &&
m_nextVertexImagePos != m_nextVertexImagePos_mid2 && m_ctrl)
{
m_visualizer.drawVertex(
painter, to_screen.map(m_nextVertexImagePos_mid1), m_visualizer.highlightBrightColor()
);
m_visualizer.drawVertex(
painter, to_screen.map(m_nextVertexImagePos_mid2), m_visualizer.highlightBrightColor()
);
QLineF const line1_mid1(
to_screen.map(QLineF(m_ptrSpline->lastVertex()->point(), m_nextVertexImagePos_mid1))
);
gradient_mid1.setStart(line1_mid1.p1());
gradient_mid1.setFinalStop(line1_mid1.p2());
gradient_pen.setBrush(gradient_mid1);
painter.setPen(gradient_pen);
painter.drawLine(line1_mid1);
QLineF const line2_mid1(
to_screen.map(QLineF(m_nextVertexImagePos_mid1, m_nextVertexImagePos))
);
gradient_mid2.setStart(line2_mid1.p1());
gradient_mid2.setFinalStop(line2_mid1.p2());
gradient_pen.setBrush(gradient_mid2);
painter.setPen(gradient_pen);
painter.drawLine(line2_mid1);
QLineF const line1_mid2(
to_screen.map(QLineF(m_ptrSpline->lastVertex()->point(), m_nextVertexImagePos_mid2))
);
gradient_mid1.setStart(line1_mid2.p1());
gradient_mid1.setFinalStop(line1_mid2.p2());
gradient_pen.setBrush(gradient_mid1);
painter.setPen(gradient_pen);
painter.drawLine(line1_mid2);
QLineF const line2_mid2(
to_screen.map(QLineF(m_nextVertexImagePos_mid2, m_nextVertexImagePos))
);
gradient_mid2.setStart(line2_mid2.p1());
gradient_mid2.setFinalStop(line2_mid2.p2());
gradient_pen.setBrush(gradient_mid2);
painter.setPen(gradient_pen);
painter.drawLine(line2_mid2);
}
else
{
//end of added by monday2000
for (EditableSpline::SegmentIterator it(*m_ptrSpline); it.hasNext(); ) {
SplineSegment const segment(it.next());
QLineF const line(to_screen.map(segment.toLine()));
if (segment.prev == m_ptrSpline->firstVertex() &&
segment.prev->point() == m_nextVertexImagePos) {
gradient.setStart(line.p2());
gradient.setFinalStop(line.p1());
gradient_pen.setBrush(gradient);
painter.setPen(gradient_pen);
painter.drawLine(line);
painter.setPen(solid_line_pen);
} else {
painter.drawLine(line);
}
}
QLineF const line(
to_screen.map(QLineF(m_ptrSpline->lastVertex()->point(), m_nextVertexImagePos))
);
gradient.setStart(line.p1());
gradient.setFinalStop(line.p2());
gradient_pen.setBrush(gradient);
painter.setPen(gradient_pen);
painter.drawLine(line);
}// added by monday2000
m_visualizer.drawVertex(
painter, to_screen.map(m_nextVertexImagePos), m_visualizer.highlightBrightColor()
);
}
Собранный СТ будет чуть позже.