[mistelix] Fixes preview out of memory issues
- From: Jordi Mas <jmas src gnome org>
- To: svn-commits-list gnome org
- Subject: [mistelix] Fixes preview out of memory issues
- Date: Wed, 20 May 2009 14:16:15 -0400 (EDT)
commit 82b65abf69bde1fde380625f3de7257b22508005
Author: Dani Hernandez Juarez <dhernandez0 gmail com>
Date: Wed May 20 20:16:06 2009 +0200
Fixes preview out of memory issues
---
src/widgets/SlideShowView.cs | 41 +++++++++++++++++++++++++----------------
1 files changed, 25 insertions(+), 16 deletions(-)
diff --git a/src/widgets/SlideShowView.cs b/src/widgets/SlideShowView.cs
index 0ab7f01..9872c72 100644
--- a/src/widgets/SlideShowView.cs
+++ b/src/widgets/SlideShowView.cs
@@ -138,8 +138,8 @@ namespace Mistelix.Widgets
public void Stop() {
CurrentIndex = 0;
- ClearTransition();
Pause();
+ ClearTransition();
}
public void Next()
@@ -164,6 +164,8 @@ namespace Mistelix.Widgets
public override void Destroy()
{
ClearTransition();
+ if(current_image != null)
+ current_image.ReleasePixels();
base.Destroy();
}
#endregion
@@ -187,7 +189,11 @@ namespace Mistelix.Widgets
void ClearTransition()
{
- transition = null;
+ if(transition != null) {
+ transition.Source.ReleasePixels();
+ transition.Target.ReleasePixels();
+ transition = null;
+ }
}
bool PlayingTransition()
@@ -205,19 +211,14 @@ namespace Mistelix.Widgets
void ShowImage(SlideImage imageToShow)
{
- ShowImage(this.GdkWindow, imageToShow);
- }
-
- void ShowImage(Gdk.Window window, SlideImage imageToShow)
- {
- using(ImageSurface newImage = imageToShow.ToDataImageSurface()) {
- ShowImage(window, newImage);
+ using(DataImageSurface newImage = imageToShow.ToDataImageSurface()) {
+ ShowImage(newImage);
}
}
- void ShowImage(Gdk.Window window, ImageSurface imageToShow)
+ void ShowImage(DataImageSurface imageToShow)
{
- using(Cairo.Context context = Gdk.CairoHelper.Create(window)) {
+ using(Cairo.Context context = Gdk.CairoHelper.Create(this.GdkWindow)) {
context.Source = new Pattern (imageToShow);
context.Paint ();
}
@@ -230,14 +231,17 @@ namespace Mistelix.Widgets
SlideImage oldImage = slide.images[index] as SlideImage;
oldImage.LoadSlide();
SlideImage newImage = oldImage.GetSlideThumbnail(width, height, true);
+ oldImage.ReleasePixels();
return newImage;
}
#endregion
#region event callbacks
- bool OnExposeEvent (Gdk.EventExpose args)
+ protected override bool OnExposeEvent (Gdk.EventExpose args)
{
- ShowImage(args.Window, current_image);
+ if(current_image != null) {
+ ShowImage(current_image);
+ }
return base.OnExposeEvent(args);
}
@@ -246,12 +250,17 @@ namespace Mistelix.Widgets
if(paused)
return true;
else if(transition.MoveNext()) {
- current_image = transition.Current as SlideImage;
- ShowImage(current_image);
+ SlideImage newImage = transition.Current as SlideImage;
+ if(newImage != current_image) {
+ if(current_image != null)
+ current_image.ReleasePixels();
+ current_image = newImage;
+ ShowImage(current_image);
+ }
return true;
} else {
- CurrentIndex++;
ClearTransition();
+ CurrentIndex++;
Forward();
return false;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]