2008-03-25 17:34:57 +00:00
|
|
|
/*
|
|
|
|
* Copyright (C) 2007 Google (Evan Stade)
|
|
|
|
*
|
|
|
|
* This library is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
|
|
* License as published by the Free Software Foundation; either
|
|
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This library is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
* Lesser General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
|
|
* License along with this library; if not, write to the Free Software
|
|
|
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef __WINE_GP_PRIVATE_H_
|
|
|
|
#define __WINE_GP_PRIVATE_H_
|
|
|
|
|
2013-12-23 18:33:45 +00:00
|
|
|
#include <math.h>
|
|
|
|
#include <stdarg.h>
|
|
|
|
|
2018-03-09 12:09:03 +00:00
|
|
|
#include "windef.h"
|
|
|
|
#include "wingdi.h"
|
|
|
|
#include "winbase.h"
|
|
|
|
#include "winuser.h"
|
2013-01-24 23:00:42 +00:00
|
|
|
|
2018-03-09 12:09:03 +00:00
|
|
|
#include "objbase.h"
|
|
|
|
#include "ocidl.h"
|
|
|
|
#include "wincodecsdk.h"
|
|
|
|
#include "wine/heap.h"
|
|
|
|
#include "wine/list.h"
|
2013-12-23 18:33:45 +00:00
|
|
|
|
2018-03-09 12:09:03 +00:00
|
|
|
#include "gdiplus.h"
|
2008-03-25 17:34:57 +00:00
|
|
|
|
|
|
|
#define GP_DEFAULT_PENSTYLE (PS_GEOMETRIC | PS_SOLID | PS_ENDCAP_FLAT | PS_JOIN_MITER)
|
|
|
|
#define MAX_ARC_PTS (13)
|
|
|
|
#define MAX_DASHLEN (16) /* this is a limitation of gdi */
|
|
|
|
#define INCH_HIMETRIC (2540)
|
|
|
|
|
2015-07-19 13:31:15 +00:00
|
|
|
#define VERSION_MAGIC 0xdbc01001
|
|
|
|
#define VERSION_MAGIC2 0xdbc01002
|
2017-09-17 12:34:15 +00:00
|
|
|
#define VALID_MAGIC(x) (((x) & 0xfffff000) == 0xdbc01000)
|
2008-08-05 12:23:58 +00:00
|
|
|
#define TENSION_CONST (0.3)
|
|
|
|
|
2015-07-19 13:31:15 +00:00
|
|
|
#define GIF_DISPOSE_UNSPECIFIED 0
|
|
|
|
#define GIF_DISPOSE_DO_NOT_DISPOSE 1
|
|
|
|
#define GIF_DISPOSE_RESTORE_TO_BKGND 2
|
|
|
|
#define GIF_DISPOSE_RESTORE_TO_PREV 3
|
|
|
|
|
2015-11-22 10:10:02 +00:00
|
|
|
|
2012-03-05 20:17:42 +00:00
|
|
|
COLORREF ARGB2COLORREF(ARGB color) DECLSPEC_HIDDEN;
|
|
|
|
HBITMAP ARGB2BMP(ARGB color) DECLSPEC_HIDDEN;
|
2008-03-25 17:34:57 +00:00
|
|
|
extern INT arc2polybezier(GpPointF * points, REAL x1, REAL y1, REAL x2, REAL y2,
|
2012-03-05 20:17:42 +00:00
|
|
|
REAL startAngle, REAL sweepAngle) DECLSPEC_HIDDEN;
|
|
|
|
extern REAL gdiplus_atan2(REAL dy, REAL dx) DECLSPEC_HIDDEN;
|
|
|
|
extern GpStatus hresult_to_status(HRESULT res) DECLSPEC_HIDDEN;
|
2012-12-11 21:40:15 +00:00
|
|
|
extern REAL units_to_pixels(REAL units, GpUnit unit, REAL dpi) DECLSPEC_HIDDEN;
|
|
|
|
extern REAL pixels_to_units(REAL pixels, GpUnit unit, REAL dpi) DECLSPEC_HIDDEN;
|
|
|
|
extern REAL units_scale(GpUnit from, GpUnit to, REAL dpi) DECLSPEC_HIDDEN;
|
2010-11-20 11:24:17 +00:00
|
|
|
|
2017-09-17 12:34:15 +00:00
|
|
|
#define WineCoordinateSpaceGdiDevice ((GpCoordinateSpace)4)
|
|
|
|
|
|
|
|
extern GpStatus gdi_transform_acquire(GpGraphics *graphics);
|
|
|
|
extern GpStatus gdi_transform_release(GpGraphics *graphics);
|
2016-11-17 22:35:44 +00:00
|
|
|
extern GpStatus get_graphics_transform(GpGraphics *graphics, GpCoordinateSpace dst_space,
|
|
|
|
GpCoordinateSpace src_space, GpMatrix *matrix) DECLSPEC_HIDDEN;
|
2017-09-17 12:34:15 +00:00
|
|
|
extern GpStatus gdip_transform_points(GpGraphics *graphics, GpCoordinateSpace dst_space,
|
|
|
|
GpCoordinateSpace src_space, GpPointF *points, INT count) DECLSPEC_HIDDEN;
|
2016-11-17 22:35:44 +00:00
|
|
|
|
2012-03-05 20:17:42 +00:00
|
|
|
extern GpStatus graphics_from_image(GpImage *image, GpGraphics **graphics) DECLSPEC_HIDDEN;
|
2017-09-17 12:34:15 +00:00
|
|
|
extern GpStatus encode_image_png(GpImage *image, IStream* stream, GDIPCONST EncoderParameters* params) DECLSPEC_HIDDEN;
|
2012-03-05 20:17:42 +00:00
|
|
|
|
|
|
|
extern GpStatus METAFILE_GetGraphicsContext(GpMetafile* metafile, GpGraphics **result) DECLSPEC_HIDDEN;
|
|
|
|
extern GpStatus METAFILE_GetDC(GpMetafile* metafile, HDC *hdc) DECLSPEC_HIDDEN;
|
|
|
|
extern GpStatus METAFILE_ReleaseDC(GpMetafile* metafile, HDC hdc) DECLSPEC_HIDDEN;
|
2016-08-19 09:28:13 +00:00
|
|
|
extern GpStatus METAFILE_GraphicsClear(GpMetafile* metafile, ARGB color) DECLSPEC_HIDDEN;
|
2014-04-22 15:42:03 +00:00
|
|
|
extern GpStatus METAFILE_FillRectangles(GpMetafile* metafile, GpBrush* brush,
|
|
|
|
GDIPCONST GpRectF* rects, INT count) DECLSPEC_HIDDEN;
|
2016-11-17 22:35:44 +00:00
|
|
|
extern GpStatus METAFILE_SetClipRect(GpMetafile* metafile,
|
|
|
|
REAL x, REAL y, REAL width, REAL height, CombineMode mode) DECLSPEC_HIDDEN;
|
2017-09-17 12:34:15 +00:00
|
|
|
extern GpStatus METAFILE_SetClipRegion(GpMetafile* metafile, GpRegion* region, CombineMode mode) DECLSPEC_HIDDEN;
|
2014-04-22 15:42:03 +00:00
|
|
|
extern GpStatus METAFILE_SetPageTransform(GpMetafile* metafile, GpUnit unit, REAL scale) DECLSPEC_HIDDEN;
|
2016-11-17 22:35:44 +00:00
|
|
|
extern GpStatus METAFILE_SetWorldTransform(GpMetafile* metafile, GDIPCONST GpMatrix* transform) DECLSPEC_HIDDEN;
|
2016-08-19 09:28:13 +00:00
|
|
|
extern GpStatus METAFILE_ScaleWorldTransform(GpMetafile* metafile, REAL sx, REAL sy, MatrixOrder order) DECLSPEC_HIDDEN;
|
2016-11-17 22:35:44 +00:00
|
|
|
extern GpStatus METAFILE_MultiplyWorldTransform(GpMetafile* metafile, GDIPCONST GpMatrix* matrix, MatrixOrder order) DECLSPEC_HIDDEN;
|
|
|
|
extern GpStatus METAFILE_RotateWorldTransform(GpMetafile* metafile, REAL angle, MatrixOrder order) DECLSPEC_HIDDEN;
|
|
|
|
extern GpStatus METAFILE_TranslateWorldTransform(GpMetafile* metafile, REAL dx, REAL dy, MatrixOrder order) DECLSPEC_HIDDEN;
|
2016-08-19 09:28:13 +00:00
|
|
|
extern GpStatus METAFILE_ResetWorldTransform(GpMetafile* metafile) DECLSPEC_HIDDEN;
|
2016-11-17 22:35:44 +00:00
|
|
|
extern GpStatus METAFILE_BeginContainer(GpMetafile* metafile, GDIPCONST GpRectF *dstrect,
|
|
|
|
GDIPCONST GpRectF *srcrect, GpUnit unit, DWORD StackIndex) DECLSPEC_HIDDEN;
|
|
|
|
extern GpStatus METAFILE_BeginContainerNoParams(GpMetafile* metafile, DWORD StackIndex) DECLSPEC_HIDDEN;
|
|
|
|
extern GpStatus METAFILE_EndContainer(GpMetafile* metafile, DWORD StackIndex) DECLSPEC_HIDDEN;
|
|
|
|
extern GpStatus METAFILE_SaveGraphics(GpMetafile* metafile, DWORD StackIndex) DECLSPEC_HIDDEN;
|
|
|
|
extern GpStatus METAFILE_RestoreGraphics(GpMetafile* metafile, DWORD StackIndex) DECLSPEC_HIDDEN;
|
2012-03-05 20:17:42 +00:00
|
|
|
extern GpStatus METAFILE_GraphicsDeleted(GpMetafile* metafile) DECLSPEC_HIDDEN;
|
2017-09-17 12:34:15 +00:00
|
|
|
extern GpStatus METAFILE_DrawImagePointsRect(GpMetafile* metafile, GpImage *image,
|
|
|
|
GDIPCONST GpPointF *points, INT count, REAL srcx, REAL srcy, REAL srcwidth,
|
|
|
|
REAL srcheight, GpUnit srcUnit, GDIPCONST GpImageAttributes* imageAttributes,
|
|
|
|
DrawImageAbort callback, VOID *callbackData) DECLSPEC_HIDDEN;
|
|
|
|
extern GpStatus METAFILE_AddSimpleProperty(GpMetafile *metafile, SHORT prop, SHORT val) DECLSPEC_HIDDEN;
|
|
|
|
extern GpStatus METAFILE_DrawPath(GpMetafile *metafile, GpPen *pen, GpPath *path) DECLSPEC_HIDDEN;
|
|
|
|
extern GpStatus METAFILE_FillPath(GpMetafile *metafile, GpBrush *brush, GpPath *path) DECLSPEC_HIDDEN;
|
2018-01-18 23:17:41 +00:00
|
|
|
extern void METAFILE_Free(GpMetafile *metafile) DECLSPEC_HIDDEN;
|
2008-03-25 17:34:57 +00:00
|
|
|
|
2014-04-22 15:42:03 +00:00
|
|
|
extern void calc_curve_bezier(const GpPointF *pts, REAL tension, REAL *x1,
|
2012-03-05 20:17:42 +00:00
|
|
|
REAL *y1, REAL *x2, REAL *y2) DECLSPEC_HIDDEN;
|
2008-08-05 12:23:58 +00:00
|
|
|
extern void calc_curve_bezier_endp(REAL xend, REAL yend, REAL xadj, REAL yadj,
|
2012-03-05 20:17:42 +00:00
|
|
|
REAL tension, REAL *x, REAL *y) DECLSPEC_HIDDEN;
|
|
|
|
|
|
|
|
extern void free_installed_fonts(void) DECLSPEC_HIDDEN;
|
2008-08-05 12:23:58 +00:00
|
|
|
|
2012-03-05 20:17:42 +00:00
|
|
|
extern BOOL lengthen_path(GpPath *path, INT len) DECLSPEC_HIDDEN;
|
2008-09-07 10:32:49 +00:00
|
|
|
|
2017-09-17 12:34:15 +00:00
|
|
|
extern DWORD write_region_data(const GpRegion *region, void *data) DECLSPEC_HIDDEN;
|
|
|
|
extern DWORD write_path_data(GpPath *path, void *data) DECLSPEC_HIDDEN;
|
|
|
|
|
2012-03-05 20:17:42 +00:00
|
|
|
extern GpStatus trace_path(GpGraphics *graphics, GpPath *path) DECLSPEC_HIDDEN;
|
2008-12-06 09:26:01 +00:00
|
|
|
|
2008-09-07 10:32:49 +00:00
|
|
|
typedef struct region_element region_element;
|
2012-03-05 20:17:42 +00:00
|
|
|
extern void delete_element(region_element *element) DECLSPEC_HIDDEN;
|
|
|
|
|
2018-01-18 23:17:41 +00:00
|
|
|
extern GpStatus get_hatch_data(GpHatchStyle hatchstyle, const char **result) DECLSPEC_HIDDEN;
|
2008-09-07 10:32:49 +00:00
|
|
|
|
2012-12-11 21:40:15 +00:00
|
|
|
static inline INT gdip_round(REAL x)
|
2008-03-25 17:34:57 +00:00
|
|
|
{
|
2009-04-11 08:58:56 +00:00
|
|
|
return (INT) floorf(x + 0.5);
|
2008-03-25 17:34:57 +00:00
|
|
|
}
|
|
|
|
|
2009-09-03 15:07:25 +00:00
|
|
|
static inline INT ceilr(REAL x)
|
|
|
|
{
|
|
|
|
return (INT) ceilf(x);
|
|
|
|
}
|
|
|
|
|
2008-03-25 17:34:57 +00:00
|
|
|
static inline REAL deg2rad(REAL degrees)
|
|
|
|
{
|
|
|
|
return M_PI * degrees / 180.0;
|
|
|
|
}
|
|
|
|
|
2010-04-20 08:30:10 +00:00
|
|
|
static inline ARGB color_over(ARGB bg, ARGB fg)
|
|
|
|
{
|
|
|
|
BYTE b, g, r, a;
|
|
|
|
BYTE bg_alpha, fg_alpha;
|
|
|
|
|
|
|
|
fg_alpha = (fg>>24)&0xff;
|
|
|
|
|
|
|
|
if (fg_alpha == 0xff) return fg;
|
|
|
|
|
|
|
|
if (fg_alpha == 0) return bg;
|
|
|
|
|
|
|
|
bg_alpha = (((bg>>24)&0xff) * (0xff-fg_alpha)) / 0xff;
|
|
|
|
|
|
|
|
if (bg_alpha == 0) return fg;
|
|
|
|
|
|
|
|
a = bg_alpha + fg_alpha;
|
Sync avifil, credui, crypt32, cryptdlg, cryptui, dnsapi, gdiplus, hhctrl, hnetcfg, iccvid, imaadp32, imm32, jscript, localspl, localui, mapi32, mciavi32, mcicda, mciqtz32, mciseq, mciwave, mshtml, msrle32, msvfw32, msvidc32, msxml3, oleacc, oleaut32 to Wine 1.2rc5 (Samuel Serapion, small changes by me)
Remove Esperanto and Walon languages from comctl32, comdlg32, mpr, msi, shlwapi, wininet
svn path=/trunk/; revision=47920
2010-07-01 11:09:47 +00:00
|
|
|
b = ((bg&0xff)*bg_alpha + (fg&0xff)*fg_alpha)/a;
|
|
|
|
g = (((bg>>8)&0xff)*bg_alpha + ((fg>>8)&0xff)*fg_alpha)/a;
|
|
|
|
r = (((bg>>16)&0xff)*bg_alpha + ((fg>>16)&0xff)*fg_alpha)/a;
|
2010-04-20 08:30:10 +00:00
|
|
|
|
|
|
|
return (a<<24)|(r<<16)|(g<<8)|b;
|
|
|
|
}
|
|
|
|
|
2015-07-19 13:31:15 +00:00
|
|
|
/* fg is premult, bg and return value are not */
|
|
|
|
static inline ARGB color_over_fgpremult(ARGB bg, ARGB fg)
|
|
|
|
{
|
|
|
|
BYTE b, g, r, a;
|
|
|
|
BYTE bg_alpha, fg_alpha;
|
|
|
|
|
|
|
|
fg_alpha = (fg>>24)&0xff;
|
|
|
|
|
|
|
|
if (fg_alpha == 0) return bg;
|
|
|
|
|
|
|
|
bg_alpha = (((bg>>24)&0xff) * (0xff-fg_alpha)) / 0xff;
|
|
|
|
|
|
|
|
a = bg_alpha + fg_alpha;
|
|
|
|
b = ((bg&0xff)*bg_alpha + (fg&0xff)*0xff)/a;
|
|
|
|
g = (((bg>>8)&0xff)*bg_alpha + ((fg>>8)&0xff)*0xff)/a;
|
|
|
|
r = (((bg>>16)&0xff)*bg_alpha + ((fg>>16)&0xff)*0xff)/a;
|
|
|
|
|
|
|
|
return (a<<24)|(r<<16)|(g<<8)|b;
|
|
|
|
}
|
|
|
|
|
2014-04-22 15:42:03 +00:00
|
|
|
extern const char *debugstr_rectf(const RectF* rc) DECLSPEC_HIDDEN;
|
2009-05-23 10:32:19 +00:00
|
|
|
|
2014-04-22 15:42:03 +00:00
|
|
|
extern const char *debugstr_pointf(const PointF* pt) DECLSPEC_HIDDEN;
|
2010-03-04 13:34:05 +00:00
|
|
|
|
2009-09-03 15:07:25 +00:00
|
|
|
extern void convert_32bppARGB_to_32bppPARGB(UINT width, UINT height,
|
2012-03-05 20:17:42 +00:00
|
|
|
BYTE *dst_bits, INT dst_stride, const BYTE *src_bits, INT src_stride) DECLSPEC_HIDDEN;
|
2009-09-03 15:07:25 +00:00
|
|
|
|
2012-03-05 20:17:42 +00:00
|
|
|
extern GpStatus convert_pixels(INT width, INT height,
|
2010-03-04 13:34:05 +00:00
|
|
|
INT dst_stride, BYTE *dst_bits, PixelFormat dst_format,
|
2012-12-11 21:40:15 +00:00
|
|
|
INT src_stride, const BYTE *src_bits, PixelFormat src_format, ColorPalette *palette) DECLSPEC_HIDDEN;
|
|
|
|
|
2016-08-19 09:28:13 +00:00
|
|
|
extern PixelFormat apply_image_attributes(const GpImageAttributes *attributes, LPBYTE data,
|
|
|
|
UINT width, UINT height, INT stride, ColorAdjustType type, PixelFormat fmt) DECLSPEC_HIDDEN;
|
|
|
|
|
2012-12-11 21:40:15 +00:00
|
|
|
struct GpMatrix{
|
|
|
|
REAL matrix[6];
|
|
|
|
};
|
2010-03-04 13:34:05 +00:00
|
|
|
|
2008-03-25 17:34:57 +00:00
|
|
|
struct GpPen{
|
|
|
|
UINT style;
|
|
|
|
GpUnit unit;
|
|
|
|
REAL width;
|
|
|
|
GpLineCap endcap;
|
|
|
|
GpLineCap startcap;
|
|
|
|
GpDashCap dashcap;
|
|
|
|
GpCustomLineCap *customstart;
|
|
|
|
GpCustomLineCap *customend;
|
|
|
|
GpLineJoin join;
|
|
|
|
REAL miterlimit;
|
|
|
|
GpDashStyle dash;
|
|
|
|
REAL *dashes;
|
|
|
|
INT numdashes;
|
|
|
|
REAL offset; /* dash offset */
|
|
|
|
GpBrush *brush;
|
2008-08-05 12:23:58 +00:00
|
|
|
GpPenAlignment align;
|
2016-03-02 10:34:40 +00:00
|
|
|
GpMatrix transform;
|
2008-03-25 17:34:57 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
struct GpGraphics{
|
|
|
|
HDC hdc;
|
|
|
|
HWND hwnd;
|
2009-05-09 09:26:16 +00:00
|
|
|
BOOL owndc;
|
2012-12-11 21:40:15 +00:00
|
|
|
BOOL alpha_hdc;
|
2010-04-20 08:30:10 +00:00
|
|
|
GpImage *image;
|
2013-05-23 17:23:00 +00:00
|
|
|
ImageType image_type;
|
2008-03-25 17:34:57 +00:00
|
|
|
SmoothingMode smoothing;
|
|
|
|
CompositingQuality compqual;
|
|
|
|
InterpolationMode interpolation;
|
|
|
|
PixelOffsetMode pixeloffset;
|
|
|
|
CompositingMode compmode;
|
|
|
|
TextRenderingHint texthint;
|
|
|
|
GpUnit unit; /* page unit */
|
|
|
|
REAL scale; /* page scale */
|
2012-12-11 21:40:15 +00:00
|
|
|
REAL xres, yres;
|
|
|
|
GpMatrix worldtrans; /* world transform */
|
2008-09-07 10:32:49 +00:00
|
|
|
BOOL busy; /* hdc handle obtained by GdipGetDC */
|
2013-09-19 15:10:19 +00:00
|
|
|
GpRegion *clip; /* in device coords */
|
2008-12-06 09:26:01 +00:00
|
|
|
UINT textcontrast; /* not used yet. get/set only */
|
2009-09-03 15:07:25 +00:00
|
|
|
struct list containers;
|
|
|
|
GraphicsContainer contid; /* last-issued container ID */
|
2012-05-19 10:03:40 +00:00
|
|
|
INT origin_x, origin_y;
|
2017-09-17 12:34:15 +00:00
|
|
|
INT gdi_transform_acquire_count, gdi_transform_save;
|
|
|
|
GpMatrix gdi_transform;
|
2018-01-18 23:17:41 +00:00
|
|
|
HRGN gdi_clip;
|
2010-11-20 11:24:17 +00:00
|
|
|
/* For giving the caller an HDC when we technically can't: */
|
|
|
|
HBITMAP temp_hbitmap;
|
|
|
|
int temp_hbitmap_width;
|
|
|
|
int temp_hbitmap_height;
|
|
|
|
BYTE *temp_bits;
|
|
|
|
HDC temp_hdc;
|
2008-03-25 17:34:57 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
struct GpBrush{
|
|
|
|
GpBrushType bt;
|
|
|
|
};
|
|
|
|
|
2009-01-27 18:03:33 +00:00
|
|
|
struct GpHatch{
|
|
|
|
GpBrush brush;
|
2018-01-18 23:17:41 +00:00
|
|
|
GpHatchStyle hatchstyle;
|
2009-01-27 18:03:33 +00:00
|
|
|
ARGB forecol;
|
|
|
|
ARGB backcol;
|
|
|
|
};
|
|
|
|
|
2008-03-25 17:34:57 +00:00
|
|
|
struct GpSolidFill{
|
|
|
|
GpBrush brush;
|
|
|
|
ARGB color;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct GpPathGradient{
|
|
|
|
GpBrush brush;
|
2012-05-19 10:03:40 +00:00
|
|
|
GpPath* path;
|
2008-03-25 17:34:57 +00:00
|
|
|
ARGB centercolor;
|
|
|
|
GpWrapMode wrap;
|
|
|
|
BOOL gamma;
|
|
|
|
GpPointF center;
|
|
|
|
GpPointF focus;
|
2008-08-05 12:23:58 +00:00
|
|
|
REAL* blendfac; /* blend factors */
|
|
|
|
REAL* blendpos; /* blend positions */
|
|
|
|
INT blendcount;
|
2012-05-19 10:03:40 +00:00
|
|
|
ARGB *surroundcolors;
|
|
|
|
INT surroundcolorcount;
|
|
|
|
ARGB* pblendcolor; /* preset blend colors */
|
|
|
|
REAL* pblendpos; /* preset blend positions */
|
|
|
|
INT pblendcount;
|
2012-12-11 21:40:15 +00:00
|
|
|
GpMatrix transform;
|
2008-03-25 17:34:57 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
struct GpLineGradient{
|
|
|
|
GpBrush brush;
|
|
|
|
GpPointF startpoint;
|
|
|
|
GpPointF endpoint;
|
|
|
|
ARGB startcolor;
|
|
|
|
ARGB endcolor;
|
2009-05-09 09:26:16 +00:00
|
|
|
RectF rect;
|
2008-03-25 17:34:57 +00:00
|
|
|
GpWrapMode wrap;
|
|
|
|
BOOL gamma;
|
2009-05-09 09:26:16 +00:00
|
|
|
REAL* blendfac; /* blend factors */
|
|
|
|
REAL* blendpos; /* blend positions */
|
|
|
|
INT blendcount;
|
2009-11-28 15:26:02 +00:00
|
|
|
ARGB* pblendcolor; /* preset blend colors */
|
|
|
|
REAL* pblendpos; /* preset blend positions */
|
|
|
|
INT pblendcount;
|
2017-09-17 12:34:15 +00:00
|
|
|
GpMatrix transform;
|
2008-03-25 17:34:57 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
struct GpTexture{
|
|
|
|
GpBrush brush;
|
2012-12-11 21:40:15 +00:00
|
|
|
GpMatrix transform;
|
2010-03-04 13:34:05 +00:00
|
|
|
GpImage *image;
|
2012-03-05 20:17:42 +00:00
|
|
|
GpImageAttributes *imageattributes;
|
|
|
|
BYTE *bitmap_bits; /* image bits converted to ARGB and run through imageattributes */
|
2008-03-25 17:34:57 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
struct GpPath{
|
|
|
|
GpFillMode fill;
|
|
|
|
GpPathData pathdata;
|
|
|
|
BOOL newfigure; /* whether the next drawing action starts a new figure */
|
|
|
|
INT datalen; /* size of the arrays in pathdata */
|
|
|
|
};
|
|
|
|
|
|
|
|
struct GpPathIterator{
|
|
|
|
GpPathData pathdata;
|
|
|
|
INT subpath_pos; /* for NextSubpath methods */
|
|
|
|
INT marker_pos; /* for NextMarker methods */
|
|
|
|
INT pathtype_pos; /* for NextPathType methods */
|
|
|
|
};
|
|
|
|
|
|
|
|
struct GpCustomLineCap{
|
2017-03-05 21:15:16 +00:00
|
|
|
CustomLineCapType type;
|
2008-03-25 17:34:57 +00:00
|
|
|
GpPathData pathdata;
|
|
|
|
BOOL fill; /* TRUE for fill, FALSE for stroke */
|
|
|
|
GpLineCap cap; /* as far as I can tell, this value is ignored */
|
|
|
|
REAL inset; /* how much to adjust the end of the line */
|
2008-08-05 12:23:58 +00:00
|
|
|
GpLineJoin join;
|
|
|
|
REAL scale;
|
2008-03-25 17:34:57 +00:00
|
|
|
};
|
|
|
|
|
2016-08-19 09:28:13 +00:00
|
|
|
struct GpAdjustableArrowCap{
|
2008-09-07 10:32:49 +00:00
|
|
|
GpCustomLineCap cap;
|
|
|
|
};
|
|
|
|
|
2008-03-25 17:34:57 +00:00
|
|
|
struct GpImage{
|
2015-07-19 13:31:15 +00:00
|
|
|
IWICBitmapDecoder *decoder;
|
2008-03-25 17:34:57 +00:00
|
|
|
ImageType type;
|
2009-11-28 15:26:02 +00:00
|
|
|
GUID format;
|
2008-06-01 13:14:02 +00:00
|
|
|
UINT flags;
|
2012-12-11 21:40:15 +00:00
|
|
|
UINT frame_count, current_frame;
|
|
|
|
ColorPalette *palette;
|
2010-03-04 13:34:05 +00:00
|
|
|
REAL xres, yres;
|
2017-03-05 21:15:16 +00:00
|
|
|
LONG busy;
|
2008-03-25 17:34:57 +00:00
|
|
|
};
|
|
|
|
|
2018-01-18 23:17:41 +00:00
|
|
|
#define EmfPlusObjectTableSize 64
|
|
|
|
|
|
|
|
typedef enum EmfPlusObjectType
|
|
|
|
{
|
|
|
|
ObjectTypeInvalid,
|
|
|
|
ObjectTypeBrush,
|
|
|
|
ObjectTypePen,
|
|
|
|
ObjectTypePath,
|
|
|
|
ObjectTypeRegion,
|
|
|
|
ObjectTypeImage,
|
|
|
|
ObjectTypeFont,
|
|
|
|
ObjectTypeStringFormat,
|
|
|
|
ObjectTypeImageAttributes,
|
|
|
|
ObjectTypeCustomLineCap,
|
|
|
|
ObjectTypeMax = ObjectTypeCustomLineCap,
|
|
|
|
} EmfPlusObjectType;
|
|
|
|
|
|
|
|
/* Deserialized EmfPlusObject record. */
|
|
|
|
struct emfplus_object {
|
|
|
|
EmfPlusObjectType type;
|
|
|
|
union {
|
|
|
|
GpBrush *brush;
|
|
|
|
GpPen *pen;
|
|
|
|
GpPath *path;
|
|
|
|
GpRegion *region;
|
|
|
|
GpImage *image;
|
|
|
|
GpFont *font;
|
|
|
|
GpImageAttributes *image_attributes;
|
|
|
|
void *object;
|
|
|
|
} u;
|
|
|
|
};
|
|
|
|
|
2008-03-25 17:34:57 +00:00
|
|
|
struct GpMetafile{
|
|
|
|
GpImage image;
|
|
|
|
GpRectF bounds;
|
|
|
|
GpUnit unit;
|
2012-03-05 20:17:42 +00:00
|
|
|
MetafileType metafile_type;
|
|
|
|
HENHMETAFILE hemf;
|
2012-12-11 21:40:15 +00:00
|
|
|
int preserve_hemf; /* if true, hemf belongs to the app and should not be deleted */
|
2012-03-05 20:17:42 +00:00
|
|
|
|
|
|
|
/* recording */
|
|
|
|
HDC record_dc;
|
|
|
|
GpGraphics *record_graphics;
|
|
|
|
BYTE *comment_data;
|
|
|
|
DWORD comment_data_size;
|
|
|
|
DWORD comment_data_length;
|
2016-06-05 19:08:07 +00:00
|
|
|
IStream *record_stream;
|
2016-08-19 09:28:13 +00:00
|
|
|
BOOL auto_frame; /* If true, determine the frame automatically */
|
|
|
|
GpPointF auto_frame_min, auto_frame_max;
|
2017-09-17 12:34:15 +00:00
|
|
|
DWORD next_object_id;
|
2012-03-05 20:17:42 +00:00
|
|
|
|
|
|
|
/* playback */
|
|
|
|
GpGraphics *playback_graphics;
|
|
|
|
HDC playback_dc;
|
|
|
|
GpPointF playback_points[3];
|
2014-04-22 15:42:03 +00:00
|
|
|
GpRectF src_rect;
|
2012-03-05 20:17:42 +00:00
|
|
|
HANDLETABLE *handle_table;
|
|
|
|
int handle_count;
|
2016-11-17 22:35:44 +00:00
|
|
|
XFORM gdiworldtransform;
|
2014-04-22 15:42:03 +00:00
|
|
|
GpMatrix *world_transform;
|
|
|
|
GpUnit page_unit;
|
|
|
|
REAL page_scale;
|
2016-08-19 09:28:13 +00:00
|
|
|
GpRegion *base_clip; /* clip region in device space for all metafile output */
|
2016-11-17 22:35:44 +00:00
|
|
|
GpRegion *clip; /* clip region within the metafile */
|
|
|
|
struct list containers;
|
2018-01-18 23:17:41 +00:00
|
|
|
struct emfplus_object objtable[EmfPlusObjectTableSize];
|
2008-03-25 17:34:57 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
struct GpBitmap{
|
|
|
|
GpImage image;
|
|
|
|
INT width;
|
|
|
|
INT height;
|
|
|
|
PixelFormat format;
|
|
|
|
ImageLockMode lockmode;
|
|
|
|
BYTE *bitmapbits; /* pointer to the buffer we passed in BitmapLockBits */
|
2009-09-03 15:07:25 +00:00
|
|
|
HBITMAP hbitmap;
|
|
|
|
HDC hdc;
|
|
|
|
BYTE *bits; /* actual image bits if this is a DIB */
|
|
|
|
INT stride; /* stride of bits if this is a DIB */
|
2010-11-20 11:24:17 +00:00
|
|
|
BYTE *own_bits; /* image bits that need to be freed with this object */
|
2012-03-05 20:17:42 +00:00
|
|
|
INT lockx, locky; /* X and Y coordinates of the rect when a bitmap is locked for writing. */
|
2012-12-11 21:40:15 +00:00
|
|
|
IWICMetadataReader *metadata_reader; /* NULL if there is no metadata */
|
|
|
|
UINT prop_count;
|
|
|
|
PropertyItem *prop_item; /* cached image properties */
|
2008-03-25 17:34:57 +00:00
|
|
|
};
|
|
|
|
|
2008-12-06 09:26:01 +00:00
|
|
|
struct GpCachedBitmap{
|
|
|
|
GpImage *image;
|
|
|
|
};
|
|
|
|
|
2009-09-03 15:07:25 +00:00
|
|
|
struct color_key{
|
|
|
|
BOOL enabled;
|
|
|
|
ARGB low;
|
|
|
|
ARGB high;
|
|
|
|
};
|
|
|
|
|
2010-03-04 13:34:05 +00:00
|
|
|
struct color_matrix{
|
|
|
|
BOOL enabled;
|
|
|
|
ColorMatrixFlags flags;
|
|
|
|
ColorMatrix colormatrix;
|
|
|
|
ColorMatrix graymatrix;
|
|
|
|
};
|
|
|
|
|
2010-03-06 12:15:38 +00:00
|
|
|
struct color_remap_table{
|
|
|
|
BOOL enabled;
|
|
|
|
INT mapsize;
|
2012-05-19 10:03:40 +00:00
|
|
|
ColorMap *colormap;
|
2010-03-06 12:15:38 +00:00
|
|
|
};
|
|
|
|
|
2018-01-18 23:17:41 +00:00
|
|
|
enum imageattr_noop{
|
|
|
|
IMAGEATTR_NOOP_UNDEFINED,
|
|
|
|
IMAGEATTR_NOOP_SET,
|
|
|
|
IMAGEATTR_NOOP_CLEAR,
|
|
|
|
};
|
|
|
|
|
2008-03-25 17:34:57 +00:00
|
|
|
struct GpImageAttributes{
|
|
|
|
WrapMode wrap;
|
Sync avifil, credui, crypt32, cryptdlg, cryptui, dnsapi, gdiplus, hhctrl, hnetcfg, iccvid, imaadp32, imm32, jscript, localspl, localui, mapi32, mciavi32, mcicda, mciqtz32, mciseq, mciwave, mshtml, msrle32, msvfw32, msvidc32, msxml3, oleacc, oleaut32 to Wine 1.2rc5 (Samuel Serapion, small changes by me)
Remove Esperanto and Walon languages from comctl32, comdlg32, mpr, msi, shlwapi, wininet
svn path=/trunk/; revision=47920
2010-07-01 11:09:47 +00:00
|
|
|
ARGB outside_color;
|
|
|
|
BOOL clamp;
|
2009-09-03 15:07:25 +00:00
|
|
|
struct color_key colorkeys[ColorAdjustTypeCount];
|
2010-03-04 13:34:05 +00:00
|
|
|
struct color_matrix colormatrices[ColorAdjustTypeCount];
|
2010-03-06 12:15:38 +00:00
|
|
|
struct color_remap_table colorremaptables[ColorAdjustTypeCount];
|
2010-03-04 13:34:05 +00:00
|
|
|
BOOL gamma_enabled[ColorAdjustTypeCount];
|
|
|
|
REAL gamma[ColorAdjustTypeCount];
|
2018-01-18 23:17:41 +00:00
|
|
|
enum imageattr_noop noop[ColorAdjustTypeCount];
|
2008-03-25 17:34:57 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
struct GpFont{
|
2012-05-19 10:03:40 +00:00
|
|
|
GpFontFamily *family;
|
|
|
|
OUTLINETEXTMETRICW otm;
|
|
|
|
REAL emSize; /* in font units */
|
2008-07-02 08:19:00 +00:00
|
|
|
Unit unit;
|
2008-03-25 17:34:57 +00:00
|
|
|
};
|
|
|
|
|
2017-06-03 19:01:50 +00:00
|
|
|
extern const struct GpStringFormat default_drawstring_format DECLSPEC_HIDDEN;
|
|
|
|
|
2008-03-25 17:34:57 +00:00
|
|
|
struct GpStringFormat{
|
|
|
|
INT attr;
|
|
|
|
LANGID lang;
|
2008-08-05 12:23:58 +00:00
|
|
|
LANGID digitlang;
|
2008-03-25 17:34:57 +00:00
|
|
|
StringAlignment align;
|
|
|
|
StringTrimming trimming;
|
|
|
|
HotkeyPrefix hkprefix;
|
2017-06-03 19:01:50 +00:00
|
|
|
StringAlignment line_align;
|
2008-08-05 12:23:58 +00:00
|
|
|
StringDigitSubstitute digitsub;
|
|
|
|
INT tabcount;
|
|
|
|
REAL firsttab;
|
|
|
|
REAL *tabs;
|
2010-03-04 13:34:05 +00:00
|
|
|
CharacterRange *character_ranges;
|
|
|
|
INT range_count;
|
2012-12-11 21:40:15 +00:00
|
|
|
BOOL generic_typographic;
|
2008-03-25 17:34:57 +00:00
|
|
|
};
|
|
|
|
|
2017-06-03 19:01:50 +00:00
|
|
|
extern void init_generic_string_formats(void) DECLSPEC_HIDDEN;
|
|
|
|
extern void free_generic_string_formats(void) DECLSPEC_HIDDEN;
|
|
|
|
|
2008-07-02 08:19:00 +00:00
|
|
|
struct GpFontCollection{
|
2008-12-06 09:26:01 +00:00
|
|
|
GpFontFamily **FontFamilies;
|
|
|
|
INT count;
|
2009-05-23 10:32:19 +00:00
|
|
|
INT allocated;
|
2008-07-02 08:19:00 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
struct GpFontFamily{
|
2008-08-05 12:23:58 +00:00
|
|
|
WCHAR FamilyName[LF_FACESIZE];
|
2012-05-19 10:03:40 +00:00
|
|
|
UINT16 em_height, ascent, descent, line_spacing; /* in font units */
|
|
|
|
int dpi;
|
2008-08-05 12:23:58 +00:00
|
|
|
};
|
|
|
|
|
2008-09-07 10:32:49 +00:00
|
|
|
/* internal use */
|
|
|
|
typedef enum RegionType
|
|
|
|
{
|
|
|
|
RegionDataRect = 0x10000000,
|
|
|
|
RegionDataPath = 0x10000001,
|
|
|
|
RegionDataEmptyRect = 0x10000002,
|
|
|
|
RegionDataInfiniteRect = 0x10000003,
|
|
|
|
} RegionType;
|
|
|
|
|
|
|
|
struct region_element
|
2008-08-05 12:23:58 +00:00
|
|
|
{
|
|
|
|
DWORD type; /* Rectangle, Path, SpecialRectangle, or CombineMode */
|
|
|
|
union
|
|
|
|
{
|
|
|
|
GpRectF rect;
|
2014-04-22 15:42:03 +00:00
|
|
|
GpPath *path;
|
2008-08-05 12:23:58 +00:00
|
|
|
struct
|
|
|
|
{
|
|
|
|
struct region_element *left; /* the original region */
|
|
|
|
struct region_element *right; /* what *left was combined with */
|
|
|
|
} combine;
|
|
|
|
} elementdata;
|
2008-09-07 10:32:49 +00:00
|
|
|
};
|
2008-08-05 12:23:58 +00:00
|
|
|
|
|
|
|
struct GpRegion{
|
2014-04-22 15:42:03 +00:00
|
|
|
DWORD num_children;
|
2008-08-05 12:23:58 +00:00
|
|
|
region_element node;
|
2008-07-02 08:19:00 +00:00
|
|
|
};
|
|
|
|
|
2018-01-18 23:17:41 +00:00
|
|
|
struct memory_buffer
|
|
|
|
{
|
|
|
|
const BYTE *buffer;
|
|
|
|
INT size, pos;
|
|
|
|
};
|
|
|
|
|
|
|
|
static inline void init_memory_buffer(struct memory_buffer *mbuf, const BYTE *buffer, INT size)
|
|
|
|
{
|
|
|
|
mbuf->buffer = buffer;
|
|
|
|
mbuf->size = size;
|
|
|
|
mbuf->pos = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
static inline const void *buffer_read(struct memory_buffer *mbuf, INT size)
|
|
|
|
{
|
|
|
|
if (mbuf->size - mbuf->pos >= size)
|
|
|
|
{
|
|
|
|
const void *data = mbuf->buffer + mbuf->pos;
|
|
|
|
mbuf->pos += size;
|
|
|
|
return data;
|
|
|
|
}
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
2012-03-05 20:17:42 +00:00
|
|
|
typedef GpStatus (*gdip_format_string_callback)(HDC hdc,
|
|
|
|
GDIPCONST WCHAR *string, INT index, INT length, GDIPCONST GpFont *font,
|
|
|
|
GDIPCONST RectF *rect, GDIPCONST GpStringFormat *format,
|
2012-05-19 10:03:40 +00:00
|
|
|
INT lineno, const RectF *bounds, INT *underlined_indexes,
|
|
|
|
INT underlined_index_count, void *user_data);
|
2012-03-05 20:17:42 +00:00
|
|
|
|
|
|
|
GpStatus gdip_format_string(HDC hdc,
|
|
|
|
GDIPCONST WCHAR *string, INT length, GDIPCONST GpFont *font,
|
2013-05-23 17:23:00 +00:00
|
|
|
GDIPCONST RectF *rect, GDIPCONST GpStringFormat *format, int ignore_empty_clip,
|
2012-03-05 20:17:42 +00:00
|
|
|
gdip_format_string_callback callback, void *user_data) DECLSPEC_HIDDEN;
|
|
|
|
|
2012-12-11 21:40:15 +00:00
|
|
|
void get_log_fontW(const GpFont *, GpGraphics *, LOGFONTW *) DECLSPEC_HIDDEN;
|
|
|
|
|
2017-03-05 21:15:16 +00:00
|
|
|
static inline BOOL image_lock(GpImage *image, BOOL *unlock)
|
|
|
|
{
|
|
|
|
LONG tid = GetCurrentThreadId(), owner_tid;
|
|
|
|
owner_tid = InterlockedCompareExchange(&image->busy, tid, 0);
|
|
|
|
*unlock = !owner_tid;
|
|
|
|
return !owner_tid || owner_tid==tid;
|
|
|
|
}
|
|
|
|
|
|
|
|
static inline void image_unlock(GpImage *image, BOOL unlock)
|
|
|
|
{
|
|
|
|
if (unlock) image->busy = 0;
|
|
|
|
}
|
|
|
|
|
2018-03-09 12:09:03 +00:00
|
|
|
#endif
|