Interface
GdkPaintable
Description [src]
interface Gdk.Paintable : GObject.Object
GdkPaintable
is a simple interface used by GTK to represent content that
can be painted.
The content of a GdkPaintable
can be painted anywhere at any size
without requiring any sort of layout. The interface is inspired by
similar concepts elsewhere, such as
ClutterContent,
HTML/CSS Paint Sources,
or SVG Paint Servers.
A GdkPaintable
can be snapshot at any time and size using
gdk_paintable_snapshot()
. How the paintable interprets that size and
if it scales or centers itself into the given rectangle is implementation
defined, though if you are implementing a GdkPaintable
and don’t know what
to do, it is suggested that you scale your paintable ignoring any potential
aspect ratio.
The contents that a GdkPaintable
produces may depend on the GdkSnapshot
passed to it. For example, paintables may decide to use more detailed images
on higher resolution screens or when OpenGL is available. A GdkPaintable
will however always produce the same output for the same snapshot.
A GdkPaintable
may change its contents, meaning that it will now produce
a different output with the same snapshot. Once that happens, it will call
gdk_paintable_invalidate_contents()
which will emit the
GdkPaintable::invalidate-contents
signal. If a paintable is known
to never change its contents, it will set the GDK_PAINTABLE_STATIC_CONTENTS
flag. If a consumer cannot deal with changing contents, it may call
gdk_paintable_get_current_image()
which will return a static
paintable and use that.
A paintable can report an intrinsic (or preferred) size or aspect ratio it
wishes to be rendered at, though it doesn’t have to. Consumers of the interface
can use this information to layout thepaintable appropriately. Just like the
contents, the size of a paintable can change. A paintable will indicate this
by calling gdk_paintable_invalidate_size()
which will emit the
GdkPaintable::invalidate-size
signal. And just like for contents,
if a paintable is known to never change its size, it will set the
GDK_PAINTABLE_STATIC_SIZE
flag.
Besides API for applications, there are some functions that are only
useful for implementing subclasses and should not be used by applications:
gdk_paintable_invalidate_contents()
,
gdk_paintable_invalidate_size()
,
gdk_paintable_new_empty()
.
Prerequisite
In order to implement Paintable, your type must inherit fromGObject
.
Instance methods
gdk_paintable_get_current_image
Gets an immutable paintable for the current contents displayed by paintable
.
gdk_paintable_get_intrinsic_aspect_ratio
Gets the preferred aspect ratio the paintable
would like to be displayed at.
gdk_paintable_get_intrinsic_height
Gets the preferred height the paintable
would like to be displayed at.
gdk_paintable_get_intrinsic_width
Gets the preferred width the paintable
would like to be displayed at.
gdk_paintable_invalidate_contents
Called by implementations of GdkPaintable
to invalidate their contents.
Interface structure
struct GdkPaintableInterface {
void (* snapshot) (
GdkPaintable* paintable,
GdkSnapshot* snapshot,
double width,
double height
);
GdkPaintable* (* get_current_image) (
GdkPaintable* paintable
);
GdkPaintableFlags (* get_flags) (
GdkPaintable* paintable
);
int (* get_intrinsic_width) (
GdkPaintable* paintable
);
int (* get_intrinsic_height) (
GdkPaintable* paintable
);
double (* get_intrinsic_aspect_ratio) (
GdkPaintable* paintable
);
}
The list of functions that can be implemented for the GdkPaintable
interface.
Note that apart from the Gdk.PaintableInterface.snapshot
function,
no virtual function of this interface is mandatory to implement, though it
is a good idea to implement Gdk.PaintableInterface.get_current_image
for non-static paintables and Gdk.PaintableInterface.get_flags
if the
image is not dynamic as the default implementation returns no flags and
that will make the implementation likely quite slow.
Interface members
snapshot |
|
Snapshot the paintable. The given |
|
get_current_image |
|
Return a |
|
get_flags |
|
Get the flags for this instance. See |
|
get_intrinsic_width |
|
The preferred width for this object to be snapshot at or 0 if none. This is purely a hint. The object must still be able to render at any size. |
|
get_intrinsic_height |
|
The preferred height for this object to be snapshot at or 0 if none. This is purely a hint. The object must still be able to render at any size. |
|
get_intrinsic_aspect_ratio |
|
The preferred aspect ratio for this object
or 0 if none. If both |
Virtual methods
Gdk.Paintable.get_current_image
Gets an immutable paintable for the current contents displayed by paintable
.
Gdk.Paintable.get_intrinsic_aspect_ratio
Gets the preferred aspect ratio the paintable
would like to be displayed at.
Gdk.Paintable.get_intrinsic_height
Gets the preferred height the paintable
would like to be displayed at.
Gdk.Paintable.get_intrinsic_width
Gets the preferred width the paintable
would like to be displayed at.