Package ch.bailu.gtk.gtk
Class Snapshot
java.lang.Object
ch.bailu.gtk.type.Type
ch.bailu.gtk.type.Pointer
ch.bailu.gtk.gobject.Object
ch.bailu.gtk.gdk.Snapshot
ch.bailu.gtk.gtk.Snapshot
- All Implemented Interfaces:
PointerInterface
`GtkSnapshot` assists in creating [class@Gsk.RenderNode]s for widgets.
It functions in a similar way to a cairo context, and maintains a stack
of render nodes and their associated transformations.
The node at the top of the stack is the one that `gtk_snapshot_append_…()`
functions operate on. Use the `gtk_snapshot_push_…()` functions and
[method@Snapshot.pop] to change the current node.
The typical way to obtain a `GtkSnapshot` object is as an argument to
the [vfunc@Gtk.Widget.snapshot] vfunc. If you need to create your own
`GtkSnapshot`, use [ctor@Gtk.Snapshot.new].
It functions in a similar way to a cairo context, and maintains a stack
of render nodes and their associated transformations.
The node at the top of the stack is the one that `gtk_snapshot_append_…()`
functions operate on. Use the `gtk_snapshot_push_…()` functions and
[method@Snapshot.pop] to change the current node.
The typical way to obtain a `GtkSnapshot` object is as an argument to
the [vfunc@Gtk.Widget.snapshot] vfunc. If you need to create your own
`GtkSnapshot`, use [ctor@Gtk.Snapshot.new].
-
Nested Class Summary
Nested classes/interfaces inherited from class ch.bailu.gtk.gobject.Object
Object.OnBindingTransformFunc, Object.OnDestroyNotify, Object.OnDuplicateFunc, Object.OnNotify, Object.OnToggleNotify, Object.OnWeakNotify
-
Field Summary
Fields inherited from class ch.bailu.gtk.gobject.Object
SIGNAL_ON_NOTIFY
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionappendCairo
(Rect bounds) Creates a new [class@Gsk.CairoNode] and appends it to the current
render node of @snapshot, without changing the current node.void
appendColor
(RGBA color, Rect bounds) Creates a new render node drawing the @color into the
given @bounds and appends it to the current render node
of @snapshot.void
appendInsetShadow
(RoundedRect outline, RGBA color, float dx, float dy, float spread, float blur_radius) Appends an inset shadow into the box given by @outline.void
appendLayout
(Layout layout, RGBA color) void
appendNode
(RenderNode node) Appends @node to the current render node of @snapshot,
without changing the current node.void
appendOutsetShadow
(RoundedRect outline, RGBA color, float dx, float dy, float spread, float blur_radius) Appends an outset shadow node around the box given by @outline.void
appendTexture
(Texture texture, Rect bounds) Creates a new render node drawing the @texture
into the given @bounds and appends it to the
current render node of @snapshot.Returns the node that was constructed by @snapshot
and frees @snapshot.freeToPaintable
(Size size) Returns a paintable for the node that was
constructed by @snapshot and frees @snapshot.static ClassHandler
static int
static long
static TypeSystem.TypeSize
static long
static TypeSystem.TypeSize
void
Removes the top element from the stack of render nodes and
adds it to the nearest [class@Gsk.GLShaderNode] below it.void
perspective
(float depth) Applies a perspective projection transform.void
pop()
Removes the top element from the stack of render nodes,
and appends it to the node underneath it.void
pushBlend
(int blend_mode) Blends together two images with the given blend mode.void
pushBlur
(double radius) Blurs an image.void
Clips an image to a rectangle.void
pushColorMatrix
(Matrix color_matrix, Vec4 color_offset) Modifies the colors of an image by applying an affine transformation
in RGB space.void
pushCrossFade
(double progress) Snapshots a cross-fade operation between two images with the
given @progress.void
Inserts a debug node with a message.void
Inserts a debug node with a message.void
pushGlShader
(GLShader shader, Rect bounds, Bytes take_args) Push a [class@Gsk.GLShaderNode].void
pushOpacity
(double opacity) Modifies the opacity of an image.void
pushRepeat
(Rect bounds, Rect child_bounds) Creates a node that repeats the child node.void
pushRoundedClip
(RoundedRect bounds) Clips an image to a rounded rectangle.void
renderBackground
(StyleContext context, double x, double y, double width, double height) Creates a render node for the CSS background according to @context,
and appends it to the current node of @snapshot, without changing
the current node.void
renderFocus
(StyleContext context, double x, double y, double width, double height) Creates a render node for the focus outline according to @context,
and appends it to the current node of @snapshot, without changing
the current node.void
renderFrame
(StyleContext context, double x, double y, double width, double height) Creates a render node for the CSS border according to @context,
and appends it to the current node of @snapshot, without changing
the current node.void
renderInsertionCursor
(StyleContext context, double x, double y, Layout layout, int index, int direction) Draws a text caret using @snapshot at the specified index of @layout.void
renderLayout
(StyleContext context, double x, double y, Layout layout) Creates a render node for rendering @layout according to the style
information in @context, and appends it to the current node of @snapshot,
without changing the current node.void
restore()
Restores @snapshot to the state saved by a preceding call to
[method@Snapshot.save] and removes that state from the stack of
saved states.void
rotate
(float angle) Rotates @@snapshot's coordinate system by @angle degrees in 2D space -
or in 3D speak, rotates around the Z axis.void
Rotates @snapshot's coordinate system by @angle degrees around @axis.void
save()
Makes a copy of the current state of @snapshot and saves it
on an internal stack.void
scale
(float factor_x, float factor_y) Scales @snapshot's coordinate system in 2-dimensional space by
the given factors.void
scale3d
(float factor_x, float factor_y, float factor_z) Scales @snapshot's coordinate system by the given factors.toNode()
Returns the render node that was constructed
by @snapshot.toPaintable
(Size size) Returns a paintable encapsulating the render node
that was constructed by @snapshot.void
Transforms @snapshot's coordinate system with the given @transform.void
transformMatrix
(Matrix matrix) Transforms @snapshot's coordinate system with the given @matrix.void
Translates @snapshot's coordinate system by @point in 2-dimensional space.void
translate3d
(Point3D point) Translates @snapshot's coordinate system by @point.Methods inherited from class ch.bailu.gtk.gobject.Object
addToggleRef, bindProperty, bindProperty, bindPropertyFull, bindPropertyFull, bindPropertyWithClosures, bindPropertyWithClosures, compatControl, connect, connect, disconnect, disconnect, dupData, dupData, dupQdata, forceFloating, freezeNotify, get, get, getData, getData, getProperty, getProperty, getQdata, interfaceFindProperty, interfaceInstallProperty, isFloating, notify, notify, notifyByPspec, onNotify, ref, refSink, removeToggleRef, replaceData, replaceData, replaceQdata, runDispose, set, set, setData, setData, setDataFull, setDataFull, setProperty, setProperty, setQdata, setQdataFull, stealData, stealData, stealQdata, takeRef, thawNotify, unref, watchClosure, weakRef, weakUnref
Methods inherited from class ch.bailu.gtk.type.Pointer
asCPointer, cast, connectSignal, disconnectSignals, disconnectSignals, equals, hashCode, throwIfNull, throwNullPointerException, toString, unregisterCallbacks, unregisterCallbacks
Methods inherited from class ch.bailu.gtk.type.Type
asCPointer, asCPointer, asCPointerNotNull, asJnaPointer, asJnaPointer, asPointer, asPointer, cast, cast, throwIfNull
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
Methods inherited from interface ch.bailu.gtk.type.PointerInterface
asCPointerNotNull, asJnaPointer, asPointer, isNotNull, isNull
-
Constructor Details
-
Snapshot
-
Snapshot
public Snapshot()Creates a new `GtkSnapshot`.
-
-
Method Details
-
getClassHandler
-
appendCairo
Creates a new [class@Gsk.CairoNode] and appends it to the current
render node of @snapshot, without changing the current node.- Parameters:
bounds
- the bounds for the new node- Returns:
- a `cairo_t` suitable for drawing the contents of the newly created render node
-
appendColor
Creates a new render node drawing the @color into the
given @bounds and appends it to the current render node
of @snapshot.
You should try to avoid calling this function if
@color is transparent.- Parameters:
color
- the color to drawbounds
- the bounds for the new node
-
appendInsetShadow
public void appendInsetShadow(@Nonnull RoundedRect outline, @Nonnull RGBA color, float dx, float dy, float spread, float blur_radius) Appends an inset shadow into the box given by @outline.- Parameters:
outline
- outline of the region surrounded by shadowcolor
- color of the shadowdx
- horizontal offset of shadowdy
- vertical offset of shadowspread
- how far the shadow spreads towards the insideblur_radius
- how much blur to apply to the shadow
-
appendLayout
- Parameters:
layout
-color
-
-
appendNode
Appends @node to the current render node of @snapshot,
without changing the current node.
If @snapshot does not have a current node yet, @node
will become the initial node.- Parameters:
node
- a `GskRenderNode`
-
appendOutsetShadow
public void appendOutsetShadow(@Nonnull RoundedRect outline, @Nonnull RGBA color, float dx, float dy, float spread, float blur_radius) Appends an outset shadow node around the box given by @outline.- Parameters:
outline
- outline of the region surrounded by shadowcolor
- color of the shadowdx
- horizontal offset of shadowdy
- vertical offset of shadowspread
- how far the shadow spreads towards the outsideblur_radius
- how much blur to apply to the shadow
-
appendTexture
Creates a new render node drawing the @texture
into the given @bounds and appends it to the
current render node of @snapshot.- Parameters:
texture
- the texture to renderbounds
- the bounds for the new node
-
freeToNode
Returns the node that was constructed by @snapshot
and frees @snapshot.- Returns:
- a newly-created [class@Gsk.RenderNode]
-
freeToPaintable
Returns a paintable for the node that was
constructed by @snapshot and frees @snapshot.- Parameters:
size
- The size of the resulting paintable or %NULL to use the bounds of the snapshot- Returns:
- a newly-created [iface@Gdk.Paintable]
-
glShaderPopTexture
public void glShaderPopTexture()Removes the top element from the stack of render nodes and
adds it to the nearest [class@Gsk.GLShaderNode] below it.
This must be called the same number of times as the number
of textures is needed for the shader in
[method@Gtk.Snapshot.push_gl_shader]. -
perspective
public void perspective(float depth) Applies a perspective projection transform.
See [method@Gsk.Transform.perspective] for a discussion on the details.- Parameters:
depth
- distance of the z=0 plane
-
pop
public void pop()Removes the top element from the stack of render nodes,
and appends it to the node underneath it. -
pushBlend
public void pushBlend(int blend_mode) Blends together two images with the given blend mode.
Until the first call to [method@Gtk.Snapshot.pop], the
bottom image for the blend operation will be recorded.
After that call, the top image to be blended will be
recorded until the second call to [method@Gtk.Snapshot.pop].
Calling this function requires two subsequent calls
to [method@Gtk.Snapshot.pop].- Parameters:
blend_mode
- blend mode to use
-
pushBlur
public void pushBlur(double radius) Blurs an image.
The image is recorded until the next call to [method@Gtk.Snapshot.pop].- Parameters:
radius
- the blur radius to use. Must be positive
-
pushClip
Clips an image to a rectangle.
The image is recorded until the next call to [method@Gtk.Snapshot.pop].- Parameters:
bounds
- the rectangle to clip to
-
pushColorMatrix
Modifies the colors of an image by applying an affine transformation
in RGB space.
The image is recorded until the next call to [method@Gtk.Snapshot.pop].- Parameters:
color_matrix
- the color matrix to usecolor_offset
- the color offset to use
-
pushCrossFade
public void pushCrossFade(double progress) Snapshots a cross-fade operation between two images with the
given @progress.
Until the first call to [method@Gtk.Snapshot.pop], the start image
will be snapshot. After that call, the end image will be recorded
until the second call to [method@Gtk.Snapshot.pop].
Calling this function requires two subsequent calls
to [method@Gtk.Snapshot.pop].- Parameters:
progress
- progress between 0.0 and 1.0
-
pushDebug
Inserts a debug node with a message.
Debug nodes don't affect the rendering at all, but can be
helpful in identifying parts of a render node tree dump,
for example in the GTK inspector.- Parameters:
message
- a printf-style format string_elipse
- arguments for @message
-
pushDebug
Inserts a debug node with a message.
Debug nodes don't affect the rendering at all, but can be
helpful in identifying parts of a render node tree dump,
for example in the GTK inspector.- Parameters:
message
- a printf-style format string_elipse
- arguments for @message
-
pushGlShader
Push a [class@Gsk.GLShaderNode].
The node uses the given [class@Gsk.GLShader] and uniform values
Additionally this takes a list of @n_children other nodes
which will be passed to the [class@Gsk.GLShaderNode].
The @take_args argument is a block of data to use for uniform
arguments, as per types and offsets defined by the @shader.
Normally this is generated by [method@Gsk.GLShader.format_args]
or [struct@Gsk.ShaderArgsBuilder].
The snapshotter takes ownership of @take_args, so the caller should
not free it after this.
If the renderer doesn't support GL shaders, or if there is any
problem when compiling the shader, then the node will draw pink.
You should use [method@Gsk.GLShader.compile] to ensure the @shader
will work for the renderer before using it.
If the shader requires textures (see [method@Gsk.GLShader.get_n_textures]),
then it is expected that you call [method@Gtk.Snapshot.gl_shader_pop_texture]
the number of times that are required. Each of these calls will generate
a node that is added as a child to the `GskGLShaderNode`, which in turn
will render these offscreen and pass as a texture to the shader.
Once all textures (if any) are pop:ed, you must call the regular
[method@Gtk.Snapshot.pop].
If you want to use pre-existing textures as input to the shader rather
than rendering new ones, use [method@Gtk.Snapshot.append_texture] to
push a texture node. These will be used directly rather than being
re-rendered.
For details on how to write shaders, see [class@Gsk.GLShader].- Parameters:
shader
- The code to runbounds
- the rectangle to render intotake_args
- Data block with arguments for the shader.
-
pushOpacity
public void pushOpacity(double opacity) Modifies the opacity of an image.
The image is recorded until the next call to [method@Gtk.Snapshot.pop].- Parameters:
opacity
- the opacity to use
-
pushRepeat
Creates a node that repeats the child node.
The child is recorded until the next call to [method@Gtk.Snapshot.pop].- Parameters:
bounds
- the bounds within which to repeatchild_bounds
- the bounds of the child or %NULL to use the full size of the collected child node
-
pushRoundedClip
Clips an image to a rounded rectangle.
The image is recorded until the next call to [method@Gtk.Snapshot.pop].- Parameters:
bounds
- the rounded rectangle to clip to
-
renderBackground
public void renderBackground(@Nonnull StyleContext context, double x, double y, double width, double height) Creates a render node for the CSS background according to @context,
and appends it to the current node of @snapshot, without changing
the current node.- Parameters:
context
- the style context that defines the backgroundx
- X origin of the rectangley
- Y origin of the rectanglewidth
- rectangle widthheight
- rectangle height
-
renderFocus
public void renderFocus(@Nonnull StyleContext context, double x, double y, double width, double height) Creates a render node for the focus outline according to @context,
and appends it to the current node of @snapshot, without changing
the current node.- Parameters:
context
- the style context that defines the focus ringx
- X origin of the rectangley
- Y origin of the rectanglewidth
- rectangle widthheight
- rectangle height
-
renderFrame
public void renderFrame(@Nonnull StyleContext context, double x, double y, double width, double height) Creates a render node for the CSS border according to @context,
and appends it to the current node of @snapshot, without changing
the current node.- Parameters:
context
- the style context that defines the framex
- X origin of the rectangley
- Y origin of the rectanglewidth
- rectangle widthheight
- rectangle height
-
renderInsertionCursor
public void renderInsertionCursor(@Nonnull StyleContext context, double x, double y, @Nonnull Layout layout, int index, int direction) Draws a text caret using @snapshot at the specified index of @layout.- Parameters:
context
- a `GtkStyleContext`x
- X originy
- Y originlayout
- the `PangoLayout` of the textindex
- the index in the `PangoLayout`direction
- the `PangoDirection` of the text
-
renderLayout
Creates a render node for rendering @layout according to the style
information in @context, and appends it to the current node of @snapshot,
without changing the current node.- Parameters:
context
- the style context that defines the textx
- X origin of the rectangley
- Y origin of the rectanglelayout
- the `PangoLayout` to render
-
restore
public void restore()Restores @snapshot to the state saved by a preceding call to
[method@Snapshot.save] and removes that state from the stack of
saved states. -
rotate
public void rotate(float angle) Rotates @@snapshot's coordinate system by @angle degrees in 2D space -
or in 3D speak, rotates around the Z axis.
To rotate around other axes, use [method@Gsk.Transform.rotate_3d].- Parameters:
angle
- the rotation angle, in degrees (clockwise)
-
rotate3d
Rotates @snapshot's coordinate system by @angle degrees around @axis.
For a rotation in 2D space, use [method@Gsk.Transform.rotate].- Parameters:
angle
- the rotation angle, in degrees (clockwise)axis
- The rotation axis
-
save
public void save()Makes a copy of the current state of @snapshot and saves it
on an internal stack.
When [method@Gtk.Snapshot.restore] is called, @snapshot will
be restored to the saved state. Multiple calls to
[method@Snapshot.save] and [class@Snapshot.restore] can be nested;
each call to `gtk_snapshot_restore()` restores the state from
the matching paired `gtk_snapshot_save()`.
It is necessary to clear all saved states with corresponding
calls to `gtk_snapshot_restore()`. -
scale
public void scale(float factor_x, float factor_y) Scales @snapshot's coordinate system in 2-dimensional space by
the given factors.
Use [method@Gtk.Snapshot.scale_3d] to scale in all 3 dimensions.- Parameters:
factor_x
- scaling factor on the X axisfactor_y
- scaling factor on the Y axis
-
scale3d
public void scale3d(float factor_x, float factor_y, float factor_z) Scales @snapshot's coordinate system by the given factors.- Parameters:
factor_x
- scaling factor on the X axisfactor_y
- scaling factor on the Y axisfactor_z
- scaling factor on the Z axis
-
toNode
Returns the render node that was constructed
by @snapshot.
After calling this function, it is no longer possible to
add more nodes to @snapshot. The only function that should
be called after this is [method@GObject.Object.unref].- Returns:
- the constructed `GskRenderNode`
-
toPaintable
Returns a paintable encapsulating the render node
that was constructed by @snapshot.
After calling this function, it is no longer possible to
add more nodes to @snapshot. The only function that should
be called after this is [method@GObject.Object.unref].- Parameters:
size
- The size of the resulting paintable or %NULL to use the bounds of the snapshot- Returns:
- a new `GdkPaintable`
-
transform
Transforms @snapshot's coordinate system with the given @transform.- Parameters:
transform
- the transform to apply
-
transformMatrix
Transforms @snapshot's coordinate system with the given @matrix.- Parameters:
matrix
- the matrix to multiply the transform with
-
translate
Translates @snapshot's coordinate system by @point in 2-dimensional space.- Parameters:
point
- the point to translate the snapshot by
-
translate3d
Translates @snapshot's coordinate system by @point.- Parameters:
point
- the point to translate the snapshot by
-
getTypeID
public static long getTypeID() -
getParentTypeID
public static long getParentTypeID() -
getTypeSize
-
getParentTypeSize
-
getInstanceSize
public static int getInstanceSize()
-