GUI部品の色を変更するには(G4P)

◆PROCESSING 逆引きリファレンス

 カテゴリー:GUI

GUI部品の色を変更するには(G4P)

【概要】

PROCESSINGにGUI用のライブラリであるG4Pを追加する事で、(種類は多くないですが)簡単にGUI部品を表示する事ができるようになります。

G4Pのインストールについては「GUIを扱う準備をする(G4P)」記事を参照してください。

より詳しく知りたい方は、下記公式サイト様などを参照して下さい。

G4Pでは、各GUIパーツの色を自由にカスタマイズする事が可能です。

カスタマイズ方法には、全ての部品の色を変える方法と特定の部品の色を変える方法の2種類が存在します。

全ての部品の色を変える方法には、さらに「環境設定で色を変える方法」と「プログラムでSchemeを変更する方法」があります。

全ての部品ではなく、指定した部品の色だけを変えたい場合は、「指定した部品の色だけを変更する」説明を参照して下さい。

 

【詳細】

前提知識

G4Pは各GUIパーツの色を
スケッチブックの場所 ¥ libraries ¥ G4P ¥ src ¥ data
にある default_gui_palette.png 画像を元に決定しています。

(例:C:¥processing-3.3.6¥src¥libraries¥G4P¥src¥data¥default_gui_palette.png

スケッチブックの場所は、標準エディタの「ファイル」⇒「設定」で開く設定ウィンドウから確認できます。


default_gui_palette.png は 16個の Palette 番号(横方向)と、16個の Scheme 番号(縦方向)から構成されており、各部品の色は、Scheme 番号単位に管理されています。


0から7までの Scheme はシステムで予約されています。8番以降はユーザ領域として開放されています。

デフォルトでは、 6番の Scheme (上図の★)がGUI 部品に割り当てられています。

例えばGButtonであれば

  • ラベル色:Scheme 6 の Palette 2番
  • ボタンの枠色:Scheme 6 の Palette 3番
  • 通常時のボタンフェース色:Scheme 6 の Palette 4番
  • フォーカス時のボタンフェース色:Scheme 6 の Palette 6番
  • 押下時のボタンフェース色:Scheme 6 の Palette 14番

といった具合です。

(画像URL:illust-AC 様:アルパッカさん、文字:IPA 独立行政法人 情報処理推進機構 様:IPAフォント

各GUI部品が Scheme の何番目の Pallet 色を使っているのかについては、下記公式サイトを参照してください。

default_gui_palette.png を、適当な画像加工ツールで直接書き換えても良いのですが、元の色に戻せなくなってしまうので注意が必要です。

元に戻すことも考慮して変更するなら、下記「環境設定で色を変える」に記載した方法を利用して下さい。

 

環境設定で色を変える

default_gui_palette.png を、スケッチフォルダの data フォルダ配下にuser_gui_palette.png という名前で複写します。

dataフォルダ配下にこの名前の画像があると、G4Pは優先的にこの画像をパレットとして利用します。

プログラムに頼ること無く、全てのGUI部品の色を一括して変更したい場合は、dataフォルダ配下に複写した user_gui_palette.png 画像の6番目の Scheme色を、適当な画像加工ツールで変更します。

例えば下記画像は、ラベルとボタンフェースに該当する色を赤系統に変更した例です。

(画像URL:illust-AC 様:アルパッカさん、SSSSSSS さん、文字:IPA 独立行政法人 情報処理推進機構 様:IPAフォント

ただしこの方法では、(ほとんど)すべてのGUI部品の色が影響を受けることに注意してください。

上記例では、画面に GButton、GLabel、GPanel、GImageButtonという4種類の部品が配置されていますが、パレットの影響を受けない GImageButton以外は、全て赤系統の色に変更されています。

 

プログラムでSchemeを変更する方法

Palette を変更するvoid GCScheme.changePaletteColor( int  scm,  int  pal,  color  col ) ;

scm : Scheme番号( 0 – 15 )
pal : Palette番号( 0 – 15 )
col : Color値

GCSchemeクラスの changePaletteColor 命令を使うと、指定した Scheme の  pal 位置にある Palette 色を、任意の色に変更できます。

例えば多くのGUI部品のラベル色を変更したい場合は、デフォルトで採用されている 6番目の Scheme に対して、ラベルに使われている Palette 2番の色を変更すれば良い事になります。

changePaletteColor 命令による変更は、メモリ内に記憶されます。

例えば

  • (1)Scheme 6番の Palette 2番(ラベル色)を濃い青⇒赤色に変更し
  • (2)setGlobalColorScheme 命令で GUI の Scheme 番号を6以外に変更
  • (3)再び setGlobalColorScheme 命令で  GUI の Scheme 番号を6に戻す

という操作を行っても、ラベル色は赤色のままとなります。

現在アクティブになっている Scheme の Palette 色を変更すると、(ほとんど)すべてのGUI部品の色に影響を与えます。

 

Schemeを指定void G4P.setGlobalColorScheme( int scm ) ;

scm : Scheme番号( 0 – 15 )

画像加工ツールでパレット用の画像を編集するのではなく、プログラムから、GUI部品が使う Scheme 番号を変更する事が可能です。

G4Pクラスの setGlobalColorScheme メソッドに 任意の Scheme 番号を与えると、GUI部品の色が、該当 Scheme の Palette 色に変わります。

Schemeを変更すると、一瞬で全てのGUI部品の色を変更する事ができるので、便利です。

ただしこの命令は、setup() 関数の中でGUI部品を作成する前に使用するか、setup() 関数が終了した後で、draw()関数以外の部分で使用してください。(当然ですが、draw()関数から呼び出された関数内で使うのもNGです)

setup() 関数の中でGUI部品生成後に使用したり、draw()関数の中で使用すると、期待通り動作しません。

なお、この命令を GUI 部品を作成する前に呼び出す場合は、呼び出す前に、この後で説明する makeColorSchemes 命令を使って、変更対象となる Scheme を作成しておく必要があります。

この命令が適切に呼び出されると、(ほとんど)すべてのGUI部品の色に影響を与えます。

 

Schemeを複写するvoid GCScheme.copyPalette( int  orgScm ,  int  tagScm ) ;

orgScm : コピー元 Scheme 番号
tagScm : コピー先 Scheme 番号

コピー元番号で指定された Scheme を、コピー先エリアに複写します。

例えば、GCScheme.copyPalette( 6, 10 ) ; とする事で、6番目の Scheme を 10 番目にコピーします。

ただしこの命令は、setup() 関数の中でGUI部品を作成する前に使用するか、setup() 関数が終了した後で、draw()関数以外の部分で使用してください。

setup() 関数の中でGUI部品生成後に使用したり、draw()関数の中で使用すると、期待通り動作しません。

なお、この命令を GUI 部品を作成する前に呼び出す場合は、呼び出す前に、この後で説明する makeColorSchemes 命令を使って、変更対象となる Scheme を作成しておく必要があります。

 

Schemeを作成するvoid GCScheme . makeColorSchemes ( PApplet  app ) ;

app : アプレット。this を与える

新たに Scheme を作成します。app には this を与えます。

G4Pでは最初の GUI部品を作成した際に、自動的に Scheme が作成され、メモリに展開されます。この命令は G4P で部品を作成するタイミングとは別に、新たに Scheme をメモリ上に作成します。

ただしこの命令は、setup() 関数の中でGUI部品を作成する前に使用するか、setup() 関数が終了した後で、draw()関数以外の部分で使用してください。

setup() 関数の中でGUI部品生成後に使用したり、draw()関数の中で使用すると、期待通り動作しません。

これまで紹介した4つの命令を組み合わせると

(1)makeColorSchemes 命令で、Scheme を作成し
(2)copyPalette 命令で、6番の Scheme を 10 番にコピーし
(3)changePaletteColor 命令で、10番の Scheme に対し、GUI部品が使っている Palette番号の色を変更し
(4) setGlobalColorScheme 命令で、10番の Scheme を全GUIに適用し
(5) GUI部品を生成する
といった使い方ができます。

いうなれば、予め画像加ツールで  user_gui_palette.png を編集しておく操作を、プログラムを使ってメモリ内で行うようなものです。

こうする事で、システム領域(0 – 7)の Scheme をベースに、一部だけ色が異なる Scheme をユーザ領域に作成して、GUI部品に適用する事が可能となります。

 

指定した部品の色だけを変更する方法

限定的な Scheme適用void  setLocalColorScheme( int scm ) ;

scm : Scheme番号( 0 – 15 )

これまで紹介した方法は、(ほとんど)全てのGUI部品に影響を与える作業でした。

これに対し 、多くのGUI部品の親となる GAbstractControl クラスが持つsetLocalColorScheme メソッドを使うと、特定のGUI部品だけに指定したSchemeを適用する事ができます。

(画像URL:illust-AC 様:レグロ さん、文字:IPA 独立行政法人 情報処理推進機構 様:IPAフォント

例えば上記例では、青信号、黄信号、赤信号の各ボタンは全てGButtonですが、ボタン毎に異なる Scheme をセットする事で、それぞれ違う色にしています。

システムで予約されている Scheme 番号には、以下の定数が利用可能です。


またユーザ領域の Scheme には、それぞれ G4P . SCHEME_8 から G4P . SCHEME_15 までの定数が割り当てられています。

 

限定的なPalette適用void setLocalColor( int  pal,   Color  col ) ;

pal : Palette番号( 0 – 15 )
col : Color値

同じくGAbstractControl クラスが持つ setLocalColor命令を使うと、特定のGUI部品にだけ、指定した Palette 色を適用できます。

(画像URL:illust-AC 様:アルパッカさん、SSSSSSS さん、文字:IPA 独立行政法人 情報処理推進機構 様:IPAフォント

上記例では、一番上のGButtonのラベル色( Palette 2番 )だけ、デフォルトの色から黄色に変更しています。

 

【関連記事】

 


サンプルプログラム

プログラムでSchemeを変更する例:

changePaletteColor 命令で、GUI部品のラベル色を赤色に変更しています。

またボタンを押下するごとに、setGlobalColorScheme 命令で Scheme を切り替えています。

<出力サンプル>


(画像URL:illust-AC 様:アルパッカさん、文字:IPA 独立行政法人 情報処理推進機構 様:IPAフォント

 

ユーザ領域のSchemeを利用する例:

GUI部品を作る前に、makeColorSchemes で Scheme を作成し、該当 Scheme の 8 番をオリジナル Scheme としてカスタマイズしています。

説明でも記載しましたが、makeColorSchemesをするタイミングに注意してください。

<出力サンプル>

(画像URL:illust-AC 様:アルパッカさん、文字:IPA 独立行政法人 情報処理推進機構 様:IPAフォント

 

指定した部品のSchemeだけを変更する例:

setLocalColorScheme で、ボタン毎に別々の Scheme を適用しています。

<出力サンプル>

(画像URL:illust-AC 様:レグロ さん、文字:IPA 独立行政法人 情報処理推進機構 様:IPAフォント

 

指定した部品のPaletteだけを変更する例:

setLocalColor命令で、犬ボタンのラベル色(Palette2番)だけを、黄色に変更しています。

<出力サンプル>

(画像URL:illust-AC 様:アルパッカさん、文字:IPA 独立行政法人 情報処理推進機構 様:IPAフォント

 


PROCESSING逆引きリファレンス一覧 へ戻る

本ページで利用しているアイコン画像は、下記サイト様より拝借しております。各画像の著作権は、それぞれのサイト様および作者にあります。