Revision: 4918
          http://matplotlib.svn.sourceforge.net/matplotlib/?rev=4918&view=rev
Author:   mdboom
Date:     2008-02-01 09:19:02 -0800 (Fri, 01 Feb 2008)

Log Message:
-----------
Fix reference leak on Glyph objects.

Modified Paths:
--------------
    branches/v0_91_maint/CHANGELOG
    branches/v0_91_maint/src/ft2font.cpp

Modified: branches/v0_91_maint/CHANGELOG
===================================================================
--- branches/v0_91_maint/CHANGELOG      2008-01-31 19:14:20 UTC (rev 4917)
+++ branches/v0_91_maint/CHANGELOG      2008-02-01 17:19:02 UTC (rev 4918)
@@ -1,3 +1,5 @@
+2008-02-01 Fix reference leak in ft2font Glyph objects. - MGD
+
 2008-01-31 Don't use unicode strings with usetex by default - DSD
 
 2008-01-31 Fix text spacing problems in PDF backend with *some* fonts,

Modified: branches/v0_91_maint/src/ft2font.cpp
===================================================================
--- branches/v0_91_maint/src/ft2font.cpp        2008-01-31 19:14:20 UTC (rev 
4917)
+++ branches/v0_91_maint/src/ft2font.cpp        2008-02-01 17:19:02 UTC (rev 
4918)
@@ -8,9 +8,9 @@
 /**
  To improve the hinting of the fonts, this code uses a hack
  presented here:
- 
+
  http://antigrain.com/research/font_rasterization/index.html
- 
+
  The idea is to limit the effect of hinting in the x-direction, while
  preserving hinting in the y-direction.  Since freetype does not
  support this directly, the dpi in the x-direction is set higher than
@@ -20,7 +20,7 @@
  hinting, whereas the global transform does not, this is documented
  behavior of freetype, and therefore hopefully unlikely to change.
  The freetype 2 tutorial says:
- 
+
       NOTE: The transformation is applied to every glyph that is
       loaded through FT_Load_Glyph and is completely independent of
       any hinting process. This means that you won't get the same
@@ -42,7 +42,7 @@
 
 FT_Library _ft2Library;
 
-// FT2Image::FT2Image() : 
+// FT2Image::FT2Image() :
 //   _isDirty(true),
 //   _buffer(NULL),
 //   _width(0), _height(0),
@@ -53,7 +53,7 @@
 
 FT2Image::FT2Image(unsigned long width, unsigned long height) :
   _isDirty(true),
-  _buffer(NULL), 
+  _buffer(NULL),
   _width(0), _height(0),
   _rgbCopy(NULL),
   _rgbaCopy(NULL) {
@@ -61,10 +61,10 @@
   resize(width, height);
 }
 
-FT2Image::~FT2Image() { 
+FT2Image::~FT2Image() {
   _VERBOSE("FT2Image::~FT2Image");
-  delete [] _buffer; 
-  _buffer=NULL; 
+  delete [] _buffer;
+  _buffer=NULL;
   delete _rgbCopy;
   delete _rgbaCopy;
 }
@@ -151,7 +151,7 @@
 }
 
 void
-FT2Image::draw_rect(unsigned long x0, unsigned long y0, 
+FT2Image::draw_rect(unsigned long x0, unsigned long y0,
                    unsigned long x1, unsigned long y1) {
   if ( x0<0 || y0<0 || x1<0 || y1<0 ||
        x0>_width || x1>_width ||
@@ -195,7 +195,7 @@
   return Py::Object();
 }
 
-void FT2Image::draw_rect_filled(unsigned long x0, unsigned long y0, 
+void FT2Image::draw_rect_filled(unsigned long x0, unsigned long y0,
                                unsigned long x1, unsigned long y1) {
   x0 = CLAMP(x0, 0, _width);
   y0 = CLAMP(y0, 0, _height);
@@ -209,7 +209,7 @@
   }
 
   _isDirty = true;
-}  
+}
 
 char FT2Image::draw_rect_filled__doc__[] =
 "draw_rect_filled(x0, y0, x1, y1)\n"
@@ -245,7 +245,7 @@
   args.verify_length(0);
 
   return Py::asObject
-    (PyString_FromStringAndSize((const char *)_buffer, 
+    (PyString_FromStringAndSize((const char *)_buffer,
                                _width*_height)
      );
 }
@@ -284,7 +284,7 @@
   args.verify_length(0);
 
   makeRgbCopy();
-  
+
   return _rgbCopy->py_as_str(args);
 }
 
@@ -321,7 +321,7 @@
   args.verify_length(0);
 
   makeRgbaCopy();
-  
+
   return _rgbaCopy->py_as_str(args);
 }
 
@@ -671,7 +671,7 @@
   }
 
   // set a default fontsize 12 pt at 72dpi
-#ifdef VERTICAL_HINTING  
+#ifdef VERTICAL_HINTING
   error = FT_Set_Char_Size( face, 12 * 64, 0, 72 * HORIZ_HINTING, 72 );
   static FT_Matrix transform = { 65536 / HORIZ_HINTING, 0, 0, 65536 };
   FT_Set_Transform( face, &transform, 0 );
@@ -829,7 +829,7 @@
   int error = FT_Set_Char_Size( face, (long)(ptsize * 64), 0,
                                (unsigned int)dpi,
                                (unsigned int)dpi );
-#endif  
+#endif
   if (error)
     throw Py::RuntimeError("Could not set the fontsize");
   return Py::Object();
@@ -1036,7 +1036,6 @@
   if ( (size_t)num >= gms.size())
     throw Py::ValueError("Glyph index out of range");
 
-  Py_INCREF(gms[num]);
   return Py::asObject(gms[num]);
 }
 
@@ -1078,7 +1077,7 @@
   long charcode = Py::Long(args[0]), flags = Py::Long(FT_LOAD_FORCE_AUTOHINT);
   if (kwargs.hasKey("flags"))
     flags = Py::Long(kwargs["flags"]);
-  
+
   int error = FT_Load_Char( face, (unsigned long)charcode, flags);
 
   if (error)
@@ -1094,7 +1093,6 @@
   glyphs.push_back(thisGlyph);
   Glyph* gm = new Glyph(face, thisGlyph, num);
   gms.push_back(gm);
-  Py_INCREF(gm); //todo: refcount correct?
   return Py::asObject( gm);
 }
 
@@ -1659,7 +1657,7 @@
   }
 }
 
-char FT2Font::get_image__doc__ [] = 
+char FT2Font::get_image__doc__ [] =
   "get_image()\n"
   "\n"
   "Returns the underlying image buffer for this font object.\n";
@@ -1669,7 +1667,7 @@
   if (image) {
     Py_XINCREF(image);
     return Py::asObject(image);
-  } 
+  }
   throw Py::RuntimeError("You must call .set_text() before .get_image()");
 }
 
@@ -1684,7 +1682,7 @@
   args.verify_length(1);
 
   std::string filename = Py::String(args[0]);
-  FT_Error error = 
+  FT_Error error =
     FT_Attach_File(face, filename.c_str());
 
   if (error) {
@@ -1884,7 +1882,7 @@
   d["KERNING_DEFAULT"]  = Py::Int(FT_KERNING_DEFAULT);
   d["KERNING_UNFITTED"]  = Py::Int(FT_KERNING_UNFITTED);
   d["KERNING_UNSCALED"]  = Py::Int(FT_KERNING_UNSCALED);
-  
+
   d["LOAD_DEFAULT"]                 = Py::Long(FT_LOAD_DEFAULT);
   d["LOAD_NO_SCALE"]                = Py::Long(FT_LOAD_NO_SCALE);
   d["LOAD_NO_HINTING"]              = Py::Long(FT_LOAD_NO_HINTING);
@@ -1894,7 +1892,7 @@
   d["LOAD_FORCE_AUTOHINT"]   = Py::Long(FT_LOAD_FORCE_AUTOHINT);
   d["LOAD_CROP_BITMAP"]      = Py::Long(FT_LOAD_CROP_BITMAP);
   d["LOAD_PEDANTIC"]         = Py::Long(FT_LOAD_PEDANTIC);
-  d["LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH"] = 
+  d["LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH"] =
     Py::Long(FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH);
   d["LOAD_NO_RECURSE"]       = Py::Long(FT_LOAD_NO_RECURSE);
   d["LOAD_IGNORE_TRANSFORM"] = Py::Long(FT_LOAD_IGNORE_TRANSFORM);


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Matplotlib-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-checkins

Reply via email to