接口

GdkPaintable

说明 [src]

interface Gdk.Paintable : GObject.Object

GdkPaintableGTK 用于表示可以绘制的内容的简单接口。

GdkPaintable的内容可以在任何位置、任何大小进行绘制,而无需任何布局。该接口的灵感来源于其他地方的类似概念,例如 ClutterContentHTML/CSS Paint SourcesSVG 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继承。

函数

gdk_paintable_new_empty

返回一个具有给定固有大小且不绘制任何内容的可绘制的内容。

实例方法

gdk_paintable_compute_concrete_size

计算 GdkPaintable 的具体大小。

gdk_paintable_get_current_image

获取用于 paintable 显示的当前内容的不变可绘制的内容。

gdk_paintable_get_flags

获取可绘制的内容的标志。

gdk_paintable_get_intrinsic_aspect_ratio

获取可绘制内容希望以其显示的首选纵横比。

gdk_paintable_get_intrinsic_height

获取可绘制内容希望以其显示的首选高度。

gdk_paintable_get_intrinsic_width

获取可绘制内容希望以其显示的首选宽度。

gdk_paintable_invalidate_contents

可绘制内容的实现调用以使他们的内容无效。

gdk_paintable_invalidate_size

可绘制内容的实现调用以使他们的尺寸无效。

gdk_paintable_snapshot

使用给定的 widthheight 对给定的可绘制内容进行快照。

信号

Gdk.Paintable::invalidate-contents

当可绘制的内容发生更改时发出。

Gdk.Paintable::invalidate-size

当可绘制内容的固有大小改变时发出。

接口结构

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
void (* snapshot) (
    GdkPaintable* paintable,
    GdkSnapshot* snapshot,
    double width,
    double height
  )
 

对可绘制的内容进行快照。给定的 widthheight 确保大于 0.0。生成的快照只能修改从 (0,0) 到 (width, height) 矩形中的区域。这是唯一必须为该接口实现的函数。

get_current_image
GdkPaintable* (* get_current_image) (
    GdkPaintable* paintable
  )
 

返回一个不会随时间发生变化的 GdkPaintable。这意味着设置了 GDK_PAINTABLE_STATIC_SIZEGDK_PAINTABLE_STATIC_CONTENTS 标志。

get_flags
GdkPaintableFlags (* get_flags) (
    GdkPaintable* paintable
  )
 

获取此实例的标志。有关详细信息,请参阅 GdkPaintableFlags

get_intrinsic_width
int (* get_intrinsic_width) (
    GdkPaintable* paintable
  )
 

此对象快照的首选宽度,如果不存在,则为 0。这纯粹是一个提示。该对象仍必须能够以任何大小进行呈现。

get_intrinsic_height
int (* get_intrinsic_height) (
    GdkPaintable* paintable
  )
 

对此对象以什么高度进行截图的首选高度或在没有高度的情况下为 0。这纯粹是一个提示。无论如何,对象都必须能够以任何尺寸渲染。

get_intrinsic_aspect_ratio
double (* get_intrinsic_aspect_ratio) (
    GdkPaintable* paintable
  )
 

此对象的理想纵横比,如果它没有,则为 0。如果 Gdk.PaintableInterface.get_intrinsic_widthGdk.PaintableInterface.get_intrinsic_height 都返回非零值,则此函数应当返回从那些值中计算出的纵横比。

虚拟方法

Gdk.Paintable.get_current_image

获取用于 paintable 显示的当前内容的不变可绘制的内容。

Gdk.Paintable.get_flags

获取可绘制的内容的标志。

Gdk.Paintable.get_intrinsic_aspect_ratio

获取可绘制内容希望以其显示的首选纵横比。

Gdk.Paintable.get_intrinsic_height

获取可绘制内容希望以其显示的首选高度。

Gdk.Paintable.get_intrinsic_width

获取可绘制内容希望以其显示的首选宽度。

Gdk.Paintable.snapshot

使用给定的 widthheight 对给定的可绘制内容进行快照。