Set outline color per spiral segment
This commit is contained in:
committed by
Stéphane Lesimple
parent
73218aebd2
commit
ed8d9cfd66
@@ -1529,7 +1529,7 @@ typedef struct _Spiral
|
||||
int segmentCount;
|
||||
double *segmentPos;
|
||||
GdkColor **segmentColor;
|
||||
GdkColor *outline;
|
||||
GdkColor **segmentOutline;
|
||||
int diameter;
|
||||
int segmentClipping;
|
||||
int cursorPos;
|
||||
@@ -1543,7 +1543,7 @@ void GuiFreeSpiral(Spiral*);
|
||||
|
||||
void GuiFillSpiral(Spiral*, GdkColor*);
|
||||
void GuiDrawSpiral(Spiral*);
|
||||
void GuiDrawSpiralSegment(Spiral*, GdkColor*, int);
|
||||
void GuiDrawSpiralSegment(Spiral*, GdkColor*, GdkColor*, int);
|
||||
void GuiDrawSpiralLabel(Spiral*, PangoLayout*, char*, GdkColor*, int, int);
|
||||
void GuiChangeSpiralCursor(Spiral*, int);
|
||||
void GuiMoveSpiralCursor(Spiral*, int);
|
||||
|
||||
@@ -182,7 +182,7 @@ static gboolean expose_cb(GtkWidget *widget, GdkEventExpose *event, gpointer dat
|
||||
}
|
||||
|
||||
/*
|
||||
* Clip the spiral. Simply remove the clipping elements to avoid flicker.
|
||||
* Clip the spiral.
|
||||
*/
|
||||
|
||||
static gboolean clip_idle_func(gpointer data)
|
||||
@@ -190,22 +190,19 @@ static gboolean clip_idle_func(gpointer data)
|
||||
int i;
|
||||
|
||||
if(spiral->segmentClipping < spiral->segmentCount)
|
||||
{ GdkColor *outline = spiral->outline;
|
||||
int clipping = spiral->segmentClipping;
|
||||
{ int clipping = spiral->segmentClipping;
|
||||
|
||||
spiral->outline = Closure->background;
|
||||
spiral->segmentClipping = spiral->segmentCount;
|
||||
|
||||
for(i=clipping; i < spiral->segmentCount; i++)
|
||||
GuiDrawSpiralSegment(spiral, Closure->background, i);
|
||||
GuiDrawSpiralSegment(spiral, Closure->background, Closure->background, i);
|
||||
|
||||
spiral->outline = outline;
|
||||
spiral->segmentClipping = clipping;
|
||||
|
||||
/* Now redraw the last turn */
|
||||
|
||||
for(i=ADAPTIVE_READ_SPIRAL_SIZE-300; i<=clipping; i++)
|
||||
GuiDrawSpiralSegment(spiral, Closure->background, i);
|
||||
GuiDrawSpiralSegment(spiral, Closure->background, 0, i);
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
@@ -233,6 +230,7 @@ static gboolean segment_idle_func(gpointer data)
|
||||
segment-=100;
|
||||
GuiDrawSpiralSegment(Closure->readAdaptiveSpiral,
|
||||
Closure->readAdaptiveSpiral->segmentColor[segment],
|
||||
0,
|
||||
segment);
|
||||
|
||||
return FALSE;
|
||||
@@ -255,8 +253,8 @@ static gboolean remove_fill_idle_func(gpointer data)
|
||||
int i;
|
||||
|
||||
for(i=0; i<spiral->segmentCount; i++)
|
||||
if(spiral->segmentColor[i] == Closure->whiteSector)
|
||||
GuiDrawSpiralSegment(spiral, Closure->background, i);
|
||||
if(spiral->segmentColor[i] == Closure->whiteSector)
|
||||
GuiDrawSpiralSegment(spiral, Closure->background, 0, i);
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -116,11 +116,11 @@ static gboolean curve_idle_func(gpointer data)
|
||||
|
||||
for(i=rc->lastSegment; i<ci->percent; i++)
|
||||
switch(Closure->readLinearCurve->ivalue[i])
|
||||
{ case 0: GuiDrawSpiralSegment(Closure->readLinearSpiral, Closure->blueSector, i); break;
|
||||
case 1: GuiDrawSpiralSegment(Closure->readLinearSpiral, Closure->greenSector, i); break;
|
||||
case 2: GuiDrawSpiralSegment(Closure->readLinearSpiral, Closure->redSector, i); break;
|
||||
case 3: GuiDrawSpiralSegment(Closure->readLinearSpiral, Closure->darkSector, i); break;
|
||||
case 4: GuiDrawSpiralSegment(Closure->readLinearSpiral, Closure->yellowSector, i); break;
|
||||
{ case 0: GuiDrawSpiralSegment(Closure->readLinearSpiral, Closure->blueSector, 0, i); break;
|
||||
case 1: GuiDrawSpiralSegment(Closure->readLinearSpiral, Closure->greenSector, 0, i); break;
|
||||
case 2: GuiDrawSpiralSegment(Closure->readLinearSpiral, Closure->redSector, 0, i); break;
|
||||
case 3: GuiDrawSpiralSegment(Closure->readLinearSpiral, Closure->darkSector, 0, i); break;
|
||||
case 4: GuiDrawSpiralSegment(Closure->readLinearSpiral, Closure->yellowSector, 0, i); break;
|
||||
}
|
||||
|
||||
rc->lastSegment = ci->percent;
|
||||
|
||||
@@ -78,7 +78,7 @@ static gboolean spiral_idle_func(gpointer data)
|
||||
int i;
|
||||
|
||||
for(i=sii->from; i<=sii->to; i++)
|
||||
GuiDrawSpiralSegment(sii->cmpSpiral, sii->segColor, i-1);
|
||||
GuiDrawSpiralSegment(sii->cmpSpiral, sii->segColor, 0, i-1);
|
||||
|
||||
g_free(sii);
|
||||
return FALSE;
|
||||
|
||||
@@ -81,7 +81,7 @@ static gboolean spiral_idle_func(gpointer data)
|
||||
int i;
|
||||
|
||||
for(i=sii->from; i<=sii->to; i++)
|
||||
GuiDrawSpiralSegment(sii->cmpSpiral, sii->segColor, i-1);
|
||||
GuiDrawSpiralSegment(sii->cmpSpiral, sii->segColor, 0, i-1);
|
||||
|
||||
g_free(sii);
|
||||
return FALSE;
|
||||
|
||||
@@ -91,7 +91,7 @@ static gboolean spiral_idle_func(gpointer data)
|
||||
int i;
|
||||
|
||||
for(i=sii->from; i<=sii->to; i++)
|
||||
GuiDrawSpiralSegment(sii->cmpSpiral, sii->segColor, i-1);
|
||||
GuiDrawSpiralSegment(sii->cmpSpiral, sii->segColor, 0, i-1);
|
||||
|
||||
g_free(sii);
|
||||
return FALSE;
|
||||
|
||||
17
src/spiral.c
17
src/spiral.c
@@ -51,13 +51,14 @@ Spiral* GuiCreateSpiral(GdkColor *outline, GdkColor *fill,
|
||||
spiral->segmentCount = spiral->segmentClipping = n_segments;
|
||||
spiral->segmentPos = g_malloc(n_segments * sizeof(double));
|
||||
spiral->segmentColor = g_malloc(n_segments * sizeof(GdkColor*));
|
||||
spiral->outline = outline;
|
||||
spiral->segmentOutline = g_malloc(n_segments * sizeof(GdkColor*));
|
||||
spiral->cursorPos = -1;
|
||||
|
||||
for(i=0; i<n_segments; i++)
|
||||
{
|
||||
spiral->segmentPos[i] = a;
|
||||
spiral->segmentColor[i] = fill;
|
||||
spiral->segmentOutline[i] = outline;
|
||||
|
||||
ring_expand = ((double)segment_size * a) / (2.0*M_PI);
|
||||
a += atan((double)segment_size / scale_o);
|
||||
@@ -85,6 +86,7 @@ void GuiFreeSpiral(Spiral *spiral)
|
||||
|
||||
g_free(spiral->segmentPos);
|
||||
g_free(spiral->segmentColor);
|
||||
g_free(spiral->segmentOutline);
|
||||
g_free(spiral);
|
||||
}
|
||||
|
||||
@@ -139,9 +141,11 @@ void GuiDrawSpiral(Spiral *spiral)
|
||||
points[2].x = xo1; points[2].y = yo1;
|
||||
points[3].x = xi1; points[3].y = yi1;
|
||||
|
||||
GdkColor *outline = spiral->segmentOutline[i] ? spiral->segmentOutline[i] : Closure->grid;
|
||||
|
||||
gdk_gc_set_rgb_fg_color(Closure->drawGC, spiral->segmentColor[i]);
|
||||
gdk_draw_polygon(d, Closure->drawGC, TRUE, points, 4);
|
||||
gdk_gc_set_rgb_fg_color(Closure->drawGC, spiral->outline);
|
||||
gdk_gc_set_rgb_fg_color(Closure->drawGC, outline);
|
||||
gdk_draw_polygon(d, Closure->drawGC, FALSE, points, 4);
|
||||
|
||||
xi0 = xi1; yi0 = yi1;
|
||||
@@ -153,7 +157,7 @@ void GuiDrawSpiral(Spiral *spiral)
|
||||
* Draw just one segment of the spiral
|
||||
*/
|
||||
|
||||
void GuiDrawSpiralSegment(Spiral *spiral, GdkColor *color, int segment)
|
||||
void GuiDrawSpiralSegment(Spiral *spiral, GdkColor *color, GdkColor *outline, int segment)
|
||||
{ GdkDrawable *d = gtk_widget_get_window(spiral->widget);
|
||||
double a;
|
||||
double scale_i,scale_o,ring_expand;
|
||||
@@ -185,9 +189,10 @@ void GuiDrawSpiralSegment(Spiral *spiral, GdkColor *color, int segment)
|
||||
points[2].y = spiral->my + scale_o*sin(a);
|
||||
|
||||
spiral->segmentColor[segment] = color;
|
||||
spiral->segmentOutline[segment] = outline;
|
||||
gdk_gc_set_rgb_fg_color(Closure->drawGC, color);
|
||||
gdk_draw_polygon(d, Closure->drawGC, TRUE, points, 4);
|
||||
gdk_gc_set_rgb_fg_color(Closure->drawGC, spiral->outline);
|
||||
gdk_gc_set_rgb_fg_color(Closure->drawGC, outline);
|
||||
gdk_draw_polygon(d, Closure->drawGC, FALSE, points, 4);
|
||||
}
|
||||
|
||||
@@ -230,7 +235,7 @@ void GuiMoveSpiralCursor(Spiral *spiral, int to_segment)
|
||||
/* Erase old cursor */
|
||||
|
||||
if(spiral->cursorPos >= 0)
|
||||
GuiDrawSpiralSegment(spiral, spiral->colorUnderCursor, spiral->cursorPos);
|
||||
GuiDrawSpiralSegment(spiral, spiral->colorUnderCursor, 0, spiral->cursorPos);
|
||||
|
||||
/* Moving to -1 means cursor off */
|
||||
|
||||
@@ -247,7 +252,7 @@ void GuiMoveSpiralCursor(Spiral *spiral, int to_segment)
|
||||
/* Draw cursor at new place */
|
||||
|
||||
spiral->colorUnderCursor = spiral->segmentColor[to_segment];
|
||||
GuiDrawSpiralSegment(spiral, Closure->blueSector, to_segment);
|
||||
GuiDrawSpiralSegment(spiral, Closure->blueSector, 0, to_segment);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user