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;
|
int segmentCount;
|
||||||
double *segmentPos;
|
double *segmentPos;
|
||||||
GdkColor **segmentColor;
|
GdkColor **segmentColor;
|
||||||
GdkColor *outline;
|
GdkColor **segmentOutline;
|
||||||
int diameter;
|
int diameter;
|
||||||
int segmentClipping;
|
int segmentClipping;
|
||||||
int cursorPos;
|
int cursorPos;
|
||||||
@@ -1543,7 +1543,7 @@ void GuiFreeSpiral(Spiral*);
|
|||||||
|
|
||||||
void GuiFillSpiral(Spiral*, GdkColor*);
|
void GuiFillSpiral(Spiral*, GdkColor*);
|
||||||
void GuiDrawSpiral(Spiral*);
|
void GuiDrawSpiral(Spiral*);
|
||||||
void GuiDrawSpiralSegment(Spiral*, GdkColor*, int);
|
void GuiDrawSpiralSegment(Spiral*, GdkColor*, GdkColor*, int);
|
||||||
void GuiDrawSpiralLabel(Spiral*, PangoLayout*, char*, GdkColor*, int, int);
|
void GuiDrawSpiralLabel(Spiral*, PangoLayout*, char*, GdkColor*, int, int);
|
||||||
void GuiChangeSpiralCursor(Spiral*, int);
|
void GuiChangeSpiralCursor(Spiral*, int);
|
||||||
void GuiMoveSpiralCursor(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)
|
static gboolean clip_idle_func(gpointer data)
|
||||||
@@ -190,22 +190,19 @@ static gboolean clip_idle_func(gpointer data)
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
if(spiral->segmentClipping < spiral->segmentCount)
|
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;
|
spiral->segmentClipping = spiral->segmentCount;
|
||||||
|
|
||||||
for(i=clipping; i < spiral->segmentCount; i++)
|
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;
|
spiral->segmentClipping = clipping;
|
||||||
|
|
||||||
/* Now redraw the last turn */
|
/* Now redraw the last turn */
|
||||||
|
|
||||||
for(i=ADAPTIVE_READ_SPIRAL_SIZE-300; i<=clipping; i++)
|
for(i=ADAPTIVE_READ_SPIRAL_SIZE-300; i<=clipping; i++)
|
||||||
GuiDrawSpiralSegment(spiral, Closure->background, i);
|
GuiDrawSpiralSegment(spiral, Closure->background, 0, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@@ -233,6 +230,7 @@ static gboolean segment_idle_func(gpointer data)
|
|||||||
segment-=100;
|
segment-=100;
|
||||||
GuiDrawSpiralSegment(Closure->readAdaptiveSpiral,
|
GuiDrawSpiralSegment(Closure->readAdaptiveSpiral,
|
||||||
Closure->readAdaptiveSpiral->segmentColor[segment],
|
Closure->readAdaptiveSpiral->segmentColor[segment],
|
||||||
|
0,
|
||||||
segment);
|
segment);
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@@ -255,8 +253,8 @@ static gboolean remove_fill_idle_func(gpointer data)
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
for(i=0; i<spiral->segmentCount; i++)
|
for(i=0; i<spiral->segmentCount; i++)
|
||||||
if(spiral->segmentColor[i] == Closure->whiteSector)
|
if(spiral->segmentColor[i] == Closure->whiteSector)
|
||||||
GuiDrawSpiralSegment(spiral, Closure->background, i);
|
GuiDrawSpiralSegment(spiral, Closure->background, 0, i);
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -116,11 +116,11 @@ static gboolean curve_idle_func(gpointer data)
|
|||||||
|
|
||||||
for(i=rc->lastSegment; i<ci->percent; i++)
|
for(i=rc->lastSegment; i<ci->percent; i++)
|
||||||
switch(Closure->readLinearCurve->ivalue[i])
|
switch(Closure->readLinearCurve->ivalue[i])
|
||||||
{ case 0: GuiDrawSpiralSegment(Closure->readLinearSpiral, Closure->blueSector, i); break;
|
{ case 0: GuiDrawSpiralSegment(Closure->readLinearSpiral, Closure->blueSector, 0, i); break;
|
||||||
case 1: GuiDrawSpiralSegment(Closure->readLinearSpiral, Closure->greenSector, i); break;
|
case 1: GuiDrawSpiralSegment(Closure->readLinearSpiral, Closure->greenSector, 0, i); break;
|
||||||
case 2: GuiDrawSpiralSegment(Closure->readLinearSpiral, Closure->redSector, i); break;
|
case 2: GuiDrawSpiralSegment(Closure->readLinearSpiral, Closure->redSector, 0, i); break;
|
||||||
case 3: GuiDrawSpiralSegment(Closure->readLinearSpiral, Closure->darkSector, i); break;
|
case 3: GuiDrawSpiralSegment(Closure->readLinearSpiral, Closure->darkSector, 0, i); break;
|
||||||
case 4: GuiDrawSpiralSegment(Closure->readLinearSpiral, Closure->yellowSector, i); break;
|
case 4: GuiDrawSpiralSegment(Closure->readLinearSpiral, Closure->yellowSector, 0, i); break;
|
||||||
}
|
}
|
||||||
|
|
||||||
rc->lastSegment = ci->percent;
|
rc->lastSegment = ci->percent;
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ static gboolean spiral_idle_func(gpointer data)
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
for(i=sii->from; i<=sii->to; 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);
|
g_free(sii);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ static gboolean spiral_idle_func(gpointer data)
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
for(i=sii->from; i<=sii->to; 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);
|
g_free(sii);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|||||||
@@ -91,7 +91,7 @@ static gboolean spiral_idle_func(gpointer data)
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
for(i=sii->from; i<=sii->to; 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);
|
g_free(sii);
|
||||||
return FALSE;
|
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->segmentCount = spiral->segmentClipping = n_segments;
|
||||||
spiral->segmentPos = g_malloc(n_segments * sizeof(double));
|
spiral->segmentPos = g_malloc(n_segments * sizeof(double));
|
||||||
spiral->segmentColor = g_malloc(n_segments * sizeof(GdkColor*));
|
spiral->segmentColor = g_malloc(n_segments * sizeof(GdkColor*));
|
||||||
spiral->outline = outline;
|
spiral->segmentOutline = g_malloc(n_segments * sizeof(GdkColor*));
|
||||||
spiral->cursorPos = -1;
|
spiral->cursorPos = -1;
|
||||||
|
|
||||||
for(i=0; i<n_segments; i++)
|
for(i=0; i<n_segments; i++)
|
||||||
{
|
{
|
||||||
spiral->segmentPos[i] = a;
|
spiral->segmentPos[i] = a;
|
||||||
spiral->segmentColor[i] = fill;
|
spiral->segmentColor[i] = fill;
|
||||||
|
spiral->segmentOutline[i] = outline;
|
||||||
|
|
||||||
ring_expand = ((double)segment_size * a) / (2.0*M_PI);
|
ring_expand = ((double)segment_size * a) / (2.0*M_PI);
|
||||||
a += atan((double)segment_size / scale_o);
|
a += atan((double)segment_size / scale_o);
|
||||||
@@ -85,6 +86,7 @@ void GuiFreeSpiral(Spiral *spiral)
|
|||||||
|
|
||||||
g_free(spiral->segmentPos);
|
g_free(spiral->segmentPos);
|
||||||
g_free(spiral->segmentColor);
|
g_free(spiral->segmentColor);
|
||||||
|
g_free(spiral->segmentOutline);
|
||||||
g_free(spiral);
|
g_free(spiral);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -139,9 +141,11 @@ void GuiDrawSpiral(Spiral *spiral)
|
|||||||
points[2].x = xo1; points[2].y = yo1;
|
points[2].x = xo1; points[2].y = yo1;
|
||||||
points[3].x = xi1; points[3].y = yi1;
|
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_gc_set_rgb_fg_color(Closure->drawGC, spiral->segmentColor[i]);
|
||||||
gdk_draw_polygon(d, Closure->drawGC, TRUE, points, 4);
|
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);
|
gdk_draw_polygon(d, Closure->drawGC, FALSE, points, 4);
|
||||||
|
|
||||||
xi0 = xi1; yi0 = yi1;
|
xi0 = xi1; yi0 = yi1;
|
||||||
@@ -153,7 +157,7 @@ void GuiDrawSpiral(Spiral *spiral)
|
|||||||
* Draw just one segment of the 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);
|
{ GdkDrawable *d = gtk_widget_get_window(spiral->widget);
|
||||||
double a;
|
double a;
|
||||||
double scale_i,scale_o,ring_expand;
|
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);
|
points[2].y = spiral->my + scale_o*sin(a);
|
||||||
|
|
||||||
spiral->segmentColor[segment] = color;
|
spiral->segmentColor[segment] = color;
|
||||||
|
spiral->segmentOutline[segment] = outline;
|
||||||
gdk_gc_set_rgb_fg_color(Closure->drawGC, color);
|
gdk_gc_set_rgb_fg_color(Closure->drawGC, color);
|
||||||
gdk_draw_polygon(d, Closure->drawGC, TRUE, points, 4);
|
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);
|
gdk_draw_polygon(d, Closure->drawGC, FALSE, points, 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -230,7 +235,7 @@ void GuiMoveSpiralCursor(Spiral *spiral, int to_segment)
|
|||||||
/* Erase old cursor */
|
/* Erase old cursor */
|
||||||
|
|
||||||
if(spiral->cursorPos >= 0)
|
if(spiral->cursorPos >= 0)
|
||||||
GuiDrawSpiralSegment(spiral, spiral->colorUnderCursor, spiral->cursorPos);
|
GuiDrawSpiralSegment(spiral, spiral->colorUnderCursor, 0, spiral->cursorPos);
|
||||||
|
|
||||||
/* Moving to -1 means cursor off */
|
/* Moving to -1 means cursor off */
|
||||||
|
|
||||||
@@ -247,7 +252,7 @@ void GuiMoveSpiralCursor(Spiral *spiral, int to_segment)
|
|||||||
/* Draw cursor at new place */
|
/* Draw cursor at new place */
|
||||||
|
|
||||||
spiral->colorUnderCursor = spiral->segmentColor[to_segment];
|
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