📄 status_bar.c
字号:
#include "status_bar.h"
// 积己磊
// in_status_num = 4;
// rect = NULL;
// is_draw_line = TRUE;
static void denit(Status_Bar *b);
static void draw(Status_Bar *b);
static boolean start_processbar(Status_Bar *b);
static void stop_processbar(Status_Bar *b);
static void _processbar_timer_cb_func(void * data);
static void set_status(Status_Bar *b, uint8 status_index, boolean is_on);
static void move_processbar(Status_Bar *b);
static void set_position(Status_Bar *b, uint16 x, uint16 y, uint16 width, uint16 height);
void Status_Bar_init(Status_Bar *b, IDisplay * in_display,
IShell * in_shell,
uint8 in_status_num,
AEERect * rect,
boolean is_draw_line)
{
MEMSET(b, '\0', sizeof(Status_Bar));
b->_shell = in_shell;
b->_is_draw_line = is_draw_line;
b->_process_bar_position = 0;
b->_status_num = in_status_num;
b->_display = in_display;
if (rect)
b->_position_info = *rect;
else
SETAEERECT(&b->_position_info, 0, 0, 100, 20);
if (b->_g == NULL)
ISHELL_CreateInstance(b->_shell, AEECLSID_GRAPHICS, (void **)&b->_g);
b->_fg_color = MAKE_RGB(36, 36, 85);
b->_bg_color = MAKE_RGB(36, 36, 85);
b->_max_process_bar_width = 100;
MEMSET(b->_status, (byte)FALSE, in_status_num);
b->denit = denit;
b->draw = draw;
b->set_position = set_position;
b->start_processbar = start_processbar;
b->stop_processbar = stop_processbar;
b->move_processbar = move_processbar;
b->set_status = set_status;
b->processbar_timer_cb_func = _processbar_timer_cb_func;
b->_is_visible = TRUE;
return;
} // end 积己磊
// 家戈磊
static void denit(Status_Bar *b)
{
if (b->_g) {
IGRAPHICS_Release(b->_g);
b->_g = NULL;
}
b->_is_visible = FALSE;
// 鸥捞赣 吝瘤
b->stop_processbar(b);
} // end 家戈磊
/***************************
* 坷滚扼捞爹 窃荐
***************************/
static void draw(Status_Bar *b)
{
AEECircle temp_circle;
RGB_Struct org_rgb, temp_rgb;
boolean org_fill_mode;
uint8 temp_i;
AEERect temp_rect;
temp_circle.r = b->_status_radius;
if( b->_display == NULL || b->_g == NULL )
return;
if( b->_is_visible != TRUE )
return;
// 扼牢阑 器窃茄促搁
if(b->_is_draw_line == TRUE )
{
IDISPLAY_DrawRect(b->_display,
&b->_position_info,
b->_fg_color,
b->_bg_color,
IDF_RECT_FRAME | IDF_RECT_FILL);
} // end if
else
{
IDISPLAY_DrawRect(b->_display,
&b->_position_info,
b->_fg_color,
b->_bg_color,
IDF_RECT_FILL);
} // end else
// 捞傈狼 祸阑 备窃
IGRAPHICS_GetFillColor( b->_g,
&(org_rgb.r),
&(org_rgb.g),
&(org_rgb.b),
&(org_rgb.reserved));
org_fill_mode = IGRAPHICS_SetFillMode(b->_g, TRUE);
// 惑怕滚瓢甸阑 弊覆
for(temp_i = 0 ; temp_i < b->_status_num ; temp_i ++)
{
if(b->_status[temp_i] == TRUE )
temp_rgb.rgb = STATUS_BAR_ON_COLOR;
else
temp_rgb.rgb = STATUS_BAR_OFF_COLOR;
IGRAPHICS_SetFillColor( b->_g,
(uint8)((temp_rgb.rgb & 0xff000000) >> 24),
(uint8)((temp_rgb.rgb & 0x00ff0000) >> 16),
(uint8)((temp_rgb.rgb & 0x0000ff00) >> 8),
(uint8)(temp_rgb.rgb & 0x000000ff));
temp_circle.cx = b->_status_position[temp_i][0];
temp_circle.cy = b->_status_position[temp_i][1];
IGRAPHICS_DrawCircle(b->_g, &temp_circle);
} // end for
temp_rect.x = b->_position_info.x + OBJECT_HORTIZONTAL_GAP;
temp_rect.y = b->_position_info.y + 1;
temp_rect.dx = b->_max_process_bar_width;
temp_rect.dy = b->_position_info.dy - 2;
// progress bar啊 甸绢哎 荐 乐绰 后 傍埃阑 弊赴促
IDISPLAY_DrawRect(b->_display,
&temp_rect,
b->_fg_color,
RGB_WHITE,
IDF_RECT_FILL);
#ifndef MIN
#define MIN(a,b) ( (a) < (b) ? (a) : (b))
#endif
if( b->_process_bar_position > 0 )
{
temp_rect.dx = MIN(b->_process_bar_position, b->_max_process_bar_width);
IDISPLAY_FrameButton( b->_display,
&temp_rect,
FALSE,
b->_bg_color);
} // end if
// 盔贰 盲框葛靛客 盲框祸栏肺 函版
IGRAPHICS_SetFillMode(b->_g, org_fill_mode);
IGRAPHICS_SetFillColor( b->_g,
org_rgb.r ,
org_rgb.g,
org_rgb.b,
org_rgb.reserved);
IDISPLAY_Update(b->_display);
return;
} // end void Brew_Status_Bar::draw()
static void set_position(Status_Bar *b, uint16 x, uint16 y,
uint16 width, uint16 height)
{
uint8 temp_i;
// Brew_Component::set_position(x, y, width, height);
// 惑怕 滚瓢狼 馆瘤抚 拌魂
b->_status_radius = (height-2)/2;
// 柳青官狼农扁 拌魂
b->_max_process_bar_width = width - (OBJECT_HORTIZONTAL_GAP*2 +
(b->_status_radius*2+OBJECT_HORTIZONTAL_GAP)*
b->_status_num);
// 惑怕 滚瓢狼 困摹甫 拌魂
for( temp_i = 0 ; temp_i < b->_status_num ; temp_i ++)
{
b->_status_position[temp_i][0] = x + b->_max_process_bar_width +
OBJECT_HORTIZONTAL_GAP*2 + b->_status_radius +
((b->_status_radius*2 + OBJECT_HORTIZONTAL_GAP) *
temp_i);
b->_status_position[temp_i][1] = y + height/2;
} // end for
return;
} // end void Brew_Status_Bar::set_position()
// 鸥捞赣 角青 窃荐
static boolean start_processbar(Status_Bar *b)
{
if( ISHELL_SetTimer(b->_shell, PROCESS_BAR_TIMER_GAP,
b->processbar_timer_cb_func, (void *)b ) == SUCCESS )
{
return TRUE;
} // end if
else
{
return FALSE;
} // end else
} // end boolean start_ticker()
// 鸥捞赣 吝瘤 窃荐
static void stop_processbar(Status_Bar *b)
{
ISHELL_CancelTimer( b->_shell,
b->processbar_timer_cb_func,
(void *)b );
b->_process_bar_position = 0;
// b->draw(b);
return;
} // end
// 橇肺技胶 官 捞悼 窃荐
static void move_processbar(Status_Bar *b)
{
ISHELL_CancelTimer( b->_shell,
b->processbar_timer_cb_func,
(void *)b );
if( b->_process_bar_position > b->_max_process_bar_width )
b->_process_bar_position = 0;
else
b->_process_bar_position += PROCESS_BAR_MOVING_GAP;
b->draw(b);
return;
} // end void Brew_Status_Bar::move_processbar()
// 惑怕 滚瓢阑 悸泼
static void set_status(Status_Bar *b, uint8 status_index, boolean is_on)
{
if( status_index > b->_status_num )
return;
b->_status[status_index] = is_on;
b->draw(b);
return;
} // end void Brew_Status_Bar::set_status()
/*******************************
* 鸥捞赣 妮归 窃荐
*******************************/
// 鸥捞赣 窃荐
static void _processbar_timer_cb_func(void * data)
{
Status_Bar * in_arg = (Status_Bar *)data;
if( in_arg == NULL )
return;
// 悼累 风凭 角青
in_arg->move_processbar(in_arg);
// 犁 角青
in_arg->start_processbar(in_arg);
return;
} // end void _processbar_timer_cb_func()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -