如何将 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?

将项目从 ICCAVR 移植到 Atmel Studio 7.0 _flash 问题

Android_三MSM8953_android10_移植nmap