Fix possible chart rendering problem for single pixels
Generalize the special case of drawing a single pixel in a chart in case the two y coordinates happen to be identical. This should fix https://bugs.gentoo.org/show_bug.cgi?id=438872
This commit is contained in:
parent
d188b31a34
commit
83d18ccdf9
20
src/chart.c
20
src/chart.c
|
@ -267,6 +267,16 @@ gkrellm_set_chartdata_flags(GkrellmChartdata *cd, gint flags)
|
||||||
cd->flags = flags;
|
cd->flags = flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gk_draw_vertical_line(GdkDrawable *drawable, GdkGC *gc, gint x, gint y1, gint y2)
|
||||||
|
{
|
||||||
|
if (y1 == y2)
|
||||||
|
gdk_draw_point(drawable, gc, x, y1);
|
||||||
|
else
|
||||||
|
gdk_draw_line(drawable, gc, x, y1, x, y2);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static gint
|
static gint
|
||||||
chartdata_ycoord(GkrellmChart *cp, GkrellmChartdata *cd, gint yd)
|
chartdata_ycoord(GkrellmChart *cp, GkrellmChartdata *cd, gint yd)
|
||||||
{
|
{
|
||||||
|
@ -413,7 +423,7 @@ draw_chartdata_impulses(GkrellmChart *cp, GList *cd_list,
|
||||||
yI += cd->data[x];
|
yI += cd->data[x];
|
||||||
y = chartdata_ycoord(cp, cd, yI);
|
y = chartdata_ycoord(cp, cd, yI);
|
||||||
if (cd->data[x] > 0)
|
if (cd->data[x] > 0)
|
||||||
gdk_draw_line(cd->data_bitmap, _GK.bit1_GC, n, y1, n, y);
|
gk_draw_vertical_line(cd->data_bitmap, _GK.bit1_GC, n, y1, y);
|
||||||
y1 = y;
|
y1 = y;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -423,7 +433,7 @@ draw_chartdata_impulses(GkrellmChart *cp, GList *cd_list,
|
||||||
yN += cd->data[x];
|
yN += cd->data[x];
|
||||||
y = chartdata_ycoord(cp, cd, yN);
|
y = chartdata_ycoord(cp, cd, yN);
|
||||||
if (cd->data[x] > 0)
|
if (cd->data[x] > 0)
|
||||||
gdk_draw_line(cd->data_bitmap, _GK.bit1_GC, n, y0, n, y);
|
gk_draw_vertical_line(cd->data_bitmap, _GK.bit1_GC, n, y0, y);
|
||||||
y0 = y;
|
y0 = y;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -501,11 +511,7 @@ draw_chartdata_lines(GkrellmChart *cp, GkrellmChartdata *cd, gint i0)
|
||||||
cd->y_p_valid = FALSE; /* Need a store_chartdata to make it valid */
|
cd->y_p_valid = FALSE; /* Need a store_chartdata to make it valid */
|
||||||
if (cd->data[x] > 0 || (cd->inverted ? (y > y0) : (y < y0)))
|
if (cd->data[x] > 0 || (cd->inverted ? (y > y0) : (y < y0)))
|
||||||
{
|
{
|
||||||
if (y == y1)
|
gk_draw_vertical_line(cd->data_bitmap, _GK.bit1_GC, cp->x + n, y, y1);
|
||||||
gdk_draw_point(cd->data_bitmap, _GK.bit1_GC, cp->x + n, y1);
|
|
||||||
else
|
|
||||||
gdk_draw_line(cd->data_bitmap, _GK.bit1_GC,
|
|
||||||
cp->x + n, y, cp->x + n, y1);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* Push the grided pixmap through the data bitmap onto the expose pixmap
|
/* Push the grided pixmap through the data bitmap onto the expose pixmap
|
||||||
|
|
Loading…
Reference in New Issue