ReactOS 0.4.17-dev-934-g091855f
command_list.c File Reference
#include "d2d1_private.h"
Include dependency graph for command_list.c:

Go to the source code of this file.

Classes

struct  d2d_command
 
struct  d2d_command_set_antialias_mode
 
struct  d2d_command_set_tags
 
struct  d2d_command_set_text_antialias_mode
 
struct  d2d_command_set_text_rendering_params
 
struct  d2d_command_set_transform
 
struct  d2d_command_set_primitive_blend
 
struct  d2d_command_set_unit_mode
 
struct  d2d_command_clear
 
struct  d2d_command_push_clip
 
struct  d2d_command_push_layer
 
struct  d2d_command_draw_line
 
struct  d2d_command_draw_geometry
 
struct  d2d_command_draw_rectangle
 
struct  d2d_command_fill_mesh
 
struct  d2d_command_fill_opacity_mask
 
struct  d2d_command_fill_geometry
 
struct  d2d_command_fill_rectangle
 
struct  d2d_command_draw_glyph_run
 
struct  d2d_command_draw_bitmap
 
struct  d2d_command_draw_image
 

Enumerations

enum  d2d_command_list_flags { D2D_COMMAND_LIST_HAS_NULL_TEXT_RENDERING_PARAMS = 0x1 }
 
enum  d2d_command_type {
  D2D_COMMAND_SET_ANTIALIAS_MODE , D2D_COMMAND_SET_TAGS , D2D_COMMAND_SET_TEXT_ANTIALIAS_MODE , D2D_COMMAND_SET_TEXT_RENDERING_PARAMS ,
  D2D_COMMAND_SET_TRANSFORM , D2D_COMMAND_SET_PRIMITIVE_BLEND , D2D_COMMAND_SET_UNIT_MODE , D2D_COMMAND_CLEAR ,
  D2D_COMMAND_DRAW_GLYPH_RUN , D2D_COMMAND_DRAW_LINE , D2D_COMMAND_DRAW_GEOMETRY , D2D_COMMAND_DRAW_RECTANGLE ,
  D2D_COMMAND_DRAW_BITMAP , D2D_COMMAND_DRAW_IMAGE , D2D_COMMAND_FILL_MESH , D2D_COMMAND_FILL_OPACITY_MASK ,
  D2D_COMMAND_FILL_GEOMETRY , D2D_COMMAND_FILL_RECTANGLE , D2D_COMMAND_PUSH_CLIP , D2D_COMMAND_PUSH_LAYER ,
  D2D_COMMAND_POP_CLIP , D2D_COMMAND_POP_LAYER
}
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (d2d)
 
static struct d2d_command_list * impl_from_ID2D1CommandList (ID2D1CommandList *iface)
 
static HRESULT STDMETHODCALLTYPE d2d_command_list_QueryInterface (ID2D1CommandList *iface, REFIID iid, void **out)
 
static ULONG STDMETHODCALLTYPE d2d_command_list_AddRef (ID2D1CommandList *iface)
 
static ULONG STDMETHODCALLTYPE d2d_command_list_Release (ID2D1CommandList *iface)
 
static void STDMETHODCALLTYPE d2d_command_list_GetFactory (ID2D1CommandList *iface, ID2D1Factory **factory)
 
static HRESULT STDMETHODCALLTYPE d2d_command_list_Stream (ID2D1CommandList *iface, ID2D1CommandSink *sink)
 
static HRESULT STDMETHODCALLTYPE d2d_command_list_Close (ID2D1CommandList *iface)
 
HRESULT d2d_command_list_create (ID2D1Factory *factory, struct d2d_command_list **command_list)
 
struct d2d_command_list * unsafe_impl_from_ID2D1CommandList (ID2D1CommandList *iface)
 
static void * d2d_command_list_require_space (struct d2d_command_list *command_list, size_t size)
 
static void d2d_command_list_reference_object (struct d2d_command_list *command_list, void *object)
 
static HRESULT d2d_command_list_create_brush (struct d2d_command_list *command_list, const struct d2d_device_context *ctx, ID2D1Brush *orig_brush, ID2D1Brush **ret)
 
void d2d_command_list_set_antialias_mode (struct d2d_command_list *command_list, D2D1_ANTIALIAS_MODE mode)
 
void d2d_command_list_set_primitive_blend (struct d2d_command_list *command_list, D2D1_PRIMITIVE_BLEND primitive_blend)
 
void d2d_command_list_set_unit_mode (struct d2d_command_list *command_list, D2D1_UNIT_MODE mode)
 
void d2d_command_list_set_text_antialias_mode (struct d2d_command_list *command_list, D2D1_TEXT_ANTIALIAS_MODE mode)
 
void d2d_command_list_set_tags (struct d2d_command_list *command_list, D2D1_TAG tag1, D2D1_TAG tag2)
 
void d2d_command_list_set_transform (struct d2d_command_list *command_list, const D2D1_MATRIX_3X2_F *transform)
 
void d2d_command_list_begin_draw (struct d2d_command_list *command_list, const struct d2d_device_context *context)
 
void d2d_command_list_push_clip (struct d2d_command_list *command_list, const D2D1_RECT_F *rect, D2D1_ANTIALIAS_MODE mode)
 
void d2d_command_list_pop_clip (struct d2d_command_list *command_list)
 
void d2d_command_list_push_layer (struct d2d_command_list *command_list, const struct d2d_device_context *context, const D2D1_LAYER_PARAMETERS1 *params, ID2D1Layer *layer)
 
void d2d_command_list_pop_layer (struct d2d_command_list *command_list)
 
void d2d_command_list_clear (struct d2d_command_list *command_list, const D2D1_COLOR_F *color)
 
void d2d_command_list_draw_line (struct d2d_command_list *command_list, const struct d2d_device_context *context, D2D1_POINT_2F p0, D2D1_POINT_2F p1, ID2D1Brush *orig_brush, float stroke_width, ID2D1StrokeStyle *stroke_style)
 
void d2d_command_list_draw_geometry (struct d2d_command_list *command_list, const struct d2d_device_context *context, ID2D1Geometry *geometry, ID2D1Brush *orig_brush, float stroke_width, ID2D1StrokeStyle *stroke_style)
 
void d2d_command_list_draw_rectangle (struct d2d_command_list *command_list, const struct d2d_device_context *context, const D2D1_RECT_F *rect, ID2D1Brush *orig_brush, float stroke_width, ID2D1StrokeStyle *stroke_style)
 
void d2d_command_list_fill_geometry (struct d2d_command_list *command_list, const struct d2d_device_context *context, ID2D1Geometry *geometry, ID2D1Brush *orig_brush, ID2D1Brush *orig_opacity_brush)
 
void d2d_command_list_fill_rectangle (struct d2d_command_list *command_list, const struct d2d_device_context *context, const D2D1_RECT_F *rect, ID2D1Brush *orig_brush)
 
static void d2d_command_list_set_text_rendering_params_internal (struct d2d_command_list *command_list, BOOL allow_null, IDWriteRenderingParams *params)
 
void d2d_command_list_set_text_rendering_params (struct d2d_command_list *command_list, IDWriteRenderingParams *params)
 
static void d2d_command_list_write_field (BYTE **data, void *dst, const void *src, size_t size)
 
void d2d_command_list_draw_glyph_run (struct d2d_command_list *command_list, const struct d2d_device_context *context, D2D1_POINT_2F origin, const DWRITE_GLYPH_RUN *run, const DWRITE_GLYPH_RUN_DESCRIPTION *run_desc, ID2D1Brush *orig_brush, DWRITE_MEASURING_MODE measuring_mode)
 
void d2d_command_list_draw_bitmap (struct d2d_command_list *command_list, ID2D1Bitmap *bitmap, const D2D1_RECT_F *dst_rect, float opacity, D2D1_INTERPOLATION_MODE interpolation_mode, const D2D1_RECT_F *src_rect, const D2D1_MATRIX_4X4_F *perspective_transform)
 
void d2d_command_list_draw_image (struct d2d_command_list *command_list, ID2D1Image *image, const D2D1_POINT_2F *target_offset, const D2D1_RECT_F *image_rect, D2D1_INTERPOLATION_MODE interpolation_mode, D2D1_COMPOSITE_MODE composite_mode)
 
void d2d_command_list_fill_mesh (struct d2d_command_list *command_list, const struct d2d_device_context *context, ID2D1Mesh *mesh, ID2D1Brush *orig_brush)
 
void d2d_command_list_fill_opacity_mask (struct d2d_command_list *command_list, const struct d2d_device_context *context, ID2D1Bitmap *bitmap, ID2D1Brush *orig_brush, const D2D1_RECT_F *dst_rect, const D2D1_RECT_F *src_rect)
 

Variables

static const ID2D1CommandListVtbl d2d_command_list_vtbl
 

Enumeration Type Documentation

◆ d2d_command_list_flags

Enumerator
D2D_COMMAND_LIST_HAS_NULL_TEXT_RENDERING_PARAMS 

Definition at line 23 of file command_list.c.

24{
26};
@ D2D_COMMAND_LIST_HAS_NULL_TEXT_RENDERING_PARAMS
Definition: command_list.c:25

◆ d2d_command_type

Enumerator
D2D_COMMAND_SET_ANTIALIAS_MODE 
D2D_COMMAND_SET_TAGS 
D2D_COMMAND_SET_TEXT_ANTIALIAS_MODE 
D2D_COMMAND_SET_TEXT_RENDERING_PARAMS 
D2D_COMMAND_SET_TRANSFORM 
D2D_COMMAND_SET_PRIMITIVE_BLEND 
D2D_COMMAND_SET_UNIT_MODE 
D2D_COMMAND_CLEAR 
D2D_COMMAND_DRAW_GLYPH_RUN 
D2D_COMMAND_DRAW_LINE 
D2D_COMMAND_DRAW_GEOMETRY 
D2D_COMMAND_DRAW_RECTANGLE 
D2D_COMMAND_DRAW_BITMAP 
D2D_COMMAND_DRAW_IMAGE 
D2D_COMMAND_FILL_MESH 
D2D_COMMAND_FILL_OPACITY_MASK 
D2D_COMMAND_FILL_GEOMETRY 
D2D_COMMAND_FILL_RECTANGLE 
D2D_COMMAND_PUSH_CLIP 
D2D_COMMAND_PUSH_LAYER 
D2D_COMMAND_POP_CLIP 
D2D_COMMAND_POP_LAYER 

Definition at line 28 of file command_list.c.

29{
52};
@ D2D_COMMAND_DRAW_IMAGE
Definition: command_list.c:43
@ D2D_COMMAND_FILL_OPACITY_MASK
Definition: command_list.c:45
@ D2D_COMMAND_DRAW_GLYPH_RUN
Definition: command_list.c:38
@ D2D_COMMAND_SET_PRIMITIVE_BLEND
Definition: command_list.c:35
@ D2D_COMMAND_SET_ANTIALIAS_MODE
Definition: command_list.c:30
@ D2D_COMMAND_CLEAR
Definition: command_list.c:37
@ D2D_COMMAND_SET_UNIT_MODE
Definition: command_list.c:36
@ D2D_COMMAND_FILL_RECTANGLE
Definition: command_list.c:47
@ D2D_COMMAND_DRAW_GEOMETRY
Definition: command_list.c:40
@ D2D_COMMAND_DRAW_RECTANGLE
Definition: command_list.c:41
@ D2D_COMMAND_PUSH_LAYER
Definition: command_list.c:49
@ D2D_COMMAND_POP_LAYER
Definition: command_list.c:51
@ D2D_COMMAND_SET_TEXT_ANTIALIAS_MODE
Definition: command_list.c:32
@ D2D_COMMAND_SET_TEXT_RENDERING_PARAMS
Definition: command_list.c:33
@ D2D_COMMAND_FILL_GEOMETRY
Definition: command_list.c:46
@ D2D_COMMAND_PUSH_CLIP
Definition: command_list.c:48
@ D2D_COMMAND_DRAW_LINE
Definition: command_list.c:39
@ D2D_COMMAND_SET_TAGS
Definition: command_list.c:31
@ D2D_COMMAND_DRAW_BITMAP
Definition: command_list.c:42
@ D2D_COMMAND_FILL_MESH
Definition: command_list.c:44
@ D2D_COMMAND_SET_TRANSFORM
Definition: command_list.c:34
@ D2D_COMMAND_POP_CLIP
Definition: command_list.c:50

Function Documentation

◆ d2d_command_list_AddRef()

static ULONG STDMETHODCALLTYPE d2d_command_list_AddRef ( ID2D1CommandList *  iface)
static

Definition at line 236 of file command_list.c.

237{
238 struct d2d_command_list *command_list = impl_from_ID2D1CommandList(iface);
240
241 TRACE("%p increasing refcount to %lu.\n", iface, refcount);
242
243 return refcount;
244}
#define InterlockedIncrement
Definition: armddk.h:53
static struct d2d_command_list * impl_from_ID2D1CommandList(ID2D1CommandList *iface)
Definition: command_list.c:211
#define TRACE(s)
Definition: solgame.cpp:4
uint32_t ULONG
Definition: typedefs.h:59

◆ d2d_command_list_begin_draw()

void d2d_command_list_begin_draw ( struct d2d_command_list *  command_list,
const struct d2d_device_context *  context 
)

Definition at line 676 of file command_list.c.

678{
679 if (command_list->state != D2D_COMMAND_LIST_STATE_INITIAL)
680 {
681 command_list->state = D2D_COMMAND_LIST_STATE_ERROR;
682 return;
683 }
684
685 d2d_command_list_set_antialias_mode(command_list, context->drawing_state.antialiasMode);
686 d2d_command_list_set_primitive_blend(command_list, context->drawing_state.primitiveBlend);
687 d2d_command_list_set_unit_mode(command_list, context->drawing_state.unitMode);
688 d2d_command_list_set_text_antialias_mode(command_list, context->drawing_state.textAntialiasMode);
689 d2d_command_list_set_tags(command_list, context->drawing_state.tag1, context->drawing_state.tag2);
690 d2d_command_list_set_transform(command_list, &context->drawing_state.transform);
691 d2d_command_list_set_text_rendering_params(command_list, context->text_rendering_params);
692
693 command_list->state = D2D_COMMAND_LIST_STATE_OPEN;
694}
void d2d_command_list_set_unit_mode(struct d2d_command_list *command_list, D2D1_UNIT_MODE mode)
Definition: command_list.c:637
void d2d_command_list_set_text_rendering_params(struct d2d_command_list *command_list, IDWriteRenderingParams *params)
Definition: command_list.c:898
void d2d_command_list_set_transform(struct d2d_command_list *command_list, const D2D1_MATRIX_3X2_F *transform)
Definition: command_list.c:666
void d2d_command_list_set_text_antialias_mode(struct d2d_command_list *command_list, D2D1_TEXT_ANTIALIAS_MODE mode)
Definition: command_list.c:646
void d2d_command_list_set_tags(struct d2d_command_list *command_list, D2D1_TAG tag1, D2D1_TAG tag2)
Definition: command_list.c:656
void d2d_command_list_set_primitive_blend(struct d2d_command_list *command_list, D2D1_PRIMITIVE_BLEND primitive_blend)
Definition: command_list.c:627
void d2d_command_list_set_antialias_mode(struct d2d_command_list *command_list, D2D1_ANTIALIAS_MODE mode)
Definition: command_list.c:617
@ D2D_COMMAND_LIST_STATE_INITIAL
Definition: d2d1_private.h:824
@ D2D_COMMAND_LIST_STATE_ERROR
Definition: d2d1_private.h:825
@ D2D_COMMAND_LIST_STATE_OPEN
Definition: d2d1_private.h:826
Definition: http.c:7252
enum d2d_command_list_state state
Definition: d2d1_private.h:836

Referenced by d2d_device_context_BeginDraw().

◆ d2d_command_list_clear()

void d2d_command_list_clear ( struct d2d_command_list *  command_list,
const D2D1_COLOR_F *  color 
)

Definition at line 746 of file command_list.c.

747{
749
750 command = d2d_command_list_require_space(command_list, sizeof(*command));
752 if (color) command->color = *color;
753 else memset(&command->color, 0, sizeof(command->color));
754}
static void * d2d_command_list_require_space(struct d2d_command_list *command_list, size_t size)
Definition: command_list.c:520
GLuint color
Definition: glext.h:6243
#define memset(x, y, z)
Definition: compat.h:39

Referenced by d2d_device_context_Clear().

◆ d2d_command_list_Close()

static HRESULT STDMETHODCALLTYPE d2d_command_list_Close ( ID2D1CommandList *  iface)
static

Definition at line 472 of file command_list.c.

473{
474 struct d2d_command_list *command_list = impl_from_ID2D1CommandList(iface);
475
476 FIXME("iface %p stub.\n", iface);
477
478 if (command_list->state != D2D_COMMAND_LIST_STATE_OPEN)
479 return D2DERR_WRONG_STATE;
480
481 command_list->state = D2D_COMMAND_LIST_STATE_CLOSED;
482
483 /* FIXME: reset as a target */
484
485 return S_OK;
486}
#define FIXME(fmt,...)
Definition: precomp.h:53
@ D2D_COMMAND_LIST_STATE_CLOSED
Definition: d2d1_private.h:827
#define S_OK
Definition: intsafe.h:52
#define D2DERR_WRONG_STATE
Definition: winerror.h:7352

◆ d2d_command_list_create()

HRESULT d2d_command_list_create ( ID2D1Factory *  factory,
struct d2d_command_list **  command_list 
)

Definition at line 498 of file command_list.c.

499{
500 if (!(*command_list = calloc(1, sizeof(**command_list))))
501 return E_OUTOFMEMORY;
502
503 (*command_list)->ID2D1CommandList_iface.lpVtbl = &d2d_command_list_vtbl;
504 (*command_list)->refcount = 1;
505 ID2D1Factory_AddRef((*command_list)->factory = factory);
506
507 TRACE("Created command list %p.\n", *command_list);
508
509 return S_OK;
510}
static const ID2D1CommandListVtbl d2d_command_list_vtbl
Definition: command_list.c:488
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define calloc
Definition: rosglue.h:14
Definition: main.c:439

Referenced by d2d_device_context_CreateCommandList().

◆ d2d_command_list_create_brush()

static HRESULT d2d_command_list_create_brush ( struct d2d_command_list *  command_list,
const struct d2d_device_context *  ctx,
ID2D1Brush *  orig_brush,
ID2D1Brush **  ret 
)
static

Definition at line 551 of file command_list.c.

553{
554 ID2D1DeviceContext *context = (ID2D1DeviceContext *)&ctx->ID2D1DeviceContext6_iface;
555 struct d2d_brush *brush = unsafe_impl_from_ID2D1Brush(orig_brush);
558 D2D1_BITMAP_BRUSH_PROPERTIES1 bitmap_properties;
559 D2D1_IMAGE_BRUSH_PROPERTIES image_properties;
560 D2D1_BRUSH_PROPERTIES properties;
561 HRESULT hr;
562
563 properties.opacity = brush->opacity;
564 properties.transform = brush->transform;
565
566 switch (brush->type)
567 {
569 hr = ID2D1DeviceContext_CreateSolidColorBrush(context, &brush->u.solid.color,
570 &properties, (ID2D1SolidColorBrush **)ret);
571 break;
573 linear_properties.startPoint = brush->u.linear.start;
574 linear_properties.endPoint = brush->u.linear.end;
575 hr = ID2D1DeviceContext_CreateLinearGradientBrush(context, &linear_properties,
576 &properties, &brush->u.linear.gradient->ID2D1GradientStopCollection_iface,
578 break;
580 radial_properties.center = brush->u.radial.centre;
581 radial_properties.gradientOriginOffset = brush->u.radial.offset;
582 radial_properties.radiusX = brush->u.radial.radius.x;
583 radial_properties.radiusY = brush->u.radial.radius.y;
584 hr = ID2D1DeviceContext_CreateRadialGradientBrush(context, &radial_properties,
585 &properties, &brush->u.radial.gradient->ID2D1GradientStopCollection_iface,
587 break;
589 bitmap_properties.extendModeX = brush->u.bitmap.extend_mode_x;
590 bitmap_properties.extendModeY = brush->u.bitmap.extend_mode_y;
591 bitmap_properties.interpolationMode = brush->u.bitmap.interpolation_mode;
592 hr = ID2D1DeviceContext_CreateBitmapBrush(context, (ID2D1Bitmap *)&brush->u.bitmap.bitmap->ID2D1Bitmap1_iface,
593 &bitmap_properties, &properties, (ID2D1BitmapBrush1 **)ret);
594 break;
596 image_properties.sourceRectangle = brush->u.image.source_rect;
597 image_properties.extendModeX = brush->u.image.extend_mode_x;
598 image_properties.extendModeY = brush->u.image.extend_mode_y;
599 image_properties.interpolationMode = brush->u.image.interpolation_mode;
600 hr = ID2D1DeviceContext_CreateImageBrush(context, brush->u.image.image,
601 &image_properties, &properties, (ID2D1ImageBrush **)ret);
602 break;
603 default:
604 FIXME("Unsupported brush type %u.\n", brush->type);
605 return E_UNEXPECTED;
606 }
607
608 if (SUCCEEDED(hr))
609 {
611 ID2D1Brush_Release(*ret);
612 }
613
614 return hr;
615}
static void d2d_command_list_reference_object(struct d2d_command_list *command_list, void *object)
Definition: command_list.c:535
@ D2D_BRUSH_TYPE_SOLID
Definition: d2d1_private.h:41
@ D2D_BRUSH_TYPE_RADIAL
Definition: d2d1_private.h:43
@ D2D_BRUSH_TYPE_LINEAR
Definition: d2d1_private.h:42
@ D2D_BRUSH_TYPE_BITMAP
Definition: d2d1_private.h:44
@ D2D_BRUSH_TYPE_IMAGE
Definition: d2d1_private.h:45
HRESULT hr
Definition: delayimp.cpp:582
struct d2d_brush * unsafe_impl_from_ID2D1Brush(ID2D1Brush *iface)
Definition: brush.c:1344
return ret
Definition: mutex.c:147
#define SUCCEEDED(hr)
Definition: intsafe.h:50
D2D1_INTERPOLATION_MODE interpolationMode
Definition: d2d1_1.idl:285
D2D1_EXTEND_MODE extendModeY
Definition: d2d1_1.idl:284
D2D1_EXTEND_MODE extendModeX
Definition: d2d1_1.idl:283
D2D1_MATRIX_3X2_F transform
Definition: d2d1.idl:377
D2D1_INTERPOLATION_MODE interpolationMode
Definition: d2d1_1.idl:278
D2D1_EXTEND_MODE extendModeX
Definition: d2d1_1.idl:276
D2D1_EXTEND_MODE extendModeY
Definition: d2d1_1.idl:277
D2D1_RECT_F sourceRectangle
Definition: d2d1_1.idl:275
#define E_UNEXPECTED
Definition: winerror.h:3528

Referenced by d2d_command_list_draw_geometry(), d2d_command_list_draw_glyph_run(), d2d_command_list_draw_line(), d2d_command_list_draw_rectangle(), d2d_command_list_fill_geometry(), d2d_command_list_fill_mesh(), d2d_command_list_fill_opacity_mask(), d2d_command_list_fill_rectangle(), and d2d_command_list_push_layer().

◆ d2d_command_list_draw_bitmap()

void d2d_command_list_draw_bitmap ( struct d2d_command_list *  command_list,
ID2D1Bitmap *  bitmap,
const D2D1_RECT_F *  dst_rect,
float  opacity,
D2D1_INTERPOLATION_MODE  interpolation_mode,
const D2D1_RECT_F *  src_rect,
const D2D1_MATRIX_4X4_F *  perspective_transform 
)

Definition at line 999 of file command_list.c.

1002{
1004 size_t size;
1005 BYTE *data;
1006
1007 size = sizeof(*command);
1008 if (dst_rect) size += sizeof(*dst_rect);
1009 if (src_rect) size += sizeof(*src_rect);
1010 if (perspective_transform) size += sizeof(*perspective_transform);
1011
1013
1016 command->bitmap = bitmap;
1017 command->opacity = opacity;
1018 command->interpolation_mode = interpolation_mode;
1019
1020 data = (BYTE *)(command + 1);
1021
1025}
static void d2d_command_list_write_field(BYTE **data, void *dst, const void *src, size_t size)
Definition: command_list.c:904
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLsizeiptr size
Definition: glext.h:5919
Definition: uimain.c:89
D2D1_RECT_F * dst_rect
Definition: command_list.c:196
D2D1_MATRIX_4X4_F * perspective_transform
Definition: command_list.c:198
D2D1_INTERPOLATION_MODE interpolation_mode
Definition: command_list.c:194
D2D1_RECT_F * src_rect
Definition: command_list.c:197
unsigned char BYTE
Definition: xxhash.c:193

Referenced by d2d_device_context_DrawBitmap(), and d2d_device_context_ID2D1DeviceContext_DrawBitmap().

◆ d2d_command_list_draw_geometry()

void d2d_command_list_draw_geometry ( struct d2d_command_list *  command_list,
const struct d2d_device_context *  context,
ID2D1Geometry *  geometry,
ID2D1Brush *  orig_brush,
float  stroke_width,
ID2D1StrokeStyle *  stroke_style 
)

Definition at line 780 of file command_list.c.

783{
786
787 if (FAILED(d2d_command_list_create_brush(command_list, context, orig_brush, &brush)))
788 {
789 command_list->state = D2D_COMMAND_LIST_STATE_ERROR;
790 return;
791 }
792
795
796 command = d2d_command_list_require_space(command_list, sizeof(*command));
798 command->brush = brush;
799 command->stroke_width = stroke_width;
800 command->stroke_style = stroke_style;
801}
static HRESULT d2d_command_list_create_brush(struct d2d_command_list *command_list, const struct d2d_device_context *ctx, ID2D1Brush *orig_brush, ID2D1Brush **ret)
Definition: command_list.c:551
#define FAILED(hr)
Definition: intsafe.h:51
ID2D1Geometry * geometry
Definition: command_list.c:134
ID2D1StrokeStyle * stroke_style
Definition: command_list.c:137

Referenced by d2d_device_context_DrawGeometry().

◆ d2d_command_list_draw_glyph_run()

void d2d_command_list_draw_glyph_run ( struct d2d_command_list *  command_list,
const struct d2d_device_context *  context,
D2D1_POINT_2F  origin,
const DWRITE_GLYPH_RUN *  run,
const DWRITE_GLYPH_RUN_DESCRIPTION *  run_desc,
ID2D1Brush *  orig_brush,
DWRITE_MEASURING_MODE  measuring_mode 
)

Definition at line 919 of file command_list.c.

923{
927 UINT32 glyph_count;
929 size_t size;
930 BYTE *data;
931
932 if (FAILED(d2d_command_list_create_brush(command_list, context, orig_brush, &brush)))
933 {
934 command_list->state = D2D_COMMAND_LIST_STATE_ERROR;
935 return;
936 }
937
938 /* Set rendering parameters automatically. Explicitly set null parameters are not recorded,
939 either separately or as a part of a restored state block. Forcing parameters update on
940 DrawGlyphRun() ensures that state is reset correctly. */
941
943 context->text_rendering_params);
944
945 /* Get combined size of variable data. */
946
947 glyph_count = run->glyphCount;
948 size = sizeof(*command);
949 if (run->glyphIndices) size += glyph_count * sizeof(*run->glyphIndices);
950 if (run->glyphAdvances) size += glyph_count * sizeof(*run->glyphAdvances);
951 if (run->glyphOffsets) size += glyph_count * sizeof(*run->glyphOffsets);
952 if (run_desc)
953 {
954 size += sizeof(*run_desc);
958 size += sizeof(run_desc->stringLength);
959 size += sizeof(run_desc->textPosition);
960 }
961
963
966 r = &command->run;
967
968 r->fontFace = run->fontFace;
969 r->fontEmSize = run->fontEmSize;
970 r->glyphCount = run->glyphCount;
971 r->isSideways = run->isSideways;
972 r->bidiLevel = run->bidiLevel;
973
974 data = (BYTE *)(command + 1);
975
976 d2d_command_list_write_field(&data, &r->glyphIndices, run->glyphIndices, glyph_count * sizeof(*r->glyphIndices));
977 d2d_command_list_write_field(&data, &r->glyphAdvances, run->glyphAdvances, glyph_count * sizeof(*r->glyphAdvances));
978 d2d_command_list_write_field(&data, &r->glyphOffsets, run->glyphOffsets, glyph_count * sizeof(*r->glyphOffsets));
979
980 command->run_desc = NULL;
981 if (run_desc)
982 {
984 memset(d, 0, sizeof(*d));
985 data += sizeof(*d);
986
989 d->stringLength = run_desc->stringLength;
991 d->textPosition = run_desc->textPosition;
992 }
993
994 command->brush = brush;
995 command->origin = origin;
996 command->measuring_mode = measuring_mode;
997}
static void d2d_command_list_set_text_rendering_params_internal(struct d2d_command_list *command_list, BOOL allow_null, IDWriteRenderingParams *params)
Definition: command_list.c:873
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
_ACRTIMP size_t __cdecl wcslen(const wchar_t *)
Definition: wcs.c:2988
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
voidpf uLong int origin
Definition: ioapi.h:144
#define d
Definition: ke_i.h:81
UINT16 const * clusterMap
Definition: dwrite.idl:424
WCHAR const * localeName
Definition: dwrite.idl:421
IDWriteFontFace * fontFace
Definition: dwrite.idl:405
DWRITE_GLYPH_OFFSET const * glyphOffsets
Definition: dwrite.idl:410
UINT32 bidiLevel
Definition: dwrite.idl:412
FLOAT fontEmSize
Definition: dwrite.idl:406
UINT16 const * glyphIndices
Definition: dwrite.idl:408
FLOAT const * glyphAdvances
Definition: dwrite.idl:409
UINT32 glyphCount
Definition: dwrite.idl:407
DWRITE_GLYPH_RUN_DESCRIPTION * run_desc
Definition: command_list.c:187
DWRITE_MEASURING_MODE measuring_mode
Definition: command_list.c:184
uint32_t UINT32
Definition: typedefs.h:59

Referenced by d2d_device_context_draw_glyph_run().

◆ d2d_command_list_draw_image()

void d2d_command_list_draw_image ( struct d2d_command_list *  command_list,
ID2D1Image *  image,
const D2D1_POINT_2F *  target_offset,
const D2D1_RECT_F *  image_rect,
D2D1_INTERPOLATION_MODE  interpolation_mode,
D2D1_COMPOSITE_MODE  composite_mode 
)

Definition at line 1027 of file command_list.c.

1030{
1032 size_t size;
1033 BYTE *data;
1034
1035 size = sizeof(*command);
1036 if (target_offset) size += sizeof(*target_offset);
1037 if (image_rect) size += sizeof(*image_rect);
1038
1040
1043 command->image = image;
1044 command->interpolation_mode = interpolation_mode;
1045 command->composite_mode = composite_mode;
1046
1047 data = (BYTE *)(command + 1);
1048
1051}
D2D1_RECT_F * image_rect
Definition: command_list.c:208
D2D1_COMPOSITE_MODE composite_mode
Definition: command_list.c:206
D2D1_POINT_2F * target_offset
Definition: command_list.c:207
D2D1_INTERPOLATION_MODE interpolation_mode
Definition: command_list.c:205
Definition: image.c:84

Referenced by d2d_device_context_DrawImage().

◆ d2d_command_list_draw_line()

void d2d_command_list_draw_line ( struct d2d_command_list *  command_list,
const struct d2d_device_context *  context,
D2D1_POINT_2F  p0,
D2D1_POINT_2F  p1,
ID2D1Brush *  orig_brush,
float  stroke_width,
ID2D1StrokeStyle *  stroke_style 
)

Definition at line 756 of file command_list.c.

759{
762
763 if (FAILED(d2d_command_list_create_brush(command_list, context, orig_brush, &brush)))
764 {
765 command_list->state = D2D_COMMAND_LIST_STATE_ERROR;
766 return;
767 }
768
770
771 command = d2d_command_list_require_space(command_list, sizeof(*command));
773 command->p0 = p0;
774 command->p1 = p1;
775 command->brush = brush;
776 command->stroke_width = stroke_width;
777 command->stroke_style = stroke_style;
778}
ID2D1StrokeStyle * stroke_style
Definition: command_list.c:128

Referenced by d2d_device_context_DrawLine().

◆ d2d_command_list_draw_rectangle()

void d2d_command_list_draw_rectangle ( struct d2d_command_list *  command_list,
const struct d2d_device_context *  context,
const D2D1_RECT_F *  rect,
ID2D1Brush *  orig_brush,
float  stroke_width,
ID2D1StrokeStyle *  stroke_style 
)

Definition at line 803 of file command_list.c.

805{
808
809 if (FAILED(d2d_command_list_create_brush(command_list, context, orig_brush, &brush)))
810 {
811 command_list->state = D2D_COMMAND_LIST_STATE_ERROR;
812 return;
813 }
814
816
817 command = d2d_command_list_require_space(command_list, sizeof(*command));
819 command->rect = *rect;
820 command->brush = brush;
821 command->stroke_width = stroke_width;
822 command->stroke_style = stroke_style;
823}
RECT rect
Definition: combotst.c:67
ID2D1StrokeStyle * stroke_style
Definition: command_list.c:146

Referenced by d2d_device_context_DrawRectangle().

◆ d2d_command_list_fill_geometry()

void d2d_command_list_fill_geometry ( struct d2d_command_list *  command_list,
const struct d2d_device_context *  context,
ID2D1Geometry *  geometry,
ID2D1Brush *  orig_brush,
ID2D1Brush *  orig_opacity_brush 
)

Definition at line 825 of file command_list.c.

828{
829 ID2D1Brush *brush, *opacity_brush = NULL;
831
832 if (FAILED(d2d_command_list_create_brush(command_list, context, orig_brush, &brush)))
833 {
834 command_list->state = D2D_COMMAND_LIST_STATE_ERROR;
835 return;
836 }
837
838 if (orig_opacity_brush && FAILED(d2d_command_list_create_brush(command_list, context,
839 orig_opacity_brush, &opacity_brush)))
840 {
841 command_list->state = D2D_COMMAND_LIST_STATE_ERROR;
842 ID2D1Brush_Release(brush);
843 return;
844 }
845
847
848 command = d2d_command_list_require_space(command_list, sizeof(*command));
850 command->geometry = geometry;
851 command->brush = brush;
852 command->opacity_brush = opacity_brush;
853}
ID2D1Geometry * geometry
Definition: command_list.c:168

Referenced by d2d_device_context_FillGeometry().

◆ d2d_command_list_fill_mesh()

void d2d_command_list_fill_mesh ( struct d2d_command_list *  command_list,
const struct d2d_device_context *  context,
ID2D1Mesh *  mesh,
ID2D1Brush *  orig_brush 
)

Definition at line 1053 of file command_list.c.

1055{
1058
1059 if (FAILED(d2d_command_list_create_brush(command_list, context, orig_brush, &brush)))
1060 {
1061 command_list->state = D2D_COMMAND_LIST_STATE_ERROR;
1062 return;
1063 }
1064
1066
1067 command = d2d_command_list_require_space(command_list, sizeof(*command));
1069 command->mesh = mesh;
1070 command->brush = brush;
1071}
Definition: mesh.c:189

Referenced by d2d_device_context_FillMesh().

◆ d2d_command_list_fill_opacity_mask()

void d2d_command_list_fill_opacity_mask ( struct d2d_command_list *  command_list,
const struct d2d_device_context *  context,
ID2D1Bitmap *  bitmap,
ID2D1Brush *  orig_brush,
const D2D1_RECT_F *  dst_rect,
const D2D1_RECT_F *  src_rect 
)

Definition at line 1073 of file command_list.c.

1075{
1078 size_t size;
1079 BYTE *data;
1080
1081 if (FAILED(d2d_command_list_create_brush(command_list, context, orig_brush, &brush)))
1082 {
1083 command_list->state = D2D_COMMAND_LIST_STATE_ERROR;
1084 return;
1085 }
1086
1087 size = sizeof(*command);
1088 if (dst_rect) size += sizeof(*dst_rect);
1089 if (src_rect) size += sizeof(*src_rect);
1090
1092
1095 command->bitmap = bitmap;
1096 command->brush = brush;
1097
1098 data = (BYTE *)(command + 1);
1099
1102}

Referenced by d2d_device_context_FillOpacityMask(), and d2d_device_context_ID2D1DeviceContext_FillOpacityMask().

◆ d2d_command_list_fill_rectangle()

void d2d_command_list_fill_rectangle ( struct d2d_command_list *  command_list,
const struct d2d_device_context *  context,
const D2D1_RECT_F *  rect,
ID2D1Brush *  orig_brush 
)

Definition at line 855 of file command_list.c.

857{
860
861 if (FAILED(d2d_command_list_create_brush(command_list, context, orig_brush, &brush)))
862 {
863 command_list->state = D2D_COMMAND_LIST_STATE_ERROR;
864 return;
865 }
866
867 command = d2d_command_list_require_space(command_list, sizeof(*command));
869 command->rect = *rect;
870 command->brush = brush;
871}

Referenced by d2d_device_context_FillRectangle().

◆ d2d_command_list_GetFactory()

static void STDMETHODCALLTYPE d2d_command_list_GetFactory ( ID2D1CommandList *  iface,
ID2D1Factory **  factory 
)
static

Definition at line 267 of file command_list.c.

268{
269 struct d2d_command_list *command_list = impl_from_ID2D1CommandList(iface);
270
271 TRACE("iface %p, factory %p.\n", iface, factory);
272
273 ID2D1Factory_AddRef(*factory = command_list->factory);
274}
ID2D1Factory * factory
Definition: d2d1_private.h:835

◆ d2d_command_list_pop_clip()

void d2d_command_list_pop_clip ( struct d2d_command_list *  command_list)

Definition at line 707 of file command_list.c.

708{
709 struct d2d_command *command;
710
711 command = d2d_command_list_require_space(command_list, sizeof(*command));
713}

Referenced by d2d_device_context_PopAxisAlignedClip().

◆ d2d_command_list_pop_layer()

void d2d_command_list_pop_layer ( struct d2d_command_list *  command_list)

Definition at line 738 of file command_list.c.

739{
740 struct d2d_command *command;
741
742 command = d2d_command_list_require_space(command_list, sizeof(*command));
744}

Referenced by d2d_device_context_PopLayer().

◆ d2d_command_list_push_clip()

void d2d_command_list_push_clip ( struct d2d_command_list *  command_list,
const D2D1_RECT_F *  rect,
D2D1_ANTIALIAS_MODE  mode 
)

Definition at line 696 of file command_list.c.

698{
700
701 command = d2d_command_list_require_space(command_list, sizeof(*command));
703 command->rect = *rect;
704 command->mode = mode;
705}
GLenum mode
Definition: glext.h:6217

Referenced by d2d_device_context_PushAxisAlignedClip().

◆ d2d_command_list_push_layer()

void d2d_command_list_push_layer ( struct d2d_command_list *  command_list,
const struct d2d_device_context *  context,
const D2D1_LAYER_PARAMETERS1 *  params,
ID2D1Layer *  layer 
)

Definition at line 715 of file command_list.c.

717{
719 ID2D1Brush *opacity_brush = NULL;
720
721 if (params->opacityBrush && FAILED(d2d_command_list_create_brush(command_list, context,
722 params->opacityBrush, &opacity_brush)))
723 {
724 command_list->state = D2D_COMMAND_LIST_STATE_ERROR;
725 return;
726 }
727
729 d2d_command_list_reference_object(command_list, params->geometricMask);
730
731 command = d2d_command_list_require_space(command_list, sizeof(*command));
733 command->params = *params;
734 command->params.opacityBrush = opacity_brush;
735 command->layer = layer;
736}
GLenum const GLfloat * params
Definition: glext.h:5645
GLenum GLuint GLint GLint layer
Definition: glext.h:7007

Referenced by d2d_device_context_ID2D1DeviceContext_PushLayer(), and d2d_device_context_PushLayer().

◆ d2d_command_list_QueryInterface()

static HRESULT STDMETHODCALLTYPE d2d_command_list_QueryInterface ( ID2D1CommandList *  iface,
REFIID  iid,
void **  out 
)
static

Definition at line 216 of file command_list.c.

217{
218 TRACE("iface %p, iid %s, out %p.\n", iface, debugstr_guid(iid), out);
219
220 if (IsEqualGUID(iid, &IID_ID2D1CommandList)
221 || IsEqualGUID(iid, &IID_ID2D1Image)
222 || IsEqualGUID(iid, &IID_ID2D1Resource)
223 || IsEqualGUID(iid, &IID_IUnknown))
224 {
225 ID2D1CommandList_AddRef(iface);
226 *out = iface;
227 return S_OK;
228 }
229
230 WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(iid));
231
232 *out = NULL;
233 return E_NOINTERFACE;
234}
#define WARN(fmt,...)
Definition: precomp.h:61
const GUID IID_IUnknown
#define debugstr_guid
Definition: kernel32.h:35
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
Definition: wcsftime.cpp:383
#define E_NOINTERFACE
Definition: winerror.h:3479

◆ d2d_command_list_reference_object()

static void d2d_command_list_reference_object ( struct d2d_command_list *  command_list,
void *  object 
)
static

Definition at line 535 of file command_list.c.

536{
538
539 if (!obj) return;
540
541 if (!d2d_array_reserve((void **)&command_list->objects, &command_list->objects_capacity,
542 command_list->objects_count + 1, sizeof(*command_list->objects)))
543 {
544 return;
545 }
546
547 command_list->objects[command_list->objects_count++] = obj;
548 IUnknown_AddRef(obj);
549}
static BOOL d2d_array_reserve(void **elements, size_t *capacity, size_t count, size_t size)
Definition: d2d1_private.h:897
size_t objects_capacity
Definition: d2d1_private.h:844
IUnknown ** objects
Definition: d2d1_private.h:845

Referenced by d2d_command_list_create_brush(), d2d_command_list_draw_bitmap(), d2d_command_list_draw_geometry(), d2d_command_list_draw_glyph_run(), d2d_command_list_draw_image(), d2d_command_list_draw_line(), d2d_command_list_draw_rectangle(), d2d_command_list_fill_geometry(), d2d_command_list_fill_mesh(), d2d_command_list_fill_opacity_mask(), d2d_command_list_push_layer(), and d2d_command_list_set_text_rendering_params_internal().

◆ d2d_command_list_Release()

static ULONG STDMETHODCALLTYPE d2d_command_list_Release ( ID2D1CommandList *  iface)
static

Definition at line 246 of file command_list.c.

247{
248 struct d2d_command_list *command_list = impl_from_ID2D1CommandList(iface);
250 size_t i;
251
252 TRACE("%p decreasing refcount to %lu.\n", iface, refcount);
253
254 if (!refcount)
255 {
256 ID2D1Factory_Release(command_list->factory);
257 for (i = 0; i < command_list->objects_count; ++i)
258 IUnknown_Release(command_list->objects[i]);
259 free(command_list->objects);
260 free(command_list->data);
261 free(command_list);
262 }
263
264 return refcount;
265}
#define InterlockedDecrement
Definition: armddk.h:52
#define free
Definition: debug_ros.c:5
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

◆ d2d_command_list_require_space()

◆ d2d_command_list_set_antialias_mode()

void d2d_command_list_set_antialias_mode ( struct d2d_command_list *  command_list,
D2D1_ANTIALIAS_MODE  mode 
)

◆ d2d_command_list_set_primitive_blend()

void d2d_command_list_set_primitive_blend ( struct d2d_command_list *  command_list,
D2D1_PRIMITIVE_BLEND  primitive_blend 
)

◆ d2d_command_list_set_tags()

void d2d_command_list_set_tags ( struct d2d_command_list *  command_list,
D2D1_TAG  tag1,
D2D1_TAG  tag2 
)

◆ d2d_command_list_set_text_antialias_mode()

◆ d2d_command_list_set_text_rendering_params()

void d2d_command_list_set_text_rendering_params ( struct d2d_command_list *  command_list,
IDWriteRenderingParams *  params 
)

◆ d2d_command_list_set_text_rendering_params_internal()

static void d2d_command_list_set_text_rendering_params_internal ( struct d2d_command_list *  command_list,
BOOL  allow_null,
IDWriteRenderingParams *  params 
)
static

Definition at line 873 of file command_list.c.

875{
877
878 if (!params && !allow_null) return;
879
881 && !params)
882 {
883 return;
884 }
885
887
888 if (params)
889 command_list->flags &= ~D2D_COMMAND_LIST_HAS_NULL_TEXT_RENDERING_PARAMS;
890 else
892
893 command = d2d_command_list_require_space(command_list, sizeof(*command));
895 command->params = params;
896}
unsigned int flags
Definition: d2d1_private.h:837

Referenced by d2d_command_list_draw_glyph_run(), and d2d_command_list_set_text_rendering_params().

◆ d2d_command_list_set_transform()

void d2d_command_list_set_transform ( struct d2d_command_list *  command_list,
const D2D1_MATRIX_3X2_F *  transform 
)

Definition at line 666 of file command_list.c.

668{
670
671 command = d2d_command_list_require_space(command_list, sizeof(*command));
673 command->transform = *transform;
674}
GLuint GLenum GLenum transform
Definition: glext.h:9407

Referenced by d2d_command_list_begin_draw(), d2d_device_context_RestoreDrawingState(), and d2d_device_context_SetTransform().

◆ d2d_command_list_set_unit_mode()

void d2d_command_list_set_unit_mode ( struct d2d_command_list *  command_list,
D2D1_UNIT_MODE  mode 
)

◆ d2d_command_list_Stream()

static HRESULT STDMETHODCALLTYPE d2d_command_list_Stream ( ID2D1CommandList *  iface,
ID2D1CommandSink *  sink 
)
static

Definition at line 276 of file command_list.c.

277{
278 struct d2d_command_list *command_list = impl_from_ID2D1CommandList(iface);
279 const void *data, *end;
280 HRESULT hr;
281
282 TRACE("iface %p, sink %p.\n", iface, sink);
283
284 if (command_list->state != D2D_COMMAND_LIST_STATE_CLOSED) return S_OK;
285
286 if (FAILED(hr = ID2D1CommandSink_BeginDraw(sink)))
287 return hr;
288
289 data = command_list->data;
290 end = (char *)command_list->data + command_list->size;
291 while (data < end)
292 {
293 const struct d2d_command *command = data;
294
295 switch (command->op)
296 {
298 {
299 const struct d2d_command_set_antialias_mode *c = data;
300 hr = ID2D1CommandSink_SetAntialiasMode(sink, c->mode);
301 break;
302 }
304 {
305 const struct d2d_command_set_tags *c = data;
306 hr = ID2D1CommandSink_SetTags(sink, c->tag1, c->tag2);
307 break;
308 }
310 {
312 hr = ID2D1CommandSink_SetTextAntialiasMode(sink, c->mode);
313 break;
314 }
316 {
318 hr = ID2D1CommandSink_SetTextRenderingParams(sink, c->params);
319 break;
320 }
322 {
323 const struct d2d_command_set_transform *c = data;
324 hr = ID2D1CommandSink_SetTransform(sink, &c->transform);
325 break;
326 }
328 {
329 const struct d2d_command_set_primitive_blend *c = data;
330 ID2D1CommandSink1 *sink1;
331 ID2D1CommandSink4 *sink4;
332
333 switch (c->primitive_blend)
334 {
337 hr = ID2D1CommandSink_SetPrimitiveBlend(sink, c->primitive_blend);
338 break;
341 if (SUCCEEDED(ID2D1CommandSink_QueryInterface(sink, &IID_ID2D1CommandSink1, (void **)&sink1)))
342 {
343 hr = ID2D1CommandSink1_SetPrimitiveBlend1(sink1, c->primitive_blend);
344 ID2D1CommandSink1_Release(sink1);
345 }
346 else
347 hr = ID2D1CommandSink_SetPrimitiveBlend(sink, D2D1_PRIMITIVE_BLEND_SOURCE_OVER);
348 break;
350 if (SUCCEEDED(ID2D1CommandSink_QueryInterface(sink, &IID_ID2D1CommandSink4, (void **)&sink4)))
351 {
352 hr = ID2D1CommandSink4_SetPrimitiveBlend2(sink4, c->primitive_blend);
353 ID2D1CommandSink4_Release(sink4);
354 }
355 else
356 hr = ID2D1CommandSink_SetPrimitiveBlend(sink, D2D1_PRIMITIVE_BLEND_SOURCE_OVER);
357 break;
358 default:
359 FIXME("Unexpected blend mode %u.\n", c->primitive_blend);
361 }
362 break;
363 }
365 {
366 const struct d2d_command_set_unit_mode *c = data;
367 hr = ID2D1CommandSink_SetUnitMode(sink, c->mode);
368 break;
369 }
371 {
372 const struct d2d_command_clear *c = data;
373 hr = ID2D1CommandSink_Clear(sink, &c->color);
374 break;
375 }
377 {
378 const struct d2d_command_draw_glyph_run *c = data;
379 hr = ID2D1CommandSink_DrawGlyphRun(sink, c->origin, &c->run, c->run_desc, c->brush, c->measuring_mode);
380 break;
381 }
383 {
384 const struct d2d_command_draw_line *c = data;
385 hr = ID2D1CommandSink_DrawLine(sink, c->p0, c->p1, c->brush, c->stroke_width,
386 c->stroke_style);
387 break;
388 }
390 {
391 const struct d2d_command_draw_geometry *c = data;
392 hr = ID2D1CommandSink_DrawGeometry(sink, c->geometry, c->brush, c->stroke_width,
393 c->stroke_style);
394 break;
395 }
397 {
398 const struct d2d_command_draw_rectangle *c = data;
399 hr = ID2D1CommandSink_DrawRectangle(sink, &c->rect, c->brush, c->stroke_width,
400 c->stroke_style);
401 break;
402 }
404 {
405 const struct d2d_command_draw_bitmap *c = data;
406 hr = ID2D1CommandSink_DrawBitmap(sink, c->bitmap, c->dst_rect, c->opacity,
407 c->interpolation_mode, c->src_rect, c->perspective_transform);
408 break;
409 }
411 {
412 const struct d2d_command_draw_image *c = data;
413 hr = ID2D1CommandSink_DrawImage(sink, c->image, c->target_offset, c->image_rect,
414 c->interpolation_mode, c->composite_mode);
415 break;
416 }
418 {
419 const struct d2d_command_fill_mesh *c = data;
420 hr = ID2D1CommandSink_FillMesh(sink, c->mesh, c->brush);
421 break;
422 }
424 {
425 const struct d2d_command_fill_opacity_mask *c = data;
426 hr = ID2D1CommandSink_FillOpacityMask(sink, c->bitmap, c->brush, c->dst_rect, c->src_rect);
427 break;
428 }
430 {
431 const struct d2d_command_fill_geometry *c = data;
432 hr = ID2D1CommandSink_FillGeometry(sink, c->geometry, c->brush, c->opacity_brush);
433 break;
434 }
436 {
437 const struct d2d_command_fill_rectangle *c = data;
438 hr = ID2D1CommandSink_FillRectangle(sink, &c->rect, c->brush);
439 break;
440 }
442 {
443 const struct d2d_command_push_clip *c = data;
444 hr = ID2D1CommandSink_PushAxisAlignedClip(sink, &c->rect, c->mode);
445 break;
446 }
448 {
449 const struct d2d_command_push_layer *c = data;
450 hr = ID2D1CommandSink_PushLayer(sink, &c->params, c->layer);
451 break;
452 }
454 hr = ID2D1CommandSink_PopAxisAlignedClip(sink);
455 break;
457 hr = ID2D1CommandSink_PopLayer(sink);
458 break;
459 default:
460 FIXME("Unhandled command %u.\n", command->op);
462 }
463
464 if (FAILED(hr)) return hr;
465
466 data = (char *)data + command->size;
467 }
468
469 return ID2D1CommandSink_EndDraw(sink);
470}
while(CdLookupNextInitialFileDirent(IrpContext, Fcb, FileContext))
@ D2D1_PRIMITIVE_BLEND_ADD
Definition: d2d1_1.idl:58
@ D2D1_PRIMITIVE_BLEND_SOURCE_OVER
Definition: d2d1_1.idl:55
@ D2D1_PRIMITIVE_BLEND_MIN
Definition: d2d1_1.idl:57
@ D2D1_PRIMITIVE_BLEND_MAX
Definition: d2d1_1.idl:59
@ D2D1_PRIMITIVE_BLEND_COPY
Definition: d2d1_1.idl:56
GLuint GLuint end
Definition: gl.h:1545
const GLubyte * c
Definition: glext.h:8905
GLsizei GLenum GLboolean sink
Definition: glext.h:5672

◆ d2d_command_list_write_field()

static void d2d_command_list_write_field ( BYTE **  data,
void *  dst,
const void *  src,
size_t  size 
)
inlinestatic

Definition at line 904 of file command_list.c.

905{
906 void **ptr = dst;
907
908 if (!src)
909 {
910 *ptr = NULL;
911 return;
912 }
913
914 *ptr = *data;
915 memcpy(*data, src, size);
916 *data = *data + size;
917}
GLenum src
Definition: glext.h:6340
GLenum GLenum dst
Definition: glext.h:6340
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
static PVOID ptr
Definition: dispmode.c:27

Referenced by d2d_command_list_draw_bitmap(), d2d_command_list_draw_glyph_run(), d2d_command_list_draw_image(), and d2d_command_list_fill_opacity_mask().

◆ impl_from_ID2D1CommandList()

static struct d2d_command_list * impl_from_ID2D1CommandList ( ID2D1CommandList *  iface)
inlinestatic

Definition at line 211 of file command_list.c.

212{
213 return CONTAINING_RECORD(iface, struct d2d_command_list, ID2D1CommandList_iface);
214}
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260

Referenced by d2d_command_list_AddRef(), d2d_command_list_Close(), d2d_command_list_GetFactory(), d2d_command_list_Release(), and d2d_command_list_Stream().

◆ unsafe_impl_from_ID2D1CommandList()

struct d2d_command_list * unsafe_impl_from_ID2D1CommandList ( ID2D1CommandList *  iface)

Definition at line 512 of file command_list.c.

513{
514 if (!iface)
515 return NULL;
516 assert(iface->lpVtbl == (ID2D1CommandListVtbl *)&d2d_command_list_vtbl);
517 return CONTAINING_RECORD(iface, struct d2d_command_list, ID2D1CommandList_iface);
518}
#define assert(_expr)
Definition: assert.h:32

Referenced by d2d_device_context_SetTarget().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( d2d  )

Variable Documentation

◆ d2d_command_list_vtbl

const ID2D1CommandListVtbl d2d_command_list_vtbl
static
Initial value:
=
{
}
static HRESULT STDMETHODCALLTYPE d2d_command_list_Close(ID2D1CommandList *iface)
Definition: command_list.c:472
static HRESULT STDMETHODCALLTYPE d2d_command_list_QueryInterface(ID2D1CommandList *iface, REFIID iid, void **out)
Definition: command_list.c:216
static ULONG STDMETHODCALLTYPE d2d_command_list_AddRef(ID2D1CommandList *iface)
Definition: command_list.c:236
static ULONG STDMETHODCALLTYPE d2d_command_list_Release(ID2D1CommandList *iface)
Definition: command_list.c:246
static void STDMETHODCALLTYPE d2d_command_list_GetFactory(ID2D1CommandList *iface, ID2D1Factory **factory)
Definition: command_list.c:267
static HRESULT STDMETHODCALLTYPE d2d_command_list_Stream(ID2D1CommandList *iface, ID2D1CommandSink *sink)
Definition: command_list.c:276

Definition at line 488 of file command_list.c.

Referenced by d2d_command_list_create(), and unsafe_impl_from_ID2D1CommandList().