Ejemplo n.º 1
0
int shadow_client_init_lobby(rdpShadowClient* client)
{
    int width;
    int height;
    rdtkEngine* engine;
    rdtkSurface* surface;
    RECTANGLE_16 invalidRect;
    rdpShadowSurface* lobby;
    rdpContext* context = (rdpContext*) client;
    rdpSettings* settings = context->settings;

    width = settings->DesktopWidth;
    height = settings->DesktopHeight;

    lobby = client->lobby = shadow_surface_new(client->server, 0, 0, width, height);

    if (!client->lobby)
        return -1;

    engine = rdtk_engine_new();

    surface = rdtk_surface_new(engine, lobby->data, lobby->width, lobby->height, lobby->scanline);

    rdtk_surface_fill(surface, 0, 0, width, height, 0x3BB9FF);
    //rdtk_label_draw(surface, 16, 16, 128, 32, NULL, "label", 0, 0);
    //rdtk_button_draw(surface, 16, 64, 128, 32, NULL, "button");
    //rdtk_text_field_draw(surface, 16, 128, 128, 32, NULL, "text field");

    rdtk_surface_free(surface);

    rdtk_engine_free(engine);

    invalidRect.left = 0;
    invalidRect.top = 0;
    invalidRect.right = width;
    invalidRect.bottom = height;

    region16_union_rect(&(lobby->invalidRegion), &(lobby->invalidRegion), &invalidRect);

    return 1;
}
Ejemplo n.º 2
0
int main(int argc, char** argv)
{
	GC gc;
	int index;
	int depth;
	int x, y;
	int width;
	int height;
	BYTE* buffer;
	int scanline;
	int pf_count;
	XEvent event;
	XImage* image;
	Pixmap pixmap;
	Screen* screen;
	Visual* visual;
	int scanline_pad;
	int screen_number;
	Display* display;
	Window window;
	Window root_window;
	rdtkEngine* engine;
	rdtkSurface* surface;
	unsigned long border;
	unsigned long background;
	XPixmapFormatValues* pf;
	XPixmapFormatValues* pfs;
 
	display = XOpenDisplay(NULL);

	if (!display)
	{
		WLog_ERR(TAG, "Cannot open display");
		return winpr_exit(1);
	}

	x = 10;
	y = 10;
	width = 640;
	height = 480;

	screen_number = DefaultScreen(display);
	screen = ScreenOfDisplay(display, screen_number);
	visual = DefaultVisual(display, screen_number);
	gc = DefaultGC(display, screen_number);
	depth = DefaultDepthOfScreen(screen);
	root_window = RootWindow(display, screen_number);
	border = BlackPixel(display, screen_number);
	background = WhitePixel(display, screen_number);

	scanline_pad = 0;

	pfs = XListPixmapFormats(display, &pf_count);

	for (index = 0; index < pf_count; index++)
	{
		pf = &pfs[index];

		if (pf->depth == depth)
		{
			scanline_pad = pf->scanline_pad;
			break;
		}
	}

	XFree(pfs);

	engine = rdtk_engine_new();
	if (!engine)
		return winpr_exit(1);

	scanline = width * 4;
	buffer = (BYTE*) calloc(height, scanline);
	if (!buffer)
		return winpr_exit(1);

	surface = rdtk_surface_new(engine, buffer, width, height, scanline);

	rdtk_surface_fill(surface, 0, 0, width, height, 0x3BB9FF);
	rdtk_label_draw(surface, 16, 16, 128, 32, NULL, "label", 0, 0);
	rdtk_button_draw(surface, 16, 64, 128, 32, NULL, "button");
	rdtk_text_field_draw(surface, 16, 128, 128, 32, NULL, "text field");

	window = XCreateSimpleWindow(display, root_window,
			x, y, width, height, 1, border, background);

	XSelectInput(display, window, ExposureMask | KeyPressMask);
	XMapWindow(display, window);

	XSetFunction(display, gc, GXcopy);
	XSetFillStyle(display, gc, FillSolid);

	pixmap = XCreatePixmap(display, window, width, height, depth);

	image = XCreateImage(display, visual, depth, ZPixmap, 0,
			(char*) buffer, width, height, scanline_pad, 0);
 
	while (1)
	{
		XNextEvent(display, &event);

		if (event.type == Expose)
		{
			XPutImage(display, pixmap, gc, image, 0, 0, 0, 0, width, height);
			XCopyArea(display, pixmap, window, gc, 0, 0, width, height, 0, 0);
		}

		if (event.type == KeyPress)
			break;

		if (event.type == ClientMessage)
			break;
	}

	XFlush(display);

	XDestroyImage(image);
	XCloseDisplay(display);

	rdtk_surface_free(surface);
	free(buffer);

	rdtk_engine_free(engine);

	return winpr_exit(0);
}