コード例 #1
0
ファイル: m2elalign.c プロジェクト: buzali/SuperListas
uint8_t m2_el_align_fn(m2_el_fnarg_p fn_arg)
{
  switch(fn_arg->msg)
  {
    case M2_EL_MSG_GET_LIST_LEN:
      return 1;
    case M2_EL_MSG_IS_AUTO_SKIP:
      return 1;      
    case M2_EL_MSG_GET_LIST_ELEMENT:
      *((m2_rom_void_p *)(fn_arg->data)) = m2_el_align_get_element(fn_arg);
      return 1;
    case M2_EL_MSG_GET_LIST_BOX:
      ((m2_pcbox_p)(fn_arg->data))->c.y = m2_align_get_pos(fn_arg, 1, m2_opt_get_val(m2_el_fnfmt_get_fmt(fn_arg), '|'));
      ((m2_pcbox_p)(fn_arg->data))->c.x = m2_align_get_pos(fn_arg, 0, m2_opt_get_val(m2_el_fnfmt_get_fmt(fn_arg), '-'));
      ((m2_pcbox_p)(fn_arg->data))->c.y += ((m2_pcbox_p)(fn_arg->data))->p.y; 
      ((m2_pcbox_p)(fn_arg->data))->c.x += ((m2_pcbox_p)(fn_arg->data))->p.x; 
      return 1; /* element is always visible */
    case M2_EL_MSG_GET_HEIGHT:
      return m2_align_get_new_size(fn_arg, 1);
    case M2_EL_MSG_GET_WIDTH:
      return m2_align_get_new_size(fn_arg, 0);
#ifdef M2_EL_MSG_DBG_SHOW
    case M2_EL_MSG_DBG_SHOW:
      {
	uint8_t h, w;
	h = m2_align_get_new_size(fn_arg, 1);
	w = m2_align_get_new_size(fn_arg, 0);
	printf("align w:%d h:%d arg:%d \n", w, h, fn_arg->arg);
      }
      break;
#endif
      /* additional  border removed
    case M2_EL_MSG_SHOW:
      if ( fn_arg->arg > 0 )
      {
	uint8_t h, w;
	h = m2_align_get_new_size(fn_arg, 1);
	w = m2_align_get_new_size(fn_arg, 0);
	m2_pos_p b = (m2_pos_p)(fn_arg->data);
	m2_gfx_box(m2_gfx_add_normal_border_x(b->x), m2_gfx_add_normal_border_y(b->y), w, h);
      }
      return 1;
      */
  }
  return m2_el_fnfmt_fn(fn_arg);
}
コード例 #2
0
ファイル: m2els8num.c プロジェクト: AdamRLukaitis/martink
static M2_EL_FN_DEF(m2_el_s8num_sub_fn)
{
  uint8_t digits;
  uint8_t width;
  uint8_t font;

  font = m2_el_fmfmt_get_font(fn_arg);

  /* maybe the width is needed, precalculate the pixel width */
  
  /* get number of digits to show */
  digits = m2_opt_get_val_any_default(m2_el_fnfmt_get_fmt(fn_arg), 'c', 3);

  /* calculate pixel width */
  width = digits;
  width++;	/* add one char for the sign */
  width *= m2_gfx_get_num_char_width(font);

  switch(fn_arg->msg)
  {
    case M2_EL_MSG_GET_HEIGHT:
      return m2_gfx_add_normal_border_height(font, m2_gfx_get_char_height(font));
    case M2_EL_MSG_GET_WIDTH:
      return m2_gfx_add_normal_border_width(font, width);
#ifdef M2_EL_MSG_DBG_SHOW
    case M2_EL_MSG_DBG_SHOW:
      {
	m2_pos_p b = (m2_pos_p)(fn_arg->data);
	printf("u8  w:%d arg:%d x:%d y:%d %u\n", 
	  width, 
	  (fn_arg->arg), b->x, b->y, (unsigned)m2_el_s8_get_val(fn_arg));
      }
      return 0;
#endif
    case M2_EL_MSG_SHOW:
    {
	m2_pos_p b = (m2_pos_p)(fn_arg->data);
	if ( m2_is_frame_draw_at_end == 0 )
	  m2_el_s8base_fn(fn_arg);
	
	m2_gfx_draw_text_add_normal_border_offset(b->x, b->y, 0, 0, font, m2_utl_s8d(m2_el_s8_get_val(fn_arg), digits, m2_el_fmfmt_opt_get_val_zero_default(fn_arg, '+')));
	
	if ( m2_is_frame_draw_at_end != 0 )
	  m2_el_s8base_fn(fn_arg);
      }
      return 1;
  }
  return m2_el_s8base_fn(fn_arg);
}