Skip to content

Commit

Permalink
add auto disappear mode
Browse files Browse the repository at this point in the history
  • Loading branch information
GorgonMeducer committed Nov 27, 2024
1 parent b74b26b commit cf39fe2
Show file tree
Hide file tree
Showing 4 changed files with 104 additions and 27 deletions.
2 changes: 1 addition & 1 deletion ARM.Arm-2D.pdsc
Original file line number Diff line number Diff line change
Expand Up @@ -450,7 +450,7 @@
</RTE_Components_h>
</component>

<component Cclass="Acceleration" Cgroup="Arm-2D Extras" Csub="Controls" Cversion="2.2.1" condition="Arm-2D-Controls">
<component Cclass="Acceleration" Cgroup="Arm-2D Extras" Csub="Controls" Cversion="2.2.2" condition="Arm-2D-Controls">
<description>A set of example controls, e.g. round-corner-box, spinning-wheels etc</description>
<files>
<!-- example control source files -->
Expand Down
2 changes: 1 addition & 1 deletion examples/common/controls/__simple_list.c
Original file line number Diff line number Diff line change
Expand Up @@ -454,7 +454,7 @@ arm_fsm_rt_t __simple_list_show( __simple_list_t *ptThis,
if (this.tSimpleListCFG.bUseDirtyRegion) {


if (__arm_2d_list_core_need_redraw(ptList, false)) {
if (__arm_2d_list_core_need_redraw(ptList, true)) {

arm_2d_tile_t *ptTargetTile
= __arm_2d_list_core_get_inner_tile(
Expand Down
104 changes: 83 additions & 21 deletions examples/common/controls/text_tracking_list.c
Original file line number Diff line number Diff line change
Expand Up @@ -196,8 +196,8 @@ IMPL_PFB_ON_DRAW(__arm_2d_text_tracking_list_draw_background)
tStringSize.iWidth,
200,
&nResult,
&this.lTimestamp)) {
this.lTimestamp = 0;
&this.lTimestamp[0])) {
this.lTimestamp[0] = 0;
this.tLastStringSize = tStringSize;
}
this.iStringWidth = nResult;
Expand Down Expand Up @@ -244,15 +244,12 @@ IMPL_PFB_ON_DRAW(__arm_2d_text_tracking_list_draw_cover)

arm_2d_canvas(ptTile, __list_cover) {


arm_2d_dock_right(__list_cover, 3) {

if (this.tSettings.bUseMonochromeMode) {
arm_2d_dock_horizontal(__right_region, 1, 4, 4) {

/* draw bar */
arm_2d_fill_colour( ptTile,
&__horizontal_region,
(COLOUR_INT_TYPE)this.tSettings.ScrollingBar.wValue);
arm_2d_dock_horizontal(__right_region, 1, 4, 4) {

/* draw selection indicator */
if (bIsNewFrame) {
Expand All @@ -277,22 +274,40 @@ IMPL_PFB_ON_DRAW(__arm_2d_text_tracking_list_draw_cover)
this.tIndicatorRegion = tIndicatorRegion;
}

arm_2d_fill_colour( ptTile,
&this.tIndicatorRegion,
(COLOUR_INT_TYPE)this.tSettings.ScrollingBar.wValue);
if (this.chScrollingBarOpacity > 0) {
/* draw bar */
arm_2d_fill_colour( ptTile,
&__horizontal_region,
(COLOUR_INT_TYPE)this.tSettings.ScrollingBar.wValue);

arm_2d_fill_colour( ptTile,
&this.tIndicatorRegion,
(COLOUR_INT_TYPE)this.tSettings.ScrollingBar.wValue);
}

arm_2d_helper_dirty_region_update_item( &this.tDirtyRegionItem,
(arm_2d_tile_t *)ptTile,
&__right_region,
&this.tIndicatorRegion);
if (this.bRedrawTheScrollingBar) {
this.bRedrawTheScrollingBar = false;
arm_2d_helper_dirty_region_update_item( &this.tDirtyRegionItem,
(arm_2d_tile_t *)ptTile,
&__list_cover,
&__right_region);
} else if (this.bSelectionChanged) {
arm_2d_helper_dirty_region_update_item( &this.tDirtyRegionItem,
(arm_2d_tile_t *)ptTile,
&__right_region,
&this.tIndicatorRegion);
}
}

} else {

uint8_t chScrollingBarOpacity = arm_2d_helper_alpha_mix(128, this.chScrollingBarOpacity);

arm_2d_dock_horizontal(__right_region, 2, 4, 4) {
arm_2d_fill_colour_with_opacity(ptTile,
&__horizontal_region,
(__arm_2d_color_t){this.tSettings.ScrollingBar.wValue},
128);
chScrollingBarOpacity);

/* draw selection indicator */
if (bIsNewFrame) {
Expand Down Expand Up @@ -320,12 +335,20 @@ IMPL_PFB_ON_DRAW(__arm_2d_text_tracking_list_draw_cover)
arm_2d_fill_colour_with_opacity(ptTile,
&this.tIndicatorRegion,
(__arm_2d_color_t){this.tSettings.ScrollingBar.wValue},
128);

arm_2d_helper_dirty_region_update_item( &this.tDirtyRegionItem,
(arm_2d_tile_t *)ptTile,
&__right_region,
&this.tIndicatorRegion);
chScrollingBarOpacity);

if (this.bRedrawTheScrollingBar) {
this.bRedrawTheScrollingBar = false;
arm_2d_helper_dirty_region_update_item( &this.tDirtyRegionItem,
(arm_2d_tile_t *)ptTile,
&__horizontal_region,
&__right_region);
} else if (this.bSelectionChanged) {
arm_2d_helper_dirty_region_update_item( &this.tDirtyRegionItem,
(arm_2d_tile_t *)ptTile,
&__horizontal_region,
&this.tIndicatorRegion);
}

}
}
Expand Down Expand Up @@ -377,6 +400,45 @@ void text_tracking_list_on_frame_start(text_tracking_list_t *ptThis)
}
}

this.bSelectionChanged = __arm_2d_list_core_is_list_moving(
&base.use_as____arm_2d_list_core_t);

do {
int64_t lCurrent = arm_2d_helper_get_system_timestamp();
if (this.bSelectionChanged) {
/* reset timer */
this.lTimestamp[1] = lCurrent;

this.chScrollingBarOpacity = 255;
this.bRedrawTheScrollingBar = true;

} else if ((this.tSettings.chScrollingBarAutoDisappearTimeX100Ms > 0)
&& (this.chScrollingBarOpacity > 0)) {

int32_t nTimeoutMS
= this.tSettings.chScrollingBarAutoDisappearTimeX100Ms * 100ul;
int32_t lElapsedMS = arm_2d_helper_convert_ticks_to_ms(
lCurrent - this.lTimestamp[1]);

if (lElapsedMS > nTimeoutMS) {
if (this.tSettings.bUseMonochromeMode) {
this.chScrollingBarOpacity = 0;
this.bRedrawTheScrollingBar = true;
} else {
int32_t nOpacity = 255 - ((int32_t)(lElapsedMS - nTimeoutMS) >> 1);

if (nOpacity > 0) {
this.chScrollingBarOpacity = (uint8_t)nOpacity;
this.bRedrawTheScrollingBar = true;
} else {
this.chScrollingBarOpacity = 0;
this.bRedrawTheScrollingBar = true;
}
}
}
}
} while(0);

text_list_on_frame_start(&this.use_as__text_list_t);
}

Expand Down
23 changes: 19 additions & 4 deletions examples/common/controls/text_tracking_list.h
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,11 @@ typedef struct text_tracking_list_setting_t {
uint8_t bIndicatorAutoSize : 1;

uint8_t bDisableScrollingBar : 1;
uint8_t bUseMonochromeMode : 1;
uint8_t bUseMonochromeMode : 1;
uint8_t : 4;

/*! \note 0 means always-on. The unit is 100ms */
uint8_t chScrollingBarAutoDisappearTimeX100Ms;

union {
uint8_t chValue;
Expand Down Expand Up @@ -102,6 +106,9 @@ typedef struct text_tracking_list_cfg_t {
uint8_t bDisableScrollingBar : 1;
uint8_t bUseMonochromeMode : 1;

/*! \note 0 means always-on */
uint8_t chScrollingBarAutoDisappearTimeX100Ms;

union {
uint8_t chValue;
uint16_t hwValue;
Expand All @@ -123,16 +130,24 @@ typedef struct text_tracking_list_cfg_t {
typedef struct text_tracking_list_t {
implement(text_list_t);
ARM_PRIVATE(
int64_t lTimestamp;
int16_t iStringWidth;
int64_t lTimestamp[2];

int16_t iStringWidth;
uint8_t bIsOnLoad : 1;
uint8_t bRedrawTheScrollingBar : 1;
uint8_t bSelectionChanged : 1;
uint8_t : 5;
uint8_t chScrollingBarOpacity;


arm_2d_size_t tLastStringSize;
arm_2d_region_t tIndicatorRegion;

arm_2d_helper_dirty_region_item_t tDirtyRegionItem;

text_tracking_list_setting_t tSettings;

bool bIsOnLoad;

)

} text_tracking_list_t;
Expand Down

0 comments on commit cf39fe2

Please sign in to comment.