20#include <freerdp/config.h>
26#include <freerdp/update.h>
27#include <freerdp/freerdp.h>
28#include <winpr/stream.h>
38struct rdp_nine_grid_cache
40 pDrawNineGrid DrawNineGrid;
41 pMultiDrawNineGrid MultiDrawNineGrid;
42 UINT32 paddingA[16 - 2];
46 NINE_GRID_ENTRY* entries;
47 UINT32 paddingB[32 - 19];
52static BOOL update_gdi_draw_nine_grid(rdpContext* context,
55 rdpCache* cache = context->cache;
56 return IFCALLRESULT(TRUE, cache->nine_grid->DrawNineGrid, context, draw_nine_grid);
59static BOOL update_gdi_multi_draw_nine_grid(rdpContext* context,
62 rdpCache* cache = context->cache;
63 return IFCALLRESULT(TRUE, cache->nine_grid->MultiDrawNineGrid, context, multi_draw_nine_grid);
66void nine_grid_cache_register_callbacks(rdpUpdate* update)
68 rdpCache* cache = update->context->cache;
70 cache->nine_grid->DrawNineGrid = update->primary->DrawNineGrid;
71 cache->nine_grid->MultiDrawNineGrid = update->primary->MultiDrawNineGrid;
73 update->primary->DrawNineGrid = update_gdi_draw_nine_grid;
74 update->primary->MultiDrawNineGrid = update_gdi_multi_draw_nine_grid;
77rdpNineGridCache* nine_grid_cache_new(rdpContext* context)
79 rdpNineGridCache* nine_grid = NULL;
80 rdpSettings* settings = NULL;
82 WINPR_ASSERT(context);
84 settings = context->settings;
85 WINPR_ASSERT(settings);
87 nine_grid = (rdpNineGridCache*)calloc(1,
sizeof(rdpNineGridCache));
91 nine_grid->context = context;
93 nine_grid->maxSize = 2560;
94 nine_grid->maxEntries = 256;
99 nine_grid->maxEntries))
102 nine_grid->entries = (NINE_GRID_ENTRY*)calloc(nine_grid->maxEntries,
sizeof(NINE_GRID_ENTRY));
103 if (!nine_grid->entries)
109 WINPR_PRAGMA_DIAG_PUSH
110 WINPR_PRAGMA_DIAG_IGNORED_MISMATCHED_DEALLOC
111 nine_grid_cache_free(nine_grid);
112 WINPR_PRAGMA_DIAG_POP
116void nine_grid_cache_free(rdpNineGridCache* nine_grid)
118 if (nine_grid != NULL)
120 if (nine_grid->entries != NULL)
122 for (
size_t i = 0; i < nine_grid->maxEntries; i++)
123 free(nine_grid->entries[i].entry);
125 free(nine_grid->entries);
FREERDP_API BOOL freerdp_settings_set_uint32(rdpSettings *settings, FreeRDP_Settings_Keys_UInt32 id, UINT32 param)
Sets a UINT32 settings value.