diff --git a/konsole/TEWidget.cpp b/konsole/TEWidget.cpp index fe094e8d..78d8b8bd 100644 --- a/konsole/TEWidget.cpp +++ b/konsole/TEWidget.cpp @@ -372,58 +372,63 @@ TEWidget::~TEWidget() void TEWidget::drawAttrStr(QPainter &paint, QRect rect, QString& str, ca attr, bool pm, bool clear) { - QColor fColor=(((attr.r & RE_CURSOR) && hasFocus() && (!hasBlinkingCursor || !cursorBlinking)) ? color_table[attr.b].color : color_table[attr.f].color); - QColor bColor=(((attr.r & RE_CURSOR) && hasFocus() && (!hasBlinkingCursor || !cursorBlinking)) ? color_table[attr.f].color : color_table[attr.b].color); + int a = (font_h+font_a)/2; + QColor fColor = color_table[attr.f].color; if (attr.r & RE_CURSOR) cursorRect = rect; - if (pm && color_table[attr.b].transparent && (!(attr.r & RE_CURSOR) || cursorBlinking)) + // Paint background + if (color_table[attr.b].transparent) { - paint.setBackgroundMode( TransparentMode ); + if (pm) + paint.setBackgroundMode( TransparentMode ); if (clear) erase(rect); } else { - if (blinking) - paint.fillRect(rect, bColor); + paint.fillRect(rect, color_table[attr.b].color); + } + + // Paint cursor + if ((attr.r & RE_CURSOR)) { + paint.setBackgroundMode( TransparentMode ); + int h = font_h - m_lineSpacing; + QRect r(rect.x(),rect.y()+a-font_a,rect.width(),h); + if (hasFocus()) + { + if (!cursorBlinking) + { + paint.fillRect(r, color_table[attr.f].color); + fColor = color_table[attr.b].color; + } + } else { - paint.setBackgroundMode( OpaqueMode ); - paint.setBackgroundColor( bColor ); + paint.setPen(fColor); + paint.drawRect(r); } } + + // Paint text if (!(blinking && (attr.r & RE_BLINK))) { - if ((attr.r && RE_CURSOR) && cursorBlinking) - erase(rect); paint.setPen(fColor); - paint.drawText(rect.x(),rect.y()+font_a, str, -1, QPainter::LTR); + paint.drawText(rect.x(),rect.y()+a, str, -1, QPainter::LTR); if ((attr.r & RE_UNDERLINE) || color_table[attr.f].bold) { paint.setClipRect(rect); if (color_table[attr.f].bold) { paint.setBackgroundMode( TransparentMode ); - paint.drawText(rect.x()+1,rect.y()+font_a, str, -1, QPainter::LTR); // second stroke + paint.drawText(rect.x()+1,rect.y()+a, str, -1, QPainter::LTR); // second stroke } if (attr.r & RE_UNDERLINE) - paint.drawLine(rect.left(), rect.y()+font_a+1, - rect.right(),rect.y()+font_a+1 ); + paint.drawLine(rect.left(), rect.y()+a+1, + rect.right(),rect.y()+a+1 ); paint.setClipping(false); } } - if ((attr.r & RE_CURSOR) && !hasFocus()) { - if (pm && color_table[attr.b].transparent) - { - erase(rect); - paint.setBackgroundMode( TransparentMode ); - paint.drawText(rect.x(),rect.y()+font_a, str, -1, QPainter::LTR); - } - paint.setClipRect(rect); - paint.drawRect(rect.x(),rect.y(),rect.width(),rect.height()-m_lineSpacing); - paint.setClipping(false); - } } /*! @@ -657,7 +662,7 @@ void TEWidget::blinkEvent() void TEWidget::blinkCursorEvent() { cursorBlinking = !cursorBlinking; - repaint(cursorRect, false); + repaint(cursorRect, true); } /* ------------------------------------------------------------------------- */ @@ -1191,7 +1196,7 @@ void TEWidget::focusInEvent( QFocusEvent * ) void TEWidget::focusOutEvent( QFocusEvent * ) { - repaint(cursorRect, false); // don't erase area + repaint(cursorRect, true); // don't erase area } bool TEWidget::focusNextPrevChild( bool next )