Sorry about the message flurry. XplatUI.PaintEventEnd(Handle) wasn't being
called in quick repainting logic.
Thanks,
Jonathan
-----Original Message-----
From: [EMAIL PROTECTED] on behalf of Jonathan S. Chambers
Sent: Thu 4/28/2005 8:40 PM
To: Jonathan S. Chambers; [email protected]
Cc:
Subject: RE: [Mono-winforms-list] Double Buffering
The first patch is valid. The second is not. The logic looks like it still
needs fixed (when should needs_redraw be set to false), but my solution does
not seem to be working...
-----Original Message-----
From: [EMAIL PROTECTED] on behalf of Jonathan S. Chambers
Sent: Thu 4/28/2005 8:31 PM
To: Jonathan S. Chambers; [email protected]
Cc:
Subject: RE: [Mono-winforms-list] Double Buffering
Also, the setting of 'needs_redraw = false' (line 3181) should be moved outside
of the if block. Notice that it can never actually get inside the if block,
since that is the only place needs_redraw is set to false.
- Jonathan
-----Original Message-----
From: [EMAIL PROTECTED] on behalf of Jonathan S. Chambers
Sent: Thu 4/28/2005 8:21 PM
To: [email protected]
Cc:
Subject: [Mono-winforms-list] Double Buffering
I noticed that support for double buffering has been included in
Control.cs. This is nice, except that I think the two calls to DrawImage (lines
3177 and 3195) should pass ClientRectangle as the second parameter, rather than
ClipRectangle of the paint event args. According to MS documentation, and
actual behavior, "The image represented by the image object is scaled to the
dimensions of the rect rectangle."
Thus with the code as is, the code as is draws the ImageBuffer to the
ClipRectangle. When the clip rectangle is the entire control, this makes sense.
However, when the clip rectangle is just part of the control (like when a
partially obstructing window is removed) the whole control is drawn to the clip
area. (I can send an image if anyone wants to see).
Thanks,
Jonathan
_______________________________________________
Mono-winforms-list maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-winforms-list
Index: Control.cs
===================================================================
--- Control.cs (revision 43749)
+++ Control.cs (working copy)
@@ -3173,8 +3173,8 @@
if (!needs_redraw) {
// Just blit the previous image
- paint_event.Graphics.DrawImage (ImageBuffer, paint_event.ClipRectangle);
- needs_redraw = false;
+ paint_event.Graphics.DrawImage (ImageBuffer, ClientRectangle);
+ XplatUI.PaintEventEnd(Handle);
return;
}
@@ -3190,8 +3190,10 @@
OnPaint(paint_event);
if ((control_style & ControlStyles.DoubleBuffer) != 0) {
- dc.DrawImage (ImageBuffer, paint_event.ClipRectangle);
+
+ dc.DrawImage (ImageBuffer, ClientRectangle);
paint_event.SetGraphics (dc);
+ needs_redraw = false;
}
XplatUI.PaintEventEnd(Handle);