mirror of
https://github.com/morgan9e/FreeRDP
synced 2026-04-15 00:44:19 +09:00
Bug fixes, refactoring.
This commit is contained in:
47
libfreerdp/cache/cache.c
vendored
47
libfreerdp/cache/cache.c
vendored
@@ -30,50 +30,49 @@
|
||||
rdpCache* cache_new(rdpSettings* settings)
|
||||
{
|
||||
rdpCache* cache;
|
||||
|
||||
cache = (rdpCache*) calloc(1, sizeof(rdpCache));
|
||||
|
||||
if (!cache)
|
||||
return NULL;
|
||||
|
||||
cache->settings = settings;
|
||||
cache->glyph = glyph_cache_new(settings);
|
||||
|
||||
if (!cache->glyph)
|
||||
goto error_glyph;
|
||||
goto error;
|
||||
|
||||
cache->brush = brush_cache_new(settings);
|
||||
|
||||
if (!cache->brush)
|
||||
goto error_brush;
|
||||
goto error;
|
||||
|
||||
cache->pointer = pointer_cache_new(settings);
|
||||
|
||||
if (!cache->pointer)
|
||||
goto error_pointer;
|
||||
goto error;
|
||||
|
||||
cache->bitmap = bitmap_cache_new(settings);
|
||||
|
||||
if (!cache->bitmap)
|
||||
goto error_bitmap;
|
||||
goto error;
|
||||
|
||||
cache->offscreen = offscreen_cache_new(settings);
|
||||
|
||||
if (!cache->offscreen)
|
||||
goto error_offscreen;
|
||||
goto error;
|
||||
|
||||
cache->palette = palette_cache_new(settings);
|
||||
|
||||
if (!cache->palette)
|
||||
goto error_palette;
|
||||
goto error;
|
||||
|
||||
cache->nine_grid = nine_grid_cache_new(settings);
|
||||
|
||||
if (!cache->nine_grid)
|
||||
goto error_ninegrid;
|
||||
goto error;
|
||||
|
||||
return cache;
|
||||
|
||||
error_ninegrid:
|
||||
palette_cache_free(cache->palette);
|
||||
error_palette:
|
||||
offscreen_cache_free(cache->offscreen);
|
||||
error_offscreen:
|
||||
bitmap_cache_free(cache->bitmap);
|
||||
error_bitmap:
|
||||
pointer_cache_free(cache->pointer);
|
||||
error_pointer:
|
||||
brush_cache_free(cache->brush);
|
||||
error_brush:
|
||||
glyph_cache_free(cache->glyph);
|
||||
error_glyph:
|
||||
free(cache);
|
||||
error:
|
||||
cache_free(cache);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
26
libfreerdp/cache/offscreen.c
vendored
26
libfreerdp/cache/offscreen.c
vendored
@@ -32,18 +32,19 @@
|
||||
|
||||
#define TAG FREERDP_TAG("cache.offscreen")
|
||||
|
||||
static void offscreen_cache_put(rdpOffscreenCache* offscreen_cache, UINT32 index, rdpBitmap* bitmap);
|
||||
static void offscreen_cache_put(rdpOffscreenCache* offscreen_cache,
|
||||
UINT32 index, rdpBitmap* bitmap);
|
||||
static void offscreen_cache_delete(rdpOffscreenCache* offscreen, UINT32 index);
|
||||
|
||||
static BOOL update_gdi_create_offscreen_bitmap(rdpContext* context,
|
||||
const CREATE_OFFSCREEN_BITMAP_ORDER* createOffscreenBitmap)
|
||||
const CREATE_OFFSCREEN_BITMAP_ORDER* createOffscreenBitmap)
|
||||
{
|
||||
int i;
|
||||
UINT32 i;
|
||||
UINT16 index;
|
||||
rdpBitmap* bitmap;
|
||||
rdpCache* cache = context->cache;
|
||||
|
||||
bitmap = Bitmap_Alloc(context);
|
||||
|
||||
if (!bitmap)
|
||||
return FALSE;
|
||||
|
||||
@@ -59,19 +60,20 @@ static BOOL update_gdi_create_offscreen_bitmap(rdpContext* context,
|
||||
offscreen_cache_delete(cache->offscreen, createOffscreenBitmap->id);
|
||||
offscreen_cache_put(cache->offscreen, createOffscreenBitmap->id, bitmap);
|
||||
|
||||
if(cache->offscreen->currentSurface == createOffscreenBitmap->id)
|
||||
if (cache->offscreen->currentSurface == createOffscreenBitmap->id)
|
||||
Bitmap_SetSurface(context, bitmap, FALSE);
|
||||
|
||||
for (i = 0; i < (int) createOffscreenBitmap->deleteList.cIndices; i++)
|
||||
for (i = 0; i < createOffscreenBitmap->deleteList.cIndices; i++)
|
||||
{
|
||||
index = createOffscreenBitmap->deleteList.indices[i];
|
||||
offscreen_cache_delete(cache->offscreen, index);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static BOOL update_gdi_switch_surface(rdpContext* context,
|
||||
const SWITCH_SURFACE_ORDER* switchSurface)
|
||||
const SWITCH_SURFACE_ORDER* switchSurface)
|
||||
{
|
||||
rdpCache* cache = context->cache;
|
||||
|
||||
@@ -111,7 +113,8 @@ rdpBitmap* offscreen_cache_get(rdpOffscreenCache* offscreenCache, UINT32 index)
|
||||
return bitmap;
|
||||
}
|
||||
|
||||
void offscreen_cache_put(rdpOffscreenCache* offscreenCache, UINT32 index, rdpBitmap* bitmap)
|
||||
void offscreen_cache_put(rdpOffscreenCache* offscreenCache, UINT32 index,
|
||||
rdpBitmap* bitmap)
|
||||
{
|
||||
if (index >= offscreenCache->maxEntries)
|
||||
{
|
||||
@@ -150,7 +153,6 @@ void offscreen_cache_register_callbacks(rdpUpdate* update)
|
||||
rdpOffscreenCache* offscreen_cache_new(rdpSettings* settings)
|
||||
{
|
||||
rdpOffscreenCache* offscreenCache;
|
||||
|
||||
offscreenCache = (rdpOffscreenCache*) calloc(1, sizeof(rdpOffscreenCache));
|
||||
|
||||
if (!offscreenCache)
|
||||
@@ -158,20 +160,20 @@ rdpOffscreenCache* offscreen_cache_new(rdpSettings* settings)
|
||||
|
||||
offscreenCache->settings = settings;
|
||||
offscreenCache->update = ((freerdp*) settings->instance)->update;
|
||||
|
||||
offscreenCache->currentSurface = SCREEN_BITMAP_SURFACE;
|
||||
offscreenCache->maxSize = 7680;
|
||||
offscreenCache->maxEntries = 2000;
|
||||
|
||||
settings->OffscreenCacheSize = offscreenCache->maxSize;
|
||||
settings->OffscreenCacheEntries = offscreenCache->maxEntries;
|
||||
offscreenCache->entries = (rdpBitmap**) calloc(offscreenCache->maxEntries,
|
||||
sizeof(rdpBitmap*));
|
||||
|
||||
offscreenCache->entries = (rdpBitmap**) calloc(offscreenCache->maxEntries, sizeof(rdpBitmap*));
|
||||
if (!offscreenCache->entries)
|
||||
{
|
||||
free(offscreenCache);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return offscreenCache;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user