PixelmapButtonの子供としてPromptをぶら下げ、PixelmapButtonにNormal/Selectedのピクセルマップを指定しています。
ボタンを押下するとSelectedのピクセルマップが描画され正常にピクセルマップの切り替えができているのですが、
Promptに指定したSelectedColorが反映されてそうにありません。
どのようにすればボタンの状態に応じてテキストの色が変わりますでしょうか?
親の状態に応じて子供の色を変えなければならないような気がしますが方法が分からずに困っております。
以下はコードの抜粋です。
(Pixelmapボタンの生成)
gx_pixelmap_button_create(&row->pixelmap, "PixelmapButton", &row->background,//親 GX_PIXELMAP_ID_MAINMENUBUTTON, GX_PIXELMAP_ID_MAINMENUBUTTONS, GX_PIXELMAP_ID_MAINMENUBUTTON, GX_STYLE_ENABLED, 0, &childsize);
(プロンプトの作成)
gx_prompt_create(&row->datetime, "DateTimeInfo", &row->pixelmap, 0, GX_STYLE_VALIGN_TOP|GX_STYLE_TRANSPARENT|GX_STYLE_TEXT_CENTER,//メッセージのスタイル 0, &childsize);
(フォントの指定)
gx_prompt_font_set(&row->datetime,GX_FONT_ID_REGULAR16);
(ノーマル/選択時の色指定)
gx_prompt_text_color_set(&row->datetime, GX_COLOR_ID_02, GX_COLOR_ID_17);
kom0313さん
Vertical List内での利用だったんですね。Renesas Synergy™ GUIX™ 基本アプリケーション(r30an0320jj0100)を利用して、似たような機能が出来るか試してみました。少し無理やりな感じがありますが、概ね動いている感じです。変更箇所のポイントは以下です。
もっと良い方法があるかもしれませんが、参考になれば幸いです。
以下がパッチになります。
Index: blinky_api.h===================================================================--- blinky_api.h+++ blinky_api.h@@ -53,6 +53,8 @@ typedef struct st_blinky_list_widget {+ GX_WIDGET base;+ GX_PIXELMAP_BUTTON button; GX_PROMPT prompt; /* GUIX prompt widget for blink pattern */ CHAR text[LEN_LED_PATTERN]; /* blink description */ } blinky_list_widget_t;Index: blinky_thread_entry.c===================================================================--- blinky_thread_entry.c+++ blinky_thread_entry.c@@ -294,8 +294,17 @@ if (!created) { gx_utility_rectangle_define(&rect, 0, 0, VERTICAL_LIST_WIDTH, VERTICAL_LIST_HEIGHT);- gx_prompt_create(&entry->prompt, entry->text, list, blinky_patterns[index].strings,- GX_STYLE_ENABLED | + gx_widget_create(&entry->base, NULL, list, GX_STYLE_ENABLED, 0, &rect);+ gx_widget_fill_color_set(&entry->base, GX_COLOR_ID_WHITE, GX_COLOR_ID_BLUE);+ gx_pixelmap_button_create(&entry->button, NULL, &entry->base,+ GX_PIXELMAP_ID_RADIO_OFF,+ GX_PIXELMAP_ID_RADIO_ON,+ 0,+ GX_STYLE_VALIGN_CENTER,+ 0,+ &rect);+ gx_utility_rectangle_shift(&rect, 20, 0);+ gx_prompt_create(&entry->prompt, entry->text, &entry->base, blinky_patterns[index].strings, GX_STYLE_TEXT_LEFT | GX_STYLE_BORDER_NONE, 0, Index: window_vertical_list.c===================================================================--- window_vertical_list.c+++ window_vertical_list.c@@ -38,6 +38,7 @@ * Private global variables and functions **********************************************************************************************************************/ static void vertical_list_create(GX_WIDGET *widget);+static void vertical_list_refresh(INT selected); static blinky_list_widget_t vertical_list_widgets[NUM_LED_PATTERN]; static GX_CHAR str_interval[8];@@ -103,6 +104,7 @@ gx_widget_find(widget, ID_VTL_LED_PATTERN, GX_SEARCH_DEPTH_INFINITE, &vlist); gx_vertical_list_selected_index_get(vlist, &selected); blinky_set_pattern( selected );+ vertical_list_refresh( selected ); break; /* Slider changed */@@ -143,3 +145,20 @@ blinky_create_pattern_row(list, (GX_WIDGET *) &vertical_list_widgets[index], index); } }++static void vertical_list_refresh(INT selected)+{+ for (int index = 0; index < NUM_LED_PATTERN; index++)+ {+ if ( index == selected )+ {+ vertical_list_widgets[index].button.gx_widget_style |= GX_STYLE_BUTTON_PUSHED;+ vertical_list_widgets[index].prompt.gx_widget_style |= GX_STYLE_DRAW_SELECTED;+ }+ else+ {+ vertical_list_widgets[index].button.gx_widget_style &= ~(GX_STYLE_BUTTON_PUSHED);+ vertical_list_widgets[index].prompt.gx_widget_style &= ~(GX_STYLE_DRAW_SELECTED);+ }+ }+}