Commit b25edbe2 authored by Jens Bache-Wiig's avatar Jens Bache-Wiig

Fixes: Draw arrow branch collapse arrows on all styles

Details:
We now draw mac/vista-like expand indicators in all styles
as suggested by danimo.
parent abe58a77
......@@ -234,6 +234,12 @@ void BaseTextEditor::print(QPrinter *printer)
delete dlg;
}
static int collapseBoxWidth(const QFontMetrics &fm)
{
const int lineSpacing = fm.lineSpacing();
return lineSpacing + lineSpacing%2 + 1;
}
static void printPage(int index, QPainter *painter, const QTextDocument *doc,
const QRectF &body, const QRectF &titleBox,
const QString &title)
......@@ -1567,10 +1573,10 @@ QRect BaseTextEditor::collapseBox()
return QRect();
QRectF br = blockBoundingGeometry(begin).translated(contentOffset());
QRectF er = blockBoundingGeometry(end).translated(contentOffset());
int collapseBoxWidth = fontMetrics().lineSpacing() + 1;
return QRect(d->m_extraArea->width() - collapseBoxWidth,
return QRect(d->m_extraArea->width() - collapseBoxWidth(fontMetrics()),
int(br.top()),
collapseBoxWidth,
collapseBoxWidth(fontMetrics()),
er.bottom() - br.top());
}
......@@ -2241,7 +2247,7 @@ int BaseTextEditor::extraAreaWidth(int *markWidthPtr) const
space += 4;
if (d->m_codeFoldingVisible)
space += fm.lineSpacing();
space += collapseBoxWidth(fm);
return space;
}
......@@ -2261,7 +2267,7 @@ static void drawRectBox(QPainter *painter, const QRect &rect, bool start, bool e
QRgb b = pal.base().color().rgb();
QRgb h = pal.highlight().color().rgb();
QColor c = StyleHelper::mergedColors(b,h, 40);
QColor c = StyleHelper::mergedColors(b,h, 50);
QLinearGradient grad(rect.topLeft(), rect.topRight());
grad.setColorAt(0, c.lighter(110));
......@@ -2304,8 +2310,7 @@ void BaseTextEditor::extraAreaPaintEvent(QPaintEvent *e)
// if (documentLayout->doubleMarkCount)
// markWidth += fm.lineSpacing() / 3;
const int collapseBoxWidth = d->m_codeFoldingVisible ? fmLineSpacing + 1: 0;
const int extraAreaWidth = d->m_extraArea->width() - collapseBoxWidth;
const int extraAreaWidth = d->m_extraArea->width() - collapseBoxWidth(fm);
painter.fillRect(e->rect(), pal.color(QPalette::Base));
painter.fillRect(e->rect().intersected(QRect(0, 0, extraAreaWidth, INT_MAX)),
......@@ -2413,15 +2418,18 @@ void BaseTextEditor::extraAreaPaintEvent(QPaintEvent *e)
bool hovered = blockNumber >= extraAreaHighlightCollapseBlockNumber
&& blockNumber <= extraAreaHighlightCollapseEndBlockNumber;
int boxWidth = collapseBoxWidth(fm);
if (hovered) {
QRect box = QRect(extraAreaWidth + 1, top, collapseBoxWidth - 2, collapseBoxWidth);
QRect box = QRect(extraAreaWidth + 1, top, boxWidth - 2, fmLineSpacing + 2);
drawRectBox(&painter, box, drawStart, drawEnd, pal);
}
if (drawBox) {
bool expanded = nextBlock.isVisible();
QRect box(extraAreaWidth + collapseBoxWidth/4, top + collapseBoxWidth/4,
2 * (collapseBoxWidth/4) + 1, 2 * (collapseBoxWidth/4) + 1);
int margin = 2;
int size = boxWidth/4;
QRect box(extraAreaWidth + size, top + size,
2 * (size) + 1, 2 * (size) + 1);
drawFoldingMarker(&painter, pal, box, expanded, active, hovered);
}
}
......@@ -2472,32 +2480,38 @@ void BaseTextEditor::drawFoldingMarker(QPainter *painter, const QPalette &pal,
bool active,
bool hovered) const
{
QStyleOptionViewItemV2 opt;
opt.rect = rect;
opt.state = QStyle::State_Active | QStyle::State_Item | QStyle::State_Children;
if (expanded)
opt.state |= QStyle::State_Open;
Q_UNUSED(active);
Q_UNUSED(hovered);
if (active)
opt.state |= QStyle::State_MouseOver | QStyle::State_Enabled | QStyle::State_Selected;
painter->save();
painter->setPen(Qt::NoPen);
if (hovered)
opt.palette.setBrush(QPalette::Window, pal.highlight());
int size = rect.size().width();
int sqsize = 2*(size/2);
QStyle *s = style();
QColor textColor = pal.buttonText().color();
QColor brushColor = textColor;
if (ManhattanStyle *ms = qobject_cast<ManhattanStyle*>(s))
s = ms->systemStyle();
textColor.setAlpha(100);
brushColor.setAlpha(40);
// QGtkStyle needs a small correction to draw the marker in the right place
if (qstrcmp(s->metaObject()->className(), "QGtkStyle") == 0)
opt.rect.translate(-2, 0);
else if (qstrcmp(s->metaObject()->className(), "QMacStyle") == 0)
opt.rect.translate(-1, 0);
QPolygon a;
if (expanded) {
// down arrow
a.setPoints(3, 0, sqsize/3, sqsize/2, sqsize - sqsize/3, sqsize, sqsize/3);
} else {
// right arrow
a.setPoints(3, sqsize - sqsize/3, sqsize/2, sqsize/2 - sqsize/3, 0, sqsize/2 - sqsize/3, sqsize);
painter->setBrush(brushColor);
}
painter->translate(0.5, 0.5);
painter->setRenderHint(QPainter::Antialiasing);
painter->translate(rect.topLeft());
s->drawPrimitive(QStyle::PE_IndicatorBranch, &opt, painter, this);
painter->setPen(textColor);
painter->drawPolygon(a);
painter->restore();
}
void BaseTextEditor::slotModificationChanged(bool m)
......@@ -2711,8 +2725,7 @@ void BaseTextEditor::extraAreaMouseEvent(QMouseEvent *e)
d->extraAreaHighlightCollapseBlockNumber = -1;
d->extraAreaHighlightCollapseColumn = -1;
int collapseBoxWidth = fontMetrics().lineSpacing() + 1;
if (e->pos().x() > extraArea()->width() - collapseBoxWidth) {
if (e->pos().x() > extraArea()->width() - collapseBoxWidth(fontMetrics())) {
d->extraAreaHighlightCollapseBlockNumber = cursor.blockNumber();
if (TextBlockUserData::canCollapse(cursor.block())
|| !TextBlockUserData::hasClosingCollapse(cursor.block()))
......@@ -2738,8 +2751,8 @@ void BaseTextEditor::extraAreaMouseEvent(QMouseEvent *e)
if (e->type() == QEvent::MouseButtonPress || e->type() == QEvent::MouseButtonDblClick) {
if (e->button() == Qt::LeftButton) {
int collapseBoxWidth = fontMetrics().lineSpacing() + 1;
if (d->m_codeFoldingVisible && e->pos().x() > extraArea()->width() - collapseBoxWidth) {
int boxWidth = collapseBoxWidth(fontMetrics());
if (d->m_codeFoldingVisible && e->pos().x() > extraArea()->width() - boxWidth) {
if (!cursor.block().next().isVisible()) {
toggleBlockVisible(cursor.block());
d->moveCursorVisible(false);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment