如何将 GTK2 像素图移植到 GTK3_
Posted
技术标签:
【中文标题】如何将 GTK2 像素图移植到 GTK3_【英文标题】:How to port GTK2 pixmaps to GTK3_ 【发布时间】:2019-12-31 12:06:00 【问题描述】:我正在尝试将 Ruby 应用程序从 GTK2 移植到 GTK3,但我没有找到将 GdkPixbufs 绘制到窗口的方法。使用 GTK2,我使用以下简单的代码将 11 个位图绘制到嵌入在父窗口中的 GtkImage:
def counter_setup
@dpix = Gdk::Pixmap.new(@counter.window, 11*DIGIT_WIDTH, DIGIT_HEIGHT, -1)
@digits = []
10.times |i| @digits[i] = GdkPixbuf::Pixbuf.new(file: Cfg.icons_dir+"#idigit.png", width: DIGIT_WIDTH, height: DIGIT_HEIGHT)
@digits[10] = GdkPixbuf::Pixbuf.new(file: Cfg.icons_dir+"unlitdigit.png", width: DIGIT_WIDTH, height: DIGIT_HEIGHT)
@digits[11] = GdkPixbuf::Pixbuf.new(file: Cfg.icons_dir+"colondigit.png", width: DIGIT_WIDTH, height: DIGIT_HEIGHT)
@digits[12] = GdkPixbuf::Pixbuf.new(file: Cfg.icons_dir+"minusdigit.png", width: DIGIT_WIDTH, height: DIGIT_HEIGHT)
reset_counter
end
def reset_counter
11.times do |i|
if i == 2 || i == 8
@dpix.draw_pixbuf(nil, @digits[11], 0, 0, i*DIGIT_WIDTH, 0, DIGIT_WIDTH, DIGIT_HEIGHT, Gdk::RGB::DITHER_NONE, 0, 0)
elsif i == 5
@dpix.draw_pixbuf(nil, @digits[12], 0, 0, i*DIGIT_WIDTH, 0, DIGIT_WIDTH, DIGIT_HEIGHT, Gdk::RGB::DITHER_NONE, 0, 0)
else
@dpix.draw_pixbuf(nil, @digits[10], 0, 0, i*DIGIT_WIDTH, 0, DIGIT_WIDTH, DIGIT_HEIGHT, Gdk::RGB::DITHER_NONE, 0, 0)
end
end
@counter.set(@dpix, nil)
end
counter_setup 方法从文件构建像素缓冲区并从 GtkImage (@counter.window) 创建像素图。 reset_counter 将每个 pixbuf 并排显示在窗口中,如下所示:
在图像上(取自 GTK2 版本),它是左上角的小部件,一个计时器,每秒重绘一次,这就是为什么它不是单个位图而是一系列位图的原因。
从 GTK3 文档中,像素图消失了,据说应该使用 Cairo。问题是我发现将位图写入 Cairo 上下文的唯一方法是 set_source_pixbuf,但它并没有达到我想要的效果......
有谁知道如何使用 GTK3 实现相同的行为?
感谢您的帮助!
【问题讨论】:
【参考方案1】:这是有关此主题的官方 GTK 2 到 3 迁移指南:https://developer.gnome.org/gtk3/stable/ch26s02.html#id-1.6.3.4.5
您没有提及您尝试使用 set_source_pixbuf
的原因或为什么它不起作用,但您是否尝试按照此处给出的示例使用 pixbuf 填充表面?
或者,您可能会发现使用一系列彼此相邻放置的 GtkImage 小部件并适当地将 pixbuf 设置为其源更容易。
【讨论】:
以上是关于如何将 GTK2 像素图移植到 GTK3_的主要内容,如果未能解决你的问题,请参考以下文章
GIMP 2.99.2 发布:从 GTK2 过渡到 GTK3 工具包
如何在Haskell gtk2hs中将Cairo绘图渲染到打印机
如何在 Windows 7+ 和 MSYS2 上的 GTK3 上获取本机 Windows 装饰
如何将 C makefile 移植到 C++ makefile?