接口
GdkPaintable
说明 [src]
interface Gdk.Paintable : GObject.Object
GdkPaintable
是 GTK 用于表示可以绘制的内容的简单接口。
GdkPaintable
的内容可以在任何位置、任何大小进行绘制,而无需任何布局。该接口的灵感来源于其他地方的类似概念,例如 ClutterContent、HTML/CSS Paint Sources 或 SVG Paint Servers。
可以使用 gdk_paintable_snapshot()
在任何时间和大小对 GdkPaintable
进行快照。可绘制如何解释该尺寸以及是否将其自身缩放到给定矩形中是由实现定义的,但是,如果您正在实现 GdkPaintable
并且不知道该怎么办,建议您忽略任何潜在的纵横比来缩放您的可绘制。
GdkPaintable
生成的内容可能取决于传递给它的 GdkSnapshot
。例如,可绘制内容可能会决定在高分辨率屏幕上或 OpenGL 可用时使用更详细的图像。但是,GdkPaintable
始终会为同一个快照生成相同输出。
GdkPaintable
可能会改变其内容,这意味着它现在将使用同一个快照生成不同的输出。一旦发生这种情况,它将调用 gdk_paintable_invalidate_contents()
,它将发出 GdkPaintable::invalidate-contents
信号。如果已知可绘制内容绝不会改变其内容,它将设置 GDK_PAINTABLE_STATIC_CONTENTS
标志。如果消费者无法处理不断变化的内容,它可能会调用 gdk_paintable_get_current_image()
,它将返回一个静态可绘制且使用它。
一个可绘制的内容报告它希望绘制的固有大小或纵横比,尽管这不是必需的。接口的使用者可以使用此信息适当布局可绘制的内容。就像内容一样,可绘制的大小会发生变化。可绘制的内容会通过调用 gdk_paintable_invalidate_size()
指示这一点,该调用会发出 GdkPaintable::invalidate-size
信号。和内容一样,如果一个可绘制的内容已知其大小永远不会改变,它将设置 GDK_PAINTABLE_STATIC_SIZE
标志。
除了针对应用程序的 API,还有一些仅用于实现子类且不应被应用程序使用的函数: gdk_paintable_invalidate_contents()
、gdk_paintable_invalidate_size()
、gdk_paintable_new_empty()
。
必需条件
为了实现 Paintable,你的类型必须从GObject
继承。
接口结构
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
);
}
可为 GdkPaintable
接口实现的函数列表。
请注意,除了 Gdk.PaintableInterface.snapshot
函数外,不需要实现此接口的任何虚函数,尽管最好为非静态可绘制内容实现 Gdk.PaintableInterface.get_current_image
,为非动态图像实现 Gdk.PaintableInterface.get_flags
,因为默认实现不返回任何标志,并且这可能会使实现变得非常慢。
接口成员
snapshot |
|
对可绘制的内容进行快照。给定的 |
|
get_current_image |
|
返回一个不会随时间发生变化的 |
|
get_flags |
|
获取此实例的标志。有关详细信息,请参阅 |
|
get_intrinsic_width |
|
此对象快照的首选宽度,如果不存在,则为 0。这纯粹是一个提示。该对象仍必须能够以任何大小进行呈现。 |
|
get_intrinsic_height |
|
对此对象以什么高度进行截图的首选高度或在没有高度的情况下为 0。这纯粹是一个提示。无论如何,对象都必须能够以任何尺寸渲染。 |
|
get_intrinsic_aspect_ratio |
|
此对象的理想纵横比,如果它没有,则为 0。如果 Gdk.PaintableInterface.get_intrinsic_width 和 Gdk.PaintableInterface.get_intrinsic_height 都返回非零值,则此函数应当返回从那些值中计算出的纵横比。 |