如何使用Ruby Gtk进行图像缩放和拖动选择?

时间:2018-05-19 09:05:33

标签: ruby user-interface imagemagick gtk rmagick

目前,我可以通过按钮点击等刷新/重新加载来更改图像窗口中的图像 然而,我无法弄清楚如何使用Ruby-Gtk进行拖动选择,甚至无法确定 基本上,我想制作像this这样的东西,你可以放大和缩小图像,然后使用鼠标指针拖动和滚动查看图像。
我该怎么做呢? 任何有用函数和示例的提示都非常受欢迎。

2 个答案:

答案 0 :(得分:1)

我尝试写一个样本。(而不是拖动)

require 'gtk3'
path = ARGV[0]

win = Gtk::Window.new('MyApp')
win.signal_connect('destroy') { Gtk.main_quit }

box = Gtk::Box.new(:vertical)

scr = Gtk::HScale.new(0.1, 5.0, 0.1)
scr.value = 1.0
swi = Gtk::ScrolledWindow.new
swi.set_size_request(300, 300)

img = Gtk::Image.new
pxb = Gdk::Pixbuf.new(file: path)
img.pixbuf = pxb

v_old = scr.value
scr.signal_connect('value-changed') do
  v = scr.value
  pxb_resized = pxb.scale(pxb.width * v, pxb.height * v, :hyper)
  img.pixbuf =  pxb_resized

  # To keep center of image when you zoom up
  w = swi.allocation.width
  swi.vadjustment = swi.vadjustment.set_value(
    (swi.vadjustment.value + w / 2.0) * (v / v_old) - w / 2.0
  )
  h = swi.allocation.height
  swi.hadjustment = swi.hadjustment.set_value(
    (swi.hadjustment.value + h / 2.0) * (v / v_old) - h / 2.0
  )
  v_old = v
end

# packing
win.add box
box.pack_start scr
box.pack_start swi, expand: true, fill: true
swi.add img
win.show_all

Gtk.main

但是在Mac上pixbuf有些麻烦。 https://github.com/ruby-gnome2/ruby-gnome2/issues/1079 screenshot

答案 1 :(得分:0)

  

目前,我能够使用带有Ruby的RMagick进行图像缩放,并通过按钮点击等刷新/重新加载来更改图像窗口中的图像。

您能否提供一个代码段,展示您如何创建图像窗口小部件和图像窗口?