マイコン工作実験日記

Microcontroller を用いての工作、実験記録

ボタンを並べる

2013-09-16 21:30:39 | LCD
FT800には、ちょっとしたGUIを作成するのに必要と思われる各種Widgetが用意されています。テキストにつづいて、ボタン表示を試してみました。



電話のキーパッドをイメージしてキーを配置してみました。コードは次のとおり。
void do_Button(Ft_Gpu_Hal_Context_t *phost)
{
  Ft_Gpu_CoCmd_Dlstart(phost);
  Ft_App_WrCoCmd_Buffer(phost,CLEAR_COLOR_RGB(0,0,0)); /* Black background */
  Ft_App_WrCoCmd_Buffer(phost,CLEAR(1,1,1));

  Ft_App_WrCoCmd_Buffer(phost,COLOR_RGB(255,255,255)); /* Label color is white */

  Ft_Gpu_CoCmd_Keys(phost, 10,  80, 300, 35, 28, 0, "123");
  Ft_Gpu_CoCmd_Keys(phost, 10, 120, 300, 35, 28, '5', "456");
  Ft_Gpu_CoCmd_Keys(phost, 10, 160, 300, 35, 28, 0, "789");
  Ft_Gpu_CoCmd_Keys(phost, 10, 200, 300, 35, 28, 0, "#0*");

  Ft_Gpu_CoCmd_FgColor(phost, 0xc01000); /* Button color is red */
  Ft_Gpu_CoCmd_Button(phost, 320,  80, 100, 50, 28, 0, "Delete");
  Ft_App_WrCoCmd_Buffer(phost,COLOR_RGB(192,0,0)); /* Label color is red */
  Ft_Gpu_CoCmd_FgColor(phost, 0x00c000); /* Button color is green */
  Ft_Gpu_CoCmd_Button(phost, 320, 185, 100, 50, 28, 0, "Call");

  Ft_App_WrCoCmd_Buffer(phost,DISPLAY());
  Ft_Gpu_CoCmd_Swap(phost);

  /* Download the commands into fifo */
  Ft_App_Flush_Co_Buffer(phost);

  Ft_Gpu_Hal_WaitCmdfifo_empty(phost);
}

主なポイントとしては、
  • CMD_BUTTONを使ってラベル付きのボタンを描画できる。CMD_KEYSを使えばいちどに複数のボタンを並べることができるが、ボタン上のラベルが1文字に制限される。
  • CMD_KEYSでは、オプションで指定した文字ラベルのキーを押された状態として表示できる。
  • ボタンの色はCMD_FGCOLORで指定する。押された状態の色はCMD_BGCOLORで指定する。ラベルの色はCOLOR_RGBで指定する。
  • ディフォルトで3D効果を持つボタンを描画してくれる。

最低限のパラメータを指定するだけで、なかなかに見栄えのいいボタンを描画することができます。その反面、細かい形状の指定をすることはできません。例えばボタンの形状は変えられないので、丸ボタンが欲しければ自分で描画しなければならない。CMD_KEYSではキーとキーの間隔は3ピクセルで固定となっており、調整することはできません。

このように細かいデザインの調整はできませんが、そもそもGUIの部品デザインをするのが面倒だったり難しかったりするわたしのような人間には、これだけできれば充分です。ただし、上の例のようにしてプログラムを組んでいるとGUI部品のレイアウトまでもがプログラムの中に埋め込まれてしまうのが、イマイチではあります。

次は、押されたボタンを拾う処理について実験してみるつもりです。