web-dev-qa-db-ja.com

Windows 7+およびMSYS2のGTK3でネイティブのウィンドウ装飾を取得する方法

アプリケーションをLinuxからWindowsに移植しようとしていますが、テーマ設定に問題があります。 Linuxでは、これはそのまま使用できます。コンパイルするだけで、アプリケーションは適切なテーマを使用し、ネイティブに見えます。

MSYS2にgtkmm3とgtk3をインストールし、CMakeでビルドしています。これは問題ありません。実行できるようにするには、すべてのDLLをバイナリと共にディレクトリにコピーする必要がありました。他には何もコピーしませんでした。 「解凍して実行」パッケージを作成しようとしています。

私の問題は、そのアプリケーションが場違いに見えることです。それは全くネイティブに見えません。ウィンドウの周りに影があり、Windows10では問題ありませんが、Windows 7ではネイティブではありません。また、いくつかのアイコンがありません。

bad gtk3 application theme on Windows10

Gitk3-demoでもネイティブと同じように見えます(ただし、少なくとも最小化/最大化/閉じるアイコンは正しい)。

だから問題は:WindowsでGTK3アプリケーションのネイティブな外観を実現するにはどうすればよいですか?または、少なくともネイティブのウィンドウ装飾?

ありがとう

15
kracejic

Theraには2つのサブ問題があります。アイコンの欠落と正しいテーマの設定です。

アイコンがありません

アイコンがない場合は、これらのアイコンをコピーするだけで十分でした

  • window-close-symbolic.symbolic.png
  • window-maximize-symbolic.symbolic.png
  • window-minimize-symbolic.symbolic.png

から:C:\ msys64\mingw32\share\icons\Adwaita\22x22\actions

宛先: "実行可能フォルダ"\share\icons\Adwaita\22x22\actions

テーマ

Win32ネイティブテーマの使用

GTK3には、実際には組み込みのようなテーマがあります。ネイティブのようなテーマを使用するには、ファイル「実行可能フォルダー」\ etc\gtk-3.0\settings.iniを作成し、これを含めます

[Settings]
gtk-theme-name=win32

win32テーマはGTK3に組み込まれており、前の手順の3つのアイコンのみが必要なようです。

Windows 7では、これは次のようになります。

enter image description here

問題は、装飾がWindows 10でも同じように見えることです(ウィンドウ装飾を含む)。

@andlabsからのコメントより:GTK + 3はuxtheme.dll APIを使用してWindowsのルックアンドフィールを取得していますが、残念ながらMicrosoftはこれらのWindows 7のようにウィンドウの境界線を保持しています。 (コメントでもっと)

ここで、win32テーマのWindows 10 Gtk3アプリケーションを確認できます。

enter image description here

デフォルト以外のテーマを使用する

デフォルトまたはwin32テーマに満足できない場合は、インターネットからカスタムテーマ( this Flat-Pat など)を使用できます。 :)それを行うには、設定ファイルを作成する必要があります:

"あなたの実行可能フォルダ"\etc\gtk-3.0\settings.iniこの中に

[Settings]
gtk-theme-name=Flat-Plat

実行可能ファイルのパスのディレクトリにテーマファイルをコピーする必要があります

"実行可能フォルダ"\share\themes\Flat-Plat

そのフォルダーには、index.themeファイルとgtk-x.xフォルダーが存在する必要があります。明らかにgtk-theme-nameとフォルダ名は一致する必要があります。

実行可能ファイルを実行すると、別のテーマを取得できるようになります。

enter image description here

編集:したがって、組み込みのwin32テーマがあります、ありがとう@andlabs

EDIT2:スクリーンショットを追加しました

EDIT3:Windows 10のスクリーンショットを追加し、事実を修正しました。

12
kracejic

GTK_CSD = 0環境変数を設定して、クライアント側のウィンドウ装飾を無効にし、Windowsネイティブ装飾を有効にすることができます。これにより、醜いwin7のようなタイトルバーとAdwaitaのようなタイトルバーが取り除かれます。

4
Alexander

GTK_CSD = 0はWindowsフレームアイコンに対して適切に機能しますが、デフォルトのドラッグアンドドロップ(DND)アイコンも欠落しているようです。

GtkEntryまたはGtkTreeViewのコンテンツをドラッグすると、ドラッグアイコンが表示されます。

Gtk + -3.24.4でドラッグソースとしてボタンを用意しました。ボタンをドラッグすると、マウスカーソルが消え、ドラッグアイコンは表示されません。

Gtk_drag_source_set_icon_pixbuf(bt、pixbuf)を使用すると、pixbufはドラッグアイコンとして表示されます。ただし、アイコンに移動/コピーインジケータがないため、この方法で行う作業は半分です。

0
Fredy Paquet

(activestate)Perlを使用する私のような人々の場合、/ shareと/ etcはPerl.exeの1つのディレクトリに配置する必要があります(たとえば、Perl.exeがC:\ Perl64\binにある場合はC:\ Perl64に配置します)。

0
Guillaume

実際、Gtk + 3はWindows 10と互換性があり、これをデフォルトのテーマにすることでネイティブのWindowsテーマを使用できます。

gtk-theme-name = MS-Windows
0
BaHaa Jr.