【问题标题】:Second argument of gtk_source_mark_attributes_render_icongtk_source_mark_attributes_render_icon 的第二个参数
【发布时间】:2018-12-24 00:21:43
【问题描述】:

函数gtk_source_mark_attributes_render_icon()的第二个参数应该是什么 它显然是 GtkWidget* 类型,根据 the reference page 这是

“可以使用哪些样式设置的小部件”

我觉得有点不清楚。

当我打电话给gtk_source_mark_attributes_render_icon(att, some_random_widget, 40); 时,似乎什么都没有发生,并且在排水沟中呈现的 pixbuf 是 小到 10x10 之类的。我什至将gutter size设置为40,因为我一开始以为,图像那么小,因为gutter的宽度那么小。

如何在装订线中渲染更大的 pixbuf?

【问题讨论】:

    标签: c gtk gtksourceview


    【解决方案1】:

    我同意,文档在这一点上很不清楚。我觉得widget应该是buffer对应的GtkSourceView吧。

    大小可能受前面对gtk_source_view_mark_attributes_set_icon_name() 的调用或您用来告诉它要渲染哪个pixbuf 的任何影响。

    【讨论】:

    • 做了同样的猜测,第一次尝试使用缓冲区的源视图。我也使用gtk_source_mark_attributes_set_pixbuf。 pixbuf 本身更大,渲染器大小足以容纳它,并调用gtk_source_mark_attributes_render_icon。但对渲染的 pixbuf 的大小没有影响。
    • 可能大小设置仅适用于图标,在这种情况下,我不知道如何调整装订线中的 pixbuf 的大小。
    • 我也遇到了同样的问题。
    • 查看 gtksourcepixbufhelper.c 函数 from_pixbuf 它确实将 pixbuf 缩放“更小”。它由gtk_source_pixbuf_helper_render() 调用,然后是gtksourcegutterrendererpixbuf.c 中的绘图信号处理程序,它使用gdk_cairo_surface_create_from_pixbuf() 和scale 参数。
    • 如果我要使用自定义装订线和渲染器,它的行为可能会相同。
    【解决方案2】:

    有两件事会影响 pixbuf 的呈现方式。 首先是排水沟的大小(始终是宽度),其次是线条的高度。

    根据gtksourcepixbufhelper.c,pixbuf 在两个维度上都以一个单位缩放。从函数gutter_renderer_pixbuf_drawhere 中可以看出,这个单位本质上是cell_area->width。这是由排水沟的大小决定的。

    但是排水沟线标记本身没有编码为可扩展高度,也不能扩展线的高度,所以当排水沟被渲染时,它们被剪裁了。


    因此,为了让 pixbuf 跨越更远,必须增加行的高度。 GtkTextView 的font-size 属性可能会发生这种情况。 但是更大的字体通常也是不需要的,所以要破解这种行为,我想到了一件事。

    辅助覆盖文本视图可用于显示文本(不应有装订线),而底部文本视图显示更大的 pixbuf。覆盖文本视图可能需要与装订线大小相同的左填充。并且要将 pixbufs 与行同步,必须使用 pixels-above-linespixels-below-lines(标签或 textview 道具)来填充行。底部文本视图的行高减去覆盖文本视图的高度 / 2 两个道具或类似的东西。


    不那么骇人听闻的解决方案是在装订线(也可能是单元格渲染器)上进行子类化并覆盖渲染函数以实现您自己的规则。

    【讨论】:

      猜你喜欢
      • 2018-03-22
      • 2018-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多