Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
branch: master
Fetching contributors…

Cannot retrieve contributors at this time

6077 lines (4343 sloc) 230.378 kb
2010-07-20 Sebastien Pouliot <>
* image.c: Use DPI from source image when creating a Graphics
instance from it. Fix bug #556181
2010-07-14 Sebastien Pouliot <>
* lineargradientbrush.c: Do not accept empty (width/height)
rectangles to create a linear brush. Fix bug #537396
2010-07-07 Sebastien Pouliot <>
* pngcodec.c: security fix in libpng 1.2 broke the define
2010-06-16 Sebastien Pouliot <>
* image.c: Fix #529887 for drawing a part of image with scaling.
Patch provided by Dan Parnham
2010-05-17 Tom Hindle <>
* image.c: perform calculated transformation. Fix #606412
2010-05-04 Miguel de Icaza <>
* Apply patch from Matthew Metnetsky which fixes Bug #590286
Passing -1 (to indicate null terminated string) for the string
lengths for GdipDrawString and GdipMeasureString causes the
program to seg-fault.
2010-04-12 Sebastien Pouliot <>
* pngcodec.c: SuSE provided patch for newer libpng (1.4.x). Made
to be backward compatible with 1.2.x
2010-03-26 Miguel de Icaza <>
* Apply patch from Matthew Metnetsky which fixes 590503,
GdipCloneImage not cloning the properties.
2010-01-13 Sebastien Pouliot <>
* tiffcodec.c: Don't call TIFFClose with a NULL value. Fix #569940
2009-08-19 Jeffrey Stedfast <>
* font.c (gdip_get_fontfamily_details_from_freetype): Fixed to use
values much closer to those returned by GDI+ based on work done in
2009-03-20 Tom Hindle <>
* graphics.c: Allow GdipCreateFromHDC to work on the HDC of objects
previousy created with GdipCreateFromHDC. Also allow GdipCreateFromHDC
to work with gtMemoryBitmap types.
2009-01-28 Sebastien Pouliot <>
* image.c: Revert last change wrt resolution
2009-01-02 Sebastien Pouliot <>
* image.c: Adjust image width/height wrt its resolution before
drawing (this can be used to scale a picture).
* bitmap.c: Add more validations to GdipBitmapSetResolution
[Fix bug #434583]
2008-12-23 Sebastien Pouliot <>
* text.c (GdipMeasureCharacterRanges): Don't handle empty (zero)
width or height at this early stage.
* text-cairo.c: Handle negative/zero width/height to match MS GDI+
[Fix bug #449971]
2008-11-07 Sebastien Pouliot <>
* graphics-cairo.c (make_arc): Only compute start points if we
actually need them.
* graphics-path.c (append_arcs): Fix arcs computation like this
was done for #410459 (draw) but in this case we need to keep the
direction/increment since the points are part of a path.
[Fix bug #442428]
2008-10-30 Sebastien Pouliot <>
* region-bitmap.c (reduce): Fix skipping a color channel while
reducing the bitmap to 1bpp (provided by David Binderman)
[Fix bug #440127]
2008-09-03 Sebastien Pouliot <>
* general.c: Compute intermediate start/end points correctly on an
open curve. Patch by Marek Habersack
2008-09-02 Sebastien Pouliot <>
* graphics-path.c: Add support to compress points (skip on of two
identical consecutive points) under some special cases.
2008-08-11 Sebastien Pouliot <>
* image.c: Remove buggy loop in gdip_bitmap_clone which allocates way
too much memory when cloning an image with multiple frames (and only
free one of them).
[Fix bug #411454]
2008-08-04 Sebastien Pouliot <>
* graphics-cairo.c: (make_arcs) Simplify logic so the increment is
always positive. Fix arcs going in the wrong direction (wihtout more
[Fix bug #410459]
2008-08-04 Sebastien Pouliot <>
* pen.c: Pen minimal visual size is 1.0 pixel (whatever the scaling).
[Fix bug #410466]
2008-08-04 Sebastien Pouliot <>
* graphics-cairo.c: Only stroke using a 1.0 width line. Also close
the path before filling.
[Fix bug #413461]
2008-07-18 Sebastien Pouliot <>
* graphics-cairo.c: Don't stroke when filling (required to match
GDI+ behavior) when the graphic is being scaled (since the pen's
thickness is scaled too).
[Fix bug #410124]
2008-07-17 Sebastien Pouliot <>
* graphics-private.h: Add definition for gdip_is_scaled
* general.c: Remove static from gdip_is_scaled
* graphics-cairo.c: Don't apply AA offset to Ellipses and Pies
if the graphic is being scaled.
[Fix bug #409672]
2008-07-07 Sebastien Pouliot <>
* font.c: Clone GpFontFamily when creating a new font.
2008-06-27 Sebastien Pouliot <>
* region.c: Handle the case were we compute a negative Height
value while building the rectangle list for exclude.
[Fix bug #402613]
2008-04-25 Sebastien Pouliot <>
* region.c: Normalize rectangles (apply negative width and height
to X, Y) before doing binary operations on them.
[Fix second part of bug #383878]
2008-04-25 Sebastien Pouliot <>
* region.c: Fix possible crash in Complement.
[Fix part of bug #383878]
2008-04-21 Sebastien Pouliot <>
* general-private.h: Don't clamp values for Cairo >= 1.6 since
the fixed point values are now kept in the 24/8 format.
* graphics-private.h: Change the CAIRO_AA_OFFSET_X from 1.0 to
0.5 for Cairo >= 1.6.
* graphics-cairo.c: Revert earlier AA tweaks (r100945) as it
broke rectangles and the change to CAIRO_AA_OFFSET_X does the
required fixes.
[Fix bug #381737]
* graphics-path.c: IsVisible X offset still needs to be 1.0
(whatever version of Cairo being used).
2008-04-18 Jeffrey Stedfast <>
* text-cairo.c (MeasureString): #include <ctype.h> for isspace()
and also do proper casting so that we don't run into problems on
non-GNU systems.
2008-04-18 Sebastien Pouliot <>
* pngcodec.c: If PNG_INCH_CONVERSIONS is not defined (old libpng)
then manual compute resolution. If none is available fall back to
screen resolution. Fix bug #381169
2008-04-16 Sebastien Pouliot <>
* graphics-cairo.c: Tweak AA (since looks like Cairo 1.6 tweaked
it too ;-). Probably not complete but this fix SD unit tests.
2008-04-03 Sebastien Pouliot <>
* image.c: Copy (and later restore) the original matrix before
applying any "local" change inside GdipDrawImageRect. Fix
bug #376855
2008-02-14 Geoff Norton <>
* carbon-private.c: Display automatic dpi detection for now, its
causing too many problems.
2008-01-23 Geoff Norton <>
* Add carbon-private.* to the build.
* general.c: Use gdip_get_display_dpi_carbon to get dpi on the mac
* graphics.c: Rename GdipCreateFromQuartz_macosx to
* carbon-private.c: A mac specific implementation to get the
horizontal and vertical dpi of a display.
2007-12-22 Geoff Norton <>
* graphics-private.h: Revert the CAIRO_AA change as it caused
regressions in the testsuite and improperly layed out controls.
2007-12-04 Geoff Norton <>
* general.c: Optimize the code path to only check the environment
variable once for dpi detection on the Mac.
2007-11-16 Sebastien Pouliot <>
* graphics-cairo.c: If we need to stroke, before filling, then we
must preserve the path. Fix bug #342074.
2007-11-15 Geoff Norton <>
* general.c: If we're running on the Carbon driver avoid the call
to XOpenDisplay. This fixes a deadlock race condition on Leopard
as well as prevents X11 from opening when we start MWF apps.
2007-11-07 Geoff Norton <>
* graphics-private.h: Add CGImageRelease prototype.
* graphics.c: Free the CGImageRef after copying it to our display
context. Fixes a massive memory leak in the Mac backend
2007-11-01 Sebastien Pouliot <>
* font.c: Fix font face selection (typo) and ensure the font-family
doesn't cache a version without bold and/or italics. Fix #338207
* pen.c: Fix pen scaling (either X or Y) by 0. MS GDI+ produce a thin
line while Cairo would return an error. Fix bug #338233
* text-pango-private.h: Add ctype.h include to remove warning about
2007-10-31 Sebastien Pouliot <>
* graphics-path.c: Avoid computing the start point coord unless we
need them later. Add URL for formula used here.
2007-10-30 Sebastien Pouliot <>
* lineargradientbrush.c: Remove small (+1) cosmetic fix that breaks
severely when a scale transform is applied to the gradient. Fix bug
2007-10-30 Sebastien Pouliot <>
* graphics.c: Remove gdip_plot_path (duplicate) function.
* graphics-cairo.c|h: Change [gdip_]convert_fill_mode visibility.
* graphics-path.c: Remove old code used for Is[Outline]Visible
functions and use the cairo functions (with some adjustments). This
fix bug #325502 (ellipse didn't work). This should also fix some
cases where GpGraphics should have been used for the check.
2007-10-29 Sebastien Pouliot <>
* lineargradientbrush.c: Nullify linear->pattern since we can return
from the function without creating a new pattern (i.e. stall pointer)
2007-10-17 Geoff Norton <>
* graphics.c: Construct the quartz surface with a image backend so all
cairo operations can complete without failure. We blit the image to the
real cgContext when Flush () is called.
* graphics-private.h: Set CAIRO_AA_OFFSET_X to 0.5 when running on a Mac.
Add cg_context to Graphics structure when built with the Quartz surface
so we can blit the resultant image to the real context.
Add declarations for the CoreGraphics structures we need for the blitting.
Add declarations for the CoreGraphics / cairo functions we need to call for
2007-08-13 Sebastien Pouliot <>
* text-pango.c: Ensure we can use the results of MeasureString to
DrawString and get the same results.
2007-08-13 Sebastien Pouliot <>
* text.notes: New. Notes about text rendering.
* text-cairo.c: Add correct support for MeasureTrailingSpaces
* text-pango.c: Optimize the case where the font is underlined and
HotkeyPrefixShow is used.
2007-08-10 Sebastien Pouliot <>
* graphics-path.c: Reuse gdip_pango_setup_layout for paths (needs
* text-pango.c | text-pango-private.h: Make API usable for
GdipAddPathString and free (unref) the PangoLayout.
2007-08-09 Sebastien Pouliot <>
* font.c | font-private.h: Refactor font code to work with either
Cairo+FreeType or Pango+FreeType.
* graphics-path.c: Adjust for Pango/Cairo rendering in AddString. The
Pango part isn't yet done.
* text.c: switch between Cairo or Pango rendering at compile time.
* text-cairo.c | text-cairo-private.h: Define out if pengo rendering
is active.
* text-pango.c | text-pango-private.h: New. Pango rendering using the
high-level API (PangoLayout). Not all options are supported (but then our
Cairo-based rendering never supported all of them either ;-)
* Add text-pango.c and text-pango-private.h to the build.
2007-08-02 Sebastien Pouliot <>
* text-cairo.c: Reverting patch for bug #78777 to fix bug #81572.
Fixed the "height" part of bug #78777 (LF isn't on the line you expect
it to be). The X position is off because LF aren't characters anymore
(and this mess with the ranges).
2007-08-01 Sebastien Pouliot <>
* text-cairo-private.h | text-cairo.c: Fix MeasureCharacterRanges
inconsistentency (#77496), i.e. missing descent, without (hopefully)
breaking everything else.
2007-08-01 Sebastien Pouliot <>
* bitmap.c: Use [g|s]et_pixel_bgra macros inside premul function to
avoid endian issues.
* font.c | fontfamily.h: Added GdipCloneFontFamily (fix #80845);
2007-07-31 Sebastien Pouliot <>
* bitmap.c: Ensure proper initialization of palette when locking a
bitmap. Make more use of gdip_palette_clone function.
* region.c: Add special case for to exclude path/regions from
infinity. Updated patch from Yves Bastide. Fix #81833.
2007-07-31 Sebastien Pouliot <>
* graphics-path.c: Simplify GdipClosePathFigure.
* text-[cairo|metafile]-private.h: Hide internal functions.
2007-07-31 Sebastien Pouliot <>
* graphics-path.c: Reverse PathTypes. Patch by Yves Bastide.
Fix #81859.
2007-07-30 Sebastien Pouliot <>
* graphics-path.c: Avoid allocations/freeing of memory when reversing
the array of points.
2007-07-30 Sebastien Pouliot <>
* bitmap.c: Added global functions to deal with pre-multiplication.
* bitmap-private.h: New prototypes for pre-multiplication.
* texturebrush.c: If required by the format pre-multiply the alpha
value of the brush bitmap before it's use as a pattern. Fix #81828.
Cleaned-up some unused variables but there's still too much
duplication for my taste (added TODO).
2007-07-30 Sebastien Pouliot <>
* graphics-cairo.c: Fix DrawPath offset (bug #82202) and correctly
fill the path (which includes stroking in this case).
2007-07-05 Sebastien Pouliot <>
* imageattributes.c: Re-fix alpha.
2007-07-03 Sebastien Pouliot <>
* graphics-path.c: Add missing checks in GdipGetPath[Types|Points]
functions (based on parts of #81859 patch by Yves Bastide).
* region.c: Add a few shortcuts to empty paths|regions combined with
an infinite regions (based on parts of #81833 patch by Yves Bastide).
2007-06-21 Sebastien Pouliot <>
* imageattributes.c: Fix "too clever" optimization with alpha when
applying a ColorMatrix.
2007-06-21 Sebastien Pouliot <>
* customlinecap.c: Fix #81829 to allow either a fill or stroke path
when creating a GpCustomLineCap.
2007-06-21 Sebastien Pouliot <>
* codecs.h, GdiPlusFlat.h, image.h, dstream.c: Fix #81845 to allow
using with C++ compilers and -Werror. Patch by Yves Bastide.
2007-06-21 Sebastien Pouliot <>
* graphics.h: Add missing GdipGetClip prototype. Fix #81844. Patch by
Yves Bastide.
2007-06-21 Sebastien Pouliot <>
* general.c|h: Fix signature for GdiplusShutdown. Fix bug #81842.
2007-06-21 Sebastien Pouliot <>
* bitmap.c, bmpcodec.c, icocodec.c, imageattributes.c, image.c,
jpegcodec.c, pngcodec.c, tiffcodec.c, gdipenums.h: Fix PixelFormat*Rgb
(and Argb) to PixelFormat*RGB (and ARGB) to match MS GDI+ definitions.
Patch by Yves Bastide. Fix #81841
2007-06-05 Sebastien Pouliot <>
* emfcodec.c, metafile-private.h, wmfcodec.c, wmfcodec.h: ++ is unsafe
to use with the GUINTx_FROM_LE macro. Also avoid macro re-declarations
2007-05-30 Sebastien Pouliot <>
* gifcodec.c: Add support for interlaced GIF. Fix bug #81773
* imageattributes.c: Add support for ColorMatrixFlags and Gray
ColorMatrix (quite popular based on MoMA reports);
* imageattributes-private.h: Add the gray color matrix and the color
matrix flags into the GpImageAttribute structure.
2007-05-28 Sebastien Pouliot <>
* graphics-cairo.c: Adjust the x,y position (-1,-1) when the pen's
length is a multiple of 2. This makes the rectangle drawing match MS
implementation. Also fix cairo_DrawRectanglesI to use anti-aliasing
(like all drawing functions should do).
* graphics-cairo-private.h: Add macro to check if a coordinate
correction is required for the specified pen's width.
2007-05-25 Sebastien Pouliot <>
* general-private.h: Don't optimize convertions when printing.
* text-cairo.c: Ensuew we converting coordinates when printing. Fix
bug #81708
2007-05-24 Sebastien Pouliot <>
* graphics-cairo.c: Don't use antialiasing on clipping paths. Fix bug
* image.c: Implement GdipDrawImagePointsRect[I] functions.
2007-05-23 Sebastien Pouliot <>
* pngcodec.c: Add correct support for 2bpp PNG images (promoted to
32bpp ARGB) and fixed palette for 4bpp images. Fix bug #81674.
2007-05-22 Sebastien Pouliot <>
* graphics.c: Fix GdipCreateFromHDC to return OutOfMemory if HDC is
NULL. This match MS behavior as seen in (unfixed) bug #81709.
2007-05-17 Sebastien Pouliot <>
* general-private.h: Define G_MININT16 and G_MAXINT16 when not
available on a platform.
2007-05-17 Sebastien Pouliot <>
* emfcodec.c: Don't play empty but valid (e.g. recording) metafiles.
* graphics.c: Move cairo code to graphics-cairo.c and switch functions
between the cairo and metafile backends.
* graphics-private.h: Add the required data for the metafile backend.
* graphics-cairo.c: New file. Moved cairo-based stuff from graphics.c.
* graphics-cairo-private.h: New. header to cairo graphics functions.
* graphics-metafile.c: New. Metafile graphics recording functions.
* graphics-metafile-private.h: New. header to metafile graphics
* image.c: Allow creating GpGraphics contexts on a recording metafile.
* metafile.c: Starting support for recording.
* metafile-private.h: Add data/functions required for recording.
* text.c: Move non-validation code (i.e. cairo code) into text-cairo.c
* text.h: Add copyrights header.
* text-cairo.c: New file. Moved cairo-based stuff from text.c.
* text-cairo-private.h: New. header to cairo-based text functions.
* text-metafile.c: New. Metafile-based text rendering.
* text-metafile-private.h: New. header to metafile text functions.
* Add new files, remove old one.
2007-05-15 Sebastien Pouliot <>
* graphics-private.h: Add macro to check for position overflows.
* image.c: Check for negative width/height values and overflows
in function GdipDrawImageRect (not applicable to metafiles).
Check GpUnit inside function GdipDrawImageRectRect.
2007-05-12 Miguel de Icaza <>
* image.c (GdipDrawImageRect): Passing a width or height of 0 is a
no-op on Windows. Prevents Cairo from setting an INVALID_MATRIX
error (the Paint.NET reported bug).
2007-05-08 Sebastien Pouliot <>
* bitmap.c|bitmap-private.h: Add new gdip_create_greyscale_palette
function to avoid duplicate work in codecs.
* jpegcodec.c: Fix support for 8bpp indexed greyscale images (#81552).
* pngcodec.c: Use new greyscale palette function.
2007-05-03 Sebastien Pouliot <>
* print.c: Fix headers inclusion (and re-enable that code).
2007-04-26 Sebastien Pouliot <>
* metafile.c|h: Add delegate-based GdipRecordMetafile... functions
to replace the IStream COM based functions outside of Windows.
2007-04-26 Sebastien Pouliot <>
* gifcodec.c: Add image.h so we can build (stubs) without libgif
* jpegcodec.c: Add image.h and dtream.h so we can build (stubs)
without libjpeg and move up "extern GUID GdipEncoderQuality".
* tiffcodec.c: Add image.h so we can build (stubs) without libtiff
2007-04-26 Sebastien Pouliot <>
* emfcodec.h: Include metafile-private.h
* emfplus.h: Include metafile-private.h
* graphics.c: Correct API wrt public API
* graphics.h: Clean up public API (and include missing stuff)
* gdiplus-private.h: Add typedef for GpMetafile
* image.c: Include metafile-private.h
* metafile.c: Add GdipRecordMetafile{Filename][I] functions.
* metafile.h: Add new record functions. Remove private stuff (into new
private header) and win32 definitions.
* metafile-private.h: New file. Private header.
* win32structs.h: Add metafile public here
* wmfcodec.h: Include metafile-private.h
* Add new metafile-private.h to the build/dist
2007-04-25 Sebastien Pouliot <>
* pngcodec.c: Fix compilation when old headers are used (e.g. rh9 and
our debian 3.1 builds on arm and sparc).
2007-04-24 Sebastien Pouliot <>
* font.c: Use guint16 instead of UINT16.
* font-family.h: Use guint16 instead of UINT16.
* win32structs.h: Remove UINT16 definition. It's also present in some
libjpeg headers and some compilers don't like it's redeclaration.
2007-04-24 Sebastien Pouliot <>
* adjustablearrowcap.c: Header/types adjustments.
* adjustablearrowcap.h: New file. Public header.
* adjustablearrowcap-private.h: New file. Private header.
* Types adjustment.
* bmpcodec.c|h: Header/types adjustments.
* bitmap.c: Header/types adjustments.
* bitmap.h: New file. Public header.
* bitmap-private.h: New file. Private header.
* brush.c: Header adjustments.
* brush.h: Move private stuff out.
* brush-private.h: New file. Private header.
* codecs.h: New file. Contains public codec declarations.
* codecs-private.h: New file. Private header.
* customlinecap.c: Header adjustments.
* customlinecap.h: Move private stuff out, move public stuff in.
* customlinecap-private.h: New file. Private header.
* dstream.c|h: Header adjustments.
* emfcodec.c|h: Header/types adjustments.
* emfplus.h: Header adjustments.
* font.c: Header/types adjustments.
* font.h: New file. Public header.
* fontcollection.h: New file. Public header.
* fontcollection-private.h: New file. Private header.
* fontfamily.h: New file. Public header.
* fontfamily-private.h: New file. Private header.
* gdip.h: Deprecated. Public and private stuff has been moved into
different header files to avoid more errors in the future and make it
easier to use libgdiplus as a library.
* gdipenums.h: New file. Contains (only) public enums.
* gdipstructs.h: New file. Contains (only) public types.
* gdiplus-private.h: New file. Main private include file.
* GdiPlusFlat.h: New file. This is *the* header file to include from
C/C++ projects (i.e. the only one that match MS filenames). Makes it
easier not to use internal/private (i.e. changing) libgdiplus stuff.
* general.c: Move public types to public header. Use FcFini if
available. Remove DEBUG_MEMLEAKS code (valgrind is much better).
* general.h: Updated to contain only public stuff.
* gifcodec.c|h: Header/types adjustments.
* graphics.c: Header/types adjustments. [Draw|Measure]String functions
have moved into text.c source file.
* graphics.h: Move private stuff out and move public stuff in.
* graphics-path.c: Header/types adjustments.
* graphics-path.h: Move GpPathIterator functions into their own header
file. Moved internal functions into private header file.
* graphics-path-private.h: New file. Private header.
* graphics-pathiterator.c: Header/types adjustments.
* graphics-pathiterator.h: New file. Public header.
* graphics-pathiterator-private.h: New file. Private header.
* graphics-private.h: New file. Private header.
* hatchbrush.c: Header/types adjustments.
* hatchbrush.h: Move private definitions into a separate header file.
* hatchbrush-private.h: New file. Private header.
* icocodec.c|h: Header/types adjustments.
* image.c: Header/types adjustments. Move codec GUID into codec source
* image.h: New file to replace gdipImage.h but contains only public
and semi-public stuff.
* image-private.h: New file. Private header.
* imageattributes.c: Header/types adjustments.
* imageattributes.h: New file. Public header.
* imageattributes-private.h: New file. Private header.
* jpegcodec.c|h: Header/types adjustments.
* lineargradientbrush.c: Header adjustments.
* lineargradientbrush.h: Moved private stuff into it's own header file
* lineargradientbrush-private.h: New file. Private header.
* matrix.c: Header adjustments and inline matrix_equals.
* matrix.h: Move private stuff out, move public stuff in.
* matrix-private.h: New file. Private header.
* metafile.c|h: Header/types adjustments.
* pen.c: Header/types adjustments.
* pen.h: New file. Public header.
* pen-private.h: New file. Private header.
* pathgradientbrush.c: Header adjustments.
* pathgradientbrush.h: Move private stuff out.
* pathgradientbrush-private.h: New file. Private header.
* pngcodec.c|h: Header/types adjustments.
* region.c: Header adjustments.
* region.h: Move private stuff out.
* region-bitmap.c|h: Header/types adjustments.
* region-path-tree.c|h: Header/types adjustments.
* region-private.h: New file. Private header.
* solidbrush.c: Header/types adjustments.
* solidbrush.h: Move private stuff out.
* solidbrush-private.h: New file. Private header.
* stringformat.c: Header/types adjustments.
* stringformat.h: New file. Public header.
* text.c: New file. [Draw|Mesure]String is moved here. This will help
having an alternate implementation of them.
* text.h: New file. Public header.
* text-private.h: New file. Private header.
* texturebrush.c: Header/types adjustments.
* texturebrush.h: Header/types adjustments.
* texturebrush-private.h: Move private stuff out.
* tiffcodec.c|h: Header/types adjustments.
* win32structs.h: New file that contains win32 definitions required by
* wmfcodec.c|h: Header/types adjustments.
* Add new files to the build.
2007-04-23 Sebastien Pouliot <>
* bitmap.c: Use a macro to calculate aligned stride.
* bmpcodec.c: Use a macro to calculate aligned stride.
* gdip.h: Remove dependency on pixman.h as the alignment is always
done on 4 bytes (32 bits) for all architectures.
* general.h: Add macro to calculate aligned stride.
* gifcodec.c: Use a macro to calculate aligned stride.
* icocodec.c: Use a macro to calculate aligned stride.
* pngcodec.c: Use a macro to calculate aligned stride.
2007-04-16 Sebastien Pouliot <>
* bitmap.c: Complete (hopefully) endian fixes.
2007-04-16 Sebastien Pouliot <>
* bitmap.c: Report correct error for GdipBitmap[Get|Set]Pixel on a
16bpp grayscale bitmap.
2007-04-13 Sebastien Pouliot <>
* bitmap.c: Fix more endian issues in GdipLockBits and GdipUnlockBits
and remove a few unrequired masks.
2007-04-13 Sebastien Pouliot <>
* bitmap.c: Fix endian issues in GdipLockBits and GdipUnlockBits.
* gdip.h: Add macros for setting BRG values in a buffer.
2007-04-12 Sebastien Pouliot <>
* bitmap.c: Ensure we don't get out of bounds by one byte when using
the 24bbp/3bytes mode. Fix a possible leak in GdipBitmapLockBits (e.g.
if the pixel format convertion doesn't work). The 2.0 API allows a
test case to be built to validate this.
2007-04-12 Sebastien Pouliot <>
* bitmap.c: Complete the fix for #79246, the previous code was
mishandling the fact that Cairo use 4 bytes for 24bpp while GDI+ is
using only 3 bytes (so converting between format isn't only get and
set operations).
* gdip.h: Remove unused structures x11drv_escape_codes and
GpLinePointF. Add define for GBD_TRUE24BPP used to tag a GpBitmapData
that use 3 bytes for 24bpp (GDI+) versus 4 bytes (Cairo).
2007-04-11 Sebastien Pouliot <>
* bitmap.c: Fix 24/32 mixup between GDI+ requirements and Cairo inner
working. Fix bug #80681 and parts of bug #79246.
2007-04-09 Sebastien Pouliot <>
* bmpcodec.c: Fix 32bpp RGB support not to use the (unused) alpha byte
in the file since it can contains junk.
2007-04-05 Sebastien Pouliot <>
* font.c: Remove internal (and unused) GdipGetHfont (not in GDI+).
Fix GdipCreateFont signature (GpFontStyle isn't defined in GDI+). Fix
(precise) GdipGetLogFont[A|W] signatures.
* gdip.h: Remove unused GpCachedFont (doesn't exists in GDI+). Fix
signature for GdipCreateFont.
* tiffcodec.c: Change two functions to static to remove their symbols.
2007-04-05 Sebastien Pouliot <>
* metafile.c: Stretch correctly to the metafile size.
2007-04-04 Sebastien Pouliot <>
* bmpcodec.c: Remove extra symbols introduced in last change.
2007-04-04 Sebastien Pouliot <>
* bmpcodec.c|h: Refactor reading to use ImageSource so metafiles can
reuse the codec to load bitmaps.
* emfcodec.c: Update reading to ImageSource.
* icocodec.c: Update reading to ImageSource.
* metafile.c|h: Implement StretchDIBits for #81178. Update reading to
* wmfcodec.c: Update reading to ImageSource.
2007-04-04 Sebastien Pouliot <>
* image.c: Hack around codec signature detection to add support for
non-placeable WMF metafiles (which MS GDI+ supports even if no codec
signature match them). Also add a second hack to report a different
image format than the one used to decode the image (non-placeable WMF
are reported as EMF).
2007-04-03 Sebastien Pouliot <>
* The great static-fication and hidden-ization of private symbols
inside libgdiplus. This brings us much closer to the real GDI+ API.
2007-04-03 Sebastien Pouliot <>
* cairo-embed.h: Rename *all* cairo_* symbols into mono_cairo_*.
Should fix bug #81279.
2007-04-02 Sebastien Pouliot <>
* font.c: Avoid locking multiple time for the same font family (e.g.
when asking for GetHeight). Make sure we're setting cellascent and
celldescent even if the horizontal table isn't available. This also
simplify the code and has better error handling. Added better error
handling in GdipGetFontHeight and GdipGetFontHeightGivenDPI functions.
2007-04-02 Sebastien Pouliot <>
* font.c: Change some functions to static and remove unused function.
* graphics.c: Remove unused externs.
2007-03-30 Sebastien Pouliot <>
* jpegcodec.c: Ensure we throw the "right" exception on the managed
side when an invalid file is read. Fix #80980
2007-03-30 Sebastien Pouliot <>
* brush.c: Change contract between GdipDeleteBrush and the destroy
function of the specialized brushes. The NULL check and the GdipFree
of the brush is now done centrally.
* hatchbrush.c: Simplify with new contract.
* lineargradientbrush.c: Simplify with new contract.
* pathgradientbrush.c: Simplify with new contract.
* solidbrush.c: Simplify with new contract.
* texturebrush.c: Simplify with new contract.
2007-03-30 Sebastien Pouliot <>
* pen.c: Update solid brush color (if used) when the pen color is
changed. Fix #81266. Change GdipGetPenBrushFill to return a clone of
the brush and not the original one.
* tiffcodec.c: Fix TIFFSetField as it requires at least two parameters
(count & type) when used for TIFFTAG_EXTRASAMPLES. Fix valgrind
2007-03-29 Sebastien Pouliot <>
* bmpcodec.h: Use __attribute__ ((packed)) instead of #pragma pack(2)
to make this work on the ARM architecture.
* metafile.h: Use __attribute__ ((packed)) instead of #pragma pack(2)
in the hope this construct works on the ARM architecture.
* tiffcodec.c: Fix TIFF crashes on SPARC (it's amazing what an integer
can do to get promoted).
2007-03-23 Sebastien Pouliot <>
* jpegcodec.c: Re-enable sigsetjmp to handle malformed JPEG files.
Also don't try to load EXIF data if loading failed. Fix bug #80980.
* metafile.c: More endian fixes (EMF headers)
2007-03-22 Sebastien Pouliot <>
* emfcodec.h: Some endian fixes.
* metafile.c: Some endian fixes.
* wmfcodec.c: Some endian fixes.
2007-03-21 Sebastien Pouliot <>
* emfcodec.c: Process ModifyWorldTransform and modify GdiComment to be
reusable to detect between "classic" EMF and EMF+/dual.
* Add emfplus.g|h to the build/dist.
* metafile.c|h: Fixed display bounds. Added detection of EMF+ (and
dual) metafiles. Added ModifyWorldTransform function and a few other
* wmfcodec.c: Process SaveDC, RestoreDC, SetStretchBltMode and
StretchDIBits records.
2007-03-21 Sebastien Pouliot <>
* emfplus.c|h: Starting point of the EMF+ (and dual) handling.
2007-03-21 Sebastien Pouliot <>
* pen.c: Ensure we never clear the 'changed' flag when setting pen's
properties. Issue #81102 found (and patch) by Choe Hwanjin.
2007-03-20 Chris Toshok <>
* graphics.c (GdipDeleteGraphics): if this is an X drawable,
ignore any errors we get destroying the surface. Works around a
bug in the RENDER X server support, where the cairo pictures are
freed when the drawable/window is destroyed (and so cairo's calls
to XRenderFreePicture fail with errors).
2007-03-20 Sebastien Pouliot <>
* emfcodec.h: Add some definitions.
* gdip.h: Remove gdip_graphics_init prototype.
* general.c: Remove unused stuff.
* graphics.c: Make gdip_graphics_init static.
* wmfcodec.h: Add some definitions.
2007-03-19 Sebastien Pouliot <>
* bitmap.c: Exclude unused code and made some function static.
* gdip.h: Remove un-shared function.
* font.c: Fix free in free_cached_pattern to release the 'key' memory
(no leak) and not the 'value' memory (double-free). Found/patch by
Choe Hwanjin.
2007-03-15 Sebastien Pouliot <>
* gdip.h: Add some missing prototypes to avoid compiler warnings.
2007-03-14 Sebastien Pouliot <>
* image.c: Return InvalidParameter when loading an unknown file format
from a stream. System.Drawing will throw the "correct" exception from
this error code.
* metafile.c: Fix DPI (purfect ;-) and improve bounds calculations.
2007-03-13 Sebastien Pouliot <>
* image.c: Fix codec signature compare when more than one signature-
mask exists (e.g. GIF87 files). Fix codec signature length to match the
(very large) EMF requirement (44 bytes).
* gdipImage.h: Add define for MAX_CODEC_SIG_LENGTH
2007-03-13 Sebastien Pouliot <>
* bitmap.c: Added comment about the special allocation of ColorPalette
where Count == 0 (CID273).
* image.c: Added comment about the special allocation of ColorPalette
where Count == 0 (CID272).
* metafile.c: Delete possibly allocated pen if invalid (CID279).
Free metafile context if the metafile type is invalid (CID280).
* region.c: In gdip_is_rect_infinite make sure rect can never be
dereferenced (CID276).
2007-03-08 Sebastien Pouliot <>
* emfcodec.c|h: Initial (i.e. subset of) EMF parser/player.
* metafile.c|h: Shared metafile code, like setup, play & cleanup
functions and a lot of "record" functions (which looks like the old
* wmfcodec.c|h: Initial (i.e. subset of) WMF parser/player.
2007-03-08 Sebastien Pouliot <>
* gdip.h: Add some missing prototypes to avoid compiler warnings.
* image.c: Change drawing metafiles not to require a surface (it will
be played on the existing one).
2007-02-27 Sebastien Pouliot <>
* gdip.h: Add some missing prototypes to avoid compiler warnings.
* texturebrush.cs: Reworked GdipCreateTexture to use the data from the
cloned image (and not the original). Simplified GdipCreateTexture2I to
reuse bitmap functions and call GdipCreateTexture. Fix bug #80971.
2007-02-26 Sebastien Pouliot <>
* region.c: Change GdipGetRegionHRgn to return a pointer to a *clone*
of the region as this better match MS implementation (multiple calls
return different HRGN). It also means that each of them must be freed
individually (or this will leak memory).
2007-02-22 Sebastien Pouliot <>
* image.c: Fix DrawImage* functions when using indexed bitmaps.
2007-02-21 Sebastien Pouliot <>
* emfcodec.c|h: Minor update to compile image.c changes.
* image.c: Updated all functions to allow them to work on metafiles
(i.e. don't touch the bitmap data).
* Add new files to the build.
* metafile.c|h: New. Skeleton to make image.c changes compile.
* print.c: Moved non-GDI+ (but public) print functions here (from
* wmfcodec.c|h: Minor update to compile image.c changes.
2007-02-16 Sebastien Pouliot <>
* bitmap.c: Refactor to match upcoming metafile definitions.
* gdip.h: Update gdip_bitmap_dispose definition to return GpStatus.
* gdipImage.h: Remove get_image_format definition, it's now static.
* image.c: Rewrite get_image_format to use the codec info (and remove
"uneasy" FIXME). Remove unused gdip_image_clone function. Refactor
Dispose and Clone functions for upcoming metafile support. Fix GUID to
ImageFormat for icons.
* tiffcodec.c: Add missing signatures and mask to TIFF ImageCodecInfo.
2007-02-15 Sebastien Pouliot <>
* graphics.c, graphics-path.c, region-bitmap.c, tiffcodec.c: Patch
from Dmitriy Lukinov to fix compilation when using gcc 2.95 (and
other old C compilers). #80844
2007-02-14 Sebastien Pouliot <>
* bitmap.c: Fix default palettes values (8bpp), flags and encoding
(RGB versus BGRA).
* gdip.h: Add color palette flags required to fix palettes.
2007-02-13 Sebastien Pouliot <>
* bmpcodec.c: MS generates what looks like invalid (or undocumented)
16bpp bitmaps for storing ImageList bitmaps. The header is bad
(missing BI_BITFIELDS), there is no ARGB masks and the last line of
the bitmap is incomplete. Fix bug #80797.
2007-02-08 Sebastien Pouliot <>
* matrix.h: Add macros gdip_matrix_get_[x|y]_scale
* region.c: Fix matrix operations on infinite region (the result is
always an infinite region). Optimize the transform when the matrix is
only a scale (or a scale+translate) to avoid converting a rectangular
based region into a bitmap based region (fix #80758).
2007-02-07 Sebastien Pouliot <>
* bmpcodec.c: Fix #80751 for that aren't reversed (bug introduced
when refactoring for icon support).
2007-02-05 Sebastien Pouliot <>
* cairo-embed.h: Redefine used cairo symbols to avoid coexistance
problems with Gtk+ 2.8 (and later). Fix bug #
* gdip.h: Rework includes, remove unused cairo_matrix typedef.
* general.c: Remove cairo.h from includes.
* Add cairo-embed.h to the build.
2007-02-01 Sebastien Pouliot <>
* general.c|h: Add iround (from graphics-path.c);
* graphics.c: Apply world transformations to bounds and fix function
GdipGetVisibleClipBounds to use the clipping region. Fix bug #78958;
* graphics-path.c: Remove iround (moved to general.c);
* region-bitmap.c: Fix typo;
2007-02-01 Sebastien Pouliot <>
* pngcodec.c: Fix codec to return UnknownImageFormat and display a
warning when loading an image with more than 32bpp. #80693.
2007-01-31 Sebastien Pouliot <>
* graphics.c: Fix bug #80680 to make MeasureString handle trailing
spaces like MS GDI+
2007-01-19 Sebastien Pouliot <>
* bitmap.c: Fix GdipLoadImageFromFile to return OutOfMemory (like MS
GDI+) when the file isn't found.
* image.c: Change GdipCreateBitmapFromFile[ICM] to still return (see
previous fix) InvalidParameter if the file isn't found (again to match
MS GDI+). Not sure why FileNotFound was defined as an error code :-|
2007-01-19 Sebastien Pouliot <>
* graphics.c: Remove extern declaration for gdip_get_cairo_filter
* image.c: Fix #77181 by using the pattern (not the surface) to get
the interpolation modes to work. Of course the modes are limited by
what's available in cairo/pixman (i.e. two modes).
* general.h: Add prototype for gdip_get_cairo_filter.
2007-01-18 Sebastien Pouliot <>
* bitmap.c: Handle the case where we're asked to create 15/16 bpp
bitmaps. In this case the returned bitmap is a 32bpp RGB (no alpha)
which, somewhat, match MS GDI+ when it loads such images.
* bmpcodec.c: Switch 15/16 bpp to 32bpp RGB (instead of 24) for the
same reasons.
2007-01-18 Sebastien Pouliot <>
* icocodec.c: Add support for 24bpp icons with the alpha 1-bit.
* image.c: GdipGetImageGraphicsContext only works for 24bpp and more.
2007-01-17 Sebastien Pouliot <>
* bmpcodec.c: Add support for loading 16bpp bitmaps (555 or 565).
Cairo deprecated CAIRO_FORMAT_RGB16_565 so we promote the bitmaps
into 24bpp RGB bitmaps.
* bmpcodec.h: Add new structures for V4 bitmap headers.
2007-01-17 Sebastien Pouliot <>
* bmpcodec.c: Avoid potential double-free if the image is invalid.
2007-01-15 Sebastien Pouliot <>
* bitmap.c: Clone the bitmap on GdipCreateBitmapFromHBITMAP too. This
ensure multiple GpBitmap objects can be created from a single HBITMAP.
* icocodec.c: Add support for 32bpp icons (aka XP icons).
2007-01-12 Sebastien Pouliot <>
* icocodec.c: Fix another endian issue and free the bitmap (not just
the palette) in case of an error.
2007-01-12 Sebastien Pouliot <>
* bitmap.c: Fix HBITMAP support in GdipCreateBitmapFromHBITMAP and
GdipCreateHBITMAPFromBitmap functions so an HBITMAP can survive the
deletion of the GpBitmap structure. Implement GdipCreateBitmapFromHICON
and GdipCreateHICONFromBitmap functions. See comments about freeing
the memory associated with HBITMAP and HICON.
* gdip.h: Add new undocumented ImageFlag to match MS results.
* icocodec.c: Fix endianess when reading the ICONDIRENTRY.
2007-01-11 Sebastien Pouliot <>
* bitmap.c: Fix GdipCreateBitmapFromScan0 to initialize the flags to 2
(HasAlpha) if the format supports alpha;
* image.c: Copy all palette (including flags and count) in function
GdipSetImagePalette. Re-adjust the size if the palette size is
different. Fix palette handling not to return errors for an unexisting
palette (but return a default empty one).
2007-01-10 Sebastien Pouliot <>
* bmpcodec.c|h: Refactor some decoding code to share with the ICON
* icocodec.c|h: Implement icon decoder, reusing some parts of the BMP
* image.c: Add ICON format support to GdipLoadImageFromDelegate_linux.
2007-01-08 Sebastien Pouliot <>
* bmpcodec.c: Add missing SigPattern and SigMask to codec;
* emfcodec.c|h: New. Plumbing to add the new EMF codec;
* gdip.h: Add SHORT type. Add new GUID for ICO, WMF and EMF codecs;
* gdipImage.h: Add include files for new codecs;
* general.c: Update call to codecs initialization;
* gifcodec.c: Add missing SigPattern and SigMask to codec;
* icocodec.c|h: New. Plumbing to add the new ICO codec;
* image.c: CHange codecs structure to allow a different number of
encoders and decoders.
* jpegcodec.c: Add missing SigPattern and SigMask to codec;
* pngcodec.c: Add missing SigPattern and SigMask to codec;
* wmfcodec.c|h: New. Plumbing to add the new WMF codec;
* Add new files for codecs;
2007-01-03 Sebastien Pouliot <>
* New. Table that contains all values of
256x256 divised by 255. This allows to avoid a division and three
multiplications for each pixel that requires alpha to be pre-multiplied
into the RGB values.
* general.c|h: Include/make available the premultiplied table.
* imageattributes.c: Use the table when applying a ColorMatrix;
* pngcodec.c: Use the table when loading PNG images with alpha. Also
ensure we're setting the alpha flag correctly for non-palette bitmaps.
Fix bug #79297 and #80366.
2007-01-02 Chris Toshok <>
* general.c (gdip_get_display_dpi): we don't want to get what the
rest of X assumes is the dpi. we want the actual dpi of the
screen, so that we can correctly map to the actual size of fonts
when the user asks for a particular size. This removes the need
for the hack of setting the SWF DefaultFont to be 8pt instead of
8.25pt to get things to line up.
2006-12-21 Sebastien Pouliot <>
* imageattributes.c: Fix bug #80323 for ColorMatrix containing alpha
values (Cairo uses pre-multiplied alpha which we weren't providing).
Improved performance by about 30% (in the supplied sample).
2006-12-16 Miguel de Icaza <>
* jpegcodec.c: Do not load exif information if there was an error
loading the file.
2006-11-10 Sebastien Pouliot <>
* general.c: Fix utf8_to_ucs2 to process all the first 65536 chars
(not just the first 4096). Patch by
* graphics.c: When measuring a string and if data is provided,
initialize data->has_hotkeys to FALSE.
2006-10-20 Sebastien Pouliot <>
* general.c: Don't delete the font cache hash table unless it was
created (which removes the glib runtime errors). This can occurs
when doing a C application using libgdiplus.
2006-10-18 Sebastien Pouliot <>
* graphics.c: In MeasureString check for bounding box height when
calculating the number of characters to be drawn.
2006-10-17 Sebastien Pouliot <>
* graphics.c: Another fix to StringAlignmentCenter when a single
character is drawn (#79685). This adjust the band-aid done for #79573
awaiting a bigger rewrite (to move alignement from drawing to measure)
2006-10-16 Sebastien Pouliot <>
* graphics.h: Define G_MAXINT32 ourselves (if undefined).
2006-10-12 Sebastien Pouliot <>
* gdip.h: Remove stuff related to string measurements.
* graphics.h: New. Add stuff specific to string measurements.
* graphics.c: Refactor the string measurement code. There are now
one (not two) methods to measure a string and one (splitted from
measure) to draw the string. Doesn't fix any bug in itself but it
already makes it much clearer what some problems are (e.g. alignment).
* Add new graphics.h file to the build.
2006-10-12 Sebastien Pouliot <>
* graphics.c: Remove parts of r60164 added for LinkLabel. It can't
work because we're loosing the start lines in the ranges. Actually we
are still duplicating some measurement code and we'll need to merge
both routine if we want accuracy.
2006-10-11 Sebastien Pouliot <>
* general.h: Add SAFE_FLOAT_TO_INT32 macro.
* graphics.c: Fix the cases where we convert an int to float (inside
System.Drawing) then reconvert this value to an integer inside
libgdiplus. Values like Int32.MaxValue would return as negative due to
overflow. Fix bug #79643.
2006-10-06 Sebastien Pouliot <>
* font.c: Always zeroize LOGFONT facename even when we error out. This
removes a lot of warnings from valgrind when running unit tests.
* graphics.c: '.' can also be used as a wrap point. Fix bug #79594.
2006-10-05 Sebastien Pouliot <>
* graphics.c: Fix StringAlignmentCenter in GdipDrawString. Half fix
(#79573) and half band-aid against possible random memory access.
2006-10-02 Sebastien Pouliot <>
* graphics-path.c: Use correct function to free memory (spotted by
* image.c: Fix compiler warning (signess);
* texturebrush.c: Fix compiler warning (undefined symbol);
2006-09-29 Sebastien Pouliot <>
* graphics-path.c: Fixed GdipReverse loop, don't reverse path types and
free the original point list being replaced.
2006-09-28 Jackson Harper <>
* jpegcodec.c: Fix signature for the #if no libjpeg block.
2006-09-28 Sebastien Pouliot <>
* graphics.c: Re-fix the wrapping case (r58401) if bug #77699 (causing
an endless loop in DrawString) to avoid memory corruption.
2006-09-22 Sebastien Pouliot <>
* graphics.c: (GdipMeasureCharacterRanges) Ensure we're always freeing
strDetails when we return. Don't return Ok unless the status is Ok.
Optimize conversions (done only if required). Handle HotKeyPrefix
2006-09-21 Sebastien Pouliot <>
* stringformat.c: Don't clone by pointer assignement (sigh). Reuse
GdipCreateStringFormat to implement GdipStringFormatGetGenericDefault
and GdipStringFormatGetGenericTypographic. Fix negative count in
GdipSetStringFormatTabStops to reset values properly.
2006-09-21 Sebastien Pouliot <>
* stringformat.c: In GdipSetStringFormatMeasurableCharacterRanges we
now check for negative rangeCount (InvalidParameter) and rangeCount
over 32 (ValueOverflow).
* texturebrush.c: Only apply the inverted texture matrix if one is set
(i.e. don't multiply by the graphic matrix). This should fix
parts of #79300 (looks right like the old patch) and the texture
sample still works correctly.
2006-09-20 Sebastien Pouliot <>
* texturebrush.c: Revert last patch as it breaks the texture sample
and didn't fix the original issue #79300.
2006-09-19 Sebastien Pouliot <>
* graphics.c: Fix parameters checking order and remove duplicates
checks in GdipMeasureCharacterRanges.
* stringformat.c: Set defaults to match MS GDI+.
2006-09-18 Sebastien Pouliot <>
* graphics.c: Avoid unit conversions, when possible, when measuring
or drawing strings. Fix both charactersFitted (not total string
length, see bug #76664) and linesFitted (floor) in MeasureOrDrawString
2006-09-16 Sebastien Pouliot <>
* pngcodec.c: Fix 24bbp saving for big endian architectures.
2006-09-15 Sebastien Pouliot <>
* bmpcodec.c: Remove non working code for big endian architectures.
* graphics.c: Fix bug #79173 (multi-line labels/DrawText) by reverting
part of r62329 for bug #78777 (MeasureCharacterRanges bug).
2006-09-15 Sebastien Pouliot <>
* pngcodec.c: Format32bppRgb is a 4bpp format.
* tiffcodec.c: Format32bppRgb is a 4bpp format.
2006-09-14 Sebastien Pouliot <>
* bitmap.c: Fix error reporting in GdipBitmapUnlockBits.
2006-09-13 Sebastien Pouliot <>
* general.h: Add/Move macros gdip_near_zero and gdip_near_one
(from matrix.h) to avoid comparison between floating points value.
* graphics.c: (make_arcs) Make sure the additional angle isn't near
zero as this will results in NaN values and break rendering (#78999)
* graphics-path.c: (append_arcs) Make sure the additional angle isn't
near zero as this will results in NaN values and break rendering
* matrix.h: Remove macros and include general.h
2006-09-12 Sebastien Pouliot <>
* general.c: Don't apply the anti-aliasing offsets if we asked Cairo
to scale it's rendering (not the best solution but better than the
current one where 0 scaled 100 times equals 50).
2006-09-08 Jonathan Gilbert <>
* bmpcodec.c: Fix the pixel format used when loading 32-bit BMP
files -- they were being loaded as Format32bppArgb, but MS's
GDIPLUS.DLL returns Format32bppRgb Bitmap objects. The alpha
data is still loaded, and work-arounds involving copying the
raw data over to another Bitmap object with the Format32bppArgb
pixel format should work here too.
2006-09-07 Chris Toshok <>
* texturebrush.c (gdip_texture_setup): remove the matrix
manipulation here. fixes 79300.
2006-08-31 Sebastien Pouliot <>
* jpegcodec.c: Avoid memory overwrite in the processing loop - this
messed up the first two lines (processed backward) of most JPEG files.
* texturebrush.c: Test application shows the rotation to be identical
between Cairo and GDI+.
2006-08-30 Sebastien Pouliot <>
* texturebrush.c: Fix image copying when only a part of the original
image is required for the brush (no cloning here).
2006-08-29 Sebastien Pouliot <>
* bitmap.c: Reintroduce WORDS_BIGENDIAN for performance reasons.
* general.c: Remove duplicate macros.
* graphics.c: Fix stupid typo in make_curve :(
2006-08-28 Sebastien Pouliot <>
* bitmap.c: Remove WORDS_BIGENDIAN block and use endian-correct macro.
* texturebrush.c: Fix three cases (CID #249-251) where we didn't free
memory correctly when a error (like an out of memory) occured.
2006-08-27 Sebastien Pouliot <>
* bitmap.c: Fix endianess issues in locked bitmap.
2006-08-25 Sebastien Pouliot <>
* gdip.h: Macro get_pixel_bgra is endian safe.
2006-08-25 Sebastien Pouliot <>
* gdi.h: Add missing GDIPCONST to both GpColorMatrix parameters for
function GdipSetImageAttributesColorMatrix;
* imageattributes.c: Fix parameter validation on function
GdipSetImageAttributesColorMatrix, as colorMatrix can only be NULL if
enableFlag is FALSE. Added TODO for unimplemented features.
2006-08-24 Sebastien Pouliot <>
* region-path-tree.c: Fix some endian bug when deserializing a tree.
* texturebrush.c: Adjust source for matrix and rectangle changes.
Ensure we're always cloning (correctly) the image (i.e. no pointer
assignment). Review parameter checks. Fix GdipGetTextureImage to
return a clone of the image. Fix some leaks detected with valgrind.
* texturebrush.h: Changed GpTexture not to require extra memory
allocations for the matrix and the rectangle (it simplifies the code
and help avoid leaks).
2006-08-24 Gonzalo Paniagua Javier <>
* dstream.c: (read_from_buffer) return the number of bytes actually
copied from the stream buffer.
2006-08-23 Sebastien Pouliot <>
* general.c: Don't manipulate individual bytes when converting ucs4 to
* graphics.c: In GdipFillRegion ensure the GpGraphics and GpImage are
correctly freed even if their allocation function didn't return Ok.
* region.c: Fix endian bug when reading region data type;
2006-08-22 Sebastien Pouliot <>
* bitmap.c: Added annotations for allocation functions.
* brush.c: Added annotations for allocation functions.
* imageattributes.c: Added annotations for allocation functions. Added
some out of memory checks.
* image.c: Added annotations for allocation functions. Fixed some
parameters checks.
* pathgradientbrush.c: Added annotations for allocation functions.
* stringformat.c: Added annotations for allocation functions.
* texturebrush.c: Added annotations for allocation functions.
2006-08-22 Sebastien Pouliot <>
* graphics-path.c: Ensure (3) that we delete a GraphicsPath even if
it's cloning failed (e.g. memory could have been allocated).
* pathgradientbrush.c: Ensure that we delete a GraphicsPath even if
it's creation failed (e.g. memory could have been allocated).
* region.c: Ensure that we delete a GraphicsPath even if it's creation
failed (e.g. memory could have been allocated).
2006-08-21 Sebastien Pouliot <>
* graphics-path.h: Export gdip_path_has_curve to avoid code
* graphics-path.c: Remove all g_return_val_if_fail. Added annotations
for allocation function.
* graphics-pathiterator.c: Simplify GdipPathIterHasCurve by reusing
code from graphics.c.
2006-08-19 Sebastien Pouliot <>
* graphics-pathiterator.c: Fix all function to deal with a NULL path
supplied when creating an iterator. Remove all g_return_val_if_fail.
Added annotations for allocation function.
2006-08-18 Sebastien Pouliot <>
* matrix.c: Fix a division by zero case when a rectangle is supplied.
2006-08-17 Sebastien Pouliot <>
* matrix.c: Remove use of g_return_val_if_fail. Added annotations for
allocation functions.
2006-08-16 Sebastien Pouliot <>
* graphics-path.c: In GdipAddPathString ensure we are freeing the font
even if the creation call status code isn't Ok.
* jpegcodec.c: Remove use of g_return_val_if_fail. Add annotations
about dead code which isn't totally dead (setjmp/goto).
* pngcodec.c: Add annotation about dead code which isn't totally dead
* tiffcodec.c: Add annotation about dead code.
2006-08-16 Peter Dennis Bartok <>
* tiffcodec.c: Fixed c+p error. Thanks to coverity for catching that
2006-08-16 Sebastien Pouliot <>
* graphics.c: Try an annotation inside a function.
* image.c: Remove use of g_return_val_if_fail.
2006-08-15 Sebastien Pouliot <>
* adjustablearrowcap.c: Remove use of g_return_val_if_fail. Added
annotation for allocation functions.
* font.c: In create_fontfamily_from_name changed default status code
to FamilyNotFound (instead of OutOfMemory). Added more checks for
OutOfMemory conditions (e.g. after calls to ucs2_to_utf8). Added
annotation for allocation functions.
* hatchbrush.c: Remove use of g_return_val_if_fail. Added annotation
for allocation functions.
* lineargradientbrush.c: Remove use of g_return_val_if_fail. Added
annotation for allocation functions.
2006-08-14 Sebastien Pouliot <>
* customlinecap.c: Remove use of g_return_val_if_fail. Added
annotation for allocation functions. Fix cloning.
* gdip.h|image.c: Fix some public API signatures (int -> UINT);
* graphics.c: Replace two forgotten g_return_val_if_fail.
* pen.c: Remove use of g_return_val_if_fail. Added annotation for
allocation functions. Fixed allocations to make sure an allocated
pen is returned only if status == Ok.
* solidbrush.c: Remove use of g_return_val_if_fail. Added annotation
for allocation functions.
2006-08-13 Sebastien Pouliot <>
* graphics.c: In GdipSetClipRect, ensure the temporary region gets
deleted even if it's creation has failed. Added annotation for
allocation functions.
* region.c: Fix annotation for GdipCreateRegion.
2006-08-13 Gonzalo Paniagua Javier <>
* dstream.[ch]: read from a stream using delegates, buffers the input
and keeps EXIF data buffer around.
* bmpcodec.[ch]: use dstream_t to take advantage of the buffering
capabilities, as this codec does a lot of small reads.
* image.c: use dstream_t for BMP and JPEG stream reading.
* jpegcodec.[ch]: use dstream. Load EXIF data if available.
* gdipImage.h: fill the gaps for PropertyTagType.
* added new files.
2006-08-12 Duncan Mak <>
* graphics.c (GdipDrawPolygon, GdipDrawClosedCurve2): Add checks
for cases when count is less than two, that's an InvalidParameter.
* graphics.c: In all cases where convert_points is used, check
that count must be greater than zero.
2006-08-11 Duncan Mak <>
* graphics.c (GdipSetTextContrast): The accepted range for
'contrast' was between 0 and 14 before. The docs on MSDN says it
should be between 0 and 12 instead.
2006-08-10 Duncan Mak <>
* graphics.c: Rewrote all NULL checks without using
2006-08-11 Sebastien Pouliot <>
* font.c: Yet another fix to gdip_logfont_from_font to match MS
behaviour more closely (and hopefully fix unit tests under Windows)
* region.c: Coverity function annotation worked (it removed a false
positive) and found more possible problems (like the unlikely case
where we return an error but did allocate memory). Added more
2006-08-10 Sebastien Pouliot <>
* region.c: Test to see if this help remove a false positive.
* graphics.c: Don't loose track of user supplied tension in function
* graphics-path.c: Fix stupid typo made after removing that
unrequired line.
2006-08-10 Sebastien Pouliot <>
* graphics-path.c: Avoid temporary memory allocation to convert int
into floats in GdipAddPathLine2I, GdipAddPathBeziersI and
GdipAddPathBeziersI functions. Remove (now) unnecessary int_to_floats
function. Replace calloc calls with GdipCalloc. Remove useless line in
* pathgradientbrush.c: Fix GdipCreatePathGradientFromPath to return
the same value as GDI+.
2006-08-10 Sebastien Pouliot <>
* graphics.c: s/CONVERTION/CONVERSION/ (alp)
* general.c: s/CONVERTION/CONVERSION/ (alp)
* image.c: s/CONVERTION/CONVERSION/ (alp)
* general.h: s/CONVERTION/CONVERSION/ (alp)
* region.c: s/CONVERTION/CONVERSION/ (alp)
* region-bitmap.c: s/CONVERTION/CONVERSION/ (alp)
* matrix.c: Changed some null checks not to print warnings during unit
* graphics-path.c: Fix GdipWidenPath to return the same value as GDI+.
Changed some null checks not to print warnings during unit tests.
2006-08-10 Sebastien Pouliot <>
* font.c: Deal with gdip_unit_conversion being a function.
* general.c: Add OPTIMIZE_CONVERTION to help avoid a floating point
division and multiplication when converting units (in the case where
source == target). Added gdip_cairo_rectangle, gdip_cairo_move_to,
gdip_cairo_line_to and gdip_cairo_curve_to to deal with the 15bits
width/height limits (more to come). Added checks for memory allocation
* general.h: New. Stop polluting gdip.h with internal macros and
* graphics.c: Use OPTIMIZE_CONVERTION before doing unit convertions.
Removed gdip_unit[x|y]_convgr and gdip_convgr_unit[x|y] functions.
They are now macros inside general.h. Changed gdip_unit_conversion to
be a function (cleaner and easier for macros). Updated all calls to
cairo_move_to, cairo_line_to, cairo_curve_to and cairo_rectangle to
use the new gdip_* functions (that deals with coordinate limits, unit
convertion and antialiasing).
* image.c: Use OPTIMIZE_CONVERTION (or similar) before doing unit
convertions. Fix typo in GdipDrawImageRectRect where srcwidth wasn't
set and destoryed the dstwidth value.
* Add general.h to the build.
2006-08-09 Sebastien Pouliot <>
* graphics.c: Added more memory allocation failure checks. Be more
careful when disposing resources inside GdipDeleteGraphics.
* graphics-path.c: Changed null check not to print warnings during
unit tests. Added more memory allocation failure checks.
* general.c: Added more memory allocation failure checks.
* font.c: Remove deadcode (CID 234) introduced by the last fix.
2006-08-08 Sebastien Pouliot <>
* region.c: Fix exclude on rectangular region to work with negative
positions (X, Y).
2006-08-07 Gonzalo Paniagua Javier <>
* image.c: don't leak file_name if we fail to open it.
2006-08-07 Sebastien Pouliot <>
* general.c: Avoid double initialization (e.g. multiple appdomains)
which would, for example, double the number of image codecs.
2006-08-05 Sebastien Pouliot <>
* graphics.c: Changed null check not to print warnings during unit
* font.c: logFont->lfCharSet is always 0 from GDI+ (but it's
returned as 1 inside System.Drawing). Fix Mono/Windows test failure.
2006-08-04 Gonzalo Paniagua Javier <>
* bitmap.c: allocate 32-bits space for 24bpp when locking as ReadOnly
or ReadWrite too.
2006-08-04 Gonzalo Paniagua Javier <>
* bitmap.c: the destination format for a 24bpp RGB image has 32 bits
2006-08-04 Sebastien Pouliot <>
* graphics-path.c: match GDI+ return value (requires fix to SD);
* pathgradientbrush.c: match GDI+ return value (requires fix to SD);
* pen.c: match GDI+ return value (requires fix to SD). Changed some
null checks not to print warnings during unit tests.
2006-08-03 Sebastien Pouliot <>
* font.c: match GDI+ return value (requires fix to SD);
* region.c: match GDI+ return value (requires fix to SD);
2006-08-03 Chris Toshok <>
* graphics.c (make_arc): this was a pain in the butt to find. fix
the weird drawing bugs we've been seeing in the ellipse code by
using fabs() instead of abs(), as the latter truncates to an int.
(make_arcs): more abs -> fabs.
(make_pie): same.
* graphics-path.c: make analogous s/abs/fabs changes here.
2006-08-03 Duncan Mak <>
* graphics.c (make_pie):
* graphics-path.c (GdipAddPathPie): Don't draw pie edges when we
will be drawing an ellipse (i.e. when sweepAngle >= 360).
2006-08-01 Sebastien Pouliot <>
* tiffcodec.c: Fix typo to cause crashes when a tiff file has
properties (#78886). Fix a leak by calling TIFFRGBAImageEnd.
2006-07-31 Peter Dennis Bartok <>
* gifcodec.c (gdip_save_gif_image): Remove unneeded line causing
buffer overflow.
2006-07-24 Alexander Olk <>
* graphics.c: Don't SIGSEGV when making polygons. The last point
in the array is count-1 not count.
2006-07-21 Chris Toshok <>
* image.c: include cairo-features.h so CAIRO_HAS_PS_SURFACE will
be defined if we have it.
2006-07-07 Sebastien Pouliot <>
* gifcodec.c: Return a GenericError in gdip_save_gif_image if the
pixel_format isn't a know value. This makes sure cmap_size is always
initialized (before being used).
* region-bitmap.c: Don't show up a warning if we're cloning a region
containing an empty graphicpath (as it is normal that no bitmap would
be required);
* tiffcodec.c: Make sure we don't dereference a NULL pointer inside
gdip_load_tiff_image (and properly return OutOfMemory).
2006-07-06 Chris Toshok <>
* graphics.c (CalculateStringWidths): don't do the cairo call if
we're dealing with a \n, as cairo says its extent is 7 pixels
(MeasureOrDrawString): add LineHeight to CursorY on a NEWLINE, not
LineHeight * LineFeeds.
(MeasureString): same.
(GdipMeasureCharacterRanges): don't add strDetail[j].X/Y twice
when creating the charRect.
2006-07-06 Sebastien Pouliot <>
* brush.c: Remove empty and unused gdip_brush_destroy;
* image.c: Add missing calls to cairo_pattern_destroy when a previous
call to cairo_pattern_reference is made on a pattern;
* solidbrush.c: Add missing NULL checks for GdipCreateSolidFill and
GdipGetSolidFillColor functions and remove duplicate checks for
gdip_solidfill_destroy and gdip_solidfill_clone functions.
2006-07-06 Sebastien Pouliot <>
* image.c: Add missing NULL check to GdipDisposeImage.
2006-07-04 Sebastien Pouliot <>
* pen.c: Fix #78742 where an error occurs when we use a pen's width of
0 (not a real value) with a dash style.
2006-06-29 Sebastien Pouliot <>
* region.c: Report OutOfMemory condition in GdipCloneRegion. Ensure
all memory is freed from the tree used in GdipCombineRegion* functions
and avoid some memory alloc/free when possible.
2006-06-28 Sebastien Pouliot <>
* font.c: Make sure GdipGetLogFont[A|W] always initialize the LOGFONT
structure correctly - even if it must return an error. Fix #78721.
2006-06-27 Gonzalo Paniagua Javier <>
* bitmap.c: avoid invalid read when we have a 24bpp format.
2006-06-26 Sebastien Pouliot <>
* font.c: Don't read past allocated memory.
* hatchbrush.c: Don't both add a reference when cloning and set
base.changed to TRUE (kept the latter);
* pen.c: (Again) Don't free, but delete, the brush to ensure it's own
data gets freed (e.g. the pattern for hatch brushes).
2006-06-22 Sebastien Pouliot <>
* pathgradientbrush.c: Avoid memory allocations (that were never freed
anyway) when creating path gradients. Fix valgrind detected leaks when
running unit tests.
* pen.c: Don't free, but delete, the brush to ensure it's own data
gets freed (e.g. the pattern for hatch brushes).
2006-06-15 Wade Berrier <>
* general.c: Remove dlfnc.h since it's currently not used (this was
also a deprecated api on mac 10.4)
* Remove -Werror (Originally for the above issue in general.c,
but twas decided to remove it anyway)
2006-06-12 Gonzalo Paniagua Javier <>
* bitmap.c: align the stride to pixman_bits_t in LockBits.
2006-06-08 Sebastien Pouliot <>
* graphics-path.c: Implemented GdipIsVisiblePathPoint[I] functions
(except for some cases where a GpGraphics is supplied and used).
* hatchbrush.c|h: Fix parts of #78159 where the hatches visual output
doesn't match MS. This works better with newer X version (e.g. SuSE10)
than older ones (e.g. NLD9).
2006-06-07 Sebastien Pouliot <>
* graphics-path.c|h: Implemented GdipIsOutlineVisiblePathPoint[I]
functions (except for some cases where a GpGraphics is supplied).
2006-06-06 Sebastien Pouliot <>
* graphics-path.c|h: Fix declarations (missing GpPen parameter) for
GdipIsOutlineVisiblePathPoint[I] functions.
2006-06-05 Sebastien Pouliot <>
* region.c: Fix region-region intersection with infinity (can't have
an infinite bitmap but this is identical to unioning with empty ;-)
and add some shortcuts for other special cases.
2006-06-02 Sebastien Pouliot <>
* graphics-path.c: Changed GdipWidenPath and GdipWrapPath to show a
warning and return Ok instead of NotImplemented (to avoid crash in
* region.c: Fixed clone when the region is empty. Added error checking
in GdipCombineRegionRect if path creation fails.
2006-06-01 Sebastien Pouliot <>
* general.c: FcFini was introduced in fontconfig 2.2.91 and we support
earlier versions.
2006-05-31 Sebastien Pouliot <>
* font.c: Added a cache for FcPattern to avoid calling (the very slow)
FcFontMatch over and over again when no FontCollection is supplied.
* general.c: Added code to clear and free the cache at shutdown.
* gdip.h: Added prototype for gdip_font_clear_pattern_cache.
2006-05-31 Sebastien Pouliot <>
* font.c: Added mutexes for handling the generic (reference counted)
fonts (serif, sans-serif, monospace) and when dealing the fontconfig's
FcConfig (which isn't thread-safe and fails under heavy usage in
* general.c: Added calls to fontconfig's FcInit and FcFini in
GdiplusStartup and GdiplusShutdown functions.
2006-05-30 Sebastien Pouliot <>
* font.c: Added more error checking when calling fontconfig API.
2006-05-29 Sebastien Pouliot <>
* hatchbrush.c: Ensure we're freeing everything if no more memory can
be allocated.
2006-05-26 Sebastien Pouliot <>
* font.c: (GdipCreateFontFamilyFromName) Don't free string before
calling FcPatternDestroy. This fix an occasional SIGSEGV (only seen
under XSP2).
2006-05-25 Sebastien Pouliot <>
* graphics.c: Implemented GdipSetClipHrgn before finding out (at test
time that it's not exposed thru System.Drawing.dll).
* region.c: Implement GdipGetRegionHRgn and GdipCreateRegionHrgn. This
fix a possible double dispose in S.D.
2006-05-24 Gonzalo Paniagua Javier <>
* image.c:
* bitmap.c:
* gdip.h: added MEMBMP, its GUID and the mapping from that in-memory
format to file type when saving. This changes the default bitmap
RawFormat to MemoryBmp and its default file format to PNG.
2006-05-24 Sebastien Pouliot <>
* graphics.c: Remove some warning display from S.D. unit tests.
* lineargradientbrush.c: Remove some warning display from S.D. unit
2006-05-24 Sebastien Pouliot <>
* hatchbrush.c|h: Large patch to reduce code duplication and add
missing (and fix bad) error checking. *No* visual changes (or fixes)
in the hatch output (yet) and valgrinded.
2006-05-24 Sebastien Pouliot <>
* bitmap.c: Zeroize allocated bitmap memory. Fix #78478
* brush.c: Make sure we check for NULL before using any pointer.
* pen.c: Clone the supplied brush in the GdipCreatePen2 function (as
the user may dispose of it anytime).
2006-05-23 Gonzalo Paniagua Javier <>
* gifcodec.c: support 'combine' animated gifs and top/left positioning
of frames. Last part of the fixes for bug #77247.
2006-05-23 Jordi Mas i Hernandez <>
* font.c: removes libgdiplus dependency against Cairo
_cairo_toy_font_face_create API function. Change to make
Cairo 1.2 linkable with libgdiplus.
2006-05-22 Gonzalo Paniagua Javier <>
* gifcodec.c: null terminate the byte array passed to
gdip_bitmapdata_property_add_ASCII to avoid an invalid memory read.
2006-05-21 Sebastien Pouliot <>
* hatchbrush.c: Check all pointers for NULL.
2006-05-19 Gonzalo Paniagua Javier <>
* bmpcodec.c: fix bfSize for 24bpp.
2006-05-19 Gonzalo Paniagua Javier <>
* bmpcodec.c: now we're able to roundtrip a 24bpp bmp file. Don't create
the cairo surface when loading the image. Remove unused (obsolete?)
2006-05-19 Gonzalo Paniagua Javier <>
* bitmap.c: don't leak the allocated 'scan0' when converting indexed
to RGB.
2006-05-18 Gonzalo Paniagua Javier <>
* bmpcodec.c: don't change the PixelFormat to 32bpp when it's a 24bpp.
* image.c: 24bpp bitmaps are 4-bytes (cairo dixit).
Fixes the 24bpp test again.
2006-05-17 Gonzalo Paniagua Javier <>
* bitmap.c: speed up the 8bppIndexed -> 32bpp conversion.
2006-05-17 Sebastien Pouliot <>
* gdip.h: Added GpDashCap dash_cap to GpPen. It's not used (visually)
but this way we can keep track of it (unit tests).
* pen.c: Multiple fixes to match new unit tests:
- fix DashStyleCustom style to use the current DashPattern (no reset);
- don't accept non-invertible matrices in GdipMultiplyPenTransform and
- set the minimum miter limit to 1.0 in GdipSetPenMiterLimit (whatever
the value supplied);
- fix some error conditions to return the correct error code and also
track some unimplemented stuff (rather than throwing);
2006-05-15 Sebastien Pouliot <>
* pen.c: Added an hack to keep the "bad" behaviour in the most common
MWF usage (i.e. where the badness isn't visible).
2006-05-15 Sebastien Pouliot <>
* pen.c: Revert the change from r52463. This looks better only when
the pen's width is 1 (but looks worse in other cases). This fix both
bug #77976 (dash style) and #78059 (double pixel). Also remove a FIXME
which is no more required with this fix.
2006-05-12 Sebastien Pouliot <>
* image.c: (GdipSaveImageToFile) don't access image->type before the
NULL check for image. (GdipLoadImageFromDelegate_linux,
GdipLoadImageFromFile) ensure result isn't NULL before using it.
* graphics-path.c: Fix misnamed GdipAdd*Path*String[I] API (#78383)
* region.c: Fixed the case where an infinite region was unioned with
a rectangle (and didn't result in infinity).
2006-05-12 Peter Dennis Bartok <>
* graphics.c (MeasureOrDrawString): Only make every character a
wrappoint if we're single-line and have char trimming (#78336)
2006-05-12 Peter Dennis Bartok <>
* region.c (gdip_combine_union): Hack to allow adding rectangles
with negative x/y coordinates. This method should probably
be reworked properly, not assuming negative values have a
special meaning.
2006-05-12 Sebastien Pouliot <>
* bitmap.c: (GdipCreateBitmapFromScan0) make sure we're not gonna use
the default_palette if NULL. (GdipBitmapLockBits) don't use srcRect
pointer before it's NULL check. (gdip_propertyitems_clone) free result
before returning OutOfMemory. (GdipCloneBitmapAreaI) add missing call
to gdip_bitmap_dispose in fail.
* gdip.h: Change GpPen.matrix to cairo_matrix_t (to avoid unrequired
* graphics-path.c: (GdipGetPathWorldBounds) free workpath in the
special case where weonly have a single element after flattening.
(GdipAddString) added checks for invalid font and NULL layoutRect.
(gdip_convert_bezier_to_lines) removed impossible special case.
* lineargradientbrush.c: Ensure we always free the structures we
allocated in case we hit an error.
* pathgradientbrush.c: Ensure we always free the structures we
allocated in case we hit an error.
* pen.c: Updated code to avoid multiple dynamic creation and deletion
of GpMatrix.
* region.c: (GdipCreateRegionRgnData) make sure we free the GpRegion
in all error cases. (gdip_combine_complement) avoid possible double
* stringformat.c: (GdipGetStringFormatTabStops) don't use the format
pointer before it's NULL check.
2006-05-11 Sebastien Pouliot <>
* graphics.c: (GdipCreateFromHDC) check for memory allocation failure
before using the pointer. (GdipSetClipGraphics) honor the combineMode
parameter (in this case by reusing the GdipSetClipRegion function).
* graphics-path.c: (GdipAddString) it is possible that some memory is
allocated by cairo even if the *_create call fails - so we must call
the corresponding *_destroy function on failure to create.
* matrix.c: (GdipCreateMatrix3) Ensure we call GdipFree in case of an
error (where we do not return the allocated matrix).
2006-05-10 Sebastien Pouliot <>
* pathgradientbrush.c: Sadly Cairo doesn't support path-based
gradients. Added support for a special case where we can use cairo's
radial gradient. Otherwise we continue to fill using the center color.
2006-05-09 Sebastien Pouliot <>
* pathgradientbrush.c: Apply tricks, knowledge and unit tests from
lineargradientbrush as a starting point (i.e. it doesn't fix anything
visually but I like those foundations better ;-)
* pathgradientbrush.h: Change transform and rectangle not to require
extra memory allocations (always allocated, static size).
2006-05-08 Sebastien Pouliot <>
* graphics-path.c: Added pen support to GdipGetPathWorldBounds as the
result doesn't have to be very precise (see test cases). Fixed
GdipWidenPath to return OutOfMemory if the supplied path as a single
point (seems to be a bug, reported as FDBK49685). Fixed GdipWarpPath
to reset (empty) the path in the same case (again to match MS);
2006-05-05 Sebastien Pouliot <>
* lineargradientbrush.c: Changed atanf for atan (for older SunOS);
* graphics-path.c: Changed GdipGetPathWorldBounds to get better
results when curves are used (much better than MS GDI+). Reduced
memory allocations. Pen support is still missing.
2006-05-04 Sebastien Pouliot <>
* graphics.c: Fix the default (parameter-less) BeginContainer by
introducing a previous_matrix inside GpGraphics. Keeping the effective
matrix from the previous container (or the original graphics) allow us
to substract it when a call to GdipGetWorldTransform is made.
2006-05-04 Sebastien Pouliot <>
* graphics.c: Removed the reset on the matrix when begining a new
container (this is half-right, but better vistually than the current
reset). Added a FIXME in GdipGetWorldTransform as it won't return the
correct results inside a container. Added MonoTODO to Gdip[Get|Set]
PixelOffsetMode as we do not use the value inside libgdiplus (and
changing it should affect other values).
* region.c: Fixed bug #78284 when doing a transform on an empty
region. Also ensure we convert empty region as the some structures
are assumed to be allocated after the conversion.
* region-bitmap.c: Allow region bitmaps with 0 width and/or height
as this is a valid case (i.e. they aren't too big to render ;-).
2006-05-03 Sebastien Pouliot <>
* lineargradientbrush.c: Applied patch for #78185 from Bill Holmes
to add support for scalable angle. Changed a bit to use the new
matrix function.
* matrix.c|h: Added a new function to avoid code duplication when
creating a matrix from a rectangle and 3 points.
2006-05-02 Peter Dennis Bartok <>
* bitmap.cs: Only mark the bitmap as own if we actually allocated it
(fixes crash exposed by pdn)
2006-05-02 Sebastien Pouliot <>
* gdip.h: Changed GpGraphicsContainer to uint (so it match how we are
using the Save/Restore functions). Added text_contrast to GpState and
GpGraphics (even if it's not really used ATM). Added missing
prototypes for GdipBeginContainer[2][I] functions.
* graphics.c: Implemented GdipBeginContainer2 and GdipEndContainer
functions. Added partial implementation for GdipBeginContainer2 and
GdipBeginContainerI as they don't support the extra parameters
(rectangle and units). Added the code to set/get text contrast with
Gdip[Get|Set]TextContrast to help the unit test (but it's not being
"visually" used).
2006-05-01 Peter Dennis Bartok <>
* graphics.c (GdipMeasureCharacterRanges): Now considers string
alignment (which is needed for properly aligned LinkLabels)
2006-05-01 Peter Dennis Bartok <>
* bitmap.c (gdip_pixel_stream_set_next): Fixed wrong shifting.
2006-05-01 Gonzalo Paniagua Javier <>
* pngcodec.c: don't loop forever on truncated images. Fixes bug #78213.
Patch by Pavel Sakowski.
2006-05-01 Sebastien Pouliot <>
* graphics.c: Updated and completed Duncan's patch for #76907. We now
support the offset and numOfSegments parameters of GdipAddPathCurve3.
2006-05-01 Sebastien Pouliot <>
* graphics.c: Updated and completed Duncan's patch for #76907. We now
support the offset and numOfSegments parameters of GdipDrawCurve3.
* lineargradientbrush.c: Applied patch for #78179 from Bill Holmes
which fixes gradients created using 2 points (and not a rectangle).
Also removed two (now) unused functions in the source code.
2006-04-30 Peter Dennis Bartok <>
* image.c: If an attribute changes scan0, it will (now) also change
the pixel_format. Save the original so we can properly restore
when done.
* imageattributes.c: Set the pixel_format of our work-bitmap to
32bppArgb (since most our methods need alpha and the provided
format might not have alpha)
2006-04-30 Peter Dennis Bartok <>
* pngcodec.c: Make sure the alpha bit makes it over to the bitmapdata
2006-04-30 Peter Dennis Bartok <>
* pngcodec.c: We were handling transparency wrong. The transtable
runs alongside the palette (but possibly shorter), providing
the alpha value for the corresponding palette entry
2006-04-29 Peter Dennis Bartok <>
* pngcodec.c: Added reading of select png properties. I might have
missed some additional we can support, but for the images I had for
testing we return all the same properties as MS. Still need to
add saving so we can roundtrip. This replaces the previous hack
* bitmap.c (gdip_bitmapdata_property_add_short): Fixed to match
other xxx_add_xxx methods, removed length and pointer requirement
* gdip.h: Updated prototype
* tiffcodec:
- Fixed whitepoint reading; we were only readying X
- Fixed storage type and size for TransferFunction
2006-04-29 Peter Dennis Bartok <>
* pngcodec.c: Returning fake comment (for pdn) until we read
real properties in png
2006-04-29 Peter Dennis Bartok <>
* bitmap.c (gdip_pixel_stream_set_next): The previous 24bit patch
ignored that for 32bit copies we need to fill 4 bytes and the first
is not blue, but the alpha value, everything is shifted one byte.
2006-04-29 Peter Dennis Bartok <>
* tiffcodec.c: Added a workaround for a broken TIFF I've encountered
(winforms/img/multipage.tif) to prevent us from crashing
2006-04-29 Peter Dennis Bartok <>
* gifcodec.c: Comments are not null-terminated, we need
to copy the string into a buffer with a null terminator before
storing them in our properties (Fixes #78181)
2006-04-29 Sebastien Pouliot <>
* font.c: gdip_cairo_ft_font_lock_face can return NULL is some cases,
like when the file fonts.conf is missing. We now check for the NULL
value eveywhere the lock is used and issue a warning (console) about
the failure. Fix bug #78237.
* graphics.c: Check for NULL from gdip_cairo_ft_font_lock_face.
2006-04-27 Sebastien Pouliot <>
* graphics.c: Added MonoTODO because we're not using the
numberOfSegments parameter in GdipDrawCurve3[I] functions.
* graphics-path.c: Fixed AddPathCurve* functions to deal (in some
cases) with curve specified with two points (with strangely not the
same behaviour as DrawCurve). Added more checks for memory allocation
failures. Added MonoTODO because we're not using the numberOfSegments
parameter in GdipAddPathCurve3[I] functions.
2006-04-27 Sebastien Pouliot <>
* graphics.c: Add missing checks in GdipDrawCurve3. Also add a corner
case where GdipDrawCurve[2][I] (but not GdipDrawCurve3) functions
allows to draw lines (curves with two points).
2006-04-27 Peter Dennis Bartok <>
* pngcodec.c, bmpcodec.c: Missed a few vars in BIG_ENDIAN codepath
when doing the image rewrite
2006-04-27 Sebastien Pouliot <>
* gdip.h, graphics.c: Fix prototypes for GdipDrawCurve3 and
GdipDrawCurve3I functions (float to int). The System.Drawing wrappers
are correct. This is the first part of Duncan's patch for #76907.
2006-04-27 Sebastien Pouliot <>
* graphics-path.h: Add prototypes for GdipAddString and GdipAddStringI
* graphics-path.c: Add a basic implementation for GdipAddString[I]
which use the path Cairo builds to get the font path outlines. Some
options aren't yet supported (e.g. StringFormat) and would require
some refactoring of the DrawString code.
2006-04-26 Sebastien Pouliot <>
* image.c: GdipLoadImageFromFile returns OutOfMemory when a file
format is unkown (like a text file, an EXE...). This makes S.D.
throw an OutOfMemoryException (which is MS compatible).
2006-04-26 Sebastien Pouliot <>
* image.c: Patch by Bill Holmes to fix bug #75063. This correctly
implement all cases (including rotation) when points are given as
positions to draw an image.
2006-04-26 Gonzalo Paniagua Javier <>
* bmpcodec.c: for 32bpp on little endian platforms, we can use memcpy
* bitmap.c: special case for 24bppRgb in LockBits, as
gdip_get_pixel_format_bpp returns 32bpp for it. Fixes bug #76193.
2006-04-26 Sebastien Pouliot <>
* lineargradientbrush.c: Fix some angles that were still in degrees
(when converted from LinearGradientMode).
2006-04-26 Sebastien Pouliot <>
* lineargradientbrush.c: Applied patch for #78185 from Bill Holmes
( This implements correctly the FlipX, FlipY
and FlipXY modes and removes an incorrect check in
2006-04-24 Sebastien Pouliot <>
* lineargradientbrush.c: Second patch from Bill Holmes (and friends)
which redo my complex matrix setup into a simpler one with much better
2006-04-24 Sebastien Pouliot <>
* lineargradientbrush.c: Avoid the unrequired allocations for the
rectangle and the matrix. Avoid multiple convertion of the angle from
degrees to radians. Fix angle calculation when the gradient is built
from two points.
2006-04-24 Sebastien Pouliot <>
* lineargradientbrush.c: Gradients are now much better looking using
a patch from Bill Holmes.
2006-04-22 Alexander Olk <>
* image.c: Fixed build for warning: control reaches end of non-void
function in GdipGetPropertyIdList
2006-04-21 Peter Dennis Bartok <>
* bitmap.c (gdip_bitmap_clone_data_rect): Now calculating the size of
the new bitmap based on source parameters if the new bitmap is
just being created. This fixes the failing Bitmap.Clone() unit test.
2006-04-21 Peter Dennis Bartok <>
* image.c: Implemented GetPropertyIdList
2006-04-21 Sebastien Pouliot <>
* graphics.c: Fixes to clipping when resetting (resets the clipping
matrix) and when setting the matrix (to apply inverted matrix).
* gdip.h: Added missing prototypes for clipping.
2006-04-21 Alexander Olk <>
* tiffcodec.c: Fixed the build for "older" gcc versions. They don't
like uint32 pointers when they expect guint32 pointers in
2006-04-21 Gonzalo Paniagua Javier <>
* imageattributes.c: don't apply the color matrix to transparent pixels.
Now the disabled toolbar buttons in sharpchess are displayed correctly.
2006-04-20 Peter Dennis Bartok <>
* tiffcodec.c: Cleaned up unused stuff
2006-04-20 Peter Dennis Bartok <>
* tiffcodec.c:
- Added reading and setting of dpi when loading image
- Now distinguishes between images with or without alpha and sets
the appropriate image flags when loading tiff images
- Added ability to save images as RGB instead of ARGB if the flags
indicate it's ok to do so
- Added saving of properties associated with each picture (we now
successfully roundrip images)
- Setting the TIFF Error and Warning handler to NULL to suppress
error and warning output on the console
* gdip.h: Added prototypes for property getters
* bitmap.c: Implemented property getter helper methods to allow
codecs to easily translate saved properties for saving
2006-04-20 Peter Dennis Bartok <>
* tiffcodec.c:
- Switched from passing the file pointer to passing the
filename for saving. Apparently when a FILE is fdreopen()ed
it doesn't seek properly anymore, and we need the ability to
seek when saving multi-file images
- Moved page counter inside page loop
- Added definition for the private Exif IFD tag (for those using
older versions of TIFFLIB)
* image.c: We no longer pass a file pointer for saving TIFF files,
instead we pass the target filename
* tiffcodec.h: Changed prototype to match tiffcodec.c
2006-04-20 Peter Dennis Bartok <>
* gdipImage.h: Fixed typo in tag name
* tiffcodec.c: Implemented reading of TIFF tags and translating
them into properties.
2006-04-20 Sebastien Pouliot <>
* lineargradientbrush.h: Added DEFAULT_GRADIENT_ANGLE constant.
* lineargradientbrush.c: Simplify brush creation and fixed initial
matrix calculations. Fixed matrix operations functions. Don't create
an extra surface in create_tile_linear (other wrap mode still need to
be updated). This is "closer" to the real thing (much better results
in ZedGraph) but there are still issue mainly with rotations.
2006-04-20 Peter Dennis Bartok <>
* gifcodec.c: Loader is now alpha/transparency aware and always sets
up the palette with alpha set. If transparent color is specified,
the the matching palette entry alpha is set to zero.
* bitmap.c (gdip_bitmap_indexed_to_rgb): Now properly handles palettes
with alpha values.
2006-04-20 Peter Dennis Bartok <>
* gdip.h: Added transparent tracking field to BitmapData
* bitmap.c: Added copying new transparent field to bitmap cloning
* gifcodec.c:
- Now reads transparency color from ext block and stores in BitmapData
- Now writes transparency, loop, delay and comment properties
back out when saving. We can now roundtrip our gif properties
2006-04-20 Peter Dennis Bartok <>
* image.c: Implemented all GdipGetProperty, GdipSetProperty and
GdipRemoveProperty functions.
* gdipImage.h:
- Added PropertyTag and PropertyTagType enums
- Fixed wrong GdipGetPropertyItem prototype
* bitmap.c:
- Implemented gdip_bitmapdata_property_xxx helper methods for
manipulating property data associated with a bitmap
- gdip_bitmapdata_clone now sets appropriate image_flags
* gdip.h: Added prototypes for new functions in bitmap.c
* gifcodec.c:
- Added GGifSlurpMono, AddExtensionBlockMono and FreeExtensionMono
functions derived from libgif, to work around libgif bug that
prevents us from retrieving any extensions after the last image
block (where it seems certain apps place their comments)
- Added handling of trailing extension block, adding comments in
that block will cause all images in the frame to have the
- Added reading of LoopCounter, and subsequent storing as property
- Horizontal and vertical DPI are now retrieved from display
2006-04-20 Peter Dennis Bartok <>
* bmpcodec.c, general.c, image.c, jpegcodec.c, tiffcodec.c,
imageattributes.c, gdipImage.h, region-bitmap.c, gifcodec.c,
texturebrush.c, pngcodec.c, gdip.h:
- Changed BitmapData, FrameData, GpImage and GpBitmap structures
to more accurately reflect gdiplus behaviour; removed broken
dual frame and single bitmap concept, instead everything is
organized into frames, with an active bitmap designating the
currently used bitmap.
- Added property components to BitmapData to allow implementing
properties per bitmap
- Updated all image related code to use new structures
- Lots of added sanity checks and logic bug fixes
- Fixed up sources to use tabs instead of spaces (png, jpeg) and
removed buttloads of trailing whitespace on lines in all files
- Rewrote gif load and save methods to properly deal with animation,
transparency and reading/storing animation delay times
- Streamlined many functions, removed deep nesting, introduced
single point of error handling for each encoder and decoder
- Now allows for disparate sizes of bitmaps in a single frame
- Implemented ImageLockModeUserInputBuf for GdipBitmapLockBits and
several other unimplemented features
2006-04-19 Gonzalo Paniagua Javier <>
* bmpcodec.c: fixed same error that Peter fixed in his last commit, but
different place.
2006-04-19 Sebastien Pouliot <>
* graphics-path.c: Avoid, when possible (i.e. null/identity), matrix
calculations in GdipTransformPath (which gets inherited by every call
using it). Also added a OutOfMemory check in GdipTransformPath if
points can't be allocated. Added common path preparation (flattening
and/or matrix) to GdipWindingModeOutline, GdipWidenPath and
2006-04-19 Peter Dennis Bartok <>
* bmpcodec.c: Fixed common math error when adding values to
pointers. Was causing nasty memory overwrites when saving bmps.
2006-04-18 Peter Dennis Bartok <>
* general.cs (MeasureOrDrawString): Remove padding from bounding
rectangle calculations. It is causing issues with AutoHeight
controls not matching MS
2006-04-18 Sebastien Pouliot <>
* gdip.h: Add prototype for gdip_get_pattern_status function.
* general.c: Added a new function to check the status of a cairo
pattern (check for NULL isn't enough). If invalid the pattern will
be destroyed.
2006-04-13 Sebastien Pouliot <>
* font.c: Keep a static collection for the system font that will be
leaked (on purpose, see comments). Added missing initialization
(allocation) and nullification (freeing) to avoid using bad references
(which also helps to get better results from valgrind). Reworked
GdipPrivateAddMemoryFont to return the error codes leading to the
expected exceptions in the System.Drawing.dll unit tests.
2006-04-13 Sebastien Pouliot <>
* matrix.c|h: Fix public API signatures to use BOOL (not int).
* region.c: Give a better chance to revert to a simpler (rectangular)
region in GdipCombineRegionRect.
2006-04-11 Gonzalo Paniagua Javier <>
* pngcodec.c: don't use any filter (makes the saved image smaller) and
generate sRGB,gAMA and cHRM information as MS does.
2006-04-11 Gonzalo Paniagua Javier <>
* pngcodec.c: no need for gdip_stream_png_source, just pass the function
2006-04-11 Sebastien Pouliot <>
* graphics.c: Fixed bug #77129 where we shouldn't draw (or fill)
rectangle(s) with either a negative width or height.
2006-04-10 Sebastien Pouliot <>
* matrix.c: Fixed misimplemented GdipCreateMatrix3[I]. Reworked
allocations to report OutOfMemory conditions.
2006-04-07 Sebastien Pouliot <>
* region-bitmap.c: Changed free for GdipFree. Removed unused variable.
2006-04-03 Gonzalo Paniagua Javier <>
* imageattributes.c:
(gdip_process_bitmap_attributes): the default fallback condition was
wrong and caused the function to not process or incorrectly process the
attributes, as it either used the default attributes or did nothing on
the bitmap. It works now (tested with BitMap.MakeTransparent() and using
"imageAttr.SetColorKey (color, color, ColorAdjustType.Bitmap);").
2006-04-03 Gonzalo Paniagua Javier <>
* bmpcodec.c: fix offset when saving to a file and speed up writing
the palette (15% faster saving).
2006-03-31 Peter Dennis Bartok <>
* graphics.c:
- Removed reset of clip_matrix whenever the clip is reset, since
the matrix still would apply were another clip rectangle set
- Fixed signature of several methods from UINT to int, to match
MS signature. Fixes TextBox not displaying the first char
2006-03-31 Sebastien Pouliot <>
* graphics-path.c: Don't read past the end of the allocated points
2006-03-30 Sebastien Pouliot <>
* graphics.c: Check that the matrix is invertible in function
GdipMultiplyWorldTransform. Fix typo for return value in function
* lineargradientbrush.c: Avoid memory allocation for GpRectF in
function GdipCreateLineBrushFromRectI. Reduce the number of calls
between GdipCreateLineBrush* functions.
2006-03-30 Sebastien Pouliot <>
* lineargradientbrush.c: Fixed cloning (points and count). Added
better error handling for cairo_pattern_create_linear. Check that the
matrix is invertible in GdipSetLineTransform.
* matrix.c: Matrix identity isn't an equality test and accept a margin
for errors/precision.
2006-03-29 Sebastien Pouliot <>
* graphics-path.c: Ensure we start/close figures correctly in every
GdipAddPath* functions. Unit tests confirms the new behaviours.
2006-03-28 Peter Dennis Bartok <>
* graphics.c (GdipSetPageUnit): We should be able to set all
units. Not sure why that code was there. (Fixes #77829)
2006-03-28 Sebastien Pouliot <>
* gdip.h: Added new member clip_matrix for GpState;
* graphics.c: Add the clipping matrix to the information saved by
GdipSaveGraphics and restored by GdipRestoreGraphics.
2006-03-27 Sebastien Pouliot <>
* gifcodec.c: Added missing DGifCloseFile to reclaim memory.
2006-03-27 Sebastien Pouliot <>
* gdip.h: Added new member clip_matrix for GpGraphics;
* graphics.c: Make sure the applied transforms to the graphics are
also affecting the clipping;
* matrix.h: New macro to reverse the order to apply the matrix;
2006-03-27 Sebastien Pouliot <>
* matrix.c: GdipIsMatrixInvertible shouldn't invert the matrix!
2006-03-26 Sebastien Pouliot <>
* graphics.c: Add support for complex (after binary operations)
clipping paths. Hackish but I don't see any alternative...
* matrix.h: New. Header file for private region functions.
* matrix.c: Added private functions for gdip_is_matrix_empty (moved
from region.c) and gdip_is_matrix_a_translation (to enable an
* region.c: Adjusted code for the renamed gdip_is_matrix_empty. Added
a optimization to call GdipTranslateRegion from GdipTransformRegion if
the matrix only does a translation. This allows to skip "rectangle to
path" convertion and the invalidation/creation of a region bitmap.
* Added the new matrix.h header file to the build.
2006-03-25 Sebastien Pouliot <>
* gdip.h: Add missing prototypes for GdipTranslateClip[I] functions.
* graphics.c: Adjust anti-aliasing so that graphics can draw thin
lines in SmoothingModeAntiAlias and SmoothingModeHighQuality modes
(thanks to Peter Bartok).
* graphics-path.c: Fix GdipTransformPath when the path is empty (to
return Ok, not an error).
2006-03-25 Sebastien Pouliot <>
* gdip.h: Added new structures required for path tree (GpPathTree) and
regions bitmaps (GpRegionBitmap).
* gdipImage.h: Added prototype for GdipGetImageGraphicsContext.
* graphics.c: Re-implement GdipFillRegion to use the alpha bitmap
provided for by region-bitmap. Correct clipping wrt infinite regions.
* region.c: Adjust existing API to use the bitmap regions for path
based regions, while keeping the existing code for rectangular based
* region.h: New. Header file for private region functions.
* region-bitmap.c|h: New. Code to generate bitmap for regions and the
binary operators on them (union, intersection, exclude, complement,
* region-path-tree.c|h: New. Code to create and manipulate trees of
path with binary operators. This allows to re-create any region from
a small set of serialized data.
* Add the new files to the build.
2006-03-23 Peter Dennis Bartok <>
* graphics.c (MeasureOrDrawString): Avoid trying to draw 0-length
lines (fixes #77699)
2006-03-23 Sebastien Pouliot <>
* lineargradientbrush.c: Set the count value when cloning and Free the
matrix when destroying the brush.
2006-03-23 Sebastien Pouliot <>
* lineargradientbrush.c: Don't lose the original context 'ct' when
flipping and free the new context. Remove obsoleted comments.
2006-03-22 Peter Dennis Bartok <>
* font.c:
- GdipDeletePrivateFontCollection: No longer free's the passed
variable but instead the memory the passed var points to, since
that's what's been allocated. Sigh.
- GdipDeletePrivateFontCollection: Only destroy the FcFontSet and
FcConfig if we have one allocated.
- GdipDeleteFontFamily: Only free the pattern if it's actually
been allocated.
- GdipGetFontCollectionFamilyList: Where do I begin? It was very
much broken and memory was not handled right, with bad overwrites.
It now properly writes the font families to the pointers it's
supposed to. Got a bit simpler in the process.
2006-03-22 Peter Dennis Bartok <>
* image.c:
- GdipDrawImageRect: Dropping the save/restore and putting
in the proper fix for Digger and other apps not drawing properly
after drawing an image.
- GdipDrawImagePoints: Saving/Restoring the original source pattern
2006-03-22 Peter Dennis Bartok <>
* image.c (GdipDrawImageRectRect): We're now properly saving and
restoring the original source pattern (fixes #77438)
* imageattributes.c: Setting copied pointer to null to avoid
double usage
2006-03-22 Peter Dennis Bartok <>
* image.c:
- GdipDisposeImage: Single-frame images will have the
frameDimensionList[].frames pointer point to the image's BitmapData
block. We now consider that fact and free the image BitmapData only
if it wasn't also part of the frames list (and was free'd there)
- Removed a useless call to cairo that caused a leak but had no
effect on rendering
* bitmap.c:
- gdip_bitmap_clone: Resetting all pointers to null after copying
BitmapData. Otherwise the surface will get used without proper
refcounting, and we would illegally free the memory off the wrong
- GdipCloneBitmapAreaI: Eliminated intermediate stack var and memcpy
- GdipCreateBitmapFromHBITMAP: Cloning the whole image instead of
just the bitmap part. That way we also get the palette, etc.
2006-03-22 Sebastien Pouliot <>
* lineargradientbrush.c: Don't needlessly allocate GpPointF structures
in GdipCreateLineBrushI. Fix pointers when accesing a brush matrix in
GdipGetLineTransform and GdipSetLineTransform. Fix error handling in
GdipMultiplyLineTransform (to match GDI+).
2006-03-21 Sebastien Pouliot <>
* imageattributes.c: Allocate enough memory before copying GpColorMap
in GdipSetImageAttributesRemapTable. Also handle mapSize ==0 case and
OutOfMemory condition.
* region.c: Calling gdip_add_rect_to_array reallocate the array so we
must update the recttrg variable.
2006-03-21 Sebastien Pouliot <>
* texturebrush.c: Don't keep a reference to the "image" (but Clone) in
GdipCreateTexture (we're not the owner of it). Fixed all the _flip
functions that were broken (since the cairo 1.0 update ?).
* image.c: Add a comment for a leak (it leak for texture clones but
crash elsewhere if freed).
2006-03-20 Peter Dennis Bartok <>
* font.c (gdip_cairo_ft_font_lock_face): Initialize the matrix to
avoid using uninitialized memory in cairo
2006-03-20 Sebastien Pouliot <>
* texturebrush.c: Ensure we destroy the matrix and the surface when
disposing the brush. Add a reference to the surface when cloning.
2006-03-20 Sebastien Pouliot <>
* font.c: Re-work font locking not to leak memory (and not to create
a scaled font when unlocking).
* graphics.c: Use CleanString (as String has been freed).
2006-03-20 Sebastien Pouliot <>
* graphics.c: Clear the clipping region before data copying into it.
* region.c: Remove static from gdip_clear_region as we need it in
graphics.c for clipping.
2006-03-20 Sebastien Pouliot <>
* image.c: Free the filter in GdipGetImageGraphicsContext.
* pen.c: Use the GDI+ call to create the matrix (GdipCreateMatrix).
Delete the default (empty) matrix when cloning a pen. Delete the
matrix when disposing of the pen.
2006-03-19 Sebastien Pouliot <>
* lineargradientbrush.c: The GpRect structure was never freed in
GdipCreateLineBrushFromRectWithAngleI. Now allocated on the stack.
Temporary matrixes weren't freed in gdip_linear_gradient_setup and
create_tile_linear functions.
* image.c: Reordered code to avoid using memory we just freed in
2006-03-18 Sebastien Pouliot <>
* image.c: Free the image palette on dispose. Also copy (not refer)
the palette when cloning the image (so we don't double-free it).
2006-03-17 Sebastien Pouliot <>
* general.c: Call XCloseDisplay after we convert the DPI string as we
do not own the 'val' pointer.
* image.c: Destroy (cairo_pattern_destroy) the pattern we use as a
filter in GdipDrawImageRectRect.
2006-03-16 Sebastien Pouliot <>
* pen.c: Delete the temporary matrix created during gdip_pen_setup.
2006-03-14 Sebastien Pouliot <>
* matrix.c: Add missing validations on count parameters. Fix return
value for an invalid GpMatrixOrder in GdipMultiplyMatrix.
2006-03-14 Peter Dennis Bartok <>
* image.c (DrawImageRect): Added a cairo_save/cairo_restore to
fix the issue exposed by Digger (title score board background
not drawn when doing the FillRectangle)
2006-03-13 Sebastien Pouliot <>
* graphics-path.c: Add missing checks for markers. This fixes some
issues (e.g. accesing item -1) and also reduce memory allocations for
empty paths. Return Ok and display a warning when GdipAddString[I] is
called (instead of returning NotImplemented).
2006-03-06 Jonathan Gilbert <>
* pngcodec.c: Added block to handle saving of 8:8:8 images without
an alpha channel. The underlying encoding of the image includes
a filler byte, so that even Format24bppRgb is 32 bpp under the
hood, but when libpng is told to expect RGB data, it expects
only 24 bits per pixel, which was corrupting PNG output for
Format24bppRgb and Format32bppRgb.
2006-02-24 Sebastien Pouliot <>
* graphics-path.c: Add missing free in a special case (only one
element) of GdipGetPathWorldBounds. Fix typo (X->Y) in
2006-02-10 Peter Dennis Bartok <>
* font.cs:
- Switched GdipCreateFontFromHfont name to GdipCreateFontFromHfontA
to allow support charset-based naming when marshaling
- Implemented GdipCreateFontFromLogfontA and
2006-02-08 Sebastien Pouliot <>
* graphics.c: Added a missing cairo_set_fill_rule in FillPath (which
fixes bug #77408. Changed DrawPath to use 0, 0 (like FillPath) so
they both draw at the same place (no blanks) and also behave like
DrawRectangle(s) and FillRectangle(s) when compared side-by-side.
2006-02-03 Sebastien Pouliot <>
* region.c: Fixed a case where gdip_combine_exclude wasn't excluding
a rectangle if it was identical to the excluding one (see bug #77408
for an example). Also in gdip_combine_xor we do not need to call
gdip_combine_exclude if there's no intersection between the rectangles
2006-02-01 Sebastien Pouliot <>
* image.c: Added some missing argument checks. Implemented
GdipDrawImagePointRect to fix bug #77428.
2006-01-31 Sebastien Pouliot <>
* region.c: Added gdip_copy_region to help reusing region copying in
GdipCloneRegion and GdipGetClip.
* graphics.c: Fixed GdipGetClipBoundsI to get (not set) the clip.
GdipGetClip and GdipFillPath now works with non-rectangular regions.
Implemented GdipSetClipPath function. Added null checks for parameters
in many functions.
2006-01-27 Sebastien Pouliot <>
* gdip.h: Remove duplicate (and identical) definition for LF_FACESIZE.
* graphics.c: GdipFillRegion now works with non-rectangular regions by
either calling GdipFillPath or GdipFillRectangles.
* graphics-path.c: Implemented GdipFlattenPath be re-using Sodipodi's
libnr nr_curve_flatten.
* graphics-path.h: Added a recursion limit of 10 when flattening.
* region.c: Added gdip_is_region_empty which works with any type of
region (rectangular or path based). Added special case support (empty
and/or infinite region) in GdipCombineRegionPath. The common case is
still missing. GdipTranslateRegion now works with non-rectangular
2006-01-27 Jordi Mas i Hernandez <>
* graphics.c:
- Fixes font size for printing
- Fixes unit conversions from diferent units
* font.c, gdip.h
- Implements GdipGetFontHeight, GdipGetFontHeightGivenDPI and
2006-01-26 Sebastien Pouliot <>
* font.c: Use the reference count to [re-]created the generic font
family (as the pointer isn't null after it is disposed).
2006-01-18 Peter Dennis Bartok <>
* jpegcodec.c: Upconvert an indexed image, to allow saving it;
added 1 and 4 bit as supported formats as well. This fixes #77270
2006-01-18 Peter Dennis Bartok <>
* gdip.h: Switched GpRection.Cnt to int, to avoid signedness mismatch
2006-01-18 Sebastien Pouliot <>
* graphics.c: Started adapting functions to recognize path based
regions (while keeping rectangular regions working).
* region.c: Added function to convert a rectangle based region to a
path based region. Started adapting functions to recognize path based
regions (while keeping rectangular regions working). Implemented
GdipCreateRegionRgnData, GdipGetRegionDataSize and GdipGetRegionData
(for both path and rectangle based regions).
* gdip.h: Reordered some typedef to include a GpPath inside GpRegion.
Added export for GdipCreateRegionRgnData.
2006-01-17 Peter Dennis Bartok <>
* graphics.c: If no trim flag is set we need to wrap, not trim. Every
character can be used as wrap character in that case. Fixes #76034
2006-01-16 Sebastien Pouliot <>
* graphics-path.c: Implemented GdipGetPathWorldBounds[I] minus Pen
2006-01-15 Jordi Mas i Hernandez <>
* graphics.c, image.c, gdip.h, general.c:
- Implements PageUnit functionality
- Converts units to Cairo user-space (postscript or display)
- Each surface has its own x and y dpi
- Allows setting Postscript dpy's
2006-01-13 Sebastien Pouliot <>
* graphics-path.c: Added checks for the number of points added when
using AddBeziers (4 points for the first, 3 afterward) and the minimum
of point required to add a Curve, ClosedCurve and a Polygon.
2006-01-01 Jordi Mas i Hernandez <>
* bitmap.c: Fixes 77131
2005-12-23 Peter Dennis Bartok <>
* texturebrush.c: Added handling for indexed texture images
2005-12-22 Peter Dennis Bartok <>
* texturebrush.c: Fixed generation of texturebrushes. Was seriously
2005-12-22 Jordi Mas i Hernandez <>
* graphics.c: Postscript support for handle
* image.c: Postscript drawble support for printing
* gdip.h: Postscript Drawable
2005-12-09 Jordi Mas i Hernandez <>
* graphics.c, image.c: Unreference the surface properly. Now, we do
not leak those and cairo_surface_finish is called.
2005-12-07 Jordi Mas i Hernandez <>
* graphics.c: Fixes 76923
2005-12-06 Peter Dennis Bartok <>
* gdip.h:
- Removed old wine leftovers for bitmaps
- Added GpStatus return value to gdip_bitmap_clone()
* bitmap.c:
- Added handling of failures to gdip_bitmap_clone(), including
returning a status
- Implemented the GdipCreateBitmapFromHBITMAP() and
GdipCreateHBITMAPFromBitmap() functions. Like with other handles
the handle is equivalent to the gdi+ memory pointer
2005-12-05 Peter Dennis Bartok <>
* gdip.h:
- Removed wine leftover
- Added LOGFONTA and LOGFONTW structures (for GdipGetLogFontX)
- Added face var to GpFont struct to remember face name
* font.c:
- Implemented GdipGetLogFontA() and GdipGetLogFontW() functions
- Implemented GetGetFontFromHfont() function
- Droped wine leftovers and added code to remember (and free)
the face name of a font
2005-12-02 Jonathan Gilbert <>
* bitmap.c: Fixed support for PixelFormat24bppRgb in pixel streams.
The count of bytes per pixel for pixel formats with depths of more
than 8 bits is now stored negated in the state->pixels_per_byte
member of the StreamingState structure.
* gdip.h: Added comment explaining the meaning of negative values
in the pixels_per_byte member of struct StreamingState.
* bitmap.c: Fixed the copying back of changed bitmap data in the
GdipBitmapUnlockBits() method. The condition was erroneously
checking for the presence of the GBD_READ_ONLY flag instead of its
2005-11-29 Duncan Mak <>
* graphics.c (make_arcs, make_pie):
* graphics-path.c (append_arcs, GdipAddPathPie): Scale alpha and
beta accordingly because GDI+ deals with elliptical arcs, instead
of circular arcs.
Thanks to Bertram Felgenhauer <> from #cairo for
helping me figure this out.
This fully fixes #76846.
2005-11-29 Duncan Mak <>
* graphics.c (make_arcs):
* graphics-path.c (append_arcs): Add a new flag 'enough' to
signify that we're done drawing all the subarcs.
This fixes #76846. Previously, the check for 'enough' incorrectly
filters out sweep angles with a negative value (i.e. drawing
2005-11-13 Miguel de Icaza <>
* image.c: Implement a little bit of mandolin.
2005-11-10 Geoff Norton <>
* pngcodec.c: Readd a removed but needed variable for big endian build
2005-11-08 Peter Dennis Bartok <>
* gdip.h: Added aa offset vars and hatch origin vars
* graphics.c:
- For all x and y coordinates that are passed to cairo, but not
used for fills we now add an offset if anti aliasing is turned
- Fixed Get/SetRenderOrigin. It is supposed to track the origin
for dithering and hatchbrushes.
* hatchbrush.c:
- hatch lines are no longer are antialiased, except for the
diagonal hatches, which are required to (Removes some fixmes)
- Using square cairo line caps for now, to get diagonal lines
to connect
- Switched some numbers to more closely match MS again now that
we're turning AA off
* pen.c: Work around cairo drawing a linecap for every element
of a dashed line
2005-11-07 Jackson Harper <>
* pen.c: Set the width of dashes when creating the dashed array,
cairo uses the values in the dashed array as the size of the
dash. This fixes dashed lines with a width greater then 1.
2005-11-07 Kornél Pál <>
* bmpcodec.c: Load 32-bit bitmaps as Format32bppRgb.
2005-11-05 Jordi Mas i Hernandez <>
* graphics.c: Fixes 76111 (DrawString does not honor NoWrap)
2005-11-01 Peter Dennis Bartok <>
* graphics.c: Implemented smoothing mode support. Now defaulting
to non-antialiased drawing
2005-11-01 Jonathan Chambers <>
* pen.c: LineCapFlat needs to translate to square cairo line caps
in order for line lengths to be correct when not aliased
2005-10-23 Jonathan Gilbert <>
* image.c: Renamed gdip_FlipX() and gdip_rotate_180_FlipX() to
gdip_flip_x() and gdip_flip_y() respectively.
* image.c: Updated GdipDrawImageRectRect to call the functions by
their new names.
* image.c: Renamed copy_pixel()'s third argument 'components' to
'size', as pixel components can be more than one byte in size.
* image.c: Rewrote gdip_flip_x() to use only a single scan of buffer
space instead of redoing the entire image. Moved gdip_flip_x() to
be adjacent to gdip_flip_y().
* image.c: Replaced gdip_rotate_90(), gdip_rotate_180(), and
gdip_rotate_270() with gdip_rotate_orthogonal_flip_x() which handles
all types of rotation and can also integrate a horizontal flip
into the rotation. All of the RotateFlipTypes can be reduced to a
clockwise rotation of a multiple of 90 degrees optionally followed
by a horizontal flip.
* image.c: Added gdip_rotate_flip_packed_indexed() which does what
gdip_rotate_orthogonal_flip_x() does but for 1- and 4-bit Bitmaps,
where a single byte contains more than one pixel.
* image.c: Reworked GdipImageRotateFlip to determine the rotation and
whether a flip is required first and then call one of the two core
rotation functions to do the appropriate operation.
* bitmap.c, gdip.h: Moved the definition of the pixel stream code's
struct StreamingState from the middle of bitmap.c to gdip.h. The
functions were already being exported (non-static), but the
structure was inaccessible making pixel streams unusable outside of
* gdip.h: Added prototypes for pixel stream functions so that they
could be used by gdip_rotate_flip_packed_indexed() in image.c.
2005-10-21 Miguel de Icaza <>
* hatchbrush.c (gdip_hatch_clone): Also copy and reference the
brush. This bug was identified by Zoltan's change to the runtime
where segfaults in unmanaged code are not translated into
2005-10-19 Jordi Mas i Hernandez <>
* font.c: Make us more resistant to situations like bug #74761
2005-10-17 Ruediger Oertel <>
* gifcodec.c: Switching from libungif to libgif
2005-10-10 Jordi Mas i Hernandez <>
* graphics.c: fixes line width issues when drawing underline/strikeout
2005-10-10 Jordi Mas i Hernandez <>
* graphics.c: remove unused vars and dead code
* font.c: remove unused vars
* bmpcodec.c: remove unused vars
* general.c: remove unused vars
* pathgradientbrush.c: remove unused vars
* image.c: remove unused vars
* jpegcodec.c: remove unused vars
* region.c: remove unused vars
* tiffcodec.c: remove unused vars
* imageattributes.c: remove unused vars
* gifcodec.c: remove unused vars
* texturebrush.c: remove unused vars
* matrix.c: remove unused vars
* customlinecap.c: remove unused vars
* bitmap.c: remove unused vars
* pen.c: remove unused vars
* pngcodec.c: remove unused vars
* graphics-path.c: remove unused vars
* lineargradientbrush.c: remove unused vars
2005-10-06 Peter Dennis Bartok <>
* adjustablearrowcap.c: Removed unused vars
* bitmap.c: Removed unused vars
* font.c: Switched 0 to NULL
2005-10-06 Peter Dennis Bartok <>
* general.c: Fixed bug in ucs2 termation code; code assumed
a byte array, so we always terminated twice as many bytes in as
we wanted to. This was also causing 'random' crashes at much later
times since depending on the situation we'd write 0 past the end
of ucs2_len (This is half of the bugfix for #74871 and #75534)
2005-10-06 Jordi Mas i Hernandez <>
* gifcodec.c: Fixes a warning (an error since we use -Werror) when
using libgif 4.0)
2005-10-06 Jordi Mas i Hernandez <>
* image.c: Partially fixes 75063
* matrix.c: Some documentation about matrices
2005-10-03 Duncan Mak <>
* graphics.c (make_arcs):
* graphics-path.c (append_arcs): Helper functions for dividing
the arcs into smaller segments. Properly handles negative starting
angles and sweep angles.
* graphics-path.c (GdipAddPathArc, GdipAddPathPie):
* graphics.c (GdipDrawArc, make_pie): Simplified to make use of the
new helper functions.
2005-09-20 Jordi Mas i Hernandez <>
* image.c, gdip.h, image.c: Creates the surface and then creates the
graphics context. This is not only reduces the operations need it, also
and more avoids to lose the values that we have init into cairo.
2005-09-21 Peter Dennis Bartok <>
* bmpcodec.c: The alpha value in a indexed color table is never
valid. Since the indexed bitmap code uses the color value from
the table directly, we need to always set the alpha to 0xFF. This
matches MS behaviour (Custom cursors are a good testcase for this,
since they are generated through an intermediate BMP step)
2005-09-20 Jordi Mas i Hernandez <>
* bitmap.c: Fixes bug 76152
2005-09-19 Peter Dennis Bartok <>
* graphics.c: Remove AA setting; fixes bug #76135. Needs to have a save
restore of previous AA settings
2005-09-15 Jordi Mas i Hernandez <>
* region.c: Speed ups CombineModeReplace mode and fixes setting Infite
2005-09-13 Jordi Mas i Hernandez <>
* graphics.c:
* gdip.h:
- Fixes some default values
- Fixes bug 76089
- GdipRestoreGraphics and GdipSaveGraphics save all the status
- Fixes pixelOffsetMode setting
2005-09-13 Jordi Mas i Hernandez <>
* region.c: Fixes region for combine (used in clipping)
2005-09-12 Jordi Mas i Hernandez <>
* font.c: Fixes font creation and italic issues, death code
* general.c: Fixes font creation and italic issues, death code
* gdip.h: Fixes font creation and italic issues, death code
2005-09-09 Jordi Mas i Hernandez <>
* graphics.c: Implements GdipFlush
2005-09-08 Peter Dennis Bartok <>
* graphics.c:
- MeasureOrDrawString: Fixed underline/strikethrough calculations
- Removed old conditional code attempting to avoid cairo AA problems
- Implemented setting/getting of AntiAlias variables
- MeasureOrDrawString: Added code to handle font antialiasing
options; still inoperative
* gdip.h: Added fields to support antialias settings
2005-09-07 Jordi Mas i Hernandez <>
* graphics.c: fixes cairo handles leaks
* image.c: optimise and fix leaks
2005-09-06 Jordi Mas i Hernandez <>
* graphics.c: Makes DrawString clipping not destroy previous clipping
2005-09-06 Jordi Mas i Hernandez <>
* graphics.c: removes non-ansi comments or not longer need it
* font.c: removes non-ansi comments or not longer need it
* general.c: removes non-ansi comments or not longer need it
* image.c: removes non-ansi comments or not longer need it
* pen.c: removes non-ansi comments or not longer need it
* gdip.h: removes non-ansi comments or not longer need it
* lineargradientbrush.c: removes non-ansi comments or not longer need it
2005-09-06 Jordi Mas i Hernandez <>
* graphics.c: Clipping support
2005-09-06 Jordi Mas i Hernandez <>
* graphics.c: several fixes to rect/region clipping operations
* region.c: fixes and include CombineModeReplace mode
2005-09-05 Jordi Mas i Hernandez <>
* image.c: fixes return parameter and GdipLoadImageFromFileICM call
* gdipImage.h: include GdipLoadImageFromFileICM definition
* bitmap.c: new GDI calls
* gdip.h: definitions
2005-08-26 Geoff Norton <>
* graphics.c: Update the Quartz constructors for the new Cairo 1.0
API calls
2005-08-26 Jordi Mas i Hernandez <>
* lineargradientbrush.c: fixes issues with angle
2005-08-26 Peter Dennis Bartok <>
* hatchbrush.c: Wouldn't it be nice to clean the cairo stuff when
destroying the brush
2005-08-26 Peter Dennis Bartok <>
* image.c: Now scales/resizes images to destination rectangle
* gdip.h: Removed gdip_cairo_set_surface_pattern() prototype
* general.c: Removed gdip_cairo_set_surface_pattern() method, it's
no longer used
2005-08-26 Peter Dennis Bartok <>
* gdip.h, general.c: Removed gdip_cairo_set_surface_pattern_with_extend
since it's no longer needed (replaced with less code directly in
2005-08-26 Peter Dennis Bartok <>
* hatchbrush.c: Fixed context leaks (We're also no longer
abusing the passed cairo_t context as the pattern context)
2005-08-26 Peter Dennis Bartok <>
* hatchbrush.c: Fixed 40% and plaid drawing, resolved ct corruption and
nesting bugs
2005-08-26 Hisham Mardam Bey <>
* hatchbrush.c: remove extra paint calls and fix cairo_save/restore
2005-08-25 Peter Bartok <>
* hatchbrush.c: Preventing 50% hatch brush ct from getting whacked
(need to do all other styles as well)
* lineargradientbrush.c:
- Fixed missing initialization of brush matrix
- Preventing cairo context from getting whacked
2005-08-25 Jordi Mas i Hernandez <>
* image.c: fixes issues of images drawn on the wrong place
2005-08-25 Jordi Mas i Hernandez <>
* graphics.c:
- Fixes leaking on GdipDeleteGraphics
- Fixes GdipGetDC bug exposed by Marek changes into graphics.cs
2005-08-25 Jordi Mas i Hernandez <>
* hatchbrush.c: use correct enumerator for cairo calls
* matrix.c: fixes GdipShearMatrix method
2005-08-25 Hisham Mardam Bey <>
* hatchbrush.c: removed cairo_paint calls, we still have a few, must
look into them. Fixed remaining cairo_paint and patter problems.
* general.c: added gdip_cairo_set_surface_pattern_with_extend
* gdip.h: added gdip_cairo_set_surface_pattern_with_extend
2005-08-24 Peter Bartok <>
* hatchbrush.c: Fixed 50% hatchbrush drawing. Still need to fix all
other 50 gazillion hatchbrushes :-(
2005-08-24 Peter Bartok <>
* gdip.h: Removed prototypes for internal strikethrough and underline
functions; those are no longer used
* font.c:
- Cairo switched to positive font descent number, fixed code to match
- Removed unused methods for strikethrough and underline; drawstring
handles that behaviour internally
* graphics.c (DrawString): Cairo switched to positive descent values
for font extents, switched the code to handle that
2005-08-24 Jordi Mas i Hernandez <>
* graphics.c: fixes gcc 4 warning
* general.c: from_cairoformat_to_content function
* texturebrush.c: fixes texture brushes
* matrix.c:
* All the create function allocate the memory
* Fixes GdipCloneMatrix function
* Fixes GdipIsMatrixEqual
* Fixes GdipIsMatrixInvertible (always returned true)
* Fixes GdipGetMatrixElements (wrong order)
2005-08-24 Hisham Mardam Bey <>
* pen.c : remove debugging printf.
2005-08-24 Jordi Mas i Hernandez <>
* hatchbrush.c, lineargradientbrush.c. Cairo has changed the format
enum parameter for cairo_surface_create_similar. This fixes many samples
not running.
2005-08-23 Peter Bartok <>
* graphics.c: The original CalculateStringWidths method was dependent
on FT and internal knowledge of cairo font matrix behaviour, and the
function broke with the newer cairo due to changes to this behaviour.
Renamed the original to CalculateStringWidthsUTF8 and wrote a new
method which uses cairo_text_extents to calculate character widths.
This is somewhat slower but works font-backend independent.
* general.c: Added ucs2 to utf8 char encoder and decoder (allows
faster calculations than the malloc-dependent utf8 string functions)
* gdip.h: Added prototypes for utf8 character functions
2005-08-22 Jordi Mas i Hernandez <>
* region.c: fixes memory leaks
* pen.c: releases the solid brush when is owned by us
* gdip.h: releases the solid brush when is owned by us
2005-08-19 Zoltan Varga <>
* gifcodec.c (gdip_save_gif_image_to_file): Fix compilation without GIF
2005-08-19 Jordi Mas i Hernandez <>
* graphics.c: Standarize mem alloc/free with GdipAlloc/GdipFree
* font.c: Standarize mem alloc/free with GdipAlloc/GdipFree
* bmpcodec.c: Standarize mem alloc/free with GdipAlloc/GdipFree
* general.c: Implement linked list to keep track of leaks
* image.c: Standarize mem alloc/free with GdipAlloc/GdipFree
* region.c: Standarize mem alloc/free with GdipAlloc/GdipFree
* jpegcodec.c: Standarize mem alloc/free with GdipAlloc/GdipFree
* imageattributes.c: Standarize mem alloc/free with GdipAlloc/GdipFree
* gifcodec.c: Standarize mem alloc/free with GdipAlloc/GdipFree
* texturebrush.c: Standarize mem alloc/free with GdipAlloc/GdipFree
* bitmap.c: Standarize mem alloc/free with GdipAlloc/GdipFree
* stringformat.c: Standarize mem alloc/free with GdipAlloc/GdipFree
* pen.c: Standarize mem alloc/free with GdipAlloc/GdipFree
* gdip.h: define GdipCalloc
* graphics-path.c: Standarize mem alloc/free with GdipAlloc/GdipFree
2005-08-19 Jordi Mas i Hernandez <>
* bmpcodec.c: fixes codec for 24 bits bmps. It passes the tests again.
2005-08-18 Jordi Mas i Hernandez <>
* graphics.c: C ANSI language fixes
* bmpcodec.c: C ANSI language fixes
* general.c: C ANSI language fixes
* tiffcodec.c: C ANSI language fixes
* bitmap.c: C ANSI language fixes
2005-08-17 Jordi Mas i Hernandez <>
* region.c: Rewritten region support
2005-08-10 Jordi Mas i Hernandez <>
* region.c: Rewritten gdip_combine_intersect method
2005-08-09 Jordi Mas i Hernandez <>
* region.c: Optimise union operation
2005-07-21 Duncan Mak <>
* graphics.c (make_pie): Fix #75475. Use sweepAngle (instead of
endAngle) when drawing the arcs.
"The arc always starts at 0. For the fill method the effect is that
a pie ending at 360 will fill the whole circle..."
Patch from Patrick Michel <>.
2005-07-01 Jonathan Gilbert <>
* bitmap.c: Fixed bug in GdipCreateBitmapFromScan0's default palette
initialization. Corrected GdipBitmapGetPixel to permit the operation
on indexed bitmaps (uses pixel streams :-).
2005-06-30 Peter Bartok <>
* general.c (ucs2_to_utf8): Added argument to allow specifying the
string length (to allow converting substrings)
* graphics.c (MeasureOrDrawString, MeasureString): Fixed handling
of Tabs, now properly advances to the next valid tab stop, if
tabs are specified.
* font.c, image.c: Changed usage of ucs2_to_utf8 to match new prototype
* gdip.h:
- Removed TabWidth from GpStringDetailStruct, was obsoleted by
- Changed prototype of ucs2_to_utf8(), added length argument
2005-06-21 Geoff Norton <>
* graphics.c (GdipCreateFromQuartz_macosx): Set the size of the
context in the bounds structure. Fixes #75326
2005-06-13 Peter Bartok <>
* bitmap.c, image.c, gdip.h, bmpcodec.c, jpegcodec.c, tiffcodec.c,
gifcodec.c, gifcodec.h, pngcodec.c, pngcodec.h: Re-applied two
previous changes, since #75254 is now fixed
2005-06-13 Peter Bartok <>
* Rolled back last two checkins, to r45601, pre palette patch, due
to the regression caused with Icons (bug #75254)
2005-06-07 Geoff Norton <>
* bmpcodec.c:
* image.c: Fix some (un)signed mismatch issues so that gdiplus
will compile on gcc 4.0 again with -Werror
2005-05-30 Jonathan Gilbert <>
* bitmap.c: Added indexed pixel formats to
* bitmap.c: Added gdip_is_an_indexed_pixelformat(). Added its
prototype to gdip.h; not sure if this is the correct place.
* bitmap.c: Added support for PixelFormat.Format4bppIndexed to
GdipCreateBitmapFromScan0 (maps to CAIRO_FORMAT_A8, like
PixelFormat.Format8bppIndexed). Palettes will be created
as needed. Bitmaps with a 4bpp indexed pixel format will be
given 256-entry ColorPalette structures, as the cairo_format
indicates 8-bit data.
* bitmap.c: GdipCreateBitmapFromScan0 now computes stride for
indexed pixel formats differently, and does not convert
indexed pixel formats to 32-bit RGB. It also makes images with
32-bit pixel formats initially black instead of initially
transparent and fills the palette with the default values for
1-, 4- and 8-bpp indexed images.
* bitmap.c: Added support for indexed images to
* bitmap.c: Rewrote GdipBitmapLockBits () to be maintainable
while supporting indexed pixel formats. Added
gdip_can_window_without_copy (), gdip_is_a_32bit_pixelformat (),
gdip_make_alpha_opaque () and gdip_is_an_alpha_pixelformat ().
* bitmap.c: Moved gdip_from_ARGB_to_RGB () and
gdip_from_RGB_to_ARGB () above gdip_bitmap_change_rect_pixel_format (),
so that gdip_bitmap_change_rect_pixel_format () can call them.
* bitmap.c: Added struct StreamingState and methods
gdip_init_pixel_stream (), gdip_pixel_stream_has_next (),
gdip_pixel_stream_get_next () and gdip_pixel_stream_set_next () to
work with Bitmaps of various formats in an abstract way.
gdip_pixel_stream_get_next () returns and
gdip_pixel_stream_set_next () accepts 32-bit ARGB values for 15,
16, 24, 32, 48 and 64 bit formats and palette indices for 1, 4 and
8 bit formats. gdip_pixel_stream_get_next () and
gdip_pixel_stream_set_next () cannot be mixed; call either one or
the other on a given stream, but never both.
* bitmap.c: Rewrote gdip_bitmap_change_rect_pixel_format to use
pixel streams, which adds support for indexed pixel formats and
increases maintainability.
* bitmap.c: Added check to GdipBitmapSetPixel ensuring that
the bitmap is not indexed (despite what MSDN says, in
practice Microsoft's implementation rejects SetPixel on
indexed Bitmaps).
* bitmap.c: Added gdip_convert_indexed_to_rgb (), which will
be used by the functions implementing DrawImage, since
gdip_bitmap_ensure_surface () is not compatible with indexed
image data.
* image.c: Added support for indexed pixel formats in
GdipDrawImageRect and GdipDrawImageRectRect. The support is
for the image being drawn to be indexed, not the image
being drawn on. :-)
* image.c: Implemented GdipGetImagePalette (),
GdipSetImagePalette () and GdipGetImagePaletteSize ().
* bmpcodec.c: Corrected gdip_bitmap_fill_info_header ()'s
interpretation of pixel bit widths.
* bmpcodec.c: Added include directive for gdipImage.h, for
utility function gdip_get_pixel_format_bpp ().
* bmpcodec.c: Updated gdip_bitmap_save_bmp () to save the
palette for indexed bitmaps. Also modified the save function
to not swap bytes for indexed pixel formats on big-endian
* bmpcodec.c: Updated gdip_read_bmp_image_from_file_stream ()
to maintain 1, 4 and 8 bpp indexed data instead of converting
it on-the-fly to 32 bpp RGB data.
* bmpcodec.c: Updated gdip_get_pixelformat () to translate
a bit width of 1 into Format1bppIndexed.
* bmpcodec.c: Added support for decoding 4- and 8-bit RLE
* gifcodec.c: Updated gdip_save_gif_image () to support saving
indexed images. Also, an off-by-one error in the 32-bit ARGB
side of the encoder was corrected (the image was translated
left one pixel).
* jpegcodec.c: Updated gdip_save_jpeg_image_internal () to
reject 8bpp indexed images that are not grayscale (the
previous behaviour was to assume all 8bpp indexed images
are grayscale).
* tiffcodec.c: Updated gdip_save_tiff_image () to reject
indexed images as NotImplemented, for now at least.
* pngcodec.c: Updated gdip_load_png_image_from_file_or_stream ()
to handle 1-, 4- and 8-bit PNG files separately, without
upsampling the data to 32-bit RBG.
* gdip.h: Fixed the set_pixel_bgra () macro; a lack of
parentheses and no cast down to 'unsigned char' was making
expressions like set_pixel_bgra (&array[i], ...) fail to
compile, and it wasn't a proper statement; it could not be used
in a construct like "if (...) set_pixel_bgra(...); else ...;".
2005-05-25 Peter Bartok <>
* graphics.c, font.c, image.c, general.c, gdip.h: Replaced UTF8/UTF16
conversion with UCS2/UTF8 conversion (The MS APIs do not use UTF16)
2005-05-24 Duncan Mak <>
* graphics-path.c (append_arc): Append PathPointTypeLine instead
of PathPointTypeStart, so that arcs will be joint properly. This
fixes bug #75015. Thanks to Elliot Paquette for reporting and
fixing this bug.
2005-05-24 Duncan Mak <>
* graphics.c (make_pie, GdipDrawArc):
* graphics-path.cs (GdipAddPathArc, GdipAddPathPie): Rewrote the
code for calculating arcs: instead of drawing two arcs via a
mid-point, draw multiple arcs at intervals of 90 degrees. This
results in prettier arcs/pies and a better match to the output
produced by MS.
2005-05-20 Duncan Mak <>
* graphics-path.c (GdipAddPathArc): Added a special case for
drawing ellipses, and remember to use abs() with 'sweepAngle' to
ensure correctness when the angle is negative.
This is basically a port of the previous commit.
2005-05-09 Duncan Mak <>
* graphics.c (make_pie, GdipDrawArc): when evaluating angles,
always use abs(). This fixes the drawing of arcs and pies when the
sweep angle is negative.
Bug #63360 has also been fixed. This was a bug reported by
Ravindra in August '04 about a hang when "the difference between
width and height of rectangle is 1 and angles sum is close to
360". My change doesn't affect this bug. #63360 didn't hang in
libgdiplus 1.1.7 as is, so it was actually fixed by the Cairo
2005-05-06 Jordi Mas i Hernandez <>
* image.c: Only free memory blocks that are owned by us
2005-05-05 Jordi Mas i Hernandez <>
* graphics.c:
- Empty the region before working with it
- Move printf into debug bloc
* region.c:
- Fixes infinite regions
2005-04-28 Jordi Mas i Hernandez <>
* tiffcodec.c: Inits Byte and ByteCount to avoid releasing not allocated
blocks GdipDisposeImage. Fixes testgdi.c test.
2005-04-27 Jordi Mas i Hernandez <>
* graphics.c:
- Set bounds when using a X Drawable
- Fixes GdipGraphicsClear to make it work with X Drawables
* gdip.h: define new function
2005-04-20 Jackson Harper <>
* hatchbrush.c: Don't require that hatch brushes be created on a
context with an attached bitmap.
2005-04-07 Neale Ferguson <>
* gifcodec.c: Eliminate warning message and optimize breakdown of RGB field.
2005-03-30 Peter Bartok <>
* font.c: Added locking for font cache
* general.c: Grab DPIs on startup, avoid potential race condition
with multiple threads using gdiplus and trying to get dpi
2005-03-29 Peter Bartok <>
* bitmap.c: Removed set_pixel_bgra() and get_pixel_bgra() functions,
re-made them as macros, since inlining only works for static functions
* gdip.h: Added set/get_pixel_bgra macros; removed prototypes
* imageattributes.c: Fixed code to work with set/get_pixel_bgra macros
* bmpcodec.c: Added code to deal with the (wrong) assumption that
Stream.Read will always return the number of bytes requested if the
stream end has not been hit (related to bug #72588)
2005-03-22 Jordi Mas i Hernandez <>
* image.c, bitmap.c: implement gdip_image_clone to copy Image structs properly
and fix GdipCloneImage memory corruption problems.
* gdip.h: inline set_pixel_bgra/get_pixel_bgra functions
2005-03-22 Jordi Mas i Hernandez <>
* bmpcodec.c:
- Fixes 24 bits bitmap loading
- Fixes leaks when exiting on error conditions
- Sets the img->image.pixFormat propertly
- Sets bmfh.bfOffBits when saving *before* start using it
* imageattributes.c
- Implements colour matrix processing and GdipSetImageAttributesColorMatrix
* bitmap.c:
- Fixes stride calculation (was causing many problems)
- Moves set_pixel_bgra into bitmap.c and creates get_pixel_bgra
2005-03-18 Peter Bartok <>
* graphics.c: Instead of throwing NotImpl exception, we display a
message that the function isn't implemented yet on the TransformPoints
2005-03-18 Peter Bartok <>
* imageattributes.c: Instead of throwing NotImpl exception, we display a
message that the function isn't implemented yet on the SetColorMatrix
2005-03-18 Peter Bartok <>
* graphics-path.c: Instead of throwing NotImpl exception, we display a
message that the function isn't implemented yet on the Bounds functions
2005-03-18 Peter Bartok <>
* gifcodec.c: Fixed prototype for no gif lib codepath; was missed with
GCC4 changes
2005-03-17 Jordi Mas i Hernandez <>
* pngcodec.c: fixes warnings for GCC4
* gdip.h: fixes warnings for GCC4
* graphics.c: fixes warnings for GCC4
* font.c: fixes warnings for GCC4
* bmpcodec.c: fixes warnings for GCC4
* image.c: fixes warnings for GCC4
* jpegcodec.c: fixes warnings for GCC4
* tiffcodec.c: fixes warnings for GCC4
* gifcodec.c: fixes warnings for GCC4
* texturebrush.c: fixes warnings for GCC4
* gifcodec.h: fixes warnings for GCC4
* bitmap.c: fixes warnings for GCC4
* pngcodec.c: fixes warnings for GCC4
2005-03-17 Peter Bartok <>
* image.c (iGdipLoadImageFromDelegate_linux): Now calls GetHeader
delegate for determining the image type, instead of GetBytes, to
allow usage with non-seekable streams
* gdipImage.h: Changed GdipLoadImageFromDelegate_linux() prototype to
include the new StreamGetHeader method
* gdip.h: Added definition for new GetHeader delegate
2005-03-15 Jordi Mas i Hernandez <>
* graphics.c: Fixes GdipSetWorldTransform. We should copy the passed matrix
not to point to it
2005-02-24 Jordi Mas i Hernandez <>
* region.c: Fixes IsVisible methods
2005-02-22 AJ Frantz <>
* bitmap.c: 64bit stride fixes.
2005-02-20 Peter Bartok <>
* bitmap.c: More 64bit stride fixes
* pngcodec.c: 64bit stride fixes
2005-02-20 Peter Bartok <>
* gdip.h: Added pixman.h include to get pixman_bits_t
* bitmap.c: Made stride calculations based on pixman_bits_t, to
properly work on 64bit platforms as well
2005-02-19 Peter Bartok <>
* graphics.c:
- Setting the appropriate cairo operator when GdipSetCompositingMode
is called.
- Added (very hacked) GdipMeasureCharRanges()
2005-02-19 Geoff Norton <>
* bitmap.c: (GdipBitmapSetPixel) Make this endian aware.
2005-02-18 Miguel de Icaza <>
* graphics.c: Implement GdipGetCompositingMode,
GdipSetCompositingMode, GdipGetCompositingQuality,
GdipSetCompositingQuality: The quality ones dont do anything.
* solidbrush.c: Setup the alpha channel, only if the composite
mode is set to ComposintingModeSourceOver (the default) that does
alpha blending.
* pen.c (GdipGetPenEndCap, GdipSetPenEndCap): Avoid crashing,
even if we dont do anything with them yet.
2005-02-16 Peter Bartok <>
* bitmap.c (gdip_bitmap_clone_data_rect): Patch suggested by
Scott Mohekey, preventing use of uninitialized variable
2005-02-16 Miguel de Icaza <>
* bitmap.c: Handle the case where GdipAlloc returns NULL,
propagate the error everywhere.
2005-02-10 Geoff Norton <>
* general.c: Drop the last usage of GDIPLUS_NOX, if we can't open
the display fall back to 96.0f (changed new default to 96 from 72)
2005-02-06 Geoff Norton <>
* gifcodec.c: Fix a typo
2005-02-03 Jordi Mas i Hernandez <>
* region.c: Call GdipSetInfinite for empty regions
2005-01-28 Peter Bartok <>
* gdip.h, graphics.c: Switched hDC type from int to void. That's what
MS has for them, and also, it is required to compile on 64bit
platforms (fixes bug #71823)
2005-01-28 Geoff Norton <>
* bmpcodec.c: Make this endian aware for saving bitmaps.
2005-01-28 Peter Bartok <>
* pathgradientbrush.c (GdipMultiplyPathGradientTransform): Don't
destroy the matrix we're about to destroy. Fixes bug introduced
in r39075. Patch by Peter Johanson
2005-01-27 Geoff Norton <>
* tiffcodec.c: Make this endian aware for image saving as well
2005-01-26 Peter Bartok <>
* pngcodec.c (gdip_save_png_image_to_file_or_stream): Moved definition
of variable into new block, to keep Ansi compilers happy, also helped
readability by giving both Big and Little endian their own loop
2005-01-26 Geoff Norton <>
* tiffcodec.c: Fix problem with file callback writer.
2005-01-26 Geoff Norton <>
* pngcodec.c:
gifcodec.c: Make these write files properly on big endian machines
2005-01-26 Peter Bartok <>
* bmpcodec.c: We convert all images to 32bit, no longer need the
2005-01-26 Geoff Norton <>
* tiffcodec.c: Use the tiff callback functions to allow
tiff reading to work on Mac.
2005-01-26 Geoff Norton <>
* gifcodec.c: Use set_pixel_bgra so that big endian machines can
load gif and have them look right.
2005-01-26 Geoff Norton <>
* jpgcodec.c: Use set_pixel_bgra so that big endian machines can
load jpgs and have them look right.
2005-01-26 Geoff Norton <>
* bmpcodec.c: Move set_pixel_bgra to gdip.h
* gdip.h: Add set_pixel_bgra
* pngcodec.c: Use set_pixel_bgra so that big endian machines can
load pngs and have them look right.
2005-01-26 Peter Bartok <>
* bmpcodec.c: Since we 'upgrade' all bitmaps to 32bit, make sure we
store the format as such, too
2005-01-26 Peter Bartok <>
* bmpcodec.c: Implemented 32bit support; while no 32bit BMP files
exist, we will generate those internally, to support icons and cursors
2005-01-26 Peter Bartok <>
* bmpcodec.c:
- Fixed generation of color tables (RGBA order)
- Fixed monochrome image translation
2005-01-26 Geoff Norton <>
* bmpcodec.c: Swap from RGBA to ABGR on big endian systems.
2005-01-26 Peter Bartok <>
* bmpcodec.c: Fixed R/B swap mistake
2005-01-26 Peter Bartok <>
* bmpcodec.c: Cleaner version, also a bit faster
2005-01-26 Peter Bartok <>
* bmpcodec.c: Added ability to read 1, 4 and 8 bit images
as well as 24 bit images, simplified readying by doing the
read/assignment and RGB to ARGB in one go
2005-01-20 Peter Bartok <>
* graphics.c:
- Using new macro to deal with post 0.3.0 cairo changes in font APIs
- Added Geoff Norton's changes for Mac OS X support
* font.c: Using new macro to deal with post 0.3.0 cairo changes in font APIs
* gdip.h:
- Changes to match cairo 0.3.0 release
- Added code for post 0.3.0 cairo support
2005-01-20 Jackson Harper <>
* graphics.c: These are floats.
2005-01-17 Peter Bartok <>
* graphics.c:
* lineargradientbrush.c
* lineargradientbrush.h:
* pathgradientbrush.c:
* matrix.c:
* texturebrush.c:
* texturebrush.h:
* pen.c:
* gdip.h: Another attempt at dealing with the cairo change making
the cairo_matrix_t type internal. I gave Jackson some wrong info
in the previous attempt.
2005-01-14 Jackson Harper <>
* graphics.c:
* lineargradientbrush.c
* lineargradientbrush.h:
* pathgradientbrush.c:
* matrix.c:
* texturebrush.c:
* texturebrush.h:
* pen.c:
* gdip.h: Current cairo in cvs has made the cairo_matrix_t
variable internal. These are updates to compile with current
cairo, all the changes should work with older versions of cairo as
2005-01-14 Jackson Harper <>
* gdip.h: Remove the hdc stuff that was used with wine. Add fields
for the x display and drawable so that they can be used when
creating a graphics object from an hdc.
* graphics.c (GdipCreateFromHDC): Implement, just create a new
graphics object and copy the drawable from the old one.
* graphics.c (GdipCreateFromXDrawable_linux): Copy the display and
drawable params to the graphics structure so they can be used in
2005-01-07 Peter Bartok <>
* graphics-path.c, hatchbrush.c: Applied patch submitted by to compile with gcc2, fixes bug #65708
2005-01-07 Peter Bartok <>
* image.c (GdipDrawImageRect): Start a new path before calling
cairo_translate, it seems thats what other cairo apps do, and it
fixes the problem Jackson reported, where images would not show
after text was drawn
2005-01-07 Peter Bartok <>
* font.c: replaced tempnam() with mkstemp() as requested by
tempnam() documentation
* general.c: Removed c++ - ism
* gdip.h: Added unistd.h for functions used in font.c
2005-01-06 Miguel de Icaza <>
* tiffcodec.c: Cast the third argument to thandle_t to supress
errors on certain distros. Fixes 70456
2005-01-05 Peter Bartok <>
* graphics.c (MeasureOrDrawString): If the string doesn't fit in
the bounding box and no breaks are allowed or possible, the code
will now not loop anymore.
2005-01-04 Peter Bartok <>
* graphics.c (MeasureOrDrawString): Return 0 instead of
InvalidParameter if the string being measured has zero length, this
matches MS behaviour; also added earlier check for zero length
to avoid utf conversion overhead.
2005-01-02 Jordi Mas <>
* graphics.c, font.c, general.c, bmpcodec.h, image.c,
region.c, jpegcodec.h, imageattributes.c, gdipImage.h,
tiffcodec.h, gifcodec.h,bitmap.c, stringformat.c,
pngcodec.h,, gdip.h: removes old Wine
glue code
* gdip_win32.c, gdip_win32.h: remove it
2004-12-30 Miguel de Icaza <>
* bitmap.c (gdip_bitmap_clone): Also clone the ->Bytes array which
is fileld in by gifcodec.c and image.c as well
2004-12-28 Zoltan Varga <>
* graphics.c (CalculateStringWidths): Fix 64 bit issues.
2004-12-27 Zoltan Varga <>
* gdip.h: Make the members of various structures the same size as
their managed counterparts on 64 bit platforms.
* gdip_win32.h: Do not define __stdcall under amd64.
2004-12-16 Peter Bartok <>
* graphics.c:
- GdipGetDC(): Removed Wine logic
- GdipReleaseDC(): Removed Wine logic
* font.c:
- Removed CreateFontFromHDCorHfont (Wine specific)
- GdipCreateFontFromDC(): Removed Wine logic
- GdipCreateFontFromHfont(): Removed Wine logic
- GdipGetLogFontA(): Removed Wine logic
- Added non gdi+ GetFontMetrics call to support MWF, since
DrawString/MeasureString do not support retrieving the
ascent/descent of a font
* gdip_win32.c: Removed references to Wine GetTextMetrics
2004-12-16 Peter Bartok <>
* graphics.c (MeasureOrDrawstring): Removed extra padding calc
2004-12-07 Geoff Norton <>
* graphics.c, gdip_win32.h, gdip.h: Initial support for the Quartz backend to cairo.
2004-11-29 Jordi Mas <>
* image.c: fixes bug #69089
2004-11-18 Ravindra <>
* graphics.c (GdipGraphicsClear): Save and restore the existing
graphics settings. Otherwise, we lose the cached brush settings.
2004-11-11 Jordi Mas <>
* gdip.h, font.c, general.c: implements font caching
2004-11-10 Peter Bartok <>
* graphics.c (MeasureOrDrawString): Enabled clipping again, cairo
appears to have the required fixes for it now.
2004-11-10 Peter Bartok <>
* graphics.c (MeasureOrDrawString): Cleanup of earlier fix
2004-11-10 Peter Bartok <>
* graphics.c (MeasureOrDrawString): Removed some unneeded cairo
calls to improve performance; added comments
2004-11-10 Peter Bartok <>
* general.c:
- Removed _install_font_matrix(), now in graphics.c
- Removed _gdip_cairo_matrix_compute_scale_factors(), now part of
the new _install_font_matrix()
- Removed gdip_utf8_to_glyphs(), now combined with
* graphics.c:
- Renamed CalculateStringSize to CalculateStringWidths
- Streamlined CalculateStringSize, combined with gdip_utf8_to_glyphs
- Removed unused parts of gdip_utf8_to_glyphs() and
- Dropped unneeded allocation of glyph memory
* gdip.h:
- Removed gdip_utf8_to_glyphs prototype
2004-11-09 Peter Bartok <>
* graphics.c
(MeasureOrDrawString): Added check to prevent crash if bogus data is
returned from freetype.
(MeasureOrDrawString): Instead of calling GdipFillRectangle we call
cairo directly to draw underlines and strikeouts
(GdipDrawLine): Jackson's matrix patch to align pixels and
effectively avoid AA lines
(GdipDrawRectangle): Same patch as for GdipDrawLine
2004-11-04 Miguel de Icaza <>
* graphics.c (CalculateStringSize): Free leaked Glyphs.
2004-10-29 Jordi Mas <>
* gdip.h, font.c: cache fontfamily details. Performance enhancement.
2004-11-05 Ravindra <>
* graphics-path.c: Fixed int_to_float () function. We should not
increase the pointer that is to be returned.
2004-10-29 Jordi Mas <>
* font.c gdip.h gdip_win32.h gifcodec.c graphics.c matrix.c pathgradientbrush.c
texturebrush.c tiffcodec.c: fixes issues with strict C compilers
2004-10-29 Jordi Mas <>
* bitmap.c font.c graphics-path.c graphics.c image.c imageattributes.c
lineargradientbrush.c stringformat.c: fixes issues with strict C compilers
2004-10-28 Miguel de Icaza <>
* graphics.c (GdipSetClipRegion): Fix the test, it should test for
either value being null.
2004-10-28 Ravindra <>
* tiffcodec.c: We should not close the MemoryStreams
that we got from user.
2004-10-28 Ravindra <>
* bitmap.c: Fix for bug #68270. We need to initialize frames
for images created from MemoryStreams as well.
2004-10-19 Jordi Mas <>
* image.c: Speeds up GdipDrawImageRect arround 10%
2004-10-19 Jordi Mas <>
* imageattributes.c: fixes alpha color setting
2004-10-19 Ravindra <>
* jpegcodec.c: Fixed bug #68117. Retrieves the proper
resolution info from Jpeg image.
2004-10-17 Jordi Mas <>
* image.c: bug fix, restores pattern after image drawing
2004-10-09 Ravindra <>
* hatchbrush.h: Added 'pattern' member of cairo_pattern_t
type to GpHatch struct.
* hatchbrush.c: Added support for caching.
* lineargradientbrush.h: Removed the 'changed' member from
GpLineGradient struct. It is moved to GpBrush struct.
* lineargradientbrush.c: Added support for caching.
* pathgradientbrush.h: Removed the 'changed' member from
GpPathGradient struct. It is moved to GpBrush struct.
* pathgradientbrush.c: Added support for caching.
* texturebrush.h: Removed the 'changed' member from GpTexture
struct. It is moved to GpBrush struct.
* texturebrush.c: Added support for caching.
2004-10-09 Ravindra <>
* solidbrush.h: Added color components A,R,G,B to SolidFill
struct for caching.
* solidbrush.c: Added support for caching.
* pen.c: Added support for caching.
2004-10-09 Ravindra <>
* gdip.h: Added 'last_pen' and 'last_brush' members to
GpGraphics struct for caching.
* brush.h: Added a boolean type 'changed' member to GpBrush.
* brush.c: Added caching, to avoid multiple brush setups.
* graphics.c: Initialization of cached pen and brush. Removed
unwanted calls to cairo_save/cairo_restore.
2004-10-08 Ravindra <>
* image.c: Fixed GdipDisposeImage function.
2004-10-05 Ravindra <>
* pen.c: Fix for the bug #66665. Using a dirty bit on pen
to avoid multiple setups has a flaw. It does not work well
when we use the different pens with the same graphics.
2004-09-27 Mart Roosmaa <>
* general.c: Fallback to 72 dpis if we can not determine this
2004-09-22 Ravindra <>
* jpegcodec.c: Set proper image flags for JPEG colorspaces.
2004-09-22 Ravindra <>
* jpegcodec.c: Added support for CMYK and YCCK colorspaces.
Fixes bug #50081.
2004-09-16 Ravindra <>
* gdip.h: Removed the redundant graphics member from GpImage struct.
* bmpcodec.c: Removed the unnecessary usage of GpImage->graphics.
* gifcodec.c: Same as above.
* graphics.c: Same as above.
* jpegcodec.c: Same as above.
* pngcodec.c: Same as above.
* tiffcodec.c: Same as above.
* image.c: Same as above and removed some commented code. Fixed
GdipGetImageDimensions and GdipImageGetFrameDimensionsList
functions. Applied a fix from David Mitchell for bug #66055 in
GdipGetImageGraphicsContext function.
2004-09-15 Ravindra <>
* graphics.c: Applied a fix from David Mitchell for bug #65963
in GdipDeleteGraphics function.
2004-09-10 Ravindra <>
* image.c: Fixes a bug in DrawImageRect function. Reset the matrix
after drawing the image.
2004-08-21 Ravindra <>
* gifcodec.c: Return UnknownImageFormat instead of NotImplemented when
required libraries are not installed.
* jpegcodec.c: Same.
* pngcodec.c: Same.
* tiffcodec.c: Same.
2004-08-17 Ravindra <>
* font.c: Fix for bug #63098.
2004-08-05 Ravindra <>
* font.c: Fixed GdipDeleteFont function.
2004-08-02 Ravindra <>
* graphics.c: Commented out cairo_clip calls from GdipDrawString,
as these were causing problems. Thanks to Peter for suggesting this
fix. This fixes, bug #60386, #60663, #61414. These bugs were actually
because of some problem with Cairo clipping. And, these are not
reproducable with Cairo cvs, because Cairo seems to have some changes
which have solved the problem with clipping in Cairo.
Also, fixed gdip_plot_path function to handle path point types properly.
2004-07-30 Ravindra <>
* font.c: Fixed GdipGetEmHeight function.
2004-07-30 Sanjay Gupta <>
* tiffcodec.c: Added page no information while saving a multi page
tiff file.
2004-07-27 Sanjay Gupta <>
* tiffcodec.c: Fixing issues in saving multiple images to a file.
2004-07-26 Sanjay Gupta <>
* image.c: Some memory management.
2004-07-26 Sanjay Gupta <>
* bitmap.c: Initialization of data members in gdip_bitmap_init().
* gdip.h: Corrected casing in BitmapData structure.
* gifcodec.c: Casing changes, because of change in gdip.h.
2004-07-23 Sanjay Gupta <>
* tiffcodec.c: Corrected the sequence of writing information
to tiff file.
2004-07-23 Ravindra <>
* stringformat.c: Fixed GdipCloneStringFormat function and some
formatting (replaced 8 spaces by tabs).
2004-07-22 Sanjay Gupta <>
* gdip.h: Modified GdipBitmapData structure to hold information
about position and graphic control extension for a gif frame.
* bitmap.c: Modified gdip_bitmap_dispose ().
* gifcodec.c: Corrected memory handling while saving frames to
a gif file, implemented reading and writing Graphic Control
Extension data and added a cool hack from Raja, which reduced
size of our gif file. (30% saving in size on my sample file with
new implementation).
2004-07-22 Ravindra <>
* gdip.h: Added CharacterRange stuct. Added 'charRanges' and
'charRangeCount' members in GpStringFormat struct. Added
function declarations for GdipMeasureCharacterRanges,
GdipGetStringFormatMeasurableCharacterRangeCount and
* graphics.c: Added stub for GdipMeasureCharacterRanges.
* stringformat.c: Implemented following two functions,
1. GdipGetStringFormatMeasurableCharacterRangeCount and
2. GdipSetStringFormatMeasurableCharacterRanges.
Corrected default values for substitute and trimming in
GdipStringFormatGetGenericDefault function. Corrected default
value for substitute in GdipStringFormatGetGenericTypographic
function. Also, Added null checks.
2004-07-22 Sanjay Gupta <>
* tiffcodec.c: Implemented saving multiple pages of an image to a
tif file.
2004-07-21 Ravindra <>
* gdip.h: Added position members to GpPathIterator stuct.
Added start_new_fig flag to GpPath struct.
* graphics-path.c: Fixed and implemented various functions.
Added null checks and some code formatting.
Fixed: (append) (GdipClonePath) (GdipAddPathClosedCurve2)
(GdipAddPathRectangle) (GdipAddPathRectangles)
(GdipAddPathRectanglesI) (GdipAddPathEllipse) (GdipAddPathPath).
Implemented: (GdipStartPathFigure) (GdipClosePathFigures).
* graphics-pathiterator.c: Some fixes and implemented missing
subpath functions.
2004-07-21 Sanjay Gupta <>
* gifcodec.c: Minor modifications.
2004-07-20 Sanjay Gupta <>
* gifcodec.c: Implemented saving multiple frames of an image to a
gif file.
2004-07-16 Ravindra <>
* Added graphics-pathiterator.c to the sources list.
* gdip.h: Corrected GpPathPointEnum and added GpPathIterator stuct.
* graphics-path.c: Fixed GdipDeletePath, GdipResetPath,
GdipSetPathMarker, GdipGetPathLastPoint, GdipAddPathLine and
implemented GdipClosePathFigure and some formatting.
* graphics-path.h: Added function declarations for graphics-path
* graphics-pathiterator.c: First implementation.
2004-07-16 Sanjay Gupta <>
* image.c: Resolved a crash which was occuring because of attempting
to free same memory twice.
2004-07-14 Ravindra <>
* adjustablearrowcap.c: Added a note.
* customlinecap.c: Added a note.
* brush.h: Moved common internal structs in here from
lineargradientbrush.c. These will be used by pathgradientbrush also.
* graphics-path.h: Corrected some function signatures.
* graphics-path.c: Corrected some function signatures and return
'NotImplemented' status instead of 'Ok' in unimplemented functions.
* lineargradientbrush.[ch]: Moved common internal structs from here
to brush.h. And, some minor corrections.
* pathgradientbrush.[ch]: Tested and fixed all the properties and
implemented all the missing functions. Now, we are missing only
the setup function and it can be done only after cairo supporting
the required pattern for this brush. Also, corrected indentation.
2004-07-13 Sanjay Gupta <>
* tifcodec.c: Implemented functionality to read all the frames present.
2004-07-12 Ravindra <>
* gdip.h: Added 'interpolation' member in GpGraphics struct.
Fixing bug #61400.
* bitmap.c: Check for null before initializing the GpBitmap.
* general.c: Added a helper function for converting an
InterpolationMode value to cairo_filter_t. Fixing bug #61400.
* graphics.c: Set the cairo filter on the surface as per the
interpolation mode set. Fixed GdipSet/GetInterpolationMode
functions. Fixing bug #61400.
* image.c: Set the cairo filter on the surface as per the
interpolation mode set. Fixing bug #61400.
2004-07-09 Ravindra <>
* lineargradientbrush.c: Implemented GdipSetLineSigmaBlend function.
* general.c: Added gdip_erf function used for setting sigma blend
by gradient brushes.
2004-07-09 Sanjay Gupta <>
* gdip.h: Modified FrameDimensionInfo structure to carry data related
to various frames of a multi frame image. The structure is now
renamed to FrameInfo.
* gifcodec.c: Implemented functionality to read all the frames present.
* image.c: Implemented SelectActiveFrame() method. Modified associated
memory disallocation and changes while reading single frame image.
2004-07-07 Ravindra <>
* pngcodec.c: Fixes saving RGB file and one perf improvement in
image loading. Fixes bug #61156.
2004-06-29 Jordi Mas <>
* pngcodec.c: fixes saving 24-bit images (it was saving corrupted files before)
2004-06-29 Jordi Mas <>
* tiffcodec.c: fixes saving images to stream. It was giving an exception
2004-06-25 Ravindra <>
* lineargradientbrush.c: Couple of fixes and some missing bits.
Also implemented GdipSetLineLinearBlend function.
* pen.c: Changed return status of GdipSetCompoundArray to Ok.
2004-06-24 Ravindra <>
* graphics.c: Modified GdipFillXXX operations to make use of
the matrix set by brush setup. Also, moved all the GdipFillXXX
functions to one place.
2004-06-24 Sanjay Gupta <>
* gdip.h: Changed function signature for SeekDelegate function.
* tiffcodec.c: Minor modification in passing flags to libtiff.
2004-06-23 Jordi Mas <>
* gdip.h, graphics.c: Implement Get/Set Unit and Scale. We will need when we implement
2004-06-23 Jordi Mas <>
* image.c: fixes bug 60601, simple images where not drawn on the right place
2004-06-22 Ravindra <>
* lineargradientbrush.h: Added two members 'changed' and 'pattern'
to GpLineGradient struct to avoid unnecessary multiple brush setup.
* lineargradientbrush.c: Changes related to above and some fixes.
2004-06-22 Jordi Mas <>
* gdip.h, graphics.c: implement Clip API function calls
* region.c: remove unused vars
2004-06-22 Ravindra <>
* texturebrush.c: We need to reset the 'changed' flag after doing
brush setup.
2006-06-21 Sanjay Gupta <>
* tiffcodec.c: Added dummy functions and changed the way we
were reading/writing tif image from/to stream.
2006-06-17 Sanjay Gupta <>
* tiffcodec.c: ABGR 2 ARGB conversion while saving.
Default tiff format of ARGB was converted to our local format ABGR
while reading, but in write operation we were not converting back
to ARGB format and hence messy image.
2004-06-17 Sanjay Gupta <>
* image.c: Removed a commented line of code. Got checked in by mistake.
2004-06-16 Sanjay Gupta <>
* gdipImage.h: Modifed function signature
* image.c : Modified call to save tiff image from stream delgate.
* tiffcodec.c, tiffcodec.h : Modified API signature and implemented
functions to save tiff images to stream.
2004-06-16 Sanjay Gupta <>
* tiffcodec.c, tiffcodec.h: Implemented methods for loading tiff
images from stream.
2004-06-16 Ravindra <>
* graphics.c: Removed unnecessary calls to cairo_save and
cairo_restore from GdipFillXXX functions.
2004-06-15 Ravindra <>
* texturebrush.h: Added two members 'changed & pattern' to GpTexture
struct to avoid unnecessary texture setup.
* texturebrush.c: Fixed the code to avoid the seam. Setup related
enhancement. Replaced cairo_show_surface by cairo_fill for creating
pattern. This was required to fix the problem with Graphics.DrawXXX,
as DrawXXX functions stopped working for texturebrush because of
transformation matrix fix in pen.c (my previous checkin).
2004-06-15 Sanjay Gupta <>
* gdip.h: Added function typedefs, (*CloseDelegate), (*SizeDelegate).
* gdipImage.h: Modifed function signature
* image.c : Modified call to load tiff image from stream delgate.
* tiffcodec.c, tiffcodec.h : Modified API signature for loading tiff
images from stream.
2004-06-14 Peter Bartok <>
* general.c: Fixed internal cairo function name to be gdi
2004-06-10 Sanjay Gupta <>
* gifcodec.c: Minor error handling.
* tiffcodec.c, tiffcodec.h: Added function stubs for loading
and saving images from/to streams. Also modified API to include
encoder parameter.
* image.c: Minor indentation fixes, fixed incorrect image format
assignment in loading images from stream, error handling and
including call to load/save tiff images from stream.
2004-06-10 Jordi Mas <>
* gifcodec.c: fixes the stubs signatures when libgif is not installed
2004-06-09 Jordi Mas <>
* font.c, gdip.h: implemtents cache for generic family fonts,
and properly keep track of resources and deallocate them.
2004-06-08 Ravindra <>
* graphics.c: Added notes to GdipDrawXXX functions.
* pen.c: We need to take into account the graphics->matrix
also when stroking. Fixed the same.
2004-06-04 Ravindra <>
* graphics.c: Fixed GdipDrawXXX functions as per the fix
in pen.c.
* pen.c: Added a flag to avoid multiple unnecessary setups
of the same pen and fixed transform matrix usage.
* gdip.h: Added a 'changed' bool type to GpPen struct.
2004-06-04 Sanjay Gupta <>
* bitmap.c: Resolved issue with saving of 24 bit bmps.
2004-06-03 Ravindra <>
* graphics.c: Fixed GdipDeleteGraphics and
gdip_graphics_attach_bitmap functions.
2004-06-01 Ravindra <>
* hatchbrush.c: Peformance improvements in some of diagonal
hatch styles. These were quite slow earlier.
2004-05-31 Ravindra <>
* graphics.c: Fixed GdipResetWorldTransform, GdipDrawPie and
GdipFillPie. ResetWorldTransform should set the copy_of_ctm
as well as the graphics->ct matrix to identity.
Draw/FillPie functions do not do anything, if sweep angle is
zero deg. This is done to fix the crash that we face when we
draw/fill pie with zero deg sweep angle. And, some formatting.
2004-05-28 Duncan Mak <>
* graphics.c (GdipResetWorldTransform): Remember to synchronize
graphics->copy_of_ctm with the graphics' matrix.
2004-05-28 Ravindra <>
* hatchbrush.c: Completed the remaining hatch styles.
2004-05-28 Jordi Mas <>
* tiffcodec.c, image.c: added support for saving TIFF files
2004-05-28 Jordi Mas <>
* bitmap.c, image.c, tiffcodec.c: reformmated using Mono code style. No code
changes made
2004-05-28 Ravindra <>
* gdip.h: Added declarations for GdipDrawRectangles,
GdipDrawRectanglesI, GdipFillRectangleI, GdipFillRectangles,
GdipFillRectanglesI functions for Graphics.
* graphics.c: Implemented the functions mentioned above. Added
g_return_val_if_fail macro. Did some of formatting. I have
tested this, hope I'm not going to break anything.
2004-05-28 Ravindra <>
* graphics.c: Changed DrawLinesI and DrawLines functions not to
call DrawLineI and DrawLine respectively, as it results in setting
up pen so many times unnecessarily.
* hatchbrush.c: Formatting.
2004-05-27 Duncan Mak <>
* matrix.c (set_translate, set_scale, set_rotate, set_shear):
Removed, we are not allocating a new GpMatrix * anymore.
(TranslateMatrix, ScaleMatrix, RotateMatrix, ShearMatrix): All the
functionality of set_foo has been moved back into here.
2004-05-27 Miguel de Icaza <>
* pen.c (gdip_pen_setup): Fix indentation, and do not set the pen
matrix. The pen matrix trumps any other transformations on the
graphics->ct, someone must fix this properly.
* matrix.c: Remove some heavy use of routines with something
lighter, Duncan will look at this further.
2004-05-27 Ravindra <>
* hatchbrush.c: Implemented couple of hatch styles.
2004-05-27 Jordi Mas <>
* pngcodec.c: added stubs for when libpng is not present
2004-05-27 Sanjay Gupta <>
* bmpcodec.c: Added support for converting 24BPP to 32 BPP
for usage by cairo, in function for loading bmp.
2004-05-27 Sanjay Gupta <>
* bmpcodec.c: Abstracted reading bmp from file and stream
to single function.
* bmpcodec.h: Added function declarations for above implementation.
2004-05-27 Jordi Mas <>
* bitmap.c: added support for drawing 24-bits images tru DrawImage
2004-05-27 Sanjay Gupta <>
* bmpcodec.c: Fixes in function to save bmp to stream.
2004-05-26 Sanjay Gupta <>
* bmpcodec.c: Implemented function to save bmp to stream.
* bmpcodec.h: Added function declarations for above implementation.
2004-05-26 Sanjay Gupta <>
* bmpcodec.c: Resolved issue with saving images to bmp format.
2004-05-26 Sanjay Gupta <>
*image.c: Resolved issue with wrong comparison between image format
guid and enocder clsid in GdipSaveImageToDelegate_linux() fn.
2004-05-26 Jordi Mas <>
* gifcodec.c, gifcodec.h, image.c: implemented saving GIF images
to file, stream and loading them from a stream.
2004-05-26 Ravindra <>
* hatchbrush.c: Implemented Plaid and Wave hatch styles.
2004-05-26 Ravindra <>
* hatchbrush.c: Implemented Sphere hatch style.
2004-05-26 Jordi Mas <>
* bitmap.c, gdip.h: remove death code
* gifcodec: no code changes made, reformmating to be able to work with it
2004-05-25 Jordi Mas <>
* bitmap.c, gdip.h, image.c, imageattributes.c:
- Implemented SetImageAttributesWrapMode: Tile, TileFlipY, TileFlipY
and TileFlipXY
- ImageAttributes fails to default category if nothing is setup
- Minor bug fixes
2004-05-25 Jordi Mas <>
* bitmap.c: fixes bug in gdip_bitmap_clone. We were not cloning the
bitmap data itself
2004-05-24 Jordi Mas <>
* bitmap.c, gdip.h, image.c, imageattributes.c: implemented
functions for ImageAttributtes
2004-05-21 Ravindra <>
* pen.c: We draw a line of a pixel width, if pen width is set
to zero or less than zero.
2004-05-20 Ravindra <>
* hatchbrush.c: Implemented SolidDiamond hatch style.
* pen.c: Minor fix in GdipSetPenDashArray function.
* gdip.h: Added a comment and inserted #ifndef around
uglify typedefs.
* gdip_win32.h: Removed the mono dependency uglify.h.
It was also breaking the build.
2004-05-19 Miguel de Icaza <>
* gdip.h: Removed the dependency on Mono for uglify.h by
copying here all the required things from mono/io-layer/uglify.h.
2004-05-15 Vladimir Vukicevic <>
* image.c, jpegcodec.c, jpegcodec.h, gdip.h: Add support for
EncoderParameters. Currently, only jpeg Quality is exported (MS
doesn't support any params for anything but Jpeg and Tiff)
* image.c, gdip.h, gdipImage.h: Renamed some things which were
clsid to format_guid to avoid confusion (they're not clsids)
2004-05-14 Peter Bartok <>