[2/2] gdiplus: Implement GdipBeginContainer2 and GdipEndContainer

Nikolay Sivov bunglehead at gmail.com
Fri Jul 3 03:30:49 CDT 2009


Andrew Eikum wrote:
> ---
>  dlls/gdiplus/gdiplus_private.h |    3 +
>  dlls/gdiplus/graphics.c        |  154 ++++++++++++++++++++++++++++++++++++++--
>  include/gdiplusflat.h          |    1 +
>  3 files changed, 152 insertions(+), 6 deletions(-)
>   
This looks wrong for me cause I don't think you could pass container id 
created with one Graphics to
Graphics.EndContainer() of another. I've just checked it and it doesn't 
return any error code,
but generated container ids aren't the same when you call 
BeginContainer() for e.g. two objects
as sequent steps. It looks like on native these value are module unique, 
some kind of handle table needed.
This kills the first problem I described - passing strange value to 
another Graphics.

Also note that Save()/Restore() functionality uses the same stack with 
container calls (at least msdn tells us that),
for that Save/Restore we already have a test:
---
static void test_save_restore(void)
....
    /* The same state value should never be returned twice. */
    todo_wine
        check_no_duplicates(state_log);
....
---

It clearly says that no duplicates allowed, even after multiple object 
deletion - it checks for values returned
during the whole test.








More information about the wine-devel mailing list