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; }
rdpShadowScreen* shadow_screen_new(rdpShadowServer* server) { int x, y; int width, height; MONITOR_DEF* primary; rdpShadowScreen* screen; rdpShadowSubsystem* subsystem; screen = (rdpShadowScreen*) calloc(1, sizeof(rdpShadowScreen)); if (!screen) return NULL; screen->server = server; subsystem = server->subsystem; if (!InitializeCriticalSectionAndSpinCount(&(screen->lock), 4000)) return NULL; region16_init(&(screen->invalidRegion)); primary = &(subsystem->monitors[0]); x = primary->left; y = primary->top; width = primary->right - primary->left; height = primary->bottom - primary->top; screen->width = width; screen->height = height; screen->primary = shadow_surface_new(server, x, y, width, height); if (!screen->primary) return NULL; server->surface = screen->primary; return screen; }