[Offscreengecko-commits] SF.net SVN: offscreengecko:[91] trunk/src/libosgk/OffscreenWidget.cpp
Status: Pre-Alpha
Brought to you by:
res2002
|
From: <re...@us...> - 2008-11-02 15:56:55
|
Revision: 91
http://offscreengecko.svn.sourceforge.net/offscreengecko/?rev=91&view=rev
Author: res2002
Date: 2008-11-02 15:56:53 +0000 (Sun, 02 Nov 2008)
Log Message:
-----------
Fix incomplete repaint after resize
Modified Paths:
--------------
trunk/src/libosgk/OffscreenWidget.cpp
Modified: trunk/src/libosgk/OffscreenWidget.cpp
===================================================================
--- trunk/src/libosgk/OffscreenWidget.cpp 2008-11-02 15:50:26 UTC (rev 90)
+++ trunk/src/libosgk/OffscreenWidget.cpp 2008-11-02 15:56:53 UTC (rev 91)
@@ -52,7 +52,7 @@
#ifdef REPAINT_DUMP
#include <fstream>
-#include "tgawrite.h"
+#include "../common/tgawrite.h"
#endif
namespace OSGK
@@ -171,6 +171,8 @@
nsEventStatus status;
DispatchEvent (&event, status);
+
+ Invalidate (false);
}
NS_IMETHODIMP OffscreenWidget::Validate()
@@ -306,39 +308,41 @@
PRBool result = true;
nsEventStatus eventStatus = nsEventStatus_eIgnore;
- if (dirtyRegion->IsEmpty()) return NS_OK;
+ if (dirtyRegion->IsEmpty() && (browser || surface)) return NS_OK;
+ nsCOMPtr<nsIRenderingContext> rc;
+ nsresult rv = mContext->CreateRenderingContextInstance (*getter_AddRefs(rc));
+ if (NS_FAILED(rv)) {
+ NS_WARNING("CreateRenderingContextInstance failed");
+ return NS_ERROR_FAILURE;
+ }
+
+ nsRefPtr<gfxASurface> targetSurface (GetThebesSurface ());
+ rv = rc->Init (mContext, targetSurface);
+ if (NS_FAILED(rv)) {
+ NS_WARNING("RC::Init failed");
+ return NS_ERROR_FAILURE;
+ }
+
#ifdef REPAINT_DUMP
+ gfxImageSurface* dumpSurface = static_cast<gfxImageSurface*> (targetSurface.get());
+
char filename[64];
std::ofstream tgastream;
AlphaCounter localCounter;
- if ((surface != 0) && (surface->Data() != 0))
+ if ((dumpSurface != 0) && (dumpSurface->Data() != 0))
{
snprintf (filename, sizeof (filename),
"paint_%08x_%u_%s.tga", this, paintCounter, localCounter.GetStr());
tgastream.open (filename, std::ios::out | std::ios::binary);
- const gfxIntSize& surfSize (surface->GetSize ());
+ const gfxIntSize& surfSize (dumpSurface->GetSize ());
TGAWriter::WriteBGRAImage (surfSize.width, surfSize.height,
- surface->Data(), tgastream);
+ dumpSurface->Data(), tgastream);
tgastream.close ();
}
++localCounter;
#endif
- nsCOMPtr<nsIRenderingContext> rc;
- nsresult rv = mContext->CreateRenderingContextInstance (*getter_AddRefs(rc));
- if (NS_FAILED(rv)) {
- NS_WARNING("CreateRenderingContextInstance failed");
- return NS_ERROR_FAILURE;
- }
-
- nsRefPtr<gfxASurface> targetSurface (GetThebesSurface ());
- rv = rc->Init (mContext, targetSurface);
- if (NS_FAILED(rv)) {
- NS_WARNING("RC::Init failed");
- return NS_ERROR_FAILURE;
- }
-
rc->SetClipRegion (*dirtyRegion, nsClipCombine_kReplace);
gfxContext* thebesContext = reinterpret_cast<gfxContext*> (
@@ -373,14 +377,14 @@
thebesContext->SetOperator(gfxContext::OPERATOR_OVER);
#ifdef REPAINT_DUMP
- if ((surface != 0) && (surface->Data() != 0))
+ if ((dumpSurface != 0) && (dumpSurface->Data() != 0))
{
snprintf (filename, sizeof (filename),
"paint_%08x_%u_%s.tga", this, paintCounter, localCounter.GetStr());
tgastream.open (filename, std::ios::out | std::ios::binary);
- const gfxIntSize& surfSize (surface->GetSize ());
+ const gfxIntSize& surfSize (dumpSurface->GetSize ());
TGAWriter::WriteBGRAImage (surfSize.width, surfSize.height,
- surface->Data(), tgastream);
+ dumpSurface->Data(), tgastream);
tgastream.close ();
}
#endif
@@ -394,14 +398,14 @@
#ifdef REPAINT_DUMP
++localCounter;
- if ((surface != 0) && (surface->Data() != 0))
+ if ((dumpSurface != 0) && (dumpSurface->Data() != 0))
{
snprintf (filename, sizeof (filename),
"paint_%08x_%u_%s.tga", this, paintCounter, localCounter.GetStr());
tgastream.open (filename, std::ios::out | std::ios::binary);
- const gfxIntSize& surfSize (surface->GetSize ());
+ const gfxIntSize& surfSize (dumpSurface->GetSize ());
TGAWriter::WriteBGRAImage (surfSize.width, surfSize.height,
- surface->Data(), tgastream);
+ dumpSurface->Data(), tgastream);
tgastream.close ();
}
++localCounter;
@@ -431,14 +435,14 @@
}
#ifdef REPAINT_DUMP
- if ((surface != 0) && (surface->Data() != 0))
+ if ((dumpSurface != 0) && (dumpSurface->Data() != 0))
{
snprintf (filename, sizeof (filename),
"paint_%08x_%u_%s.tga", this, paintCounter, localCounter.GetStr());
tgastream.open (filename, std::ios::out | std::ios::binary);
- const gfxIntSize& surfSize (surface->GetSize ());
+ const gfxIntSize& surfSize (dumpSurface->GetSize ());
TGAWriter::WriteBGRAImage (surfSize.width, surfSize.height,
- surface->Data(), tgastream);
+ dumpSurface->Data(), tgastream);
tgastream.close ();
}
paintCounter++;
@@ -515,6 +519,7 @@
gfxIntSize size (mBounds.width, mBounds.height);
surface = new gfxImageSurface (size,
gfxASurface::ImageFormatARGB32);
+ dirtyRegion->Union (0, 0, mBounds.width, mBounds.height);
}
return surface;
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|