| 34 |
34 |
| 35 #include <cx/hash_map.h> |
35 #include <cx/hash_map.h> |
| 36 #include <cx/mempool.h> |
36 #include <cx/mempool.h> |
| 37 |
37 |
| 38 |
38 |
| 39 static CxMap *documents; |
|
| 40 |
39 |
| 41 void uic_docmgr_init() { |
|
| 42 if (!documents) { |
|
| 43 documents = cxHashMapCreate(cxDefaultAllocator, CX_STORE_POINTERS, 32); |
|
| 44 } |
|
| 45 } |
|
| 46 |
40 |
| 47 void* ui_document_new(size_t size) { |
41 void* ui_document_new(size_t size) { |
| 48 CxMempool *mp = cxMempoolCreateSimple(256); |
42 CxMempool *mp = cxMempoolCreateSimple(256); |
| 49 const CxAllocator *a = mp->allocator; |
43 const CxAllocator *a = mp->allocator; |
| 50 UiContext *ctx = uic_context(NULL, mp); |
44 UiContext *ctx = uic_context(NULL, mp); |
| 51 |
45 |
| 52 void *document = cxCalloc(a, size, 1); |
46 UiDoc *document = cxCalloc(a, sizeof(UiDoc) + size, 1); |
| 53 cxMapPut(documents, cx_hash_key(&document, sizeof(void*)), ctx); |
47 document->ctx = ctx; |
| 54 return document; |
48 return &document->doc; |
| 55 } |
49 } |
| 56 |
50 |
| 57 void ui_document_destroy(void *doc) { |
51 void ui_document_destroy(void *doc) { |
| 58 UiContext *ctx = ui_document_context(doc); |
52 UiContext *ctx = ui_document_context(doc); |
| 59 if(ctx) { |
53 if(ctx) { |