[widgets/progressbar] calculate/return 'real' width (instead of d->width) when ticks are used
This commit is contained in:
parent
b12a5235a5
commit
4e15b4fab4
|
@ -122,6 +122,7 @@ progressbar_draw(Widget *widget, DrawCtx *ctx, int offset,
|
||||||
int i, percent_ticks, pb_x, pb_y, pb_height, pb_width, pb_progress, pb_offset;
|
int i, percent_ticks, pb_x, pb_y, pb_height, pb_width, pb_progress, pb_offset;
|
||||||
int unit = 0; /* tick + gap */
|
int unit = 0; /* tick + gap */
|
||||||
int border_offset;
|
int border_offset;
|
||||||
|
int widget_width;
|
||||||
area_t rectangle, pattern_rect;
|
area_t rectangle, pattern_rect;
|
||||||
|
|
||||||
Data *d = widget->data;
|
Data *d = widget->data;
|
||||||
|
@ -129,14 +130,6 @@ progressbar_draw(Widget *widget, DrawCtx *ctx, int offset,
|
||||||
if (!d->data_items)
|
if (!d->data_items)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if(!widget->user_supplied_x)
|
|
||||||
widget->area.x = widget_calculate_offset(widget->statusbar->width,
|
|
||||||
d->width,
|
|
||||||
offset,
|
|
||||||
widget->alignment);
|
|
||||||
if(!widget->user_supplied_y)
|
|
||||||
widget->area.y = 0;
|
|
||||||
|
|
||||||
/* for a 'reversed' progressbar:
|
/* for a 'reversed' progressbar:
|
||||||
* basic progressbar:
|
* basic progressbar:
|
||||||
* 1. the full space gets the size of the formerly empty one
|
* 1. the full space gets the size of the formerly empty one
|
||||||
|
@ -154,10 +147,12 @@ progressbar_draw(Widget *widget, DrawCtx *ctx, int offset,
|
||||||
|
|
||||||
if(d->vertical)
|
if(d->vertical)
|
||||||
{
|
{
|
||||||
/* TODO: maybe prevent to calculate that stuff below over and over again (->use Data-values) */
|
/* TODO: maybe prevent to calculate that stuff below over and over again (->use static-values) */
|
||||||
pb_height = (int) (widget->statusbar->height * d->height + 0.5) - 2 * (d->border_width + d->border_padding);
|
pb_height = (int) (widget->statusbar->height * d->height + 0.5) -
|
||||||
|
2 * (d->border_width + d->border_padding);
|
||||||
if(d->ticks_count && d->ticks_gap)
|
if(d->ticks_count && d->ticks_gap)
|
||||||
{
|
{
|
||||||
|
/* '+ d->ticks_gap' because a unit includes a ticks + ticks_gap */
|
||||||
unit = (pb_height + d->ticks_gap) / d->ticks_count;
|
unit = (pb_height + d->ticks_gap) / d->ticks_count;
|
||||||
pb_height = unit * d->ticks_count - d->ticks_gap; /* rounded to match ticks... */
|
pb_height = unit * d->ticks_count - d->ticks_gap; /* rounded to match ticks... */
|
||||||
}
|
}
|
||||||
|
@ -165,7 +160,11 @@ progressbar_draw(Widget *widget, DrawCtx *ctx, int offset,
|
||||||
pb_width = (int) ((d->width - 2 * (d->border_width + d->border_padding) * d->data_items -
|
pb_width = (int) ((d->width - 2 * (d->border_width + d->border_padding) * d->data_items -
|
||||||
d->gap * (d->data_items - 1)) / d->data_items);
|
d->gap * (d->data_items - 1)) / d->data_items);
|
||||||
|
|
||||||
pb_y = widget->area.y + ((int) (widget->statusbar->height * (1 - d->height)) / 2) + d->border_width + d->border_padding;
|
pb_y = widget->area.y + ((int) (widget->statusbar->height * (1 - d->height)) / 2) +
|
||||||
|
d->border_width + d->border_padding;
|
||||||
|
|
||||||
|
widget_width = d->data_items * (pb_width +
|
||||||
|
2 * (d->border_width + d->border_padding) + d->gap) - d->gap;
|
||||||
|
|
||||||
for(i = 0; i < d->data_items; i++)
|
for(i = 0; i < d->data_items; i++)
|
||||||
{
|
{
|
||||||
|
@ -190,7 +189,7 @@ progressbar_draw(Widget *widget, DrawCtx *ctx, int offset,
|
||||||
else
|
else
|
||||||
rectangle.y = pb_y - border_offset - d->border_padding - 1;
|
rectangle.y = pb_y - border_offset - d->border_padding - 1;
|
||||||
|
|
||||||
rectangle.width = pb_width + d->border_width + 2 * d->border_padding - 1 + 2;
|
rectangle.width = pb_width + 2 * d->border_padding + d->border_width + 1;
|
||||||
rectangle.height = pb_height + d->border_width + 2 * d->border_padding + 1;
|
rectangle.height = pb_height + d->border_width + 2 * d->border_padding + 1;
|
||||||
if(d->border_padding)
|
if(d->border_padding)
|
||||||
draw_rectangle(ctx, rectangle, 1, True, d->bg[i]);
|
draw_rectangle(ctx, rectangle, 1, True, d->bg[i]);
|
||||||
|
@ -269,12 +268,16 @@ progressbar_draw(Widget *widget, DrawCtx *ctx, int offset,
|
||||||
if(d->ticks_count && d->ticks_gap)
|
if(d->ticks_count && d->ticks_gap)
|
||||||
{
|
{
|
||||||
unit = (pb_width + d->ticks_gap) / d->ticks_count;
|
unit = (pb_width + d->ticks_gap) / d->ticks_count;
|
||||||
pb_width = (int)unit * d->ticks_count - d->ticks_gap; /* rounded to match ticks... */
|
pb_width = unit * d->ticks_count - d->ticks_gap; /* rounded to match ticks... */
|
||||||
}
|
}
|
||||||
|
|
||||||
pb_height = (int) ((widget->statusbar->height * d->height - d->data_items * 2 * (d->border_width + d->border_padding) -
|
pb_height = (int) ((widget->statusbar->height * d->height -
|
||||||
|
d->data_items * 2 * (d->border_width + d->border_padding) -
|
||||||
(d->gap * (d->data_items - 1))) / d->data_items + 0.5);
|
(d->gap * (d->data_items - 1))) / d->data_items + 0.5);
|
||||||
pb_y = widget->area.y + ((int) (widget->statusbar->height * (1 - d->height)) / 2) + d->border_width + d->border_padding;
|
pb_y = widget->area.y + ((int) (widget->statusbar->height * (1 - d->height)) / 2) +
|
||||||
|
d->border_width + d->border_padding;
|
||||||
|
|
||||||
|
widget_width = pb_width + 2 * (d->border_width + d->border_padding);
|
||||||
|
|
||||||
for(i = 0; i < d->data_items; i++)
|
for(i = 0; i < d->data_items; i++)
|
||||||
{
|
{
|
||||||
|
@ -300,7 +303,7 @@ progressbar_draw(Widget *widget, DrawCtx *ctx, int offset,
|
||||||
else
|
else
|
||||||
rectangle.y = pb_y + pb_offset - border_offset - d->border_padding - 1;
|
rectangle.y = pb_y + pb_offset - border_offset - d->border_padding - 1;
|
||||||
|
|
||||||
rectangle.width = pb_width + d->border_width + 2 * d->border_padding - 1 + 2;
|
rectangle.width = pb_width + 2 * d->border_padding + d->border_width + 1;
|
||||||
rectangle.height = pb_height + d->border_width + 2 * d->border_padding + 1;
|
rectangle.height = pb_height + d->border_width + 2 * d->border_padding + 1;
|
||||||
if(d->border_padding)
|
if(d->border_padding)
|
||||||
draw_rectangle(ctx, rectangle, 1, True, d->bg[i]);
|
draw_rectangle(ctx, rectangle, 1, True, d->bg[i]);
|
||||||
|
@ -372,7 +375,15 @@ progressbar_draw(Widget *widget, DrawCtx *ctx, int offset,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
widget->area.width = d->width;
|
if(!widget->user_supplied_x)
|
||||||
|
widget->area.x = widget_calculate_offset(widget->statusbar->width,
|
||||||
|
widget_width,
|
||||||
|
offset,
|
||||||
|
widget->alignment);
|
||||||
|
if(!widget->user_supplied_y)
|
||||||
|
widget->area.y = 0;
|
||||||
|
|
||||||
|
widget->area.width = widget_width;
|
||||||
widget->area.height = widget->statusbar->height;
|
widget->area.height = widget->statusbar->height;
|
||||||
return widget->area.width;
|
return widget->area.width;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue