mirror of https://github.com/GNOME/gimp.git
plug-ins: port color-rotate drawing to cairo and simplify the code
This commit is contained in:
parent
d9932ff159
commit
a0d3d8d763
|
@ -83,15 +83,10 @@ void
|
|||
rcm_360_degrees (GtkWidget *button,
|
||||
RcmCircle *circle)
|
||||
{
|
||||
GtkStyle *style = gtk_widget_get_style (circle->preview);
|
||||
|
||||
circle->action_flag = DO_NOTHING;
|
||||
gtk_widget_queue_draw (circle->preview);
|
||||
|
||||
circle->angle->beta = circle->angle->alpha-circle->angle->cw_ccw * 0.001;
|
||||
color_rotate_draw_arrows (gtk_widget_get_window (circle->preview),
|
||||
style->black_gc,
|
||||
circle->angle);
|
||||
circle->action_flag = VIRGIN;
|
||||
|
||||
rcm_render_preview (Current.Bna->after);
|
||||
}
|
||||
|
||||
|
@ -116,18 +111,10 @@ void
|
|||
rcm_a_to_b (GtkWidget *button,
|
||||
RcmCircle *circle)
|
||||
{
|
||||
GtkStyle *style = gtk_widget_get_style (circle->preview);
|
||||
|
||||
circle->action_flag = DO_NOTHING;
|
||||
gtk_widget_queue_draw (circle->preview);
|
||||
|
||||
SWAP (circle->angle->alpha, circle->angle->beta);
|
||||
|
||||
color_rotate_draw_arrows (gtk_widget_get_window (circle->preview),
|
||||
style->black_gc,
|
||||
circle->angle);
|
||||
|
||||
circle->action_flag = VIRGIN;
|
||||
rcm_render_preview (Current.Bna->after);
|
||||
}
|
||||
|
||||
|
@ -181,10 +168,6 @@ rcm_switch_to_degrees (GtkWidget *button,
|
|||
rcm_spinbutton_to_degrees (Current.Gray->hue_entry,
|
||||
Current.Gray->hue,
|
||||
Current.Gray->hue_units_label);
|
||||
|
||||
Current.From->action_flag = VIRGIN;
|
||||
Current.To->action_flag = VIRGIN;
|
||||
Current.Gray->action_flag = VIRGIN;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -235,10 +218,6 @@ rcm_switch_to_radians (GtkWidget *button,
|
|||
rcm_spinbutton_to_radians (Current.Gray->hue_entry,
|
||||
Current.Gray->hue,
|
||||
Current.Gray->hue_units_label);
|
||||
|
||||
Current.From->action_flag = VIRGIN;
|
||||
Current.To->action_flag = VIRGIN;
|
||||
Current.Gray->action_flag = VIRGIN;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -289,10 +268,6 @@ rcm_switch_to_radians_over_PI (GtkWidget *button,
|
|||
rcm_spinbutton_to_radians_over_PI (Current.Gray->hue_entry,
|
||||
Current.Gray->hue,
|
||||
Current.Gray->hue_units_label);
|
||||
|
||||
Current.From->action_flag = VIRGIN;
|
||||
Current.To->action_flag = VIRGIN;
|
||||
Current.Gray->action_flag = VIRGIN;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -360,14 +335,13 @@ rcm_expose_event (GtkWidget *widget,
|
|||
GdkEventExpose *event,
|
||||
RcmCircle *circle)
|
||||
{
|
||||
if (circle->action_flag == VIRGIN)
|
||||
{
|
||||
GtkStyle *style = gtk_widget_get_style (widget);
|
||||
cairo_t *cr = gdk_cairo_create (gtk_widget_get_window (widget));
|
||||
|
||||
color_rotate_draw_arrows (gtk_widget_get_window (widget),
|
||||
style->black_gc,
|
||||
circle->angle);
|
||||
}
|
||||
cairo_translate (cr, 0.5, 0.5);
|
||||
|
||||
color_rotate_draw_arrows (cr, circle->angle);
|
||||
|
||||
cairo_destroy (cr);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -384,7 +358,6 @@ rcm_button_press_event (GtkWidget *widget,
|
|||
alpha = &circle->angle->alpha;
|
||||
beta = &circle->angle->beta;
|
||||
|
||||
circle->action_flag = DRAG_START;
|
||||
clicked_angle = angle_mod_2PI (arctg (CENTER - event->y, event->x - CENTER));
|
||||
circle->prev_clicked = clicked_angle;
|
||||
|
||||
|
@ -397,13 +370,8 @@ rcm_button_press_event (GtkWidget *widget,
|
|||
|
||||
if (*(circle->target) != clicked_angle)
|
||||
{
|
||||
GtkStyle *style = gtk_widget_get_style (widget);
|
||||
|
||||
*(circle->target) = clicked_angle;
|
||||
gtk_widget_queue_draw (circle->preview);
|
||||
color_rotate_draw_arrows (gtk_widget_get_window (widget),
|
||||
style->black_gc,
|
||||
circle->angle);
|
||||
|
||||
gtk_spin_button_set_value (GTK_SPIN_BUTTON (circle->alpha_entry),
|
||||
circle->angle->alpha *
|
||||
|
@ -428,18 +396,6 @@ rcm_release_event (GtkWidget *widget,
|
|||
GdkEventButton *event,
|
||||
RcmCircle *circle)
|
||||
{
|
||||
if (circle->action_flag == DRAGING)
|
||||
{
|
||||
GtkStyle *style = gtk_widget_get_style (widget);
|
||||
|
||||
gtk_widget_queue_draw (circle->preview);
|
||||
color_rotate_draw_arrows (gtk_widget_get_window (widget),
|
||||
style->black_gc,
|
||||
circle->angle);
|
||||
}
|
||||
|
||||
circle->action_flag = VIRGIN;
|
||||
|
||||
rcm_render_preview (Current.Bna->after);
|
||||
|
||||
return TRUE;
|
||||
|
@ -450,20 +406,15 @@ rcm_motion_notify_event (GtkWidget *widget,
|
|||
GdkEventMotion *event,
|
||||
RcmCircle *circle)
|
||||
{
|
||||
gfloat clicked_angle, delta;
|
||||
gfloat *alpha, *beta;
|
||||
gint cw_ccw;
|
||||
GdkGCValues values;
|
||||
gfloat clicked_angle, delta;
|
||||
gfloat *alpha, *beta;
|
||||
gint cw_ccw;
|
||||
|
||||
alpha = &(circle->angle->alpha);
|
||||
beta = &(circle->angle->beta);
|
||||
cw_ccw = circle->angle->cw_ccw;
|
||||
delta = angle_mod_2PI (cw_ccw * (*beta - *alpha));
|
||||
|
||||
values.function = GDK_INVERT;
|
||||
xor_gc = gdk_gc_new_with_values (gtk_widget_get_window (Current.From->preview),
|
||||
&values,
|
||||
GDK_GC_FUNCTION);
|
||||
|
||||
clicked_angle = angle_mod_2PI (arctg (CENTER - event->y, event->x - CENTER));
|
||||
|
||||
|
@ -472,31 +423,18 @@ rcm_motion_notify_event (GtkWidget *widget,
|
|||
|
||||
if (delta)
|
||||
{
|
||||
if (circle->action_flag == DRAG_START)
|
||||
{
|
||||
gtk_widget_queue_draw (circle->preview);
|
||||
circle->action_flag = DRAGING;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* this should be erasing entire angle */
|
||||
color_rotate_draw_arrows (gtk_widget_get_window (widget),
|
||||
xor_gc, circle->angle);
|
||||
}
|
||||
|
||||
if (circle->mode == EACH)
|
||||
{
|
||||
*(circle->target)=clicked_angle;
|
||||
*(circle->target) = clicked_angle;
|
||||
}
|
||||
else
|
||||
{
|
||||
circle->angle->alpha=angle_mod_2PI(circle->angle->alpha + delta);
|
||||
circle->angle->beta =angle_mod_2PI(circle->angle->beta + delta);
|
||||
circle->angle->alpha = angle_mod_2PI (circle->angle->alpha + delta);
|
||||
circle->angle->beta = angle_mod_2PI (circle->angle->beta + delta);
|
||||
}
|
||||
|
||||
gtk_widget_queue_draw (widget);
|
||||
gdk_window_process_updates (gtk_widget_get_window (widget), FALSE);
|
||||
color_rotate_draw_arrows (gtk_widget_get_window (widget),
|
||||
xor_gc, circle->angle);
|
||||
|
||||
gtk_spin_button_set_value (GTK_SPIN_BUTTON (circle->alpha_entry),
|
||||
circle->angle->alpha *
|
||||
|
@ -523,19 +461,14 @@ rcm_gray_expose_event (GtkWidget *widget,
|
|||
GdkEventExpose *event,
|
||||
RcmGray *circle)
|
||||
{
|
||||
if (circle->action_flag == VIRGIN)
|
||||
{
|
||||
GtkStyle *style = gtk_widget_get_style (widget);
|
||||
GdkWindow *window = gtk_widget_get_window (widget);
|
||||
cairo_t *cr = gdk_cairo_create (gtk_widget_get_window (widget));
|
||||
|
||||
color_rotate_draw_little_circle (window,
|
||||
style->black_gc,
|
||||
circle->hue, circle->satur);
|
||||
cairo_translate (cr, 0.5, 0.5);
|
||||
|
||||
color_rotate_draw_large_circle (window,
|
||||
style->black_gc,
|
||||
circle->gray_sat);
|
||||
}
|
||||
color_rotate_draw_little_circle (cr, circle->hue, circle->satur);
|
||||
color_rotate_draw_large_circle (cr, circle->gray_sat);
|
||||
|
||||
cairo_destroy (cr);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -545,27 +478,18 @@ rcm_gray_button_press_event (GtkWidget *widget,
|
|||
GdkEventButton *event,
|
||||
RcmGray *circle)
|
||||
{
|
||||
GtkStyle *style = gtk_widget_get_style (widget);
|
||||
int x, y;
|
||||
gint x, y;
|
||||
|
||||
x = event->x - GRAY_CENTER - LITTLE_RADIUS;
|
||||
y = GRAY_CENTER - event->y + LITTLE_RADIUS;
|
||||
|
||||
circle->action_flag = DRAG_START;
|
||||
circle->hue = angle_mod_2PI(arctg(y, x));
|
||||
circle->satur = sqrt (SQR (x) + SQR (y)) / GRAY_RADIUS;
|
||||
circle->hue = angle_mod_2PI(arctg(y, x));
|
||||
circle->satur = sqrt (SQR (x) + SQR (y)) / GRAY_RADIUS;
|
||||
|
||||
if (circle->satur > 1.0)
|
||||
circle->satur = 1;
|
||||
|
||||
gtk_widget_queue_draw (circle->preview);
|
||||
color_rotate_draw_little_circle (gtk_widget_get_window (widget),
|
||||
style->black_gc,
|
||||
circle->hue, circle->satur);
|
||||
|
||||
color_rotate_draw_large_circle (gtk_widget_get_window (circle->preview),
|
||||
gtk_widget_get_style (circle->preview)->black_gc,
|
||||
circle->gray_sat);
|
||||
|
||||
gtk_spin_button_set_value (GTK_SPIN_BUTTON (circle->hue_entry),
|
||||
circle->hue * rcm_units_factor (Current.Units));
|
||||
|
@ -584,18 +508,6 @@ rcm_gray_release_event (GtkWidget *widget,
|
|||
GdkEventButton *event,
|
||||
RcmGray *circle)
|
||||
{
|
||||
if (circle->action_flag == DRAGING)
|
||||
{
|
||||
GtkStyle *style = gtk_widget_get_style (widget);
|
||||
|
||||
color_rotate_draw_little_circle (gtk_widget_get_window (widget),
|
||||
style->black_gc,
|
||||
circle->hue,
|
||||
circle->satur);
|
||||
}
|
||||
|
||||
circle->action_flag = VIRGIN;
|
||||
|
||||
rcm_render_preview (Current.Bna->after);
|
||||
|
||||
return TRUE;
|
||||
|
@ -606,30 +518,9 @@ rcm_gray_motion_notify_event (GtkWidget *widget,
|
|||
GdkEventMotion *event,
|
||||
RcmGray *circle)
|
||||
{
|
||||
gint x, y;
|
||||
GdkGCValues values;
|
||||
gint x, y;
|
||||
|
||||
values.function = GDK_INVERT;
|
||||
xor_gc = gdk_gc_new_with_values (gtk_widget_get_window (Current.From->preview),
|
||||
&values,
|
||||
GDK_GC_FUNCTION);
|
||||
|
||||
if (circle->action_flag == DRAG_START)
|
||||
{
|
||||
GtkStyle *style = gtk_widget_get_style (circle->preview);
|
||||
|
||||
gtk_widget_queue_draw (circle->preview);
|
||||
color_rotate_draw_large_circle (gtk_widget_get_window (circle->preview),
|
||||
style->black_gc,
|
||||
circle->gray_sat);
|
||||
|
||||
circle->action_flag = DRAGING;
|
||||
}
|
||||
else
|
||||
{
|
||||
color_rotate_draw_little_circle (gtk_widget_get_window (widget), xor_gc,
|
||||
circle->hue, circle->satur); /* erase */
|
||||
}
|
||||
gtk_widget_queue_draw (circle->preview);
|
||||
|
||||
x = event->x - GRAY_CENTER - LITTLE_RADIUS;
|
||||
y = GRAY_CENTER - event->y + LITTLE_RADIUS;
|
||||
|
@ -640,9 +531,6 @@ rcm_gray_motion_notify_event (GtkWidget *widget,
|
|||
if (circle->satur > 1.0)
|
||||
circle->satur = 1;
|
||||
|
||||
color_rotate_draw_little_circle (gtk_widget_get_window (widget), xor_gc,
|
||||
circle->hue, circle->satur);
|
||||
|
||||
gtk_spin_button_set_value (GTK_SPIN_BUTTON (circle->hue_entry),
|
||||
circle->hue * rcm_units_factor(Current.Units));
|
||||
|
||||
|
@ -664,20 +552,11 @@ void
|
|||
rcm_set_alpha (GtkWidget *entry,
|
||||
RcmCircle *circle)
|
||||
{
|
||||
GtkStyle *style = gtk_widget_get_style (circle->preview);
|
||||
|
||||
if (circle->action_flag != VIRGIN)
|
||||
return;
|
||||
|
||||
circle->angle->alpha = (gtk_spin_button_get_value (GTK_SPIN_BUTTON (entry)) /
|
||||
rcm_units_factor (Current.Units));
|
||||
|
||||
gtk_widget_queue_draw (circle->preview);
|
||||
|
||||
color_rotate_draw_arrows (gtk_widget_get_window (circle->preview),
|
||||
style->black_gc,
|
||||
circle->angle);
|
||||
|
||||
rcm_render_preview (Current.Bna->after);
|
||||
}
|
||||
|
||||
|
@ -685,20 +564,11 @@ void
|
|||
rcm_set_beta (GtkWidget *entry,
|
||||
RcmCircle *circle)
|
||||
{
|
||||
GtkStyle *style = gtk_widget_get_style (circle->preview);
|
||||
|
||||
if (circle->action_flag != VIRGIN)
|
||||
return;
|
||||
|
||||
circle->angle->beta = (gtk_spin_button_get_value (GTK_SPIN_BUTTON (entry)) /
|
||||
rcm_units_factor(Current.Units));
|
||||
|
||||
gtk_widget_queue_draw (circle->preview);
|
||||
|
||||
color_rotate_draw_arrows (gtk_widget_get_window (circle->preview),
|
||||
style->black_gc,
|
||||
circle->angle);
|
||||
|
||||
rcm_render_preview (Current.Bna->after);
|
||||
}
|
||||
|
||||
|
@ -706,24 +576,11 @@ void
|
|||
rcm_set_hue (GtkWidget *entry,
|
||||
RcmGray *circle)
|
||||
{
|
||||
GtkStyle *style = gtk_widget_get_style (circle->preview);
|
||||
|
||||
if (circle->action_flag != VIRGIN)
|
||||
return;
|
||||
|
||||
circle->hue = (gtk_spin_button_get_value (GTK_SPIN_BUTTON (entry)) /
|
||||
rcm_units_factor(Current.Units));
|
||||
|
||||
gtk_widget_queue_draw (circle->preview);
|
||||
|
||||
color_rotate_draw_little_circle (gtk_widget_get_window (circle->preview),
|
||||
style->black_gc,
|
||||
circle->hue, circle->satur);
|
||||
|
||||
color_rotate_draw_large_circle (gtk_widget_get_window (circle->preview),
|
||||
style->black_gc,
|
||||
circle->gray_sat);
|
||||
|
||||
rcm_render_preview (Current.Bna->after);
|
||||
}
|
||||
|
||||
|
@ -731,23 +588,10 @@ void
|
|||
rcm_set_satur (GtkWidget *entry,
|
||||
RcmGray *circle)
|
||||
{
|
||||
GtkStyle *style = gtk_widget_get_style (circle->preview);
|
||||
|
||||
if (circle->action_flag != VIRGIN)
|
||||
return;
|
||||
|
||||
circle->satur = gtk_spin_button_get_value (GTK_SPIN_BUTTON (entry));
|
||||
|
||||
gtk_widget_queue_draw (circle->preview);
|
||||
|
||||
color_rotate_draw_little_circle (gtk_widget_get_window (circle->preview),
|
||||
style->black_gc,
|
||||
circle->hue, circle->satur);
|
||||
|
||||
color_rotate_draw_large_circle (gtk_widget_get_window (circle->preview),
|
||||
style->black_gc,
|
||||
circle->gray_sat);
|
||||
|
||||
rcm_render_preview (Current.Bna->after);
|
||||
}
|
||||
|
||||
|
@ -755,15 +599,9 @@ void
|
|||
rcm_set_gray_sat (GtkWidget *entry,
|
||||
RcmGray *circle)
|
||||
{
|
||||
GtkStyle *style = gtk_widget_get_style (circle->preview);
|
||||
|
||||
circle->gray_sat = gtk_spin_button_get_value (GTK_SPIN_BUTTON (entry));
|
||||
|
||||
gtk_widget_queue_draw (circle->preview);
|
||||
|
||||
color_rotate_draw_large_circle (gtk_widget_get_window (circle->preview),
|
||||
style->black_gc,
|
||||
circle->gray_sat);
|
||||
|
||||
rcm_render_preview (Current.Bna->after);
|
||||
}
|
||||
|
|
|
@ -200,7 +200,6 @@ rcm_create_one_circle (gint height,
|
|||
|
||||
st = g_new (RcmCircle, 1);
|
||||
|
||||
st->action_flag = VIRGIN;
|
||||
st->angle = g_new (RcmAngle, 1);
|
||||
st->angle->alpha = INITIAL_ALPHA;
|
||||
st->angle->beta = INITIAL_BETA;
|
||||
|
@ -407,9 +406,8 @@ rcm_create_gray (void)
|
|||
GtkAdjustment *adj;
|
||||
|
||||
Current.Gray = st = g_new (RcmGray, 1);
|
||||
st->hue = 0;
|
||||
st->satur = 0;
|
||||
st->action_flag = VIRGIN;
|
||||
st->hue = 0;
|
||||
st->satur = 0;
|
||||
|
||||
top_vbox = gtk_vbox_new (FALSE, 12);
|
||||
gtk_container_set_border_width (GTK_CONTAINER (top_vbox), 12);
|
||||
|
|
|
@ -46,55 +46,59 @@
|
|||
#include "color-rotate-draw.h"
|
||||
|
||||
|
||||
/* Global variables */
|
||||
|
||||
GdkGC *xor_gc;
|
||||
|
||||
|
||||
/* Drawing routines */
|
||||
|
||||
void
|
||||
color_rotate_draw_little_circle (GdkWindow *window,
|
||||
GdkGC *color,
|
||||
gfloat hue,
|
||||
gfloat satur)
|
||||
color_rotate_draw_little_circle (cairo_t *cr,
|
||||
gfloat hue,
|
||||
gfloat satur)
|
||||
{
|
||||
gint x,y;
|
||||
gint x, y;
|
||||
|
||||
x = GRAY_CENTER + GRAY_RADIUS * satur * cos(hue);
|
||||
y = GRAY_CENTER - GRAY_RADIUS * satur * sin(hue);
|
||||
|
||||
gdk_draw_arc (window, color, 0, x-LITTLE_RADIUS, y-LITTLE_RADIUS,
|
||||
2*LITTLE_RADIUS, 2*LITTLE_RADIUS, 0, 360*64);
|
||||
cairo_new_sub_path (cr);
|
||||
cairo_arc (cr, x, y, LITTLE_RADIUS, 0, 2 * G_PI);
|
||||
|
||||
cairo_set_line_width (cr, 3.0);
|
||||
cairo_set_source_rgba (cr, 1.0, 1.0, 1.0, 0.6);
|
||||
cairo_stroke_preserve (cr);
|
||||
|
||||
cairo_set_line_width (cr, 1.0);
|
||||
cairo_set_source_rgba (cr, 0.0, 0.0, 0.0, 0.8);
|
||||
cairo_stroke (cr);
|
||||
}
|
||||
|
||||
void
|
||||
color_rotate_draw_large_circle (GdkWindow *window,
|
||||
GdkGC *color,
|
||||
gfloat gray_sat)
|
||||
color_rotate_draw_large_circle (cairo_t *cr,
|
||||
gfloat gray_sat)
|
||||
{
|
||||
gint x, y;
|
||||
|
||||
x = GRAY_CENTER;
|
||||
y = GRAY_CENTER;
|
||||
|
||||
gdk_draw_arc (window, color, 0,
|
||||
ROUND (x - GRAY_RADIUS * gray_sat),
|
||||
ROUND (y - GRAY_RADIUS * gray_sat),
|
||||
ROUND (2 * GRAY_RADIUS * gray_sat),
|
||||
ROUND (2 * GRAY_RADIUS * gray_sat),
|
||||
0, 360 * 64);
|
||||
cairo_new_sub_path (cr);
|
||||
cairo_arc (cr, x, y, GRAY_RADIUS * gray_sat, 0, 2 * G_PI);
|
||||
|
||||
cairo_set_line_width (cr, 3.0);
|
||||
cairo_set_source_rgba (cr, 1.0, 1.0, 1.0, 0.6);
|
||||
cairo_stroke_preserve (cr);
|
||||
|
||||
cairo_set_line_width (cr, 1.0);
|
||||
cairo_set_source_rgba (cr, 0.0, 0.0, 0.0, 0.8);
|
||||
cairo_stroke (cr);
|
||||
}
|
||||
|
||||
|
||||
#define REL .8
|
||||
#define DEL .1
|
||||
#define REL 0.8
|
||||
#define DEL 0.1
|
||||
#define TICK 10
|
||||
|
||||
void
|
||||
color_rotate_draw_arrows (GdkWindow *window,
|
||||
GdkGC *color,
|
||||
RcmAngle *angle)
|
||||
color_rotate_draw_arrows (cairo_t *cr,
|
||||
RcmAngle *angle)
|
||||
{
|
||||
gint dist;
|
||||
gfloat alpha, beta, cw_ccw, delta;
|
||||
|
@ -102,58 +106,86 @@ color_rotate_draw_arrows (GdkWindow *window,
|
|||
alpha = angle->alpha;
|
||||
beta = angle->beta;
|
||||
cw_ccw = angle->cw_ccw;
|
||||
delta = angle_mod_2PI(beta - alpha);
|
||||
delta = angle_mod_2PI (beta - alpha);
|
||||
|
||||
if (cw_ccw == -1)
|
||||
delta = delta - TP;
|
||||
|
||||
gdk_draw_line (window,color,
|
||||
cairo_move_to (cr, CENTER, CENTER);
|
||||
cairo_line_to (cr,
|
||||
ROUND (CENTER + RADIUS * cos (alpha)),
|
||||
ROUND (CENTER - RADIUS * sin (alpha)));
|
||||
|
||||
cairo_move_to (cr,
|
||||
CENTER + RADIUS * cos (alpha),
|
||||
CENTER - RADIUS * sin (alpha));
|
||||
cairo_line_to (cr,
|
||||
ROUND (CENTER + RADIUS * REL * cos (alpha - DEL)),
|
||||
ROUND (CENTER - RADIUS * REL * sin (alpha - DEL)));
|
||||
|
||||
cairo_move_to (cr,
|
||||
CENTER + RADIUS * cos (alpha),
|
||||
CENTER - RADIUS * sin (alpha));
|
||||
cairo_line_to (cr,
|
||||
ROUND (CENTER + RADIUS * REL * cos (alpha + DEL)),
|
||||
ROUND (CENTER - RADIUS * REL * sin (alpha + DEL)));
|
||||
|
||||
cairo_move_to (cr,
|
||||
CENTER,
|
||||
CENTER);
|
||||
cairo_line_to (cr,
|
||||
ROUND (CENTER + RADIUS * cos (beta)),
|
||||
ROUND (CENTER - RADIUS * sin (beta)));
|
||||
|
||||
cairo_move_to (cr,
|
||||
CENTER + RADIUS * cos (beta),
|
||||
CENTER - RADIUS * sin (beta));
|
||||
cairo_line_to (cr,
|
||||
ROUND (CENTER + RADIUS * REL * cos (beta - DEL)),
|
||||
ROUND (CENTER - RADIUS * REL * sin (beta - DEL)));
|
||||
|
||||
cairo_move_to (cr,
|
||||
CENTER + RADIUS * cos (beta),
|
||||
CENTER - RADIUS * sin (beta));
|
||||
cairo_line_to (cr,
|
||||
ROUND (CENTER + RADIUS * REL * cos (beta + DEL)),
|
||||
ROUND (CENTER - RADIUS * REL * sin (beta + DEL)));
|
||||
|
||||
dist = RADIUS * EACH_OR_BOTH;
|
||||
|
||||
cairo_move_to (cr,
|
||||
CENTER + dist * cos (beta),
|
||||
CENTER - dist * sin (beta));
|
||||
cairo_line_to (cr,
|
||||
ROUND (CENTER + dist * cos(beta) + cw_ccw * TICK * sin (beta)),
|
||||
ROUND (CENTER - dist * sin(beta) + cw_ccw * TICK * cos (beta)));
|
||||
|
||||
cairo_new_sub_path (cr);
|
||||
|
||||
if (cw_ccw > 0)
|
||||
{
|
||||
cairo_arc_negative (cr,
|
||||
CENTER,
|
||||
CENTER,
|
||||
dist,
|
||||
-alpha,
|
||||
-beta);
|
||||
}
|
||||
else
|
||||
{
|
||||
cairo_arc (cr,
|
||||
CENTER,
|
||||
CENTER,
|
||||
ROUND (CENTER + RADIUS * cos(alpha)),
|
||||
ROUND (CENTER - RADIUS * sin(alpha)));
|
||||
dist,
|
||||
-alpha,
|
||||
-beta);
|
||||
}
|
||||
|
||||
gdk_draw_line( window,color,
|
||||
CENTER + RADIUS * cos(alpha),
|
||||
CENTER - RADIUS * sin(alpha),
|
||||
ROUND (CENTER + RADIUS * REL * cos(alpha - DEL)),
|
||||
ROUND (CENTER - RADIUS * REL * sin(alpha - DEL)));
|
||||
cairo_set_line_width (cr, 3.0);
|
||||
cairo_set_source_rgba (cr, 1.0, 1.0, 1.0, 0.6);
|
||||
cairo_stroke_preserve (cr);
|
||||
|
||||
gdk_draw_line (window,color,
|
||||
CENTER + RADIUS * cos(alpha),
|
||||
CENTER - RADIUS * sin(alpha),
|
||||
ROUND (CENTER + RADIUS * REL * cos(alpha + DEL)),
|
||||
ROUND (CENTER - RADIUS * REL * sin(alpha + DEL)));
|
||||
|
||||
gdk_draw_line (window,color,
|
||||
CENTER,
|
||||
CENTER,
|
||||
ROUND (CENTER + RADIUS * cos(beta)),
|
||||
ROUND (CENTER - RADIUS * sin(beta)));
|
||||
|
||||
gdk_draw_line (window,color,
|
||||
CENTER + RADIUS * cos(beta),
|
||||
CENTER - RADIUS * sin(beta),
|
||||
ROUND (CENTER + RADIUS * REL * cos(beta - DEL)),
|
||||
ROUND (CENTER - RADIUS * REL * sin(beta - DEL)));
|
||||
|
||||
gdk_draw_line (window,color,
|
||||
CENTER + RADIUS * cos(beta),
|
||||
CENTER - RADIUS * sin(beta),
|
||||
ROUND (CENTER + RADIUS * REL * cos(beta + DEL)),
|
||||
ROUND (CENTER - RADIUS * REL * sin(beta + DEL)));
|
||||
|
||||
dist = RADIUS * EACH_OR_BOTH;
|
||||
|
||||
gdk_draw_line (window,color,
|
||||
CENTER + dist * cos(beta),
|
||||
CENTER - dist * sin(beta),
|
||||
ROUND (CENTER + dist * cos(beta) + cw_ccw * TICK * sin(beta)),
|
||||
ROUND (CENTER - dist * sin(beta) + cw_ccw * TICK * cos(beta)));
|
||||
|
||||
alpha *= 180 * 64 / G_PI;
|
||||
delta *= 180 * 64 / G_PI;
|
||||
|
||||
gdk_draw_arc (window, color, 0, CENTER - dist, CENTER - dist,
|
||||
2*dist, 2*dist, alpha, delta);
|
||||
cairo_set_line_width (cr, 1.0);
|
||||
cairo_set_source_rgba (cr, 0.0, 0.0, 0.0, 0.8);
|
||||
cairo_stroke (cr);
|
||||
}
|
||||
|
|
|
@ -52,19 +52,10 @@
|
|||
#define EACH_OR_BOTH 0.3
|
||||
|
||||
|
||||
|
||||
/* Global variables */
|
||||
|
||||
extern GdkGC *xor_gc;
|
||||
|
||||
|
||||
void color_rotate_draw_little_circle (GdkWindow *window,
|
||||
GdkGC *color,
|
||||
void color_rotate_draw_little_circle (cairo_t *cr,
|
||||
gfloat hue,
|
||||
gfloat satur);
|
||||
void color_rotate_draw_large_circle (GdkWindow *window,
|
||||
GdkGC *color,
|
||||
void color_rotate_draw_large_circle (cairo_t *cr,
|
||||
gfloat gray_sat);
|
||||
void color_rotate_draw_arrows (GdkWindow *window,
|
||||
GdkGC *color,
|
||||
void color_rotate_draw_arrows (cairo_t *cr,
|
||||
RcmAngle *angle);
|
||||
|
|
|
@ -90,7 +90,6 @@ typedef struct
|
|||
gfloat *target;
|
||||
gint mode;
|
||||
RcmAngle *angle;
|
||||
RcmOp action_flag;
|
||||
gfloat prev_clicked;
|
||||
} RcmCircle;
|
||||
|
||||
|
|
Loading…
Reference in New Issue