diff options
author | David Robillard <d@drobilla.net> | 2014-01-03 22:24:11 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2014-01-03 22:24:11 +0000 |
commit | 3517286a9404d556c384276d63b73b588fadbcfe (patch) | |
tree | 21d755eaeebace222216b3ab294ea200171fe3a2 /src/box.c | |
parent | 9191aae81ab497d9cbf5a256b2b2e9dbf1af5d67 (diff) | |
download | ganv-3517286a9404d556c384276d63b73b588fadbcfe.tar.gz ganv-3517286a9404d556c384276d63b73b588fadbcfe.tar.bz2 ganv-3517286a9404d556c384276d63b73b588fadbcfe.zip |
Draw and layout performance improvements.
git-svn-id: http://svn.drobilla.net/lad/trunk/ganv@5248 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/box.c')
-rw-r--r-- | src/box.c | 38 |
1 files changed, 17 insertions, 21 deletions
@@ -134,15 +134,10 @@ ganv_box_bounds_item(const GanvBoxCoords* coords, double* x1, double* y1, double* x2, double* y2) { - *x1 = MIN(coords->x1, coords->x2) - coords->border_width; - *y1 = MIN(coords->y1, coords->y2) - coords->border_width; - *x2 = MAX(coords->x1, coords->x2) + coords->border_width; - *y2 = MAX(coords->y1, coords->y2) + coords->border_width; - - if (coords->stacked) { - *x2 += STACKED_OFFSET; - *y2 += STACKED_OFFSET; - } + *x1 = coords->x1 - coords->border_width; + *y1 = coords->y1 - coords->border_width; + *x2 = coords->x2 + coords->border_width + (coords->stacked * STACKED_OFFSET); + *y2 = coords->y2 + coords->border_width + (coords->stacked * STACKED_OFFSET); } void @@ -173,7 +168,7 @@ ganv_box_bounds(GanvItem* item, double* x2, double* y2) { // Note this will not be correct if children are outside the box bounds - GanvBox* box = GANV_BOX(item); + GanvBox* box = (GanvBox*)item; ganv_box_bounds_item(&box->impl->coords, x1, y1, x2, y2); ganv_item_i2w_pair(item, x1, y1, x2, y2); } @@ -196,6 +191,8 @@ ganv_box_update(GanvItem* item, int flags) impl->old_coords = impl->coords; coords_i2w(item, &impl->old_coords); + ganv_box_normalize(box); + // Get bounding box double x1, x2, y1, y2; ganv_box_bounds(item, &x1, &y1, &x2, &y2); @@ -474,17 +471,16 @@ ganv_box_class_init(GanvBoxClass* klass) void ganv_box_normalize(GanvBox* box) { - GanvBoxCoords* coords = &box->impl->coords; - - const double x1 = coords->x1; - const double y1 = coords->y1; - const double x2 = coords->x2; - const double y2 = coords->y2; - - coords->x1 = MIN(x1, x2); - coords->y1 = MIN(y1, y2); - coords->x2 = MAX(x1, x2); - coords->y2 = MAX(y1, y2); + if (box->impl->coords.x2 < box->impl->coords.x1) { + const double tmp = box->impl->coords.x1; + box->impl->coords.x1 = box->impl->coords.x2; + box->impl->coords.x2 = tmp; + } + if (box->impl->coords.y2 < box->impl->coords.y1) { + const double tmp = box->impl->coords.y1; + box->impl->coords.y1 = box->impl->coords.y2; + box->impl->coords.y2 = tmp; + } } double |