Initial commit - from Precise source
[freerdp-ubuntu-pcb-backport.git] / libfreerdp-cache / palette.c
1 /**
2  * FreeRDP: A Remote Desktop Protocol Client
3  * Palette (Color Table) Cache
4  *
5  * Copyright 2011 Marc-Andre Moreau <marcandre.moreau@gmail.com>
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *     http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  */
19
20 #include <freerdp/utils/stream.h>
21 #include <freerdp/utils/memory.h>
22
23 #include <freerdp/cache/palette.h>
24
25 void update_gdi_cache_color_table(rdpContext* context, CACHE_COLOR_TABLE_ORDER* cache_color_table)
26 {
27         rdpCache* cache = context->cache;
28         palette_cache_put(cache->palette, cache_color_table->cacheIndex, (void*) cache_color_table->colorTable);
29 }
30
31 void* palette_cache_get(rdpPaletteCache* palette_cache, uint32 index)
32 {
33         void* entry;
34
35         if (index > palette_cache->maxEntries)
36         {
37                 printf("invalid color table index: 0x%04X\n", index);
38                 return NULL;
39         }
40
41         entry = palette_cache->entries[index].entry;
42
43         if (entry == NULL)
44         {
45                 printf("invalid color table at index: 0x%04X\n", index);
46                 return NULL;
47         }
48
49         return entry;
50 }
51
52 void palette_cache_put(rdpPaletteCache* palette_cache, uint32 index, void* entry)
53 {
54         if (index > palette_cache->maxEntries)
55         {
56                 printf("invalid color table index: 0x%04X\n", index);
57                 return;
58         }
59
60         palette_cache->entries[index].entry = entry;
61 }
62
63 void palette_cache_register_callbacks(rdpUpdate* update)
64 {
65         update->secondary->CacheColorTable = update_gdi_cache_color_table;
66 }
67
68 rdpPaletteCache* palette_cache_new(rdpSettings* settings)
69 {
70         rdpPaletteCache* palette_cache;
71
72         palette_cache = (rdpPaletteCache*) xzalloc(sizeof(rdpPaletteCache));
73
74         if (palette_cache != NULL)
75         {
76                 palette_cache->settings = settings;
77                 palette_cache->maxEntries = 6;
78                 palette_cache->entries = (PALETTE_TABLE_ENTRY*) xzalloc(sizeof(PALETTE_TABLE_ENTRY) * palette_cache->maxEntries);
79         }
80
81         return palette_cache;
82 }
83
84 void palette_cache_free(rdpPaletteCache* palette_cache)
85 {
86         if (palette_cache != NULL)
87         {
88                 xfree(palette_cache->entries);
89                 xfree(palette_cache);
90         }
91 }
92