[cairo-bugs] [Bug 33178] New: Suggestions for cleaning HFONT handling

bugzilla-daemon at freedesktop.org bugzilla-daemon at freedesktop.org
Sat Jan 15 23:09:02 PST 2011


           Summary: Suggestions for cleaning HFONT handling
           Product: cairo
           Version: 1.10.2
          Platform: Other
        OS/Version: Windows (All)
            Status: NEW
          Severity: normal
          Priority: medium
         Component: win32 backend
        AssignedTo: cairo-bugs at cairographics.org
        ReportedBy: bfulgham at webkit.org
         QAContact: cairo-bugs at cairographics.org

Created an attachment (id=42096)
 --> (https://bugs.freedesktop.org/attachment.cgi?id=42096)
A suggestion for cleaning up HFONT lifetime and handling

I encountered a number of error messages from BoundsChecker under the test

_cairo_win32_scaled_font_fini (void *abstract_font) attempts to delete the
scaled_hfont object, but this HFONT is still selected into an active device

The cause of this specific error is that the
cairo_win32_scaled_font_select_font function calls SelectObject to bring the
passed font into active use for the device context.  SelectObject returns the
previously selected font (often a stock font).  While this may be handled in
many cases by performing a SaveDC/RestoreDC around these operations, it doesn't
seem like this is generally done in the test suite.

Later, when the program is finished with the scaled font, a call to
cairo_win32_scaled_font_done_font.  However, this operation does not remove the
font from any active device contexts into which it had been selected. 
Consequently, the later destruction of the font (when the font cache goes out
of scope) can generate errors.

I would propose the following:

1. Have the cairo_win32_scaled_font_select_font incorporate a new out parameter
to hold the previously-selected font for the passed device context.
2. Have the cairo_win32_scaled_font_done_font take two new parameters: (a) the
device context that the scaled_font is currently selected into, and the
original font (now passed back as an out parameter from (1).

The attached patch implements these changes.

The various test cases were easy to modify to handle these changes.  However,
I'm not sure how external programs using the win32 Cairo routines would be
impacted by this change.  From a pragmatic standpoint, the additional terms
could be allowed to be 'null', and revert to original behavior in those cases.

Configure bugmail: https://bugs.freedesktop.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
You are the assignee for the bug.

More information about the cairo-bugs mailing list