Nikolay Sivov wrote:
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.
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?
Andrew