2009/7/30 Jean-Philippe Bernardy <jeanphilippe.berna...@gmail.com>:
>
> On Thu, Jul 30, 2009 at 10:20 AM, Krasimir Angelov<kr.ange...@gmail.com> 
> wrote:
>
>> I am surprised that you redraw the whole screen after each change.
>> This is not the conventional solution and this is the problem. The
>> solutions should be something like this:
>>
>> - the UI independent code should calculate which area of the buffer
>> has been changed i.e. some rectangular area.
>> - the GUI dependent code should call gtk_invalidate (I am not sure
>> about the function name, the documentation should be checked) with the
>> area that has been changed as an argument
>> - the GTK main loop will call the redrawing method of the window at
>> the right moment. The redrawing method will have to redraw only the
>> range that has been changed.
>
> Pango is really in charge of this, so the best we can hope for is to
> facilitate its job.
>
> When I wrote the code for this, I did something very simple: at each update, 
> the
> layout object is passed the new version of the text and drawing
> attributes (colors).
> It may be that passing updates instead of a full new state will
> accelerate the drawing.
> (This can simply be done by running a minimum edit distance function
> with the previous state)

One small optimization would be to use a separate pango layout object
for each line and only update the lines that change.

>
> However, before trying that, I'd recommend checking
>  1. That Pango can indeed optimize updates if it receives updates; and
>  2. That the gtk2hs wrapper exposes the "update" interface, and doesn't
>     introduce some sort of bottleneck. (Like forcing a full
> re-computation anyway)
>
> An alternative would be to take charge of layout ourselves, but that
> might be difficult (non-monospace fonts, etc.)
> and even slower.

It might be wishful thinking, but a layout algorithm would let us use
fancier graphics, and the same layout between Vty and Pango. Qemacs
does this very nicely:
http://fabrice.bellard.free.fr/qemacs/screenshots.html

--~--~---------~--~----~------------~-------~--~----~
Yi development mailing list
yi-devel@googlegroups.com
http://groups.google.com/group/yi-devel
-~----------~----~----~----~------~----~------~--~---

Reply via email to