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.