From: Kouhei S. <ko...@co...> - 2014-05-07 13:45:53
|
須藤です。 https://github.com/ruby-gnome2/ruby-gnome2/issues/235 で、WindowsでGTK+ 3を使うとテーマが当たらないんだけど、という 話があります。それに関してWindowsで試して欲しいことがありま す。 #{gdk3_gem_root}/vendor/local/etc/gtk-3.0/settings.ini というファイルを作って、その内容を [Settings] gtk-theme-name = gtk-win32 にして、GTK+のデモアプリを立ちあげて、Windowsっぽいテーマが 当たるかどうか確認してもらえないですか? 詳細です。 ↑のissueによると、↓というコードを入れるとテーマが当たるっぽいんで すよ。 require "gtk3" Gtk::Settings.default.gtk_theme_name = "gtk-win32" なので、Windows上でデフォルトのテーマ名の設定がうまくいって いないんじゃないかと思います。 問題がそれだけならsetteings.iniを作ってそこにデフォルトのテー マを設定すればいけると思うんですね。↓みたいに。 [Settings] gtk-theme-name = gtk-win32 ということで、Windows上で試してみて欲しいのです。もし、これ でうまくいくならデフォルトでsettings.iniを打ち込もうと思いま す。 |
From: S. K. <ch...@ll...> - 2014-05-08 09:00:55
|
北川です。 Kouhei Sutou <ko...@co...> wrote: (2014/05/07 22:45) >https://github.com/ruby-gnome2/ruby-gnome2/issues/235 > >で、WindowsでGTK+ 3を使うとテーマが当たらないんだけど、という >話があります。それに関してWindowsで試して欲しいことがありま >す。 > > #{gdk3_gem_root}/vendor/local/etc/gtk-3.0/settings.ini > >というファイルを作って、その内容を > > [Settings] > gtk-theme-name = gtk-win32 > >にして、GTK+のデモアプリを立ちあげて、Windowsっぽいテーマが >当たるかどうか確認してもらえないですか? Windows7で確認してみたところ、iniファイルなしでは確かにウィンドウ内の 部品が、他のWindowsアプリと違うLinuxでよくある感じの見栄えになってし まいますね。 一方iniファイルを置いた場合では、他のWindowsアプリと統一された感じの 見栄えになっています。 ただWindows側の設定でデフォルト以外のテーマ(例えばWindows9x風テーマ。 自分は普段これを使ってます)が選択されていると表示がおかしくなります。 ちょうどテーマが当たるところがなぜかピンク一色で塗りつぶされています(笑) 個人的な印象ですが、これはちょっと使い物にならないですね。Windows7で Windows9x風テーマを使っている人も珍しいとは思いますが。 ちなみにGTK+2のデモアプリで確認したところ、デフォルトでテーマが有効になっ ている感じで、しかもWindows9x風テーマを選択していても大丈夫なようです。 |
From: Kouhei S. <ko...@co...> - 2014-05-08 13:04:34
|
須藤です。 In <201...@ll...> "Re: [ruby-gnome2-devel-ja] WindowsでGTK+ 3を使ったときのテーマ" on Thu, 8 May 2014 18:00:55 +0900, "S. Kitagawa" <ch...@ll...> wrote: >>https://github.com/ruby-gnome2/ruby-gnome2/issues/235 >> >>で、WindowsでGTK+ 3を使うとテーマが当たらないんだけど、という >>話があります。それに関してWindowsで試して欲しいことがありま >>す。 >> >> #{gdk3_gem_root}/vendor/local/etc/gtk-3.0/settings.ini >> >>というファイルを作って、その内容を >> >> [Settings] >> gtk-theme-name = gtk-win32 >> >>にして、GTK+のデモアプリを立ちあげて、Windowsっぽいテーマが >>当たるかどうか確認してもらえないですか? > > Windows7で確認してみたところ、iniファイルなしでは確かにウィンドウ内の > 部品が、他のWindowsアプリと違うLinuxでよくある感じの見栄えになってし > まいますね。 > > 一方iniファイルを置いた場合では、他のWindowsアプリと統一された感じの > 見栄えになっています。 おぉ、ちゃんと効くんですね! 確認ありがとうございます! > ただWindows側の設定でデフォルト以外のテーマ(例えばWindows9x風テーマ。 > 自分は普段これを使ってます)が選択されていると表示がおかしくなります。 > ちょうどテーマが当たるところがなぜかピンク一色で塗りつぶされています(笑) > > 個人的な印象ですが、これはちょっと使い物にならないですね。Windows7で > Windows9x風テーマを使っている人も珍しいとは思いますが。 > > ちなみにGTK+2のデモアプリで確認したところ、デフォルトでテーマが有効になっ > ている感じで、しかもWindows9x風テーマを選択していても大丈夫なようです。 とすると、テーマのところにも問題があるみたいですねぇ。 https://wiki.gnome.org/Projects/GTK%2B/Roadmap を見ると、次 のリリースである3.14に「Improve Windows theme」とあるので、 次でよくなるんじゃないかと期待しています。 今回の問題はそもそもテーマがちゃんと選ばれないことなので、こ れはこれで対応しておいたほうがいいと思いました。なので、次の リリースにはiniを入れておこうと思います。 Windows環境がないのでデバッグできないんですけど、 https://git.gnome.org/browse/gtk+/tree/gtk/gtkwin32theme.c#n117 is_app_themed = (IsAppThemedFunc) GetProcAddress (uxtheme_dll, "IsAppThemed"); か https://git.gnome.org/browse/gtk+/tree/gtk/gtkwin32theme.c#n120 is_theme_active = (IsThemeActiveFunc) GetProcAddress (uxtheme_dll, "IsThemeActive"); がFALSEになっているのが悪い気がするんですよねぇ。 お、ソースを見ていて気づいたんですけど、 https://git.gnome.org/browse/gtk+/tree/gtk/gtkwin32theme.c#n408 gdk_rgba_parse (color, "pink"); Windowsじゃないときはfallbackの色としてピンクを使うようなコー ドがありますね。 Windows9x風テーマのときにピンクになるのはこれが関係あるのか も?あ、こっちにもピンクがありますね。 https://git.gnome.org/browse/gtk+/tree/gtk/gtkwin32theme.c#n302 gdk_rgba_parse (&color, "pink"); Windowsでデバッグできれば意外と簡単に直せるかもしれませんね。 直してGTK+本体に取り込んでもらえれば素敵な未来が。。。 |
From: S. K. <ch...@ll...> - 2014-05-10 12:07:27
|
北川です。 Kouhei Sutou <ko...@co...> wrote: (2014/05/08 22:04) >Windows環境がないのでデバッグできないんですけど、 > >https://git.gnome.org/browse/gtk+/tree/gtk/gtkwin32theme.c#n117 > > is_app_themed = (IsAppThemedFunc) GetProcAddress (uxtheme_dll, "IsAppThemed"); > >か > >https://git.gnome.org/browse/gtk+/tree/gtk/gtkwin32theme.c#n120 > > is_theme_active = (IsThemeActiveFunc) GetProcAddress (uxtheme_dll, "IsThemeActive"); > >がFALSEになっているのが悪い気がするんですよねぇ。 この2つのWin32APIをWindowsのRubyでテーマ別に実行しただけの結果って 意味無いですか? とりあえずこれならすぐに出せるのですが。 |
From: Kouhei S. <ko...@co...> - 2014-05-10 13:16:12
|
須藤です。 In <201...@ll...> "Re: [ruby-gnome2-devel-ja] WindowsでGTK+ 3を使ったときのテーマ" on Sat, 10 May 2014 21:07:30 +0900, "S. Kitagawa" <ch...@ll...> wrote: >>Windows環境がないのでデバッグできないんですけど、 >> >>https://git.gnome.org/browse/gtk+/tree/gtk/gtkwin32theme.c#n117 >> >> is_app_themed = (IsAppThemedFunc) GetProcAddress (uxtheme_dll, "IsAppThemed"); >> >>か >> >>https://git.gnome.org/browse/gtk+/tree/gtk/gtkwin32theme.c#n120 >> >> is_theme_active = (IsThemeActiveFunc) GetProcAddress (uxtheme_dll, "IsThemeActive"); >> >>がFALSEになっているのが悪い気がするんですよねぇ。 > > この2つのWin32APIをWindowsのRubyでテーマ別に実行しただけの結果って > 意味無いですか? とりあえずこれならすぐに出せるのですが。 あ、すぐに出せるならおねがいします! |
From: S. K. <ch...@ll...> - 2014-05-10 18:29:42
|
北川です。 Kouhei Sutou <ko...@co...> wrote: (2014/05/10 22:16) >>>Windows環境がないのでデバッグできないんですけど、 >>> >>>https://git.gnome.org/browse/gtk+/tree/gtk/gtkwin32theme.c#n117 >>> >>> is_app_themed = (IsAppThemedFunc) GetProcAddress (uxtheme_dll, "IsAppThemed"); >>> >>>か >>> >>>https://git.gnome.org/browse/gtk+/tree/gtk/gtkwin32theme.c#n120 >>> >>> is_theme_active = (IsThemeActiveFunc) GetProcAddress (uxtheme_dll, "IsThemeActive"); >>> >>>がFALSEになっているのが悪い気がするんですよねぇ。 >> >> この2つのWin32APIをWindowsのRubyでテーマ別に実行しただけの結果って >> 意味無いですか? とりあえずこれならすぐに出せるのですが。 > >あ、すぐに出せるならおねがいします! 了解です。こんな感じになります。 # 使ったコード require 'fiddle/import' #require 'gtk3' #require 'gtk2' module IsAppThemed extend Fiddle::Importer dlload 'uxtheme.dll' extern 'int IsAppThemed()' end p IsAppThemed.IsAppThemed module IsThemeActive extend Fiddle::Importer dlload 'uxtheme.dll' extern 'int IsThemeActive()' end p IsThemeActive.IsThemeActive #---------ここまで このコードを、2種類のWindowsテーマごとにgtk2、gtk3どちらかをrequire した場合とどちらもrequireしない場合に分けて実行してみました。 ちなみにWindows7のGUIにはAeroという機能があり、これをオンにしたタイプ のテーマもあるのですが、このAero系テーマでは下の結果にある「Windows7 ベーシック」と同じ結果になるようです。 (この前のメールではちょっと間違ったことを書いてしまったのですが、 Windows7 のデフォルトのテーマはAero系テーマだったと思います) [[ 実行結果 ]] 「Windows7 ベーシック」の時に、 require 'gtk3'した場合。 IsAppThemed #-> true (1) IsThemeActive #-> true (1) require 'gtk2'した場合。 IsAppThemed #-> true (1) IsThemeActive #-> true (1) どちらもrequire しなかった場合。 IsAppThemed #-> false (0) IsThemeActive #-> true (1) Windows クラシック(9x風)の時に、 require 'gtk3'した場合。 IsAppThemed #-> false (0) IsThemeActive #-> false (0) require 'gtk2'した場合。 IsAppThemed #-> false (0) IsThemeActive #-> false (0) どちらもrequire しなかった場合。 IsAppThemed #-> false (0) IsThemeActive #-> false (0) 以上です。 |
From: Kouhei S. <ko...@co...> - 2014-05-11 10:36:24
|
須藤です。 In <201...@ll...> "Re: [ruby-gnome2-devel-ja] WindowsでGTK+ 3を使ったときのテーマ" on Sun, 11 May 2014 03:29:31 +0900, "S. Kitagawa" <ch...@ll...> wrote: > 了解です。こんな感じになります。 > > [[ 実行結果 ]] > > 「Windows7 ベーシック」の時に、 > > require 'gtk3'した場合。 > IsAppThemed #-> true (1) > IsThemeActive #-> true (1) > > require 'gtk2'した場合。 > IsAppThemed #-> true (1) > IsThemeActive #-> true (1) > > どちらもrequire しなかった場合。 > IsAppThemed #-> false (0) > IsThemeActive #-> true (1) > > Windows クラシック(9x風)の時に、 > > require 'gtk3'した場合。 > IsAppThemed #-> false (0) > IsThemeActive #-> false (0) > > require 'gtk2'した場合。 > IsAppThemed #-> false (0) > IsThemeActive #-> false (0) > > どちらもrequire しなかった場合。 > IsAppThemed #-> false (0) > IsThemeActive #-> false (0) ありがとうございます! 「Windows クラシック」のときはIsThemeActiveがfalseなので、た ぶん、DrawThemeBackground https://git.gnome.org/browse/gtk+/tree/gtk/gtkwin32theme.c#n262 res = draw_theme_background (theme, hdc, xp_part, state, &rect, &rect); も失敗するんでしょうねぇ。なので、 https://git.gnome.org/browse/gtk+/tree/gtk/gtkwin32theme.c#n292 if (res == S_OK) return surface; でreturnせずに、フォールバックして https://git.gnome.org/browse/gtk+/tree/gtk/gtkwin32theme.c#n302 gdk_rgba_parse (&color, "pink"); にいってピンクになるんでしょうねぇ。 だったらしょうがないかなぁという気がしますねぇ。まぁ、デフォ ルトはピンクじゃなくてもっていう気もしますが、わかりやすいの で開発中はありなのかも。。。 「Windows7 ベーシック」のときはIsAppThemedもIsThemeActiveも trueなのでiniがなくても適切なテーマが選ばれそうな気がするん ですけどねぇ。 https://git.gnome.org/browse/gtk+/tree/gtk/gtkwin32theme.c#n419 if (use_xp_theme) return (os_version.dwMajorVersion >= 6) ? "gtk-win32" : "gtk-win32-xp"; gtk-win32-xpが使われているとか? いや、それでもそれっぽい見た目にはなるか。。。 うーん、テーマが使われていないときにピンクになるのはしょうが ないと思うんですが、iniがないとテーマが設定されないのはわか らないですねぇ。すみません。。。 |
From: S. K. <ch...@ll...> - 2014-05-14 07:31:34
|
北川です。 こちらもGTK+3のビルドからやってみる余裕がなくて恐縮です。 また断片的な情報になってしまいますが、settings.iniにgtk-theme-name = gtk-win32-xpを 書いてgtk3のデモを実行してみたところ、「Windows7 ベーシック」でも「Windows クラシック」でもgtk-win32と書いた時と同じ結果になりました。 なんにしても今のところはしょうがないですね。 |