summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorGravatar Alexey Yakovenko <waker@users.sourceforge.net>2013-11-01 21:54:32 +0100
committerGravatar Alexey Yakovenko <waker@users.sourceforge.net>2013-11-01 21:54:32 +0100
commit5fbaeafd53c761d0b909ee60997bef60bb129977 (patch)
tree84c01f098d9c2565527dca749590777bf7aafcb3 /plugins
parent87a915f831fa97cec0e7c061345c6bd1223decd3 (diff)
gtkui: optimized scope using vlines
Diffstat (limited to 'plugins')
-rw-r--r--plugins/gtkui/widgets.c22
1 files changed, 21 insertions, 1 deletions
diff --git a/plugins/gtkui/widgets.c b/plugins/gtkui/widgets.c
index 4a676c4b..97ff4ab1 100644
--- a/plugins/gtkui/widgets.c
+++ b/plugins/gtkui/widgets.c
@@ -2329,6 +2329,7 @@ scope_wavedata_listener (void *ctx, ddb_audio_data_t *data) {
}
}
+#if 0
// Bresenham's line drawing from http://rosettacode.org
static inline void
_draw_line (uint8_t *data, int stride, int x0, int y0, int x1, int y1) {
@@ -2345,6 +2346,25 @@ _draw_line (uint8_t *data, int stride, int x0, int y0, int x1, int y1) {
if (e2 < dy) { err += dx; y0 += sy; }
}
}
+#endif
+
+static inline void
+_draw_vline (uint8_t *data, int stride, int x0, int y0, int y1) {
+ if (y0 > y1) {
+ int tmp = y0;
+ y0 = y1;
+ y1 = tmp;
+ y1--;
+ }
+ else if (y0 < y1) {
+ y0++;
+ }
+ while (y0 <= y1) {
+ uint32_t *ptr = (uint32_t*)&data[y0*stride+x0*4];
+ *ptr = 0xffffffff;
+ y0++;
+ }
+}
gboolean
scope_draw_cairo (GtkWidget *widget, cairo_t *cr, gpointer user_data) {
@@ -2396,7 +2416,7 @@ scope_draw_cairo (GtkWidget *widget, cairo_t *cr, gpointer user_data) {
if (y >= a.height) {
y = a.height-1;
}
- _draw_line (data, stride, i-1, prev_y, i, y);
+ _draw_vline (data, stride, i, prev_y, y);
prev_y = y;
}
cairo_surface_mark_dirty (w->surf);