Re: [scintilla] Pango support on GTK+ 2.x
- From: Owen Taylor <otaylor redhat com>
- To: Neil Hodgson <nhodgson bigpond net au>
- Cc: Havoc Pennington <hp redhat com>, Biswapesh Chattopadhyay <biswapesh_chatterjee tcscal co in>, Scintilla Interest <scintilla-interest lyra org>, GTK Devel <gtk-devel-list gnome org>
- Subject: Re: [scintilla] Pango support on GTK+ 2.x
- Date: 10 Mar 2003 10:04:23 -0500
On Sun, 2003-03-09 at 16:18, Neil Hodgson wrote:
> Havoc Pennington:
>
> > Also be sure Scintilla isn't doing anything really easily fixable,
> > like keeping a PangoLayout around permanently for every line, or
> > computing them all at once, or (some people have done this) using a
> > PangoLayout for every character cell.
>
> The main drawing strategy code is for each expose/draw:
>
> # font descriptions already created at style definition time
> gtk_widget_create_pango_context()
> pango_layout_new()
> for each line:
> for each text run in one style:
> gdk_gc_set_foreground()
> pango_layout_set_text()
> pango_layout_set_font_description()
> pango_layout_get_line()
> gdk_draw_layout_line()
> unref layout and context
>
> Possibly it may pay to insert all the runs into one pango layout and then
> render the whole line at once. Plain text (one style for the whole document)
> is rendered significantly faster by this code. The target text is source
> code and so is made up of many short runs with individual operator
> characters often styled in different colours or weights to neighbouring
> text.
Other thoughts here beyond what I mentioned earlier:
- Pango is fast enough that the overhead of creating and
destroying PangoLayout objects for each line is quite
noticeable in my experience.
- I'm not sure it will be faster currently, but I'd definitely
suggest using one layout per line and setting color attributes
on ranges.
- Is the problem layout speed or rendering speed? I'd guess that
scintilla can assume constant-height-lines, but perhaps
it still needs to go over the entire file to deal with
line widths. (or if there is wrapping involved)
- It takes GtkTextView around 1.5s to lay out a 11,000 line
source file on 1 ghz machine. Which I wouldn't consider
_slow_ but probably is still slow enough that if you
have to lay out the entire file, you are going to need
to do it incrementally.
- If layout is the bottleneck, then one useful optimization
is that when doing the layout (but not the rendering),
omit the color attributes.
- In looking at Pango performance in Gnumeric ... I found it
very helpful to have a benchmark that used just Pango and
GDK but did approximately the same thing that Gnumeric was
doing (laying out lots of short strings of numbers.)
Regards,
Owen
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]