[PATCH 1/5] d2d1: Implement d2d_d3d_render_target_CreateSolidColorBrush().

Jacek Caban jacek at codeweavers.com
Mon Jun 16 07:15:14 CDT 2014


On 06/16/14 13:59, Henri Verbeet wrote:
> On 16 June 2014 13:57, Jacek Caban <jacek at codeweavers.com> wrote:
>> Yup, and that patch has the same problem with parent to child interface
>> casts.
>>
> What are you suggesting instead?

I don't know this how will this be used in the future, so my ideas may
not be best fit. For the code that you sent so far, a separated struct
for all brush types would do the job. I guess that different brush types
will store different data in the future, so separated structs will be
needed anyway. If having some sort of shared struct is desired, this
could be introduced as separated struct:

struct d2d1_brash {
  /* shared stuff, maybe even refcount */
};

struct d2d1_solid_brush { 
  ID2D1SolidColorBrush ID2D1SolidColorBrush_iface
  LONG refcount;
  struct brush base_brush;
  /* Stuff specific to solid brush */
};

This has some drawbacks like the fact that d2d1_brush can't be easily
casted to ID2D1Brush. This may be avoided by design or, with some
runtime overhead, d2d1_brush could store a pointer to ID2D1Brush (which
would be initialized to solid_brush->ID2D1SoludBrush_iface in this case)
or have some internal vtbl-like casting functions.

Jacek



More information about the wine-devel mailing list