Re: commit: More printing fixes for xft.

From: Martin Sevior (msevior@physics.unimelb.edu.au)
Date: Wed Nov 13 2002 - 04:49:28 EST

  • Next message: Alan Horkan: "Re: commit: abi (STABLE): more XHTML export work"

    On 13 Nov 2002, Martin Sevior wrote:

    > On Wed, 2002-11-13 at 04:41, Joaquin Cuenca Abela wrote:
    > > Sorry for non giving any live signal for a while, I
    > > was on a trip.
    > >
    > > I've just read the whole xft printing problems. I've
    > > not dig into the problem, but printing with the xft
    > > build was working when I left it, but that was before
    > > the unification of units by thomas, so maybe that
    > > stopped working there.
    > >
    > > I don't know where come the problems with embedding
    > > fonts. Embedding fonts (TT & PS) was also working
    > > when I last touched it.
    > >
    > > The problem about the status bar not working with
    > > double buffering is there because xft calls (as any
    > > non gdk primitives) don't get diverted to the double
    > > buffer, so all the things that we draw in a double
    > > buffered GdkWindow using non gdk calls are covered by
    > > the double buffer when gdk copies it on the GdkWindow
    > > at the end of the expose event (you can see it that's
    > > the problem with the status bar if it flicker a very
    > > little bit before it disappears).
    > >
    >
    > This makes sense and is what Havoc said was happening too.
    >
    > > We should instead draw the text to the GdkDrawable
    > > that's being used by gdk to do the double buffer (you
    > > can get the real GdkDrawable using
    > > gdk_window_get_internal_paint_info(...) )
    > >
    >
    > Hi Joaquin,
    > I tried this but it didn't work. I have this cod ein
    > gr_UnixGraphics.cpp
    >
    >
    > #ifdef USE_XFT
    > //
    > // Martin's attempt to make double buffering work.with xft
    > //
    > #if 1
    > gint xoff,yoff;
    > GdkDrawable * realDraw;
    > gdk_window_get_internal_paint_info (m_pWin, &realDraw,&xoff,&yoff);
    > m_pGC = gdk_gc_new(realDraw);
    > m_pXORGC = gdk_gc_new(realDraw);
    > m_pVisual = GDK_VISUAL_XVISUAL( gdk_drawable_get_visual(realDraw));
    > m_Drawable = gdk_x11_drawable_get_xid(realDraw);
    >
    > #else
    > m_pVisual = GDK_VISUAL_XVISUAL(gdk_window_get_visual(win));
    > m_Drawable = GDK_WINDOW_XWINDOW(m_pWin);
    > m_pGC = gdk_gc_new(m_pWin);
    > m_pXORGC = gdk_gc_new(m_pWin);
    > #endif
    > m_pXftFont = NULL;
    > m_Colormap = GDK_COLORMAP_XCOLORMAP(m_pColormap);
    > m_pXftDraw = XftDrawCreate(GDK_DISPLAY(), m_Drawable, m_pVisual,
    > m_Colormap);
    > #else
    > m_pGC = gdk_gc_new(m_pWin);
    > m_pXORGC = gdk_gc_new(m_pWin);
    > #endif
    >
    >
    > What is wrong here?
    >

    Whoops! Actually with a couple of other tweaks in xap_UnixFrame it works
    perfectly now :-)

    Double buffering rocks! No more screen weirdness, status bar works great.

    Lovely. I'll commit it tommorrow.

    Basically I had to also disable the background repainter.

    Cheers

    Martin



    This archive was generated by hypermail 2.1.4 : Wed Nov 13 2002 - 04:59:13 EST