mac 2,9 "Cannot nest wxDCs on the same window"
Riccardo Cohen
rcohen at articque.com
Tue Oct 2 05:19:23 PDT 2007
Actually I found an unnecessary wxClientDC creation, I removed it and
all went all right. I changed my code to call some RefreshRect() instead
of drawing directly...
thanks
Riccardo Cohen wrote:
> I agree and admit that it is the safiest way, but it is often easyer to
> do a "draw now" under certain user action, rather than "change data"
> then "refresh"...
>
> For instance when a user select a zone, I have a mouse motion event, and
> I want to draw a rectangle that follows the mouse to show the zone, I
> can resize a rectangle object and then refresh, but it is easyer to call
> drawrectangle() immediatly. The same for timer event : for blinking
> objects I simpy change the color at each timer event and draw a little
> point with this color.
>
> My present problem is that I used this method quite often. Buf if quartz
> does not allow it, I'll change my code.
>
> By the way you spoke about measuring, it happens that in the destructor
> of one of my windows, I have call some cleaning code that create a DC to
> measure text size. This lead to an exception while in the window
> destructor. Maybe you've got an idea for that point also.
>
>
> Thanks for your great work anyway.
>
> Stefan Csomor wrote:
>> Hi
>>> On Mon, 01 Oct 2007 09:55:15 -0700 Robin Dunn <robin at alldunn.com> wrote:
>>>
>>> RD> Riccardo Cohen wrote:
>>> RD> > Hi
>>> RD> > I have a program that works on wxmac2,7 , but with 2,9 it
>>> displays the RD> > following assertion : "Cannot nest wxDCs on the
>>> same window"
>>> RD> > RD> > this happens when I do
>>> RD> > RD> > wxClientDC *dc=new wxClientDC(diag);
>>> RD> > dc->DrawRectangle(rec);
>>> RD> > delete(dc);
>>> RD> > RD> > inside a timer_wake event.
>>> RD> > I do not understand exactly what it means.
>>> RD> RD> You can not have more than one wxDC active at the same time
>>> for the same RD> window. Somewhere you have another DC already using
>>> diag when the code RD> above is called.
>>>
>>> This seems like a rather bad restriction. I wonder if we couldn't make
>>> all wxClientDC instances on the same window use the same underlying
>>> CGContext somehow. It could still result in problems with changing DC
>>> attributes but if we restored them carefully, it would allow something
>>> (common) like this:
>>>
>> I've tried this in earlier times, but I was not successful when
>> another context for another wxWindow on the same toplevel window that
>> was currently drawing was requested, but since now all code is Quartz
>> only, I could try again.
>>
>> Neverthelesss I really think that every drawing has to be moved to a
>> OnPaint event, and the only reason to use a dc outside is for
>> measuring purposes, which already can be done. It is the way the new
>> drawing systems perform optimally, intermittent drawing leads to
>> synchronization bottlenecks.
>>
>> Best,
>>
>> Stefan
>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: wx-users-unsubscribe at lists.wxwidgets.org
>> For additional commands, e-mail: wx-users-help at lists.wxwidgets.org
>>
>>
>
--
Très cordialement,
Riccardo Cohen
-------------------------------------------
Articque
http://www.articque.com
149 av Général de Gaulle
37230 Fondettes - France
tel : 02-47-49-90-49
fax : 02-47-49-91-49
More information about the wx-users
mailing list