[2/2] gdiplus: Implement GdipBeginContainer2 and GdipEndContainer

Andrew Eikum andrew at brightnightgames.com
Fri Jul 3 12:29:25 CDT 2009


Andrew Eikum wrote:
> Nikolay Sivov wrote:
>> Vincent Povirk wrote:
>>> On Fri, Jul 3, 2009 at 10:00 AM, Andrew
>>> Eikum<andrew at brightnightgames.com> wrote:
>>>  
>>>> I agree that the behavior of the container IDs doesn't match native.
>>>>  However, do we really care to duplicate that behavior?  I can't 
>>>> see any
>>>> documentation in MSDN that says container IDs must be unique across 
>>>> either
>>>> graphics objects or within a single graphics object.
>>>>
>>>> I can't imagine any application depending on the uniqueness of 
>>>> container
>>>> IDs; if they try to pass a container for graphics1 to graphics2, 
>>>> nothing
>>>> happens, so there's no behavior to depend on.  Ditto for invalid or
>>>> already-used containers.  The only scenario I can think of where the
>>>> uniqueness of container IDs would be a dependency would be an 
>>>> application
>>>> error calling EndContainer() with invalid values.  I don't know if 
>>>> it's
>>>> worth the effort of making a handle table and whatnot to work 
>>>> around an
>>>> application glitch that might not even exist.
>>>>
>>>> So, I would argue against the validity of the test you quote.  Why 
>>>> should
>>>> the same value not be returned twice?
>>>>     
>>>
>>> +1
>>>
>>> If an application does need the ID's to be more like Windows, the code
>>> can be changed to account for it. We don't have to match every quirk
>>> of Windows the first time something is implemented.
>>>   
>> Exactly. I'm not talking about that. Allocating handle on Begin..() 
>> or Save..() and releasing it on
>> End...() or Restore...() should be enough. After that we will 
>> probably never want to change that
>> but for a first time it's necessary I think.
>
> Okay, how about this patch?  It creates a list of available IDs and 
> assigns/releases them as needed.  Seems to work fine from my testing.  
> It also adds some fixes for things Vincent pointed out last night.
>
> Can you guys check if everything is done correctly from a C/Wine 
> perspective?  I notice that the objects in availableGCIDs are never 
> explicitly freed; can we just let this happen during cleanup as the 
> program exits?
Appears it didn't attach for some reason?  Attempting to re-send, also 
available at
http://www.brightnightgames.com/wine/GdipBeginContainer2.patch


More information about the wine-devel mailing list