Ejemplo n.º 1
0
/*
 * Function    : _libaroma_ctl_fragment_window_control_draw_begin
 * Return Value: LIBAROMA_CANVASP
 * Descriptions: get canvas for child control
 */
LIBAROMA_CANVASP _libaroma_ctl_fragment_window_control_draw_begin(
  LIBAROMA_WINDOWP win,LIBAROMA_CONTROLP cctl
){
  _VALIDATE_FRAGMENT(NULL);
  if (!wind->active_state){
    return NULL;
  }
  LIBAROMA_CANVASP c=NULL;
  libaroma_mutex_lock(me->dmutex);
  if (me->on_direct_canvas){
    int x = cctl->x;
    int y = cctl->y;
    int w = cctl->w;
    int h = cctl->h;
    LIBAROMA_CANVASP ccv = libaroma_control_draw_begin(ctl);
    if (ccv){
      if ((ccv->w>x)&&(ccv->h>y)){
        c = libaroma_canvas_area(ccv,x,y,w,h);
      }
      libaroma_canvas_free(ccv);
    }
  }
  else {
    if (win->dc!=NULL){
      c = libaroma_canvas_area(
        win->dc,
        cctl->x, cctl->y, cctl->w, cctl->h
      );
    }
  }
  libaroma_mutex_unlock(me->dmutex);
  return c;
} /* End of _libaroma_ctl_fragment_window_control_draw_begin */
Ejemplo n.º 2
0
/*
 * Function    : _libaroma_ctl_pager_window_control_draw_begin
 * Return Value: LIBAROMA_CANVASP
 * Descriptions: get canvas for child control
 */
LIBAROMA_CANVASP _libaroma_ctl_pager_window_control_draw_begin(
  LIBAROMA_WINDOWP win,LIBAROMA_CONTROLP cctl
){
  LIBAROMA_CONTROLP ctl=(LIBAROMA_CONTROLP) win->client_data;
  _LIBAROMA_CTL_CHECK(
    _libaroma_ctl_pager_handler, _LIBAROMA_CTL_PAGERP, NULL
  );
  LIBAROMA_CANVASP c=NULL;
  libaroma_mutex_lock(me->mutex);
  if (!me->on_direct_canvas){
    if (win->dc==NULL){
      libaroma_mutex_unlock(me->mutex);
      return NULL;
    }
    c = libaroma_canvas_area(
      win->dc,
      cctl->x, cctl->y, cctl->w, cctl->h
    );
  }
  else{
    int xt = me->scroll_x;
    int x = cctl->x - xt;
    int y = cctl->y;
    int w = cctl->w;
    int h = cctl->h;
    LIBAROMA_CANVASP ccv = libaroma_control_draw_begin(ctl);
    if (ccv){
      if ((ccv->w>x)&&(ccv->h>y)){
        c = libaroma_canvas_area(
          ccv,x,y,w,h
        );
      }
      libaroma_canvas_free(ccv);
    }
    else{
      libaroma_mutex_unlock(me->mutex);
      return NULL;
    }
  }
  libaroma_mutex_unlock(me->mutex);
  return c;
} /* End of _libaroma_ctl_pager_window_control_draw_begin */
Ejemplo n.º 3
0
/*
 * Function    : libaroma_control_draw_begin
 * Return Value: LIBAROMA_CANVASP
 * Descriptions: begin control ondraw
 */
LIBAROMA_CANVASP libaroma_control_draw_begin(
  LIBAROMA_CONTROLP ctl){
  if (!libaroma_window_isactive(ctl->window)||
      !libaroma_control_isvisible(ctl)){
    return NULL;
  }
  LIBAROMA_WINDOWP win = ctl->window;
  if (win->handler!=NULL){
    if (win->handler->control_draw_begin!=NULL){
      return win->handler->control_draw_begin(
        win, ctl
      );
    }
  }
  if (win->dc==NULL){
    return NULL;
  }
  LIBAROMA_CANVASP c = libaroma_canvas_area(
    win->dc,
    ctl->x, ctl->y, ctl->w, ctl->h
  );
  return c;
} /* End of libaroma_control_draw_begin */
Ejemplo n.º 4
0
/*
 * Function    : _libaroma_ctl_list_draw_item_fresh
 * Return Value: void
 * Descriptions: fresh item drawing
 */
void _libaroma_ctl_list_draw_item_fresh(
  LIBAROMA_CONTROLP ctl,
  LIBAROMA_CTL_LIST_ITEMP item,
  LIBAROMA_CANVASP canvas,
  word bgcolor,
  int hpad,
  byte flag
){
  if ((!canvas)||(!item)||(!ctl)) {
    return;
  }
  
  /* cleanup */
  if (!(flag&LIBAROMA_CTL_LIST_ITEM_DRAW_ADDONS)){
    libaroma_canvas_setcolor(canvas,bgcolor,0xff);
  }
  LIBAROMA_CANVASP tcanvas=NULL;
  LIBAROMA_CANVASP ccv = canvas;
  /* have horizontal padding */
  if (hpad>0){
    tcanvas = libaroma_canvas_area(
      canvas, hpad, 0, canvas->w-hpad*2, canvas->h
    );
    if (tcanvas){
      ccv = tcanvas;
    }
  }
  /* draw directly */
  if (item->handler->draw!=NULL){
    item->handler->draw(ctl,item,ccv,bgcolor,
      flag);
  }
  if (tcanvas){
    libaroma_canvas_free(tcanvas);
  }
} /* End of _libaroma_ctl_list_draw_item_fresh */
Ejemplo n.º 5
0
/* init recovery */
byte recovery_init(){
  /* 
    snprintf(libaroma_config()->fb_shm_name,64,"recovery-mainfb");
    libaroma_config()->runtime_monitor = LIBAROMA_START_UNSAFE;
  */
  
  /* disable shared fb */
  libaroma_config()->runtime_monitor = LIBAROMA_START_UNSAFE;
  libaroma_config()->fb_shm_name[0]=0;
  
  /* start libaroma */
  if (!libaroma_start()){
    RLOG("recovery_init: libaroma_start failed");
    return 0;
  }
  
  /*
  LIBAROMA_CANVASP svg1=libaroma_image(
    libaroma_stream(
      "file:///sdcard/23.svg"
    ),
    1
  );
  if (svg1){
    libaroma_draw(libaroma_fb()->canvas,svg1,0,0,1);
    libaroma_sync();
    sleep(4);
  }
  else{
    printf("\n\nSVG RENDER ERROR\n\n\n");
  }
  */
  
  /* set workspace size */
  libaroma_wm_set_workspace(
    0,
    libaroma_dp(24),
    libaroma_fb()->w,
    libaroma_fb()->h-libaroma_dp(24)
  );
  
  /* clean display */
  libaroma_canvas_blank(libaroma_fb()->canvas);
  
  /* create statusbar canvas area */
  _recovery.status_canvas=libaroma_canvas_area(
    libaroma_fb()->canvas,
    0, 0, libaroma_fb()->w, libaroma_dp(24)
  );
  if (!_recovery.status_canvas){
    RLOG("recovery_init: _recovery.status_canvas failed");
    libaroma_end();
    return 0;
  }
  
  /* set wm ui thread */
  libaroma_wm_set_ui_thread(recovery_statusbar_ui_thread);
  recovery_statusbar_setcolor(0);
  
  /* load zip resource */
  _recovery.zip = libaroma_zip("/sdcard/recovery.zip");
  if (!_recovery.zip){
    RLOG("recovery_init: libaroma_zip resource failed");
    libaroma_canvas_free(_recovery.status_canvas);
    libaroma_end();
    return 0;
  }
  
  /* init stream callback */
  libaroma_stream_set_uri_callback(recovery_stream_uri_cb);
  
  /* load font id=0 */
  libaroma_font(0,
    libaroma_stream(
      "res:///fonts/Roboto-Regular.ttf"
    )
  );
  
  if (!recovery_init_ui()){
    recovery_release();
    return 0;
  }
  
  /* cleanup display */
  libaroma_sync();
  
  return 1;
}
Ejemplo n.º 6
0
/*
 * Function    : _libaroma_ctl_list_draw
 * Return Value: void
 * Descriptions: draw routine
 */
void _libaroma_ctl_list_draw(
    LIBAROMA_CONTROLP ctl,
    LIBAROMA_CTL_SCROLL_CLIENTP client,
    LIBAROMA_CANVASP cv,
    int x, int y, int w, int h){
  if (client->handler!=&_libaroma_ctl_list_handler){
    return;
  }
  LIBAROMA_CTL_SCROLLP mi = (LIBAROMA_CTL_SCROLLP) client->internal;
  if (y<mi->vpad){
    libaroma_draw_rect(
      cv, 0, 0, w, mi->vpad-y,
      libaroma_ctl_scroll_get_bg_color(ctl),
      0xff
    );
  }
  if (y+h>mi->h-mi->vpad){
    int dh=(y+h)-(mi->h-mi->vpad);
    libaroma_draw_rect(
      cv, 0, h-dh, w, dh,
      libaroma_ctl_scroll_get_bg_color(ctl),
      0xff
    );
  }
  
  libaroma_mutex_lock(mi->imutex);
  /* find first item */
  int current_index = 0;
  LIBAROMA_CTL_LIST_ITEMP f = mi->first;
  while(f){
    if (f->y+f->h>y){
      break;
    }
    f = f->next;
    current_index++;
  }
  
  word bgcolor = libaroma_ctl_scroll_get_bg_color(ctl);
  
  /* draw routine */
  LIBAROMA_CTL_LIST_ITEMP item = f;
  while(item){
    if (item->y>=y+h){
      break;
    }
    LIBAROMA_CANVASP canvas=NULL;
    byte is_area=0;
    if ((item->y>=y)&&(item->y+item->h<y+cv->h)){
      canvas = libaroma_canvas_area(cv,0,item->y-y,w,item->h);
      is_area=1;
    }
    else{
      canvas = libaroma_canvas(w,item->h);
    }
    if (canvas!=NULL){
      _libaroma_ctl_list_draw_item(
        ctl, item, canvas, bgcolor
      );
      
      /* blit into working canvas */
      if (!is_area){
        libaroma_draw(cv,canvas,0,item->y-y,0);
      }
      libaroma_canvas_free(canvas);
    }
    item=item->next;
    current_index++;
  }
  libaroma_mutex_unlock(mi->imutex);
} /* End of _libaroma_ctl_list_draw */