Dropped utarray in favor of our ptrArray. This should get rid of our strdup woes.

This commit is contained in:
Pietro Gagliardi 2015-11-27 20:38:21 -05:00
parent c87cf13d67
commit f5a2759b09
2 changed files with 13 additions and 18 deletions

View File

@ -9,7 +9,6 @@ extern "C" {
#define uthash_malloc(sz) uiAlloc((sz), "(uthash internal)") #define uthash_malloc(sz) uiAlloc((sz), "(uthash internal)")
#define uthash_free(ptr,sz) uiFree((ptr)) #define uthash_free(ptr,sz) uiFree((ptr))
#include "uthash/uthash.h" #include "uthash/uthash.h"
#include "uthash/utarray.h"
extern uiInitOptions options; extern uiInitOptions options;

View File

@ -309,7 +309,7 @@ void uiDrawPathEnd(uiDrawPath *p)
struct uiDrawContext { struct uiDrawContext {
ID2D1RenderTarget *rt; ID2D1RenderTarget *rt;
UT_array *states; struct ptrArray *states;
ID2D1PathGeometry *currentClip; ID2D1PathGeometry *currentClip;
}; };
@ -813,28 +813,22 @@ struct state {
ID2D1PathGeometry *clip; ID2D1PathGeometry *clip;
}; };
static const UT_icd stateicd = {
.sz = sizeof (struct state),
.init = NULL,
.copy = NULL,
.dtor = NULL,
};
static void initStates(uiDrawContext *c) static void initStates(uiDrawContext *c)
{ {
utarray_new(c->states, &stateicd); c->states = newPtrArray();
} }
static void uninitStates(uiDrawContext *c) static void uninitStates(uiDrawContext *c)
{ {
if (utarray_len(c->states) > 0) // have a helpful diagnostic here
if (c->states->len > 0)
complain("imbalanced save/restore count in uiDrawContext in uninitStates(); did you save without restoring?"); complain("imbalanced save/restore count in uiDrawContext in uninitStates(); did you save without restoring?");
utarray_free(c->states); ptrArrayDestroy(c->states);
} }
void uiDrawSave(uiDrawContext *c) void uiDrawSave(uiDrawContext *c)
{ {
struct state state; struct state *state;
ID2D1DrawingStateBlock *dsb; ID2D1DrawingStateBlock *dsb;
HRESULT hr; HRESULT hr;
@ -851,16 +845,17 @@ void uiDrawSave(uiDrawContext *c)
if (c->currentClip != NULL) if (c->currentClip != NULL)
ID2D1PathGeometry_AddRef(c->currentClip); ID2D1PathGeometry_AddRef(c->currentClip);
state.dsb = dsb; state = uiNew(struct state);
state.clip = c->currentClip; state->dsb = dsb;
utarray_push_back(c->states, &state); state->clip = c->currentClip;
ptrArrayAppend(c->states, state);
} }
void uiDrawRestore(uiDrawContext *c) void uiDrawRestore(uiDrawContext *c)
{ {
struct state *state; struct state *state;
state = (struct state *) utarray_back(c->states); state = ptrArrayIndex(c->states, struct state *, c->states->len - 1);
ID2D1RenderTarget_RestoreDrawingState(c->rt, state->dsb); ID2D1RenderTarget_RestoreDrawingState(c->rt, state->dsb);
ID2D1DrawingStateBlock_Release(state->dsb); ID2D1DrawingStateBlock_Release(state->dsb);
@ -871,5 +866,6 @@ void uiDrawRestore(uiDrawContext *c)
// no need to explicitly addref or release; just transfer the ref // no need to explicitly addref or release; just transfer the ref
c->currentClip = state->clip; c->currentClip = state->clip;
utarray_pop_back(c->states); uiFree(state);
ptrArrayDelete(c->states, c->states->len - 1);
} }