ReactOS  0.4.14-dev-552-g2fad488
gdiplus.c File Reference
#include <stdarg.h>
#include <math.h>
#include "windef.h"
#include "winbase.h"
#include "winerror.h"
#include "wine/debug.h"
#include "wingdi.h"
#include "objbase.h"
#include "winreg.h"
#include "shlwapi.h"
#include "gdiplus.h"
#include "gdiplus_private.h"
Include dependency graph for gdiplus.c:

Go to the source code of this file.

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (gdiplus)
 
static Status WINAPI NotificationHook (ULONG_PTR *token)
 
static void WINAPI NotificationUnhook (ULONG_PTR token)
 
BOOL WINAPI DllMain (HINSTANCE hinst, DWORD reason, LPVOID reserved)
 
Status WINAPI GdiplusStartup (ULONG_PTR *token, const struct GdiplusStartupInput *input, struct GdiplusStartupOutput *output)
 
GpStatus WINAPI GdiplusNotificationHook (ULONG_PTR *token)
 
void WINAPI GdiplusNotificationUnhook (ULONG_PTR token)
 
ULONG WINAPI GdiplusShutdown_wrapper (ULONG_PTR token)
 
void *WINGDIPAPI GdipAlloc (SIZE_T size)
 
void WINGDIPAPI GdipFree (void *ptr)
 
static void add_arc_part (GpPointF *pt, REAL x1, REAL y1, REAL x2, REAL y2, REAL start, REAL end, BOOL write_first)
 
static void unstretch_angle (REAL *angle, REAL rad_x, REAL rad_y)
 
INT arc2polybezier (GpPointF *points, REAL x1, REAL y1, REAL x2, REAL y2, REAL startAngle, REAL sweepAngle)
 
COLORREF ARGB2COLORREF (ARGB color)
 
HBITMAP ARGB2BMP (ARGB color)
 
REAL gdiplus_atan2 (REAL dy, REAL dx)
 
GpStatus hresult_to_status (HRESULT res)
 
REAL units_to_pixels (REAL units, GpUnit unit, REAL dpi)
 
REAL pixels_to_units (REAL pixels, GpUnit unit, REAL dpi)
 
REAL units_scale (GpUnit from, GpUnit to, REAL dpi)
 
void calc_curve_bezier (const GpPointF *pts, REAL tension, REAL *x1, REAL *y1, REAL *x2, REAL *y2)
 
void calc_curve_bezier_endp (REAL xend, REAL yend, REAL xadj, REAL yadj, REAL tension, REAL *x, REAL *y)
 
BOOL lengthen_path (GpPath *path, INT len)
 
void convert_32bppARGB_to_32bppPARGB (UINT width, UINT height, BYTE *dst_bits, INT dst_stride, const BYTE *src_bits, INT src_stride)
 
void delete_element (region_element *element)
 
const chardebugstr_rectf (const RectF *rc)
 
const chardebugstr_pointf (const PointF *pt)
 

Variables

static const REAL mm_per_inch = 25.4
 
static const REAL point_per_inch = 72.0
 

Function Documentation

◆ add_arc_part()

static void add_arc_part ( GpPointF pt,
REAL  x1,
REAL  y1,
REAL  x2,
REAL  y2,
REAL  start,
REAL  end,
BOOL  write_first 
)
static

Definition at line 162 of file gdiplus.c.

164 {
165  REAL center_x, center_y, rad_x, rad_y, cos_start, cos_end,
166  sin_start, sin_end, a, half;
167  INT i;
168 
169  rad_x = x2 / 2.0;
170  rad_y = y2 / 2.0;
171  center_x = x1 + rad_x;
172  center_y = y1 + rad_y;
173 
174  cos_start = cos(start);
175  cos_end = cos(end);
176  sin_start = sin(start);
177  sin_end = sin(end);
178 
179  half = (end - start) / 2.0;
180  a = 4.0 / 3.0 * (1 - cos(half)) / sin(half);
181 
182  if(write_first){
183  pt[0].X = cos_start;
184  pt[0].Y = sin_start;
185  }
186  pt[1].X = cos_start - a * sin_start;
187  pt[1].Y = sin_start + a * cos_start;
188 
189  pt[3].X = cos_end;
190  pt[3].Y = sin_end;
191  pt[2].X = cos_end + a * sin_end;
192  pt[2].Y = sin_end - a * cos_end;
193 
194  /* expand the points back from the unit circle to the ellipse */
195  for(i = (write_first ? 0 : 1); i < 4; i ++){
196  pt[i].X = pt[i].X * rad_x + center_x;
197  pt[i].Y = pt[i].Y * rad_y + center_y;
198  }
199 }
_In_ CLIPOBJ _In_ BRUSHOBJ _In_ LONG _In_ LONG y1
Definition: winddi.h:3706
#define pt(x, y)
Definition: drawing.c:79
_In_ CLIPOBJ _In_ BRUSHOBJ _In_ LONG x1
Definition: winddi.h:3706
GLuint GLuint end
Definition: gl.h:1545
int32_t INT
Definition: typedefs.h:56
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define a
Definition: ke_i.h:78
_STLP_DECLSPEC complex< float > _STLP_CALL cos(const complex< float > &)
_In_ CLIPOBJ _In_ BRUSHOBJ _In_ LONG _In_ LONG _In_ LONG _In_ LONG y2
Definition: winddi.h:3706
GLuint start
Definition: gl.h:1545
_In_ CLIPOBJ _In_ BRUSHOBJ _In_ LONG _In_ LONG _In_ LONG x2
Definition: winddi.h:3706
_STLP_DECLSPEC complex< float > _STLP_CALL sin(const complex< float > &)
GLboolean GLboolean GLboolean GLboolean a
Definition: glext.h:6204
float REAL
Definition: types.h:41

Referenced by arc2polybezier().

◆ arc2polybezier()

INT arc2polybezier ( GpPointF points,
REAL  x1,
REAL  y1,
REAL  x2,
REAL  y2,
REAL  startAngle,
REAL  sweepAngle 
)

Definition at line 223 of file gdiplus.c.

225 {
226  INT i;
227  REAL end_angle, start_angle, endAngle;
228 
229  endAngle = startAngle + sweepAngle;
230  unstretch_angle(&startAngle, x2 / 2.0, y2 / 2.0);
231  unstretch_angle(&endAngle, x2 / 2.0, y2 / 2.0);
232 
233  /* start_angle and end_angle are the iterative variables */
234  start_angle = startAngle;
235 
236  for(i = 0; i < MAX_ARC_PTS - 1; i += 3){
237  /* check if we've overshot the end angle */
238  if( sweepAngle > 0.0 )
239  {
240  if (start_angle >= endAngle) break;
241  end_angle = min(start_angle + M_PI_2, endAngle);
242  }
243  else
244  {
245  if (start_angle <= endAngle) break;
246  end_angle = max(start_angle - M_PI_2, endAngle);
247  }
248 
249  if (points)
250  add_arc_part(&points[i], x1, y1, x2, y2, start_angle, end_angle, i == 0);
251 
252  start_angle += M_PI_2 * (sweepAngle < 0.0 ? -1.0 : 1.0);
253  }
254 
255  if (i == 0) return 0;
256  else return i+1;
257 }
_In_ CLIPOBJ _In_ BRUSHOBJ _In_ LONG _In_ LONG y1
Definition: winddi.h:3706
#define max(a, b)
Definition: svc.c:63
#define MAX_ARC_PTS
_In_ CLIPOBJ _In_ BRUSHOBJ _In_ LONG x1
Definition: winddi.h:3706
int32_t INT
Definition: typedefs.h:56
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
GLsizei const GLfloat * points
Definition: glext.h:8112
#define M_PI_2
Definition: port.h:185
_In_ CLIPOBJ _In_ BRUSHOBJ _In_ LONG _In_ LONG _In_ LONG _In_ LONG y2
Definition: winddi.h:3706
static void unstretch_angle(REAL *angle, REAL rad_x, REAL rad_y)
Definition: gdiplus.c:205
#define min(a, b)
Definition: monoChain.cc:55
_In_ CLIPOBJ _In_ BRUSHOBJ _In_ LONG _In_ LONG _In_ LONG x2
Definition: winddi.h:3706
static void add_arc_part(GpPointF *pt, REAL x1, REAL y1, REAL x2, REAL y2, REAL start, REAL end, BOOL write_first)
Definition: gdiplus.c:162
float REAL
Definition: types.h:41

Referenced by GdipAddPathArc(), GdipAddPathEllipse(), and GdipAddPathPie().

◆ ARGB2BMP()

HBITMAP ARGB2BMP ( ARGB  color)

Definition at line 272 of file gdiplus.c.

273 {
274  BITMAPINFO bi;
275  HBITMAP result;
276  RGBQUAD *bits;
277  int alpha;
278 
279  if ((color & 0xff000000) == 0xff000000) return 0;
280 
281  bi.bmiHeader.biSize = sizeof(bi.bmiHeader);
282  bi.bmiHeader.biWidth = 1;
283  bi.bmiHeader.biHeight = 1;
284  bi.bmiHeader.biPlanes = 1;
285  bi.bmiHeader.biBitCount = 32;
287  bi.bmiHeader.biSizeImage = 0;
288  bi.bmiHeader.biXPelsPerMeter = 0;
289  bi.bmiHeader.biYPelsPerMeter = 0;
290  bi.bmiHeader.biClrUsed = 0;
291  bi.bmiHeader.biClrImportant = 0;
292 
293  result = CreateDIBSection(0, &bi, DIB_RGB_COLORS, (void*)&bits, NULL, 0);
294 
295  bits[0].rgbReserved = alpha = (color>>24)&0xff;
296  bits[0].rgbRed = ((color>>16)&0xff)*alpha/255;
297  bits[0].rgbGreen = ((color>>8)&0xff)*alpha/255;
298  bits[0].rgbBlue = (color&0xff)*alpha/255;
299 
300  return result;
301 }
BITMAPINFOHEADER bmiHeader
Definition: wingdi.h:1475
DWORD biClrImportant
Definition: amvideo.idl:40
LONG biXPelsPerMeter
Definition: amvideo.idl:37
LONG biYPelsPerMeter
Definition: amvideo.idl:38
GLenum GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * bits
Definition: glext.h:10929
GLuint color
Definition: glext.h:6243
DWORD biCompression
Definition: amvideo.idl:35
smooth NULL
Definition: ftsmooth.c:416
DWORD biSizeImage
Definition: amvideo.idl:36
HBITMAP WINAPI CreateDIBSection(HDC hDC, CONST BITMAPINFO *BitmapInfo, UINT Usage, VOID **Bits, HANDLE hSection, DWORD dwOffset)
Definition: bitmap.c:197
GLclampf GLclampf GLclampf alpha
Definition: gl.h:1740
static HBITMAP
Definition: button.c:44
#define DIB_RGB_COLORS
Definition: wingdi.h:366
GLuint64EXT * result
Definition: glext.h:11304
#define BI_RGB
Definition: precomp.h:34

Referenced by brush_fill_path().

◆ ARGB2COLORREF()

COLORREF ARGB2COLORREF ( ARGB  color)

Definition at line 259 of file gdiplus.c.

260 {
261  /*
262  Packing of these color structures:
263  COLORREF: 00bbggrr
264  ARGB: aarrggbb
265  FIXME:doesn't handle alpha channel
266  */
267  return ((color & 0x0000ff) << 16) +
268  (color & 0x00ff00) +
269  ((color & 0xff0000) >> 16);
270 }
GLuint color
Definition: glext.h:6243

Referenced by create_gdi_logbrush(), and get_gdi_brush_color().

◆ calc_curve_bezier()

void calc_curve_bezier ( const GpPointF pts,
REAL  tension,
REAL x1,
REAL y1,
REAL x2,
REAL y2 
)

Definition at line 379 of file gdiplus.c.

381 {
382  REAL xdiff, ydiff;
383 
384  /* calculate tangent */
385  xdiff = pts[2].X - pts[0].X;
386  ydiff = pts[2].Y - pts[0].Y;
387 
388  /* apply tangent to get control points */
389  *x1 = pts[1].X - tension * xdiff;
390  *y1 = pts[1].Y - tension * ydiff;
391  *x2 = pts[1].X + tension * xdiff;
392  *y2 = pts[1].Y + tension * ydiff;
393 }
_In_ CLIPOBJ _In_ BRUSHOBJ _In_ LONG _In_ LONG y1
Definition: winddi.h:3706
_In_ CLIPOBJ _In_ BRUSHOBJ _In_ LONG x1
Definition: winddi.h:3706
REAL Y
Definition: gdiplustypes.h:249
REAL X
Definition: gdiplustypes.h:248
_In_ CLIPOBJ _In_ BRUSHOBJ _In_ LONG _In_ LONG _In_ LONG _In_ LONG y2
Definition: winddi.h:3706
_In_ CLIPOBJ _In_ BRUSHOBJ _In_ LONG _In_ LONG _In_ LONG x2
Definition: winddi.h:3706
float REAL
Definition: types.h:41

Referenced by GdipAddPathClosedCurve2(), and GdipAddPathCurve2().

◆ calc_curve_bezier_endp()

void calc_curve_bezier_endp ( REAL  xend,
REAL  yend,
REAL  xadj,
REAL  yadj,
REAL  tension,
REAL x,
REAL y 
)

Definition at line 396 of file gdiplus.c.

398 {
399  /* tangent at endpoints is the line from the endpoint to the adjacent point */
400  *x = gdip_round(tension * (xadj - xend) + xend);
401  *y = gdip_round(tension * (yadj - yend) + yend);
402 }
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
static INT gdip_round(REAL x)
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548

Referenced by GdipAddPathCurve2().

◆ convert_32bppARGB_to_32bppPARGB()

void convert_32bppARGB_to_32bppPARGB ( UINT  width,
UINT  height,
BYTE dst_bits,
INT  dst_stride,
const BYTE src_bits,
INT  src_stride 
)

Definition at line 435 of file gdiplus.c.

437 {
438  INT x, y;
439  for (y=0; y<height; y++)
440  {
441  const BYTE *src=src_bits+y*src_stride;
442  BYTE *dst=dst_bits+y*dst_stride;
443  for (x=0; x<width; x++)
444  {
445  BYTE alpha=src[3];
446  *dst++ = (*src++ * alpha + 127) / 255;
447  *dst++ = (*src++ * alpha + 127) / 255;
448  *dst++ = (*src++ * alpha + 127) / 255;
449  *dst++ = *src++;
450  }
451  }
452 }
GLint GLint GLsizei width
Definition: gl.h:1546
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
int32_t INT
Definition: typedefs.h:56
unsigned char BYTE
Definition: mem.h:68
GLenum src
Definition: glext.h:6340
GLint GLint GLsizei GLsizei height
Definition: gl.h:1546
GLenum GLenum dst
Definition: glext.h:6340
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
GLclampf GLclampf GLclampf alpha
Definition: gl.h:1740

Referenced by alpha_blend_hdc_pixels(), and convert_pixels().

◆ debugstr_pointf()

const char* debugstr_pointf ( const PointF pt)

Definition at line 482 of file gdiplus.c.

483 {
484  if (!pt) return "(null)";
485  return wine_dbg_sprintf("(%0.2f,%0.2f)", pt->X, pt->Y);
486 }
#define pt(x, y)
Definition: drawing.c:79
const char * wine_dbg_sprintf(const char *format,...)
Definition: compat.c:271

Referenced by GdipCreateLineBrush(), GdipDrawImagePointsRect(), GdipEnumerateMetafileSrcRectDestPoints(), and GdipSetPathGradientCenterPoint().

◆ debugstr_rectf()

const char* debugstr_rectf ( const RectF rc)

Definition at line 476 of file gdiplus.c.

477 {
478  if (!rc) return "(null)";
479  return wine_dbg_sprintf("(%0.2f,%0.2f,%0.2f,%0.2f)", rc->X, rc->Y, rc->Width, rc->Height);
480 }
const char * wine_dbg_sprintf(const char *format,...)
Definition: compat.c:271
REAL Height
Definition: gdiplustypes.h:264
REAL X
Definition: gdiplustypes.h:261
REAL Width
Definition: gdiplustypes.h:263
REAL Y
Definition: gdiplustypes.h:262

Referenced by GdipBeginContainer(), GdipCombineRegionRect(), GdipDrawString(), GdipEnumerateMetafileSrcRectDestPoints(), GdipGetRegionBounds(), GdipMeasureCharacterRanges(), and GdipMeasureString().

◆ delete_element()

void delete_element ( region_element element)

Definition at line 455 of file gdiplus.c.

456 {
457  switch(element->type)
458  {
459  case RegionDataRect:
460  break;
461  case RegionDataPath:
462  GdipDeletePath(element->elementdata.path);
463  break;
464  case RegionDataEmptyRect:
466  break;
467  default:
468  delete_element(element->elementdata.combine.left);
469  delete_element(element->elementdata.combine.right);
470  heap_free(element->elementdata.combine.left);
471  heap_free(element->elementdata.combine.right);
472  break;
473  }
474 }
void delete_element(region_element *element)
Definition: gdiplus.c:455
GpStatus WINGDIPAPI GdipDeletePath(GpPath *path)
static BOOL heap_free(void *mem)
Definition: appwiz.h:75

Referenced by clone_element(), delete_element(), GdipCombineRegionPath(), GdipCombineRegionRect(), GdipCombineRegionRegion(), GdipDeleteRegion(), GdipGetClip(), GdipSetEmpty(), and GdipSetInfinite().

◆ DllMain()

BOOL WINAPI DllMain ( HINSTANCE  hinst,
DWORD  reason,
LPVOID  reserved 
)

Definition at line 58 of file gdiplus.c.

59 {
60  TRACE("(%p, %d, %p)\n", hinst, reason, reserved);
61 
62  switch(reason)
63  {
64  case DLL_PROCESS_ATTACH:
67  break;
68 
69  case DLL_PROCESS_DETACH:
70  if (reserved) break;
73  break;
74  }
75  return TRUE;
76 }
#define TRUE
Definition: types.h:120
void free_installed_fonts(void)
Definition: font.c:1608
BOOL WINAPI DisableThreadLibraryCalls(IN HMODULE hLibModule)
Definition: loader.c:85
#define DLL_PROCESS_ATTACH
Definition: compat.h:120
r reserved
Definition: btrfs.c:2865
#define DLL_PROCESS_DETACH
Definition: compat.h:119
#define TRACE(s)
Definition: solgame.cpp:4
static WCHAR reason[MAX_STRING_RESOURCE_LEN]
Definition: object.c:1904
void init_generic_string_formats(void) DECLSPEC_HIDDEN
Definition: stringformat.c:56
void free_generic_string_formats(void) DECLSPEC_HIDDEN
Definition: stringformat.c:67
static HINSTANCE hinst
Definition: edit.c:551

◆ GdipAlloc()

◆ GdipFree()

◆ gdiplus_atan2()

REAL gdiplus_atan2 ( REAL  dy,
REAL  dx 
)

Definition at line 304 of file gdiplus.c.

305 {
306  if((dx == 0.0) && (dy != 0.0))
307  return dy > 0.0 ? M_PI_2 : -M_PI_2;
308 
309  return atan2(dy, dx);
310 }
valarray< _Tp > atan2(const valarray< _Tp > &__x, const valarray< _Tp > &__y)
Definition: _valarray.h:928
GLint dy
Definition: linetemp.h:97
#define M_PI_2
Definition: port.h:185
GLint dx
Definition: linetemp.h:97

Referenced by draw_cap(), GdipGetLogFontW(), get_font_hfont(), shorten_line_percent(), and unstretch_angle().

◆ GdiplusNotificationHook()

GpStatus WINAPI GdiplusNotificationHook ( ULONG_PTR token)

Definition at line 110 of file gdiplus.c.

111 {
112  FIXME("%p\n", token);
113  return NotificationHook(token);
114 }
static Status WINAPI NotificationHook(ULONG_PTR *token)
Definition: gdiplus.c:41
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat token
Definition: glfuncs.h:210
#define FIXME(fmt,...)
Definition: debug.h:110

◆ GdiplusNotificationUnhook()

void WINAPI GdiplusNotificationUnhook ( ULONG_PTR  token)

Definition at line 116 of file gdiplus.c.

117 {
118  FIXME("%ld\n", token);
120 }
static void WINAPI NotificationUnhook(ULONG_PTR token)
Definition: gdiplus.c:50
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat token
Definition: glfuncs.h:210
#define FIXME(fmt,...)
Definition: debug.h:110

◆ GdiplusShutdown_wrapper()

ULONG WINAPI GdiplusShutdown_wrapper ( ULONG_PTR  token)

Definition at line 125 of file gdiplus.c.

126 {
127  /* Notice the slightly different prototype from the official
128  * signature which forces us to use the _wrapper suffix.
129  */
130 
131  /* FIXME: no object tracking */
132 
133  /* "bricksntiles" expects a return value of 0, which native
134  * coincidentally gives.
135  */
136  return 0;
137 }

◆ GdiplusStartup()

Status WINAPI GdiplusStartup ( ULONG_PTR token,
const struct GdiplusStartupInput input,
struct GdiplusStartupOutput output 
)

Definition at line 81 of file gdiplus.c.

83 {
84  if(!token || !input)
85  return InvalidParameter;
86 
87  TRACE("%p %p %p\n", token, input, output);
88  TRACE("GdiplusStartupInput %d %p %d %d\n", input->GdiplusVersion,
89  input->DebugEventCallback, input->SuppressBackgroundThread,
90  input->SuppressExternalCodecs);
91 
92  if(input->GdiplusVersion < 1 || input->GdiplusVersion > 2)
94 
95  if(input->SuppressBackgroundThread){
96  if(!output)
97  return InvalidParameter;
98 
99  output->NotificationHook = NotificationHook;
100  output->NotificationUnhook = NotificationUnhook;
101  }
102 
103  *token = 0xdeadbeef;
104 
105  /* FIXME: DebugEventCallback ignored */
106 
107  return Ok;
108 }
static UCHAR ULONG UCHAR ULONG UCHAR * output
Definition: bcrypt.c:29
static Status WINAPI NotificationHook(ULONG_PTR *token)
Definition: gdiplus.c:41
static void WINAPI NotificationUnhook(ULONG_PTR token)
Definition: gdiplus.c:50
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat token
Definition: glfuncs.h:210
#define TRACE(s)
Definition: solgame.cpp:4
GLenum GLenum GLenum input
Definition: glext.h:9031

Referenced by BackgroundPageProc(), ImageView_CreateWindow(), START_TEST(), and test_startup().

◆ hresult_to_status()

◆ lengthen_path()

BOOL lengthen_path ( GpPath path,
INT  len 
)

Definition at line 405 of file gdiplus.c.

406 {
407  /* initial allocation */
408  if(path->datalen == 0){
409  path->datalen = len * 2;
410 
411  path->pathdata.Points = heap_alloc_zero(path->datalen * sizeof(PointF));
412  if(!path->pathdata.Points) return FALSE;
413 
414  path->pathdata.Types = heap_alloc_zero(path->datalen);
415  if(!path->pathdata.Types){
416  heap_free(path->pathdata.Points);
417  return FALSE;
418  }
419  }
420  /* reallocation, double size of arrays */
421  else if(path->datalen - path->pathdata.Count < len){
422  while(path->datalen - path->pathdata.Count < len)
423  path->datalen *= 2;
424 
425  path->pathdata.Points = heap_realloc(path->pathdata.Points, path->datalen * sizeof(PointF));
426  if(!path->pathdata.Points) return FALSE;
427 
428  path->pathdata.Types = heap_realloc(path->pathdata.Types, path->datalen);
429  if(!path->pathdata.Types) return FALSE;
430  }
431 
432  return TRUE;
433 }
#define TRUE
Definition: types.h:120
static void * heap_realloc(void *mem, size_t len)
Definition: appwiz.h:70
GLenum GLsizei len
Definition: glext.h:6722
static BOOL heap_free(void *mem)
Definition: appwiz.h:75

Referenced by format_string_callback(), GdipAddPathArc(), GdipAddPathBezier(), GdipAddPathBeziers(), GdipAddPathEllipse(), GdipAddPathLine(), GdipAddPathLine2(), GdipAddPathPath(), GdipAddPathPie(), GdipAddPathPolygon(), GdipFlattenPath(), GdipPathIterNextMarkerPath(), GdipPathIterNextSubpathPath(), GdipWidenPath(), and read_element().

◆ NotificationHook()

static Status WINAPI NotificationHook ( ULONG_PTR token)
static

Definition at line 41 of file gdiplus.c.

42 {
43  TRACE("%p\n", token);
44  if(!token)
45  return InvalidParameter;
46 
47  return Ok;
48 }
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat token
Definition: glfuncs.h:210
#define TRACE(s)
Definition: solgame.cpp:4

Referenced by GdiplusNotificationHook(), and GdiplusStartup().

◆ NotificationUnhook()

static void WINAPI NotificationUnhook ( ULONG_PTR  token)
static

Definition at line 50 of file gdiplus.c.

51 {
52  TRACE("%ld\n", token);
53 }
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat token
Definition: glfuncs.h:210
#define TRACE(s)
Definition: solgame.cpp:4

Referenced by GdiplusNotificationUnhook(), and GdiplusStartup().

◆ pixels_to_units()

REAL pixels_to_units ( REAL  pixels,
GpUnit  unit,
REAL  dpi 
)

Definition at line 350 of file gdiplus.c.

351 {
352  switch (unit)
353  {
354  case UnitPixel:
355  case UnitWorld:
356  case UnitDisplay:
357  return pixels;
358  case UnitPoint:
359  return pixels * point_per_inch / dpi;
360  case UnitInch:
361  return pixels / dpi;
362  case UnitDocument:
363  return pixels * 300.0 / dpi;
364  case UnitMillimeter:
365  return pixels * mm_per_inch / dpi;
366  default:
367  FIXME("Unhandled unit type: %d\n", unit);
368  return 0;
369  }
370 }
static const REAL mm_per_inch
Definition: gdiplus.c:38
static const REAL point_per_inch
Definition: gdiplus.c:39
#define FIXME(fmt,...)
Definition: debug.h:110
png_const_structrp png_const_inforp int * unit
Definition: png.h:2161
#define dpi
Definition: sysparams.c:22
GLint GLint GLsizei GLsizei GLsizei GLint GLenum GLenum const GLvoid * pixels
Definition: gl.h:1546

Referenced by GdipGetFontHeight(), and units_scale().

◆ units_scale()

REAL units_scale ( GpUnit  from,
GpUnit  to,
REAL  dpi 
)

Definition at line 372 of file gdiplus.c.

373 {
375  return pixels_to_units(pixels, to, dpi);
376 }
REAL pixels_to_units(REAL pixels, GpUnit unit, REAL dpi)
Definition: gdiplus.c:350
#define dpi
Definition: sysparams.c:22
GLint GLint GLsizei GLsizei GLsizei GLint GLenum GLenum const GLvoid * pixels
Definition: gl.h:1546
REAL units_to_pixels(REAL units, GpUnit unit, REAL dpi)
Definition: gdiplus.c:327
float REAL
Definition: types.h:41
CardRegion * from
Definition: spigame.cpp:19

◆ units_to_pixels()

REAL units_to_pixels ( REAL  units,
GpUnit  unit,
REAL  dpi 
)

Definition at line 327 of file gdiplus.c.

328 {
329  switch (unit)
330  {
331  case UnitPixel:
332  case UnitWorld:
333  case UnitDisplay:
334  return units;
335  case UnitPoint:
336  return units * dpi / point_per_inch;
337  case UnitInch:
338  return units * dpi;
339  case UnitDocument:
340  return units * dpi / 300.0; /* Per MSDN */
341  case UnitMillimeter:
342  return units * dpi / mm_per_inch;
343  default:
344  FIXME("Unhandled unit type: %d\n", unit);
345  return 0;
346  }
347 }
static const REAL mm_per_inch
Definition: gdiplus.c:38
static const REAL point_per_inch
Definition: gdiplus.c:39
#define FIXME(fmt,...)
Definition: debug.h:110
png_const_structrp png_const_inforp int * unit
Definition: png.h:2161
#define dpi
Definition: sysparams.c:22
GLfloat units
Definition: glext.h:11727

Referenced by GdipCreateFont(), GdipEnumerateMetafileDestPoint(), GdipGetFontHeightGivenDPI(), GdipGetImageDimension(), GdipGetImageHeight(), GdipGetImageWidth(), GdipGetLogFontW(), GdipPlayMetafileRecord(), METAFILE_DrawImagePointsRect(), METAFILE_PlaybackUpdateWorldTransform(), and units_scale().

◆ unstretch_angle()

static void unstretch_angle ( REAL angle,
REAL  rad_x,
REAL  rad_y 
)
static

Definition at line 205 of file gdiplus.c.

206 {
207  REAL stretched;
208  INT revs_off;
209 
210  *angle = deg2rad(*angle);
211 
212  if(fabs(cos(*angle)) < 0.00001 || fabs(sin(*angle)) < 0.00001)
213  return;
214 
215  stretched = gdiplus_atan2(sin(*angle) / fabs(rad_y), cos(*angle) / fabs(rad_x));
216  revs_off = gdip_round(*angle / (2.0 * M_PI)) - gdip_round(stretched / (2.0 * M_PI));
217  stretched += ((REAL)revs_off) * M_PI * 2.0;
218  *angle = stretched;
219 }
GLfloat angle
Definition: glext.h:10853
static REAL deg2rad(REAL degrees)
int32_t INT
Definition: typedefs.h:56
_STLP_DECLSPEC complex< float > _STLP_CALL cos(const complex< float > &)
static INT gdip_round(REAL x)
REAL gdiplus_atan2(REAL dy, REAL dx)
Definition: gdiplus.c:304
_Check_return_ _CRT_JIT_INTRINSIC double __cdecl fabs(_In_ double x)
#define M_PI
Definition: macros.h:263
_STLP_DECLSPEC complex< float > _STLP_CALL sin(const complex< float > &)
float REAL
Definition: types.h:41

Referenced by arc2polybezier().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( gdiplus  )

Variable Documentation

◆ mm_per_inch

const REAL mm_per_inch = 25.4
static

Definition at line 38 of file gdiplus.c.

Referenced by pixels_to_units(), and units_to_pixels().

◆ point_per_inch

const REAL point_per_inch = 72.0
static

Definition at line 39 of file gdiplus.c.

Referenced by pixels_to_units(), and units_to_pixels().