2019/04/20(土) [n年前の日記]
#2 [ruby] green_shoes を動かせないか試したり
Windows10 x64 + Ruby 2.2.6 p396 x86 mingw32 上で、green_shoes が動かせるようにならないか試したり。
green_shoes と言うのは、Ruby でGUIアプリを作れるようになるライブラリ、という説明で合ってるのかどうか…。一般的なGUIアプリとはノリがちょっと違う気もするけど。
green_shoes と言うのは、Ruby でGUIアプリを作れるようになるライブラリ、という説明で合ってるのかどうか…。一般的なGUIアプリとはノリがちょっと違う気もするけど。
◎ gtk2 が動くかどうか実験。 :
green_shoes を動かすためには、gtk2 がインストールされている必要がある。まずは gtk2 が動くかどうかを確認した。
色々なバージョンをインストール・アンインストールして試したけれど、とりあえず、以下のバージョンの組み合わせなら、昔書いた gtk2用スクリプトも動作した。
インストール方法は以下。
ちなみに、以下の組み合わせでも動作したが、後で green_shoes を修正する際、対応させる方法が分からなかった。
gtk2 は 3.2.9 まで、cairo は 1.15.14 までなら、x86-mingw32向けのバイナリが用意されていて、インストール時間はさほどかからない。しかし、それ以降の現行版は、MSYS2 でビルドしてインストールするので結構時間がかかる。手っ取り早くインストールして、ちょっとだけ試す程度なら、バグ等はあるだろうけど、3.2.9 までの版をインストールしたほうが楽かもしれない。
色々なバージョンをインストール・アンインストールして試したけれど、とりあえず、以下のバージョンの組み合わせなら、昔書いた gtk2用スクリプトも動作した。
- cairo 1.15.11 x86-mingw32
- gtk2 3.2.1 x86-mingw32
- atk 3.2.1 x86-mingw32
- cairo-gobject 3.2.1 x86-mingw32
- gdk_pixbuf2 3.2.1 x86-mingw32
- gio2 3.2.1 x86-mingw32
- glib2 3.2.1 x86-mingw32
- gobject-introspection 3.2.1 x86-mingw32
- pango 3.2.1 x86-mingw32
インストール方法は以下。
gem install cairo -v="1.15.11" --platform=x86-mingw32 gem install gtk2 -v="3.2.1" --platform=x86-mingw32
- cairo をインストールしてから gtk2 をインストールしないとエラーが出る。
- cairo のバージョンが古いと gtk2 が動かない時もあったので注意。
- gtk2 3.2.1 は、Ruby 2.2 - 2.4 までの対応らしい。
ちなみに、以下の組み合わせでも動作したが、後で green_shoes を修正する際、対応させる方法が分からなかった。
- cairo (1.15.14 x86-mingw32)
- gtk2 (3.2.9 x86-mingw32)
- atk (3.2.9 x86-mingw32)
- cairo-gobject (3.2.9 x86-mingw32)
- gdk_pixbuf2 (3.2.9 x86-mingw32)
- gio2 (3.2.9 x86-mingw32)
- glib2 (3.2.9 x86-mingw32)
- gobject-introspection (3.2.9 x86-mingw32)
- pango (3.2.9 x86-mingw32)
gem install cairo -v="1.15.14" --platform=x86-mingw32 gem install gtk2 -v="3.2.9" --platform=x86-mingw32
gtk2 は 3.2.9 まで、cairo は 1.15.14 までなら、x86-mingw32向けのバイナリが用意されていて、インストール時間はさほどかからない。しかし、それ以降の現行版は、MSYS2 でビルドしてインストールするので結構時間がかかる。手っ取り早くインストールして、ちょっとだけ試す程度なら、バグ等はあるだろうけど、3.2.9 までの版をインストールしたほうが楽かもしれない。
◎ green_shoesを修正。 :
まずは green_shoes をインストール。
そのままだと green_shoes を使ったスクリプトを動かそうとしてもエラーが出てしまうので、green_shoes の関連ファイルを直接修正して試してみたり。
<Ruby 2.2.6 インストールフォルダ>/lib/ruby/gems/2.2.0/gems/green_shoes-1.1.374/lib/ 内の、以下のファイルを修正。
以下の記述を修正。
helper_methods.rb の 146行目を修正。
一応 diff も載せておく。
green_shoes.rb
shy.rb
ruby.rb
helper_methods.rb
この修正をすることで、Windows10 x64 + Ruby 2.2.6 p396 x86 mingw32 + gtk2 3.2.1 x86-mingw32上で、green_shoes 1.1.374 が一応動いてくれた。
gem install green_shoes
> ruby -v ruby 2.2.6p396 (2016-11-15 revision 56800) [i386-mingw32] > gem list green_shoes *** LOCAL GEMS *** green_shoes (1.1.374)
そのままだと green_shoes を使ったスクリプトを動かそうとしてもエラーが出てしまうので、green_shoes の関連ファイルを直接修正して試してみたり。
<Ruby 2.2.6 インストールフォルダ>/lib/ruby/gems/2.2.0/gems/green_shoes-1.1.374/lib/ 内の、以下のファイルを修正。
- shoes/shy.rb
- green_shoes.rb
- shoes/ruby.rb
- shoes/helper_methods.rb
以下の記述を修正。
before | after |
---|---|
yaml_as | yaml_tag |
Gdk::Pixbuf | GdkPixbuf::Pixbuf |
GdkPixbuf::Pixbuf::ROTATE_NONE | GdkPixbuf::PixbufRotation::NONE |
GdkPixbuf::Pixbuf::ROTATE_CLOCKWISE | GdkPixbuf::PixbufRotation::CLOCKWISE |
GdkPixbuf::Pixbuf::ROTATE_UPSIDEDOWN | GdkPixbuf::PixbufRotation::UPSIDEDOWN |
GdkPixbuf::Pixbuf::ROTATE_COUNTERCLOCKWISE | GdkPixbuf::PixbufRotation::COUNTERCLOCKWISE |
Pango::WRAP_WORD | Pango::WrapMode::WORD |
Pango::WRAP_CHAR | Pango::WrapMode::CHAR |
Pango::ELLIPSIZE_END | Pango::EllipsizeMode::END |
GdkPixbuf::Pixbuf.new(path) | GdkPixbuf::Pixbuf.new(:file => path) |
helper_methods.rb の 146行目を修正。
layout.alignment = eval "Pango::ALIGN_#{align.upcase}" ↓ layout.alignment = eval "Pango::Alignment::#{align.upcase}"
一応 diff も載せておく。
green_shoes.rb
--- green_shoes.rb.orig Sat Apr 20 04:03:23 2019 +++ green_shoes.rb Sat Apr 20 04:08:17 2019 @@ -19,7 +19,7 @@ LINKHOVER_DEFAULT = "<span underline='single' underline_color='#039' foreground='#039' weight='normal'>" BANNER_DEFAULT, TITLE_DEFAULT, SUBTITLE_DEFAULT, TAGLINE_DEFAULT, CAPTION_DEFAULT, PARA_DEFAULT, INSCRIPTION_DEFAULT, IMAGE_DEFAULT = {}, {}, {}, {}, {}, {}, {}, {} - ROTATE = [Gdk::Pixbuf::ROTATE_NONE, Gdk::Pixbuf::ROTATE_CLOCKWISE, Gdk::Pixbuf::ROTATE_UPSIDEDOWN, Gdk::Pixbuf::ROTATE_COUNTERCLOCKWISE] + ROTATE = [GdkPixbuf::PixbufRotation::NONE, GdkPixbuf::PixbufRotation::CLOCKWISE, GdkPixbuf::PixbufRotation::UPSIDEDOWN, GdkPixbuf::PixbufRotation::COUNTERCLOCKWISE] VERSION = IO.read(File.join(DIR, '../VERSION')).chomp BASIC_ATTRIBUTES_DEFAULT = {left: 0, top: 0, width: 0, height: 0, angle: 0, curve: 0} SLOT_ATTRIBUTES_DEFAULT = {left: nil, top: nil, width: 1.0, height: 0} @@ -30,7 +30,7 @@ LINECAP = {curve: Cairo::LineCap::ROUND, rect: Cairo::LineCap::BUTT, project: Cairo::LineCap::SQUARE} SPAN_FORM = {emphasis: :style, family: :font_family, weight: :weight, rise: :rise, strikethrough: :strikethrough, strikecolor: :strikethrough_color, underline: :underline, undercolor: :underline_color} - WRAP = {word: Pango::WRAP_WORD, char: Pango::WRAP_CHAR, trim: Pango::ELLIPSIZE_END} + WRAP = {word: Pango::WrapMode::WORD, char: Pango::WrapMode::CHAR, trim: Pango::EllipsizeMode::END} FONT_SIZE = {"xx-small" => 0.57, "x-small" => 0.64, "small" => 0.83, "medium" => 1.0, "large" => 1.2, "x-large" => 1.43, "xx-large" => 1.73} COLORS = {} end
shy.rb
--- shy.rb.orig Sat Apr 20 04:03:23 2019 +++ shy.rb Sat Apr 20 04:06:14 2019 @@ -13,7 +13,7 @@ MAGIC = "_shy".freeze LAYOUT = "A4vV".freeze #Force to Little Endian for all platforms - yaml_as 'tag:hackety.org,2007:shy' + yaml_tag('tag:hackety.org,2007:shy') attr_accessor :name, :creator, :version, :launch def self.launchable(d)
ruby.rb
--- ruby.rb.orig Sat Apr 20 04:03:23 2019 +++ ruby.rb Sat Apr 20 04:09:22 2019 @@ -107,7 +107,7 @@ def ask_color title = 'Pick a color...' $dde = true dialog = Gtk::ColorSelectionDialog.new title - dialog.icon = Gdk::Pixbuf.new File.join(DIR, '../static/gshoes-icon.png') + dialog.icon = GdkPixbuf::Pixbuf.new(:file => File.join(DIR, '../static/gshoes-icon.png')) dialog.run ret = dialog.colorsel.current_color.to_a.map{|c| c / 65535.0} dialog.destroy @@ -120,7 +120,7 @@ def get_win Gtk::Window.new.tap do |s| - s.icon = Gdk::Pixbuf.new File.join(DIR, '../static/gshoes-icon.png') + s.icon = GdkPixbuf::Pixbuf.new(:file => File.join(DIR, '../static/gshoes-icon.png')) end end end
helper_methods.rb
--- helper_methods.rb.orig Sat Apr 20 04:03:23 2019 +++ helper_methods.rb Sat Apr 20 04:09:57 2019 @@ -143,7 +143,7 @@ layout.spacing = leading * Pango::SCALE layout.text = text layout.justify = justify - layout.alignment = eval "Pango::ALIGN_#{align.upcase}" + layout.alignment = eval "Pango::Alignment::#{align.upcase}" fd = Pango::FontDescription.new fd.family = font fd.size = size * Pango::SCALE
この修正をすることで、Windows10 x64 + Ruby 2.2.6 p396 x86 mingw32 + gtk2 3.2.1 x86-mingw32上で、green_shoes 1.1.374 が一応動いてくれた。
◎ Ruby 2.3.3でも動いた。 :
Ruby 2.3.3 p222 でも、同じ作業をしてみたところ、一応 green_shoes が動いてくれた。とメモ。
◎ 無理して使うものでもないよなと。 :
ここまでやっておいてなんだけど、green_shoes は無理して使うものでもないよなと…。
元々 Shoes は「簡単にGUIアプリが作れますよ」というのが売りだったけれど。こういう修正作業を要してしまう時点で、当初の目的をもはや達成できていないわけで。これでは存在意義が無いというか、使う意味がないというか。
もっとも、 _Red Shoes (単体で動くShoes)をインストールして使えば、こんな苦労はしないで済むはずだけど。そっちはそっちで、Windows が破壊される不具合がありそうだし…。
どうしても Ruby を使ってGUIアプリを書きたいなら、 _gtk2 、 _gtk3 、 _fxruby 、 等を使ったほうがマシだろうなと…。
そもそも、「RubyでGUIは鬼門」というのが定評なので…。 _LL *1 でGUIアプリを書きたいなら Python を選んだほうがいいよなと。
Python なら、tkinter、wxPython、PyQt(PySide)、Kivy等々、色々あるし。Ruby のGUIライブラリと違って、ライブラリが軒並み死んでいるということもなさそうだし。
元々 Shoes は「簡単にGUIアプリが作れますよ」というのが売りだったけれど。こういう修正作業を要してしまう時点で、当初の目的をもはや達成できていないわけで。これでは存在意義が無いというか、使う意味がないというか。
もっとも、 _Red Shoes (単体で動くShoes)をインストールして使えば、こんな苦労はしないで済むはずだけど。そっちはそっちで、Windows が破壊される不具合がありそうだし…。
どうしても Ruby を使ってGUIアプリを書きたいなら、 _gtk2 、 _gtk3 、 _fxruby 、 等を使ったほうがマシだろうなと…。
そもそも、「RubyでGUIは鬼門」というのが定評なので…。 _LL *1 でGUIアプリを書きたいなら Python を選んだほうがいいよなと。
Python なら、tkinter、wxPython、PyQt(PySide)、Kivy等々、色々あるし。Ruby のGUIライブラリと違って、ライブラリが軒並み死んでいるということもなさそうだし。
*1: Lightweight Language。軽量プログラミング言語。
[ ツッコむ ]
以上です。