kwo pushed a commit to branch master. http://git.enlightenment.org/e16/e16.git/commit/?id=ce34edc4a3d2105f1d8a0b6c032e8d20fe381ec8
commit ce34edc4a3d2105f1d8a0b6c032e8d20fe381ec8 Author: Kim Woelders <k...@woelders.dk> Date: Sun Dec 29 21:47:29 2013 +0100 Reduce nesting in DialogRealizeItem(). Also tweak some (disabled) debug messages. --- src/dialog.c | 400 +++++++++++++++++++++++++++++------------------------------ 1 file changed, 194 insertions(+), 206 deletions(-) diff --git a/src/dialog.c b/src/dialog.c index 3e91805..fc9d947 100644 --- a/src/dialog.c +++ b/src/dialog.c @@ -332,7 +332,7 @@ DialogRedraw(Dialog * d) return; #if DEBUG_DIALOGS - Eprintf("DialogRedraw win=%#lx pmap=%#lx\n", + Eprintf("%s: win=%#lx pmap=%#lx\n", __func__, WinGetXwin(d->win), WinGetPmap(d->win)); #endif @@ -1023,217 +1023,207 @@ DialogRealizeItem(Dialog * d, DItem * di) case DITEM_TABLE: { int cols, rows; + int i, r, c, x, y; + int *col_size, *row_size; pad = ImageclassGetPadding(d->iclass); cols = di->item.table.num_columns; rows = 1; - if (cols > 0) - { - int i, r, c, x, y; - int *col_size, *row_size; + if (cols <= 0) + break; - col_size = ECALLOC(int, cols); - row_size = ECALLOC(int, rows); + col_size = ECALLOC(int, cols); + row_size = ECALLOC(int, rows); - if (!col_size || !row_size) - goto bail_out; + if (!col_size || !row_size) + goto bail_out; - r = c = 0; - for (i = 0; i < di->item.table.num_items; i++) - { - DItem *dii; - int w, h, j, ww; + r = c = 0; + for (i = 0; i < di->item.table.num_items; i++) + { + DItem *dii; + int w, h, j, ww; - dii = di->item.table.items[i]; - w = dii->w + (dii->padding.left + dii->padding.right); - h = dii->h + (dii->padding.top + dii->padding.bottom); - ww = 0; + dii = di->item.table.items[i]; + w = dii->w + (dii->padding.left + dii->padding.right); + h = dii->h + (dii->padding.top + dii->padding.bottom); + ww = 0; + for (j = 0; j < dii->col_span; j++) + ww += col_size[c + j]; + if (w > ww) + { + ww = (w + dii->col_span - 1) / dii->col_span; for (j = 0; j < dii->col_span; j++) - ww += col_size[c + j]; - if (w > ww) - { - ww = (w + dii->col_span - 1) / dii->col_span; - for (j = 0; j < dii->col_span; j++) - if (col_size[c + j] < ww) - col_size[c + j] = ww; - } - if (h > row_size[r]) - row_size[r] = h; - c += dii->col_span; - if (c >= cols) - { - c = 0; - r++; - rows++; - row_size = EREALLOC(int, row_size, rows); - - if (!row_size) - goto bail_out; - - row_size[rows - 1] = 0; - } + if (col_size[c + j] < ww) + col_size[c + j] = ww; } - if (di->item.table.homogenous_h) + if (h > row_size[r]) + row_size[r] = h; + c += dii->col_span; + if (c >= cols) { - int max = 0; + c = 0; + r++; + rows++; + row_size = EREALLOC(int, row_size, rows); - for (i = 0; i < cols; i++) - { - if (col_size[i] > max) - max = col_size[i]; - } - for (i = 0; i < cols; i++) - col_size[i] = max; - } - if (di->item.table.homogenous_v) - { - int max = 0; + if (!row_size) + goto bail_out; - for (i = 0; i < rows; i++) - { - if (row_size[i] > max) - max = row_size[i]; - } - for (i = 0; i < rows; i++) - row_size[i] = max; + row_size[rows - 1] = 0; } + } + if (di->item.table.homogenous_h) + { + int max = 0; - iw = ih = 0; for (i = 0; i < cols; i++) - iw += col_size[i]; - for (i = 0; i < rows; i++) - ih += row_size[i]; - di->w = iw; - di->h = ih; + { + if (col_size[i] > max) + max = col_size[i]; + } + for (i = 0; i < cols; i++) + col_size[i] = max; + } + if (di->item.table.homogenous_v) + { + int max = 0; - x = y = 0; - r = c = 0; - for (i = 0; i < di->item.table.num_items; i++) + for (i = 0; i < rows; i++) { - DItem *dii; - int j, sw = 0, sh = 0; + if (row_size[i] > max) + max = row_size[i]; + } + for (i = 0; i < rows; i++) + row_size[i] = max; + } - dii = di->item.table.items[i]; + iw = ih = 0; + for (i = 0; i < cols; i++) + iw += col_size[i]; + for (i = 0; i < rows; i++) + ih += row_size[i]; + di->w = iw; + di->h = ih; - for (j = 0; j < dii->col_span; j++) - sw += col_size[c + j]; - for (j = 0; j < dii->row_span; j++) - sh += row_size[r + j]; - if (dii->fill_h) - dii->w = sw - (dii->padding.left + dii->padding.right); - if (dii->fill_v) - dii->h = sh - (dii->padding.top + dii->padding.bottom); - if (dii->w <= 0 || dii->h <= 0) - goto skip; - if (dii->type == DITEM_TABLE) + x = y = 0; + r = c = 0; + for (i = 0; i < di->item.table.num_items; i++) + { + DItem *dii; + int j, sw = 0, sh = 0; + + dii = di->item.table.items[i]; + + for (j = 0; j < dii->col_span; j++) + sw += col_size[c + j]; + for (j = 0; j < dii->row_span; j++) + sh += row_size[r + j]; + if (dii->fill_h) + dii->w = sw - (dii->padding.left + dii->padding.right); + if (dii->fill_v) + dii->h = sh - (dii->padding.top + dii->padding.bottom); + if (dii->w <= 0 || dii->h <= 0) + goto skip; + if (dii->type == DITEM_TABLE) + { + int dx, dy, newx, newy; + + newx = + di->x + x + pad->left + dii->padding.left + + (((sw - (dii->padding.left + dii->padding.right) - + dii->w) * dii->align_h) >> 10); + newy = + di->y + y + pad->top + dii->padding.top + + (((sh - (dii->padding.top + dii->padding.bottom) - + dii->h) * dii->align_v) >> 10); + dx = newx - dii->x - pad->left; + dy = newy - dii->y - pad->top; + MoveTableBy(d, dii, dx, dy); + } + else + { + dii->x = + di->x + x + pad->left + dii->padding.left + + (((sw - (dii->padding.left + dii->padding.right) - + dii->w) * dii->align_h) >> 10); + dii->y = + di->y + y + pad->top + dii->padding.top + + (((sh - (dii->padding.top + dii->padding.bottom) - + dii->h) * dii->align_v) >> 10); + if (dii->win) + EMoveResizeWindow(dii->win, dii->x, dii->y, + dii->w, dii->h); + if (dii->type == DITEM_CHECKBUTTON) + EMoveResizeWindow(dii->item.check_button.check_win, + dii->x, + dii->y + + (dii->h - + dii->item.check_button.orig_h) / 2, + dii->item.check_button.orig_w, + dii->item.check_button.orig_h); + if (dii->type == DITEM_RADIOBUTTON) + EMoveResizeWindow(dii->item.radio_button.radio_win, + dii->x, + dii->y + + (dii->h - + dii->item.radio_button.orig_h) / 2, + dii->item.radio_button.orig_w, + dii->item.radio_button.orig_h); + if (dii->type == DITEM_AREA) { - int dx, dy, newx, newy; - - newx = - di->x + x + pad->left + - dii->padding.left + - (((sw - - (dii->padding.left + dii->padding.right) - - dii->w) * dii->align_h) >> 10); - newy = - di->y + y + pad->top + - dii->padding.top + - (((sh - - (dii->padding.top + dii->padding.bottom) - - dii->h) * dii->align_v) >> 10); - dx = newx - dii->x - pad->left; - dy = newy - dii->y - pad->top; - MoveTableBy(d, dii, dx, dy); + pad = ImageclassGetPadding(dii->iclass); + dii->item.area.w = dii->w - (pad->left + pad->right); + dii->item.area.h = dii->h - (pad->top + pad->bottom); + EMoveResizeWindow(dii->item.area.area_win, + pad->left, pad->top, + dii->item.area.w, dii->item.area.h); } - else + if (dii->type == DITEM_SLIDER) { - dii->x = - di->x + x + pad->left + - dii->padding.left + - (((sw - - (dii->padding.left + dii->padding.right) - - dii->w) * dii->align_h) >> 10); - dii->y = - di->y + y + pad->top + - dii->padding.top + - (((sh - - (dii->padding.top + dii->padding.bottom) - - dii->h) * dii->align_v) >> 10); - if (dii->win) - EMoveResizeWindow(dii->win, dii->x, dii->y, - dii->w, dii->h); - if (dii->type == DITEM_CHECKBUTTON) - EMoveResizeWindow(dii->item.check_button.check_win, - dii->x, + dii->item.slider.base_x = 0; + dii->item.slider.base_y = 0; + dii->item.slider.base_w = dii->w; + dii->item.slider.base_h = dii->h; + dii->item.slider.knob_w = + dii->item.slider.knob_orig_w; + dii->item.slider.knob_h = + dii->item.slider.knob_orig_h; + if (dii->item.slider.base_win) + EMoveResizeWindow(dii->item.slider.base_win, + dii->x + + dii->item.slider.base_x, dii->y + - (dii->h - - dii->item.check_button.orig_h) / - 2, dii->item.check_button.orig_w, - dii->item.check_button.orig_h); - if (dii->type == DITEM_RADIOBUTTON) - EMoveResizeWindow(dii->item.radio_button.radio_win, - dii->x, + dii->item.slider.base_y, + dii->item.slider.base_w, + dii->item.slider.base_h); + if (dii->win) + EMoveResizeWindow(dii->win, + dii->x + + dii->item.slider.numeric_x, dii->y + - (dii->h - - dii->item.radio_button.orig_h) / - 2, dii->item.radio_button.orig_w, - dii->item.radio_button.orig_h); - if (dii->type == DITEM_AREA) - { - pad = ImageclassGetPadding(dii->iclass); - dii->item.area.w = - dii->w - (pad->left + pad->right); - dii->item.area.h = - dii->h - (pad->top + pad->bottom); - EMoveResizeWindow(dii->item.area.area_win, - pad->left, pad->top, - dii->item.area.w, - dii->item.area.h); - } - if (dii->type == DITEM_SLIDER) - { - dii->item.slider.base_x = 0; - dii->item.slider.base_y = 0; - dii->item.slider.base_w = dii->w; - dii->item.slider.base_h = dii->h; - dii->item.slider.knob_w = - dii->item.slider.knob_orig_w; - dii->item.slider.knob_h = - dii->item.slider.knob_orig_h; - if (dii->item.slider.base_win) - EMoveResizeWindow(dii->item.slider.base_win, - dii->x + - dii->item.slider.base_x, - dii->y + - dii->item.slider.base_y, - dii->item.slider.base_w, - dii->item.slider.base_h); - if (dii->win) - EMoveResizeWindow(dii->win, - dii->x + - dii->item.slider.numeric_x, - dii->y + - dii->item.slider.numeric_y, - dii->item.slider.numeric_w, - dii->item.slider.numeric_h); - } - } - skip: - x += sw; - c += dii->col_span; - if (c >= cols) - { - x = 0; - y += row_size[r]; - c = 0; - r++; + dii->item.slider.numeric_y, + dii->item.slider.numeric_w, + dii->item.slider.numeric_h); } } - bail_out: - Efree(col_size); - Efree(row_size); + + skip: + x += sw; + c += dii->col_span; + if (c >= cols) + { + x = 0; + y += row_size[r]; + c = 0; + r++; + } } + + bail_out: + Efree(col_size); + Efree(row_size); } break; case DITEM_NONE: @@ -1285,27 +1275,25 @@ MoveTableBy(Dialog * d, DItem * di, int dx, int dy) ((dii->h - dii->item.radio_button.orig_h) / 2)); break; case DITEM_SLIDER: - { - if (dii->item.slider.base_win) - EMoveResizeWindow(dii->item.slider.base_win, - dii->x + dii->item.slider.base_x, - dii->y + dii->item.slider.base_y, - dii->item.slider.base_w, - dii->item.slider.base_h); - if (dii->item.slider.knob_win) - EMoveResizeWindow(dii->item.slider.knob_win, - dii->x + dii->item.slider.knob_x, - dii->y + dii->item.slider.knob_y, - dii->item.slider.knob_w, - dii->item.slider.knob_h); - if (dii->win) - EMoveResizeWindow(dii->win, - dii->x + dii->item.slider.numeric_x, - dii->y + dii->item.slider.numeric_y, - dii->item.slider.numeric_w, - dii->item.slider.numeric_h); - break; - } + if (dii->item.slider.base_win) + EMoveResizeWindow(dii->item.slider.base_win, + dii->x + dii->item.slider.base_x, + dii->y + dii->item.slider.base_y, + dii->item.slider.base_w, + dii->item.slider.base_h); + if (dii->item.slider.knob_win) + EMoveResizeWindow(dii->item.slider.knob_win, + dii->x + dii->item.slider.knob_x, + dii->y + dii->item.slider.knob_y, + dii->item.slider.knob_w, + dii->item.slider.knob_h); + if (dii->win) + EMoveResizeWindow(dii->win, + dii->x + dii->item.slider.numeric_x, + dii->y + dii->item.slider.numeric_y, + dii->item.slider.numeric_w, + dii->item.slider.numeric_h); + break; } } } @@ -1330,7 +1318,7 @@ DialogDrawItems(Dialog * d, DItem * di, int x, int y, int w, int h) dialog_update_pending = 1; #if DEBUG_DIALOGS - Eprintf("DialogDrawItems t=%d u=%d - %d,%d -> %d,%d\n", di->type, di->update, + Eprintf("%s: t=%d u=%d - %d,%d -> %d,%d\n", __func__, di->type, di->update, d->xu1, d->yu1, d->xu2, d->yu2); #endif } @@ -1350,7 +1338,7 @@ DialogDrawItem(Dialog * d, DItem * di) goto done; #if DEBUG_DIALOGS - Eprintf("DialogDrawItem t=%d u=%d - %d,%d -> %d,%d\n", di->type, di->update, + Eprintf("%s: t=%d u=%d - %d,%d -> %d,%d\n", __func__, di->type, di->update, d->xu1, d->yu1, d->xu2, d->yu2); #endif --