Esempio n. 1
0
PixmapPtr
rdpCreatePixmap(ScreenPtr pScreen, int width, int height, int depth,
                unsigned usage_hint)
{
  PixmapPtr rv;
  rdpPixmapRec* priv;
  int org_width;

  org_width = width;
  /* width must be a multiple of 4 in rdp */
  width = (width + 3) & ~3;
  LLOGLN(10, ("rdpCreatePixmap: width %d org_width %d", width, org_width));
  pScreen->CreatePixmap = g_rdpScreen.CreatePixmap;
  rv = pScreen->CreatePixmap(pScreen, width, height, depth, usage_hint);
  priv = GETPIXPRIV(rv);
  priv->rdpindex = -1;
  if ((rv->drawable.depth == g_rdpScreen.depth) &&
      (org_width > 1) && (height > 1))
  {
    priv->allocBytes = width * height * g_Bpp;
    priv->rdpindex = rdpup_add_os_bitmap(rv, priv);
    if (priv->rdpindex >= 0)
    {
      priv->status = 1;
      rdpup_create_os_surface(priv->rdpindex, width, height);
    }
  }
  pScreen->ModifyPixmapHeader(rv, org_width, 0, 0, 0, 0, 0);
  pScreen->CreatePixmap = rdpCreatePixmap;
  return rv;
}
Esempio n. 2
0
int
xrdp_is_os(PixmapPtr pix, rdpPixmapPtr priv)
{
    RegionRec reg1;
    BoxRec box;
    int width;
    int height;
    struct image_data id;

    if (!XRDP_IS_OS(priv))
    {
        width = pix->drawable.width;
        height = pix->drawable.height;
        if ((pix->usage_hint == 0) &&
            (pix->drawable.depth >= g_rdpScreen.depth) &&
            (width > 1) && (height > 1) && (priv->kind_width > 0))
        {
            LLOGLN(10, ("%d %d", priv->kind_width, pix->drawable.width));
            priv->rdpindex = rdpup_add_os_bitmap(pix, priv);
            if (priv->rdpindex >= 0)
            {
                priv->status = 1;
                rdpup_create_os_surface(priv->rdpindex,
                                        priv->kind_width, height);
                box.x1 = 0;
                box.y1 = 0;
                box.x2 = width;
                box.y2 = height;
                if (g_do_dirty_os)
                {
                    if (priv->con_number != g_con_number)
                    {
                        draw_item_remove_all(priv);
                        RegionInit(&reg1, &box, 0);
                        draw_item_add_img_region(priv, &reg1, GXcopy, RDI_IMGLL);
                        RegionUninit(&reg1);
                        priv->is_dirty = 1;
                        priv->con_number = g_con_number;
                    }
                }
                else
                {
                    rdpup_get_pixmap_image_rect(pix, &id);
                    rdpup_switch_os_surface(priv->rdpindex);
                    rdpup_begin_update();
                    rdpup_send_area(&id, box.x1, box.y1, box.x2 - box.x1,
                                    box.y2 - box.y1);
                    rdpup_end_update();
                    rdpup_switch_os_surface(-1);
                }
                return 1;
            }
        }
        return 0;
    }
    return 1;
}