void get_scaled_rect(rect_t *rc_tvsrc, rect_t *rc_icon)
{
  double scale;
  u16 half_width, half_height;
  u16 full_width, full_height;
  s16 offset;
  u16 width, height;

  scale = g_zoom_scale[g_zoom_curn];

  full_width = (u16)(ZOOM_BOUND_W / scale);
  full_height = (u16)(ZOOM_BOUND_H / scale);
  half_width = full_width / 2;
  half_height = full_height / 2;

  if(g_zoom_center.x < half_width)
  {
    g_zoom_center.x = half_width;
  }
  if(g_zoom_center.x > ZOOM_BOUND_W - half_width)
  {
    g_zoom_center.x = ZOOM_BOUND_W - half_width;
  }
  if(g_zoom_center.y < half_height)
  {
    g_zoom_center.y = half_height;
  }
  if(g_zoom_center.y > ZOOM_BOUND_H - half_height)
  {
    g_zoom_center.y = ZOOM_BOUND_H - half_height;
  }

  rc_icon->left = ZOOM_BOUND_X + (g_zoom_center.x - half_width);
  rc_icon->top = ZOOM_BOUND_Y + (g_zoom_center.y - half_height);
  rc_icon->right = rc_icon->left + full_width;
  rc_icon->bottom = rc_icon->top + full_height;

  offset = (ZOOM_BOUND_X + ZOOM_BOUND_W) - rc_icon->right;
  if(offset < 0)
  {
    offset_rect(rc_icon, offset, 0);
  }
  offset = (ZOOM_BOUND_Y + ZOOM_BOUND_H) - rc_icon->bottom;
  if(offset < 0)
  {
    offset_rect(rc_icon, 0, offset);
  }
  width = g_tvsrc_fullrc.right - g_tvsrc_fullrc.left + 1;
  height = g_tvsrc_fullrc.bottom - g_tvsrc_fullrc.top + 1;
  rc_tvsrc->left = g_tvsrc_fullrc.left + (rc_icon->left - ZOOM_BOUND_X) * width / ZOOM_BOUND_W;
  rc_tvsrc->top = g_tvsrc_fullrc.top + (rc_icon->top - ZOOM_BOUND_Y) * height / ZOOM_BOUND_H;
  rc_tvsrc->right = (full_width * width / ZOOM_BOUND_W) + rc_tvsrc->left - 1;
  rc_tvsrc->bottom = (full_height * height / ZOOM_BOUND_H) + rc_tvsrc->top - 1;
}
Example #2
0
BOOL intersect_vis_rectangles( struct bitblt_coords *dst, struct bitblt_coords *src )
{
    RECT rect;

    /* intersect the rectangles */

    if ((src->width == dst->width) && (src->height == dst->height)) /* no stretching */
    {
        offset_rect( &src->visrect, dst->x - src->x, dst->y - src->y );
        if (!intersect_rect( &rect, &src->visrect, &dst->visrect )) return FALSE;
        src->visrect = dst->visrect = rect;
        offset_rect( &src->visrect, src->x - dst->x, src->y - dst->y );
    }
    else  /* stretching */
    {
        /* map source rectangle into destination coordinates */
        rect = src->visrect;
        offset_rect( &rect, -min( src->x, src->x + src->width + 1),
                     -min( src->y, src->y + src->height + 1) );
        rect.left   = dst->x + rect.left * dst->width / abs(src->width);
        rect.top    = dst->y + rect.top * dst->height / abs(src->height);
        rect.right  = dst->x + rect.right * dst->width / abs(src->width);
        rect.bottom = dst->y + rect.bottom * dst->height / abs(src->height);
        if (rect.left > rect.right) swap_ints( &rect.left, &rect.right );
        if (rect.top > rect.bottom) swap_ints( &rect.top, &rect.bottom );

        /* avoid rounding errors */
        rect.left--;
        rect.top--;
        rect.right++;
        rect.bottom++;
        if (!intersect_rect( &dst->visrect, &rect, &dst->visrect )) return FALSE;

        /* map destination rectangle back to source coordinates */
        rect = dst->visrect;
        offset_rect( &rect, -min( dst->x, dst->x + dst->width + 1),
                     -min( dst->y, dst->y + dst->height + 1) );
        rect.left   = src->x + rect.left * src->width / abs(dst->width);
        rect.top    = src->y + rect.top * src->height / abs(dst->height);
        rect.right  = src->x + rect.right * src->width / abs(dst->width);
        rect.bottom = src->y + rect.bottom * src->height / abs(dst->height);
        if (rect.left > rect.right) swap_ints( &rect.left, &rect.right );
        if (rect.top > rect.bottom) swap_ints( &rect.top, &rect.bottom );

        /* avoid rounding errors */
        rect.left--;
        rect.top--;
        rect.right++;
        rect.bottom++;
        if (!intersect_rect( &src->visrect, &rect, &src->visrect )) return FALSE;
    }
    return TRUE;
}
/*!
  offsets the region.
  */
void gdi_offset_cliprgn(cliprgn_t *p_rgn, s16 x, s16 y)
{
  cliprc_t *p_crc = p_rgn->p_head;

  while(p_crc != NULL)
  {
    offset_rect(&p_crc->rc, x, y);
    p_crc = p_crc->p_next;
  }

  if(NULL != (p_rgn->p_head))
  {
    offset_rect(&p_rgn->bound, x, y);
  }
}
Example #4
0
File: dc.c Project: Barrell/wine
DWORD convert_bitmapinfo( const BITMAPINFO *src_info, void *src_bits, struct bitblt_coords *src,
                          const BITMAPINFO *dst_info, void *dst_bits )
{
    dib_info src_dib, dst_dib;
    DWORD ret;

    init_dib_info_from_bitmapinfo( &src_dib, src_info, src_bits );
    init_dib_info_from_bitmapinfo( &dst_dib, dst_info, dst_bits );

    __TRY
    {
        dst_dib.funcs->convert_to( &dst_dib, &src_dib, &src->visrect, FALSE );
        ret = TRUE;
    }
    __EXCEPT_PAGE_FAULT
    {
        WARN( "invalid bits pointer %p\n", src_bits );
        ret = FALSE;
    }
    __ENDTRY

    if(!ret) return ERROR_BAD_FORMAT;

    /* update coordinates, the destination rectangle is always stored at 0,0 */
    src->x -= src->visrect.left;
    src->y -= src->visrect.top;
    offset_rect( &src->visrect, -src->visrect.left, -src->visrect.top );
    return ERROR_SUCCESS;
}
Example #5
0
void button::draw(sdl_surface & screen)
{
    surface_region & reg = m_hot ? m_res.bg_hot : m_res.bg;
    SDL_BlitSurface(reg.surface, &reg.src, screen, &m_pos);
    rect fg_dst = offset_rect(m_pos, point(7,8));
    SDL_BlitSurface(m_res.fg.surface, &m_res.fg.src, screen, &fg_dst);
}
Example #6
0
static void recalc_children_invrgn(control_t *p_ctrl,
                                   BOOL is_add,
                                   const rect_t *p_rc_in_parent)
{
  rect_t rc_client, rc_frame, rc_parent;

  while(p_ctrl != NULL)
  {
    if(p_ctrl->attr != OBJ_ATTR_HIDDEN)
    {
      rc_parent = *p_rc_in_parent;
      ctrl_get_frame(p_ctrl, &rc_frame);

      if(intersect_rect(&rc_parent, &rc_parent, &rc_frame))
      {
        offset_rect(&rc_parent, (s16)(0 - p_ctrl->frame.left),
                    (s16)(0 - p_ctrl->frame.top));
        ctrl_get_client_rect(p_ctrl, &rc_client);
        update_invrgn_by_rect(&p_ctrl->invrgn_info,
                              is_add,
                              &rc_parent,
                              &rc_client);

        if(p_ctrl->p_child != NULL)
        {
          recalc_children_invrgn(p_ctrl->p_child, is_add, &rc_parent);
        }
      }
    }

    p_ctrl = p_ctrl->p_next;
  }
}
Example #7
0
void ui_config_normal_osd(void)
{
  rect_t rc_scr = 
    { 0, 0,
      SCREEN_WIDTH,
      SCREEN_HEIGHT };

  s16 x, y;
  disp_sys_t video_std = 0;
  video_std = avc_get_video_mode_1(class_get_handle_by_id(AVC_CLASS_ID));
  switch (video_std)
  { 
    case VID_SYS_NTSC_J:
    case VID_SYS_NTSC_M:
    case VID_SYS_NTSC_443:
    case VID_SYS_PAL_M:
      x = SCREEN_POS_NTSC_L;
      y = SCREEN_POS_NTSC_T;
      break;
    default:
      x = SCREEN_POS_PAL_L;
      y = SCREEN_POS_PAL_T;
  }

  offset_rect(&rc_scr, x, y);
  _config_osd(&rc_scr);
}
Example #8
0
File: dc.c Project: Barrell/wine
void dibdrv_set_window_surface( DC *dc, struct window_surface *surface )
{
    char buffer[FIELD_OFFSET( BITMAPINFO, bmiColors[256] )];
    BITMAPINFO *info = (BITMAPINFO *)buffer;
    RECT rect;
    void *bits;
    PHYSDEV windev;
    struct windrv_physdev *physdev;
    struct dibdrv_physdev *dibdrv;

    TRACE( "%p %p\n", dc->hSelf, surface );

    windev = pop_dc_driver( dc, &window_driver );

    if (surface)
    {
        if (windev) push_dc_driver( &dc->physDev, windev, windev->funcs );
        else
        {
            if (!window_driver.pCreateDC( &dc->physDev, NULL, NULL, NULL, NULL )) return;
            windev = find_dc_driver( dc, &window_driver );
        }

        physdev = get_windrv_physdev( windev );
        window_surface_add_ref( surface );
        if (physdev->surface) window_surface_release( physdev->surface );
        physdev->surface = surface;

        dibdrv = physdev->dibdrv;
        bits = surface->funcs->get_info( surface, info );
        init_dib_info_from_bitmapinfo( &dibdrv->dib, info, bits );
        /* clip the device rect to the surface */
        rect = surface->rect;
        offset_rect( &rect, dc->device_rect.left, dc->device_rect.top );
        intersect_rect( &dc->device_rect, &dc->device_rect, &rect );
        dibdrv->dib.rect = dc->vis_rect;
        offset_rect( &dibdrv->dib.rect, -rect.left, -rect.top );
        dibdrv->bounds = surface->funcs->get_bounds( surface );
        DC_InitDC( dc );
    }
    else if (windev)
    {
        dib_driver.pDeleteDC( pop_dc_driver( dc, &dib_driver ));
        windev->funcs->pDeleteDC( windev );
        DC_InitDC( dc );
    }
}
gboolean cw_picture_window_draw(GtkWidget *widget,
		cairo_t *cr,
		gpointer user_data)
{
	CWPictureWindowPrivate* priv = CW_PICTURE_WINDOW_GET_PRIVATE(widget);
	if (NULL == priv || NULL == priv->store_item)
		return TRUE;

	GdkRectangle window_rect = {
		0,
		0,
		gtk_widget_get_allocated_width(widget),
		gtk_widget_get_allocated_height(widget)
	};

	int pw, ph;
	cw_store_item_get_image_size(priv->store_item, &pw, &ph);
	GdkRectangle image_rect = { 0, 0, pw, ph};

	double scale = site_picture_rect(&window_rect, &image_rect);

	GdkRectangle shadow_rect;
	calc_shadow_rect(&image_rect, &shadow_rect);
	offset_rect(&shadow_rect,
			get_image_shadow_offset_x(),
			get_image_shadow_offset_y());

	draw_shadow_rgba(cr, shadow_rect, get_image_shadow_radius(), SHADOW_TRANSPARENT);

	cairo_rectangle(
			cr, image_rect.x, image_rect.y,
			image_rect.width,
			image_rect.height);

	cairo_set_source_rgba(cr, 1, 1, 1, 1);
	cairo_fill(cr);

	offset_rect(&image_rect, get_image_border_size(), get_image_border_size());
	cairo_translate(cr, image_rect.x, image_rect.y);
	cairo_scale(cr, scale, scale);
	gdk_cairo_set_source_pixbuf(cr,
			cw_store_item_get_pixbuf(priv->store_item), 0, 0);
	cairo_paint(cr);

	return TRUE;
}
Example #10
0
void
RoomContainer::_DrawSearchMap(GFX::rect visibleArea)
{
	if ((fSearchMap != NULL && fDrawSearchMap > 0)) {

		GFX::rect destRect(0, AreaRect().h - fSearchMap->Height(),
						AreaRect().w, AreaRect().h);

		GraphicsEngine::Get()->BlitToScreen(fSearchMap, NULL, &destRect);

		visibleArea.x /= fMapHorizontalRatio;
		visibleArea.y /= fMapVerticalRatio;
		visibleArea.w /= fMapHorizontalRatio;
		visibleArea.h /= fMapVerticalRatio;
		visibleArea = offset_rect(visibleArea, 0, AreaRect().h - fSearchMap->Height());
		GraphicsEngine::Get()->ScreenBitmap()->StrokeRect(visibleArea, 500);
	}
}
Example #11
0
DWORD convert_bitmapinfo( const BITMAPINFO *src_info, void *src_bits, struct bitblt_coords *src,
                          const BITMAPINFO *dst_info, void *dst_bits, BOOL add_alpha )
{
    dib_info src_dib, dst_dib;
    DWORD ret;

    if ( !init_dib_info_from_bitmapinfo( &src_dib, src_info, src_bits, 0 ) )
        return ERROR_BAD_FORMAT;
    if ( !init_dib_info_from_bitmapinfo( &dst_dib, dst_info, dst_bits, 0 ) )
        return ERROR_BAD_FORMAT;

    __TRY
    {
        dst_dib.funcs->convert_to( &dst_dib, &src_dib, &src->visrect );
        ret = TRUE;
    }
    __EXCEPT_PAGE_FAULT
    {
        WARN( "invalid bits pointer %p\n", src_bits );
        ret = FALSE;
    }
    __ENDTRY

    /* We shared the color tables, so there's no need to free the dib_infos here */
    if(!ret) return ERROR_BAD_FORMAT;

    /* update coordinates, the destination rectangle is always stored at 0,0 */
    src->x -= src->visrect.left;
    src->y -= src->visrect.top;
    offset_rect( &src->visrect, -src->visrect.left, -src->visrect.top );

    if (add_alpha && dst_dib.funcs == &funcs_8888 && src_dib.funcs != &funcs_8888)
    {
        DWORD *pixel = dst_dib.bits.ptr;
        int x, y;

        for (y = src->visrect.top; y < src->visrect.bottom; y++, pixel += dst_dib.stride / 4)
            for (x = src->visrect.left; x < src->visrect.right; x++)
                pixel[x] |= 0xff000000;
    }

    return ERROR_SUCCESS;
}
Example #12
0
File: dc.c Project: Barrell/wine
void add_clipped_bounds( dibdrv_physdev *dev, const RECT *rect, HRGN clip )
{
    const WINEREGION *region;
    RECT rc;

    if (!dev->bounds) return;
    if (clip)
    {
        if (!(region = get_wine_region( clip ))) return;
        if (!rect) rc = region->extents;
        else intersect_rect( &rc, rect, &region->extents );
        release_wine_region( clip );
    }
    else rc = *rect;

    if (is_rect_empty( &rc )) return;
    offset_rect( &rc, dev->dib.rect.left, dev->dib.rect.top );
    add_bounds_rect( dev->bounds, &rc );
}
Example #13
0
void
RoomContainer::DrawObject(const Bitmap* bitmap, const IE::point& point, bool mask)
{
	if (bitmap == NULL)
		return;

	IE::point leftTop = offset_point(point,
							-(bitmap->Frame().x + bitmap->Frame().w / 2),
							-(bitmap->Frame().y + bitmap->Frame().h / 2));

	GFX::rect rect(leftTop.x, leftTop.y, bitmap->Width(), bitmap->Height());

	if (rects_intersect(fMapArea, rect)) {
		GFX::rect offsetRect = offset_rect(rect, -fAreaOffset.x, -fAreaOffset.y);
		if (mask)
			GraphicsEngine::BlitBitmapWithMask(bitmap, NULL,
					fBackMap->Image(), &offsetRect, fBlitMask, &rect);
		else
			GraphicsEngine::BlitBitmap(bitmap, NULL, fBackMap->Image(), &offsetRect);
	}
}
Example #14
0
BOOL nulldrv_GradientFill( PHYSDEV dev, TRIVERTEX *vert_array, ULONG nvert,
                           void * grad_array, ULONG ngrad, ULONG mode )
{
    DC *dc = get_nulldrv_dc( dev );
    char buffer[FIELD_OFFSET( BITMAPINFO, bmiColors[256] )];
    BITMAPINFO *info = (BITMAPINFO *)buffer;
    struct bitblt_coords src, dst;
    struct gdi_image_bits bits;
    unsigned int i;
    POINT *pts;
    BOOL ret = FALSE;
    DWORD err;
    HRGN rgn;

    if (!(pts = HeapAlloc( GetProcessHeap(), 0, nvert * sizeof(*pts) ))) return FALSE;
    for (i = 0; i < nvert; i++)
    {
        pts[i].x = vert_array[i].x;
        pts[i].y = vert_array[i].y;
    }
    LPtoDP( dev->hdc, pts, nvert );

    /* compute bounding rect of all the rectangles/triangles */
    reset_bounds( &dst.visrect );
    for (i = 0; i < ngrad * (mode == GRADIENT_FILL_TRIANGLE ? 3 : 2); i++)
    {
        ULONG v = ((ULONG *)grad_array)[i];
        dst.visrect.left   = min( dst.visrect.left,   pts[v].x );
        dst.visrect.top    = min( dst.visrect.top,    pts[v].y );
        dst.visrect.right  = max( dst.visrect.right,  pts[v].x );
        dst.visrect.bottom = max( dst.visrect.bottom, pts[v].y );
    }

    dst.x = dst.visrect.left;
    dst.y = dst.visrect.top;
    dst.width = dst.visrect.right - dst.visrect.left;
    dst.height = dst.visrect.bottom - dst.visrect.top;
    if (!clip_visrect( dc, &dst.visrect, &dst.visrect )) goto done;

    /* query the bitmap format */
    info->bmiHeader.biSize          = sizeof(info->bmiHeader);
    info->bmiHeader.biPlanes        = 1;
    info->bmiHeader.biBitCount      = 0;
    info->bmiHeader.biCompression   = BI_RGB;
    info->bmiHeader.biXPelsPerMeter = 0;
    info->bmiHeader.biYPelsPerMeter = 0;
    info->bmiHeader.biClrUsed       = 0;
    info->bmiHeader.biClrImportant  = 0;
    info->bmiHeader.biWidth         = dst.visrect.right - dst.visrect.left;
    info->bmiHeader.biHeight        = dst.visrect.bottom - dst.visrect.top;
    info->bmiHeader.biSizeImage     = 0;
    dev = GET_DC_PHYSDEV( dc, pPutImage );
    err = dev->funcs->pPutImage( dev, 0, info, NULL, NULL, NULL, 0 );
    if (err && err != ERROR_BAD_FORMAT) goto done;

    info->bmiHeader.biSizeImage = get_dib_image_size( info );
    if (!(bits.ptr = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, info->bmiHeader.biSizeImage )))
        goto done;
    bits.is_copy = TRUE;
    bits.free = free_heap_bits;

    /* make src and points relative to the bitmap */
    src = dst;
    src.x -= dst.visrect.left;
    src.y -= dst.visrect.top;
    offset_rect( &src.visrect, -dst.visrect.left, -dst.visrect.top );
    for (i = 0; i < nvert; i++)
    {
        pts[i].x -= dst.visrect.left;
        pts[i].y -= dst.visrect.top;
    }

    rgn = CreateRectRgn( 0, 0, 0, 0 );
    gradient_bitmapinfo( info, bits.ptr, vert_array, nvert, grad_array, ngrad, mode, pts, rgn );
    OffsetRgn( rgn, dst.visrect.left, dst.visrect.top );
    ret = !dev->funcs->pPutImage( dev, rgn, info, &bits, &src, &dst, SRCCOPY );

    if (bits.free) bits.free( &bits );
    DeleteObject( rgn );

done:
    HeapFree( GetProcessHeap(), 0, pts );
    return ret;
}
static BOOL news_update_pic()
{ 
  news_t *p_news = NULL;
  mul_pic_param_t pic_param = {{0},};
  u8 i;
  control_t *p_icont = NULL, *p_item = NULL, *p_page_cont = NULL, *p_page_title = NULL, 
            *p_text = NULL, *p_cont = NULL, *p_page = NULL, *p_help = NULL;
  u16 curn_page = 0, total_page = 0;
  u32 total_vod = 0;
  //u8 i = 0;
  
  p_news = ui_news_get_news();

  total_vod = p_news->count;
  
  p_cont = fw_find_root_by_id(ROOT_ID_NEWS_TITLE);
  if(p_news == NULL)
  {
    return ERR_FAILURE;
  }

  g_news_load_curn = 0;
  
  for(; g_news_load_curn < NEWS_ITEM_PAGE && g_show_curn + g_news_load_curn < p_news->count; 
      g_news_load_curn ++)
  {
    if(p_news->p_item[g_show_curn + g_news_load_curn].media_content.p_url == NULL)
    {
      continue;
    }

    ui_pic_set_url((u8*)p_news->p_item[g_show_curn + g_news_load_curn].media_content.p_url);

    pic_param.anim = REND_ANIM_NONE;
    pic_param.style = REND_STYLE_CENTER;
    pic_param.flip = PIC_NO_F_NO_R;
    pic_param.win_rect.left = NEWS_ITEM_PREWX;
    pic_param.win_rect.top = NEWS_ITEM_PREWY;
    pic_param.win_rect.right = (pic_param.win_rect.left + NEWS_ITEM_PREWW);
    pic_param.win_rect.bottom = (pic_param.win_rect.top + NEWS_ITEM_PREWH);
    pic_param.file_size = 0;
    pic_param.handle = 0;

    offset_rect(&pic_param.win_rect, NEWS_ITEM_X, (s16)(NEWS_ITEM_Y + g_news_load_curn * (NEWS_ITEM_H + NEWS_VGAP)));
    offset_rect(&pic_param.win_rect, NEWS_ICONT_X, NEWS_ICONT_Y);
    offset_rect(&pic_param.win_rect, NEWS_CONT_X, NEWS_CONT_Y);
    
    pic_start(&pic_param); 
    break;
  }
  for(i = 0; 
      i < NEWS_ITEM_PAGE && g_show_curn + i < p_news->count; 
      i ++ )
  {
    //set text
    p_icont = ctrl_get_child_by_id(p_cont, IDC_NEWS_ICONT);
    p_item = ctrl_get_child_by_id(p_icont, IDC_NEWS_ITEM1 + i);
    p_text = ctrl_get_child_by_id(p_item, IDC_NEWS_ITEM_TEXT);
    if(p_news->p_item[g_show_curn + i].p_title != NULL)
    {
      text_set_content_by_ascstr(p_text, (u8*)p_news->p_item[g_show_curn + i].p_title);
    }
    else
    {
      text_set_content_by_ascstr(p_text, (u8*)"No content.");
    }

    ctrl_paint_ctrl(p_icont, TRUE);
  }
      //update item text.
  p_page_cont = ctrl_get_child_by_id(p_cont, IDC_NEWS_TITLE_CONT);  
  p_page_title = ctrl_get_child_by_id(p_page_cont, IDC_NEWS_TITLE);
  p_page = ctrl_get_child_by_id(p_page_title, IDC_NEWS_PAGE_NUM);
  curn_page = g_show_curn / NEWS_ITEM_PAGE + 1; 
  if(total_vod != 0&&total_vod % NEWS_ITEM_PAGE == 0)
  {
    total_page = (u16)(total_vod / NEWS_ITEM_PAGE);
  }
  else
  {
    total_page = (u16)(total_vod / NEWS_ITEM_PAGE + 1);
  }

  news_update_page_num(p_page, curn_page, total_page);

  ctrl_paint_ctrl(p_page, TRUE);

  p_help = ctrl_get_child_by_id(p_cont, IDC_COMM_HELP_CONT);
  ctrl_destroy_ctrl(p_help);

  ui_comm_help_create_net(&help_data, p_cont);
  //ui_comm_help_move_pos(p_cont, 100, 40, 880, 0, 40);
  ui_comm_help_move_pos(p_cont, 100, (u16)-60, 880, 0, 40);
  //ctrl_add_rect_to_invrgn(p_help, NULL);
  g_news_load_curn ++;
  return SUCCESS;
}
static RET_CODE news_draw_end(control_t *p_cont, u16 msg, u32 para1, u32 para2)
{ 
  news_t *p_news = NULL;
  mul_pic_param_t pic_param = {{0},};
  control_t *p_icont = NULL, *p_item = NULL, *p_bmp = NULL;

  p_icont = ctrl_get_child_by_id(p_cont, IDC_NEWS_ICONT);
  p_item = ctrl_get_child_by_id(p_icont, (u16)(IDC_NEWS_ITEM1 + para1));
  p_bmp = ctrl_get_child_by_id(p_item, IDC_NEWS_ITEM_BMP);

  if(fw_get_focus_id() != ROOT_ID_NEWS_TITLE)
  {
    return ERR_FAILURE;
  }  

  p_news = ui_news_get_news();

  if(p_news == NULL)
  {
    return ERR_FAILURE;
  }

  if(para1 > p_news->count)
  {
    return ERR_FAILURE;
  }

  if((para1 + 1) >= p_news->count)
  {
    return ERR_FAILURE;
  }

  if(g_news_load_curn >= NEWS_ITEM_PAGE)
  {
    return ERR_FAILURE;
  }

  if(g_news_load_curn >= p_news->count)
  {
    return ERR_FAILURE;
  } 
  
  for(; g_news_load_curn < NEWS_ITEM_PAGE && g_show_curn + g_news_load_curn < p_news->count; 
      g_news_load_curn ++)
  {
    if(p_news->p_item[g_show_curn + g_news_load_curn].media_content.p_url == NULL)
    {
      continue;
    }

    pic_stop();
    
    ui_pic_set_url((u8*)p_news->p_item[g_news_load_curn +g_show_curn ].media_content.p_url);
    OS_PRINTF("pic url = [%s]\n",p_news->p_item[g_show_curn + g_news_load_curn].media_content.p_url);

    pic_param.anim = REND_ANIM_NONE;
    pic_param.style = REND_STYLE_CENTER;
    pic_param.flip = PIC_NO_F_NO_R;
    pic_param.win_rect.left = NEWS_ITEM_PREWX;
    pic_param.win_rect.top = NEWS_ITEM_PREWY;
    pic_param.win_rect.right = (pic_param.win_rect.left + NEWS_ITEM_PREWW);
    pic_param.win_rect.bottom = (pic_param.win_rect.top + NEWS_ITEM_PREWH);
    pic_param.file_size = 0;
    pic_param.handle = para1 + 1;

    offset_rect(&pic_param.win_rect, NEWS_ITEM_X, (u16)(NEWS_ITEM_Y + g_news_load_curn * (NEWS_ITEM_H + NEWS_VGAP)));
    offset_rect(&pic_param.win_rect, NEWS_ICONT_X, NEWS_ICONT_Y);
    offset_rect(&pic_param.win_rect, NEWS_CONT_X, NEWS_CONT_Y);
    
    bmap_set_content_by_id(p_bmp, RSC_INVALID_ID);
    ctrl_paint_ctrl(p_item, TRUE);
    
    pic_start(&pic_param);  
    break;
  }

  g_news_load_curn ++;

  return SUCCESS;
}
Example #17
0
void
RoomContainer::Draw(Bitmap *surface)
{
	GraphicsEngine* gfx = GraphicsEngine::Get();

	if (fWorldMap != NULL) {
		GFX::rect sourceRect = offset_rect(fViewPort,
				-fViewPort.x, -fViewPort.y);
		sourceRect = offset_rect(sourceRect, fAreaOffset.x, fAreaOffset.y);
		if (sourceRect.w < gfx->ScreenFrame().w || sourceRect.h < gfx->ScreenFrame().h) {
			GFX::rect clippingRect = fViewPort;
			clippingRect.w = gfx->ScreenFrame().w;
			clippingRect.h = gfx->ScreenFrame().h;
			gfx->SetClipping(&clippingRect);
			gfx->ScreenBitmap()->Clear(0);
			gfx->SetClipping(NULL);
		}
		gfx->BlitToScreen(fWorldMapBitmap, &sourceRect, &fViewPort);
	} else {
		if (sSelectedActorRadius > 22) {
			sSelectedActorRadiusStep = -1;
		} else if (sSelectedActorRadius < 18) {
			sSelectedActorRadiusStep = 1;
		}
		sSelectedActorRadius += sSelectedActorRadiusStep;

		GFX::rect mapRect = offset_rect_to(fViewPort,
				fAreaOffset.x, fAreaOffset.y);

		bool paused = Core::Get()->IsPaused();
		if (!paused) {
			assert(fBackMap != NULL);
			fBackMap->Update(mapRect);
		}

		if (fDrawAnimations) {
			Timer* timer = Timer::Get("ANIMATIONS");
			bool advance = timer != NULL && timer->Expired() && !paused;
			_DrawAnimations(advance);
		}
		_DrawActors();

		if (fDrawPolygons) {
			fBackMap->Image()->Lock();
			for (uint32 p = 0; p < fWed->CountPolygons(); p++) {
				const Polygon* poly = fWed->PolygonAt(p);
				if (poly != NULL && poly->CountPoints() > 0) {
					if (rects_intersect(poly->Frame(), mapRect)) {
						uint32 color = 0;
						if (poly->Flags() & IE::POLY_SHADE_WALL)
							color = 200;
						else if (poly->Flags() & IE::POLY_HOVERING)
							color = 500;
						else if (poly->Flags() & IE::POLY_COVER_ANIMATIONS)
							color = 1000;

						fBackMap->Image()->FillPolygon(*poly, color,
											-fAreaOffset.x, -fAreaOffset.y);
						fBackMap->Image()->StrokePolygon(*poly, color,
											-fAreaOffset.x, -fAreaOffset.y);
					}
				}
			}
			fBackMap->Image()->Unlock();
		}

		// TODO: handle this better
		if (Door* door = dynamic_cast<Door*>(fMouseOverObject.Target())) {
			GFX::rect rect = rect_to_gfx_rect(door->Frame());
			rect = offset_rect(rect, -mapRect.x, -mapRect.y);
			fBackMap->Image()->Lock();
			fBackMap->Image()->StrokeRect(rect, 70);
			fBackMap->Image()->Unlock();
		} else if (Actor* actor = dynamic_cast<Actor*>(fMouseOverObject.Target())) {
			try {
				GFX::rect rect = rect_to_gfx_rect(actor->Frame());
				rect = offset_rect(rect, -mapRect.x, -mapRect.y);
				fBackMap->Image()->Lock();
				IE::point position = offset_point(actor->Position(), -mapRect.x, -mapRect.y);
				uint32 color = fBackMap->Image()->MapColor(255, 255, 255);
				fBackMap->Image()->StrokeCircle(position.x, position.y, 20, color);
				fBackMap->Image()->Unlock();
			} catch (const char* string) {
				std::cerr << string << std::endl;
			} catch (...) {

			}
		} else if (Region* region = dynamic_cast<Region*>(fMouseOverObject.Target())) {
			GFX::rect rect = rect_to_gfx_rect(region->Frame());
			rect = offset_rect(rect, -mapRect.x, -mapRect.y);

			uint32 color = 0;
			switch (region->Type()) {
				case IE::REGION_TYPE_TRAVEL:
					color = fBackMap->Image()->MapColor(0, 125, 0);
					break;
				case IE::REGION_TYPE_TRIGGER:
					color = fBackMap->Image()->MapColor(125, 0, 0);
					break;
				default:
					color = fBackMap->Image()->MapColor(255, 255, 255);
					break;
			}

			fBackMap->Image()->Lock();

			if (region->Polygon().CountPoints() > 2) {
				fBackMap->Image()->StrokePolygon(region->Polygon(), color,
									-mapRect.x, -mapRect.y);
			} else
				fBackMap->Image()->StrokeRect(rect, color);
			fBackMap->Image()->Unlock();
		} else if (Container* container = dynamic_cast<Container*>(fMouseOverObject.Target())) {
			uint32 color = 0;
			color = fBackMap->Image()->MapColor(0, 125, 0);
			// TODO: Different colors for trapped/nontrapped
			fBackMap->Image()->Lock();

			if (container->Polygon().CountPoints() > 2) {
				fBackMap->Image()->StrokePolygon(container->Polygon(), color,
											-mapRect.x, -mapRect.y);
			}
			fBackMap->Image()->Unlock();
		}

		gfx->BlitToScreen(fBackMap->Image(), NULL, &fViewPort);
		_DrawSearchMap(mapRect);
	}
}
Example #18
0
/* return the DC device rectangle if not empty */
static inline BOOL get_dc_device_rect( DC *dc, RECT *rect )
{
    *rect = dc->device_rect;
    offset_rect( rect, -dc->vis_rect.left, -dc->vis_rect.top );
    return !is_rect_empty( rect );
}
static RET_CODE news_success(control_t *p_cont, u16 msg, u32 para1, u32 para2)
{    
  control_t *p_icont = NULL, *p_item = NULL, *p_text = NULL, *p_page_cont = NULL, *p_page_title = NULL, *p_page = NULL;
  news_t *p_news = NULL;
  mul_pic_param_t pic_param = {{0},};
  u16 curn_page = 0, total_page = 0;
  u32 total_vod = 0;
  u16 i = 0;

  OS_PRINTF("@# news_success\n");

  if(fw_get_focus_id() != ROOT_ID_NEWS_TITLE)
  {
    return ERR_FAILURE;
  }  

  if(para1 != NEWS_EVT_GET_NEWS)
  {
    return ERR_FAILURE;
  }
  
  p_news =(news_t *)para2;

  total_vod = p_news->count;
  if(p_news == NULL)
  {
    return ERR_FAILURE;
  }

  if(p_news->count == 0)
  {
    return ERR_FAILURE;
  }
  
  //request picture.
  for(g_news_load_curn = 0; 
      g_news_load_curn < NEWS_ITEM_PAGE && g_show_curn + g_news_load_curn < p_news->count;
      g_news_load_curn ++)
  {
    if(p_news->p_item[g_show_curn + g_news_load_curn].media_content.p_url == NULL)
    {
      continue;
    }
    //OS_PRINTF("pic url = [%s]\n",p_news->p_item[g_show_curn + g_news_load_curn].media_content.p_url);
    ui_pic_set_url((u8*)p_news->p_item[g_show_curn + g_news_load_curn].media_content.p_url);

    pic_param.anim = REND_ANIM_NONE;
    pic_param.style = REND_STYLE_CENTER;
    pic_param.flip = PIC_NO_F_NO_R;
    pic_param.win_rect.left = NEWS_ITEM_PREWX;
    pic_param.win_rect.top = NEWS_ITEM_PREWY;
    pic_param.win_rect.right = (pic_param.win_rect.left + NEWS_ITEM_PREWW);
    pic_param.win_rect.bottom = (pic_param.win_rect.top + NEWS_ITEM_PREWH);
    pic_param.file_size = 0;
    pic_param.handle = 0;

    offset_rect(&pic_param.win_rect, NEWS_ITEM_X, (s16)(NEWS_ITEM_Y + g_news_load_curn * (NEWS_ITEM_H + NEWS_VGAP)));
    offset_rect(&pic_param.win_rect, NEWS_ICONT_X, NEWS_ICONT_Y);
    offset_rect(&pic_param.win_rect, NEWS_CONT_X, NEWS_CONT_Y);

    pic_start(&pic_param); 
    break;
  }
  for(i = 0; 
      i < NEWS_ITEM_PAGE && g_show_curn + i < p_news->count; 
      i ++ )
  {
    //set text
    p_icont = ctrl_get_child_by_id(p_cont, IDC_NEWS_ICONT);
    p_item = ctrl_get_child_by_id(p_icont, IDC_NEWS_ITEM1 + i);
    p_text = ctrl_get_child_by_id(p_item, IDC_NEWS_ITEM_TEXT);
    if(p_news->p_item[g_show_curn + i].p_title != NULL)
    {
      text_set_content_by_ascstr(p_text, (u8*)p_news->p_item[g_show_curn + i].p_title);
    }
    else
    {
      text_set_content_by_ascstr(p_text, (u8*)"No content.");
    }
  }

    //update item text.
  p_page_cont = ctrl_get_child_by_id(p_cont, IDC_NEWS_TITLE_CONT);  
  p_page_title = ctrl_get_child_by_id(p_page_cont, IDC_NEWS_TITLE);
  p_page = ctrl_get_child_by_id(p_page_title, IDC_NEWS_PAGE_NUM);

  curn_page = g_show_curn / NEWS_ITEM_PAGE + 1; 
  if(total_vod != 0&&total_vod % NEWS_ITEM_PAGE == 0)
  {
    total_page = (u16)(total_vod / NEWS_ITEM_PAGE);
  }
  else
  {
    total_page = (u16)(total_vod / NEWS_ITEM_PAGE + 1);
  }

  news_update_page_num(p_page, curn_page, total_page);

  ctrl_paint_ctrl(ctrl_get_parent(p_item), TRUE);
  ctrl_paint_ctrl(p_page_title, TRUE);
  g_news_load_curn ++;
  
  return SUCCESS;
}