Martin Vermeer wrote:
On Wed, 2006-11-01 at 08:26 +0100, Asger Ottar Alstrup wrote:
Abdelrazak Younes wrote:
No, I was interested in the details of QLPainter::text(), especially the
QPainter::drawText(). This info was not there. It is in your newer
screenshot.
This profile matches what I found on Windows.
If we manage to speed-up Qt drawing operation, we will win. I can't
imagine that there is nothing we can't do. There must be some Qt settings.
As I said before, I believe the best is to draw less. There is
absolutely no need for redrawing the entire screen on every key press.
Yes, I notice this too. I did the work in rowpainter to draw only one
row when needed (no paragraph break) or one paragraph when needed (when
the paragraph's height didn't change). Now, all that has been messed up.
Just run LyX with -dbg PAINTING and you'll see what I mean. It prints a
"#" for every row re-painted, and a "." for every paragraph re-painted.
It paints WAY too much now. I believe the code in rowpainter is still
good... somehow updates are triggered unnecessarily elsewhere.
The problem lies in the new Paint strategy. Andre eliminated the backing
pixmap. This means that all expose() calls are simply ignored.
The nice thing about it is that we draw directly on screen thus
eliminating the transfer of the old backing pixmap onto the screen.
On the other hand, the screen estate is not saved. This means that, if
part of the WorkArea is masked, the widget will receive a paint Event
and everything will be redrawn, not only the part that is not masked.
I have some idea how to solve that problem.
I just added a debug statement to QLPainter.C:
if (isDrawingEnabled()) {
lyxerr << "draw " << std::string(str.toUtf8()) << " at " << x << ","
<< y << std::endl;
drawText(x, y, str);
}
You should try this. On every cursor blink, we redraw the entire screen.
I can confirm this. Not sure it's the entire screen though... sometimes
it appears to be even more :-(
What do you mean by more? Could you elaborate?
I will fix the cursor.
This might be a result of André's reorganisation of how we paint, or it
may be an old bug. In any case, it is very wasteful.
If I disable cursor blinking by adding a return in WorkArea::showCursor,
the result is that we redraw exactly once per key press.
Confirmed, sort of (there may be several redraws per keypress)
Yes, the number of lyx-redraws depend now on the number of Qt
paintEvent(). paintEvent() can be triggered by other thing than
WorkArea::redraw().
Abdel.