1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
6 * Moonlight List (moonlight-list@lists.ximian.com)
8 * Copyright 2007-2008 Novell, Inc. (http://www.novell.com)
10 * See the LICENSE file included with the distribution for details.
18 #include "application.h"
19 #include "bitmapsource.h"
22 BitmapSource::BitmapSource ()
24 SetObjectType (Type::BITMAPSOURCE
);
26 native_surface
= NULL
;
30 BitmapSource::~BitmapSource ()
33 cairo_surface_destroy (image_surface
);
35 cairo_surface_destroy (native_surface
);
42 BitmapSource::GetBitmapData ()
48 BitmapSource::SetBitmapData (gpointer data
)
56 BitmapSource::Invalidate ()
58 if (GetPixelWidth () == 0 || GetPixelHeight () == 0)
62 cairo_surface_destroy (native_surface
);
63 native_surface
= NULL
;
66 cairo_surface_destroy (image_surface
);
68 image_surface
= cairo_image_surface_create_for_data ((unsigned char *) GetBitmapData (), GetPixelFormat () == PixelFormatBgr32
? CAIRO_FORMAT_RGB24
: CAIRO_FORMAT_ARGB32
, GetPixelWidth (), GetPixelHeight (), GetPixelWidth ()*4);
72 BitmapSource::GetSurface (cairo_t
*cr
)
74 if (image_surface
== NULL
)
78 return native_surface
;
83 native_surface
= cairo_surface_create_similar (cairo_get_group_target (cr
),
84 cairo_surface_get_content (image_surface
),
85 GetPixelWidth (), GetPixelHeight ());
87 cairo_t
*context
= cairo_create (native_surface
);
89 cairo_set_source_surface (context
, image_surface
, 0, 0);
90 cairo_pattern_set_filter (cairo_get_source (context
), CAIRO_FILTER_FAST
);
92 cairo_paint (context
);
93 cairo_destroy (context
);
95 return native_surface
;