mieki256's diary



2019/04/20() [n年前の日記]

#2 [ruby] green_shoes を動かせないか試したり

Windows10 x64 + Ruby 2.2.6 p396 x86 mingw32 上で、green_shoes が動かせるようにならないか試したり。

green_shoes と言うのは、Ruby でGUIアプリを作れるようになるライブラリ、という説明で合ってるのかどうか…。一般的なGUIアプリとはノリがちょっと違う気もするけど。

gtk2 が動くかどうか実験。 :

green_shoes を動かすためには、gtk2 がインストールされている必要がある。まずは gtk2 が動くかどうかを確認した。

色々なバージョンをインストール・アンインストールして試したけれど、とりあえず、以下のバージョンの組み合わせなら、昔書いた 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 をインストール。
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

以下の記述を修正。
beforeafter
yaml_asyaml_tag
Gdk::PixbufGdkPixbuf::Pixbuf
GdkPixbuf::Pixbuf::ROTATE_NONEGdkPixbuf::PixbufRotation::NONE
GdkPixbuf::Pixbuf::ROTATE_CLOCKWISEGdkPixbuf::PixbufRotation::CLOCKWISE
GdkPixbuf::Pixbuf::ROTATE_UPSIDEDOWNGdkPixbuf::PixbufRotation::UPSIDEDOWN
GdkPixbuf::Pixbuf::ROTATE_COUNTERCLOCKWISEGdkPixbuf::PixbufRotation::COUNTERCLOCKWISE
Pango::WRAP_WORDPango::WrapMode::WORD
Pango::WRAP_CHARPango::WrapMode::CHAR
Pango::ELLIPSIZE_ENDPango::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ライブラリと違って、ライブラリが軒並み死んでいるということもなさそうだし。

*1: Lightweight Language。軽量プログラミング言語。

以上です。

過去ログ表示

Prev - 2019/04 - Next
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project