gboolean rcm_gray_motion_notify_event (GtkWidget *widget, GdkEventMotion *event, RcmGray *circle) { gint x, y; GdkGCValues values; values.function = GDK_INVERT; xor_gc = gdk_gc_new_with_values (Current.From->preview->window, &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 (circle->preview->window, style->black_gc, circle->gray_sat); circle->action_flag = DRAGING; } else { color_rotate_draw_little_circle (widget->window, xor_gc, circle->hue, circle->satur); /* erase */ } x = event->x - GRAY_CENTER - LITTLE_RADIUS; y = GRAY_CENTER - event->y + LITTLE_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; color_rotate_draw_little_circle (widget->window, xor_gc, circle->hue, circle->satur); gtk_spin_button_set_value (GTK_SPIN_BUTTON (circle->hue_entry), circle->hue * rcm_units_factor(Current.Units)); gtk_spin_button_set_value (GTK_SPIN_BUTTON (circle->satur_entry), circle->satur); if (Current.RealTime) rcm_render_preview (Current.Bna->after); gdk_event_request_motions (event); return TRUE; }
gboolean rcm_button_press_event (GtkWidget *widget, GdkEventButton *event, RcmCircle *circle) { float clicked_angle; float *alpha; float *beta; 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; if ((sqrt (SQR (event->y - CENTER) + SQR (event->x - CENTER)) > RADIUS * EACH_OR_BOTH) && (min_prox (*alpha, *beta, clicked_angle) < G_PI / 12)) { circle->mode = EACH; circle->target = closest (alpha, beta, clicked_angle); 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 (widget->window, style->black_gc, circle->angle); gtk_spin_button_set_value (GTK_SPIN_BUTTON (circle->alpha_entry), circle->angle->alpha * rcm_units_factor(Current.Units)); gtk_spin_button_set_value (GTK_SPIN_BUTTON (circle->beta_entry), circle->angle->beta * rcm_units_factor(Current.Units)); if (Current.RealTime) rcm_render_preview (Current.Bna->after); } } else circle->mode = BOTH; return TRUE; }
gboolean rcm_gray_motion_notify_event (GtkWidget *widget, GdkEventMotion *event, RcmGray *circle) { gint x, y; gtk_widget_queue_draw (circle->preview); x = event->x - GRAY_CENTER - LITTLE_RADIUS; y = GRAY_CENTER - event->y + LITTLE_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_spin_button_set_value (GTK_SPIN_BUTTON (circle->hue_entry), circle->hue * rcm_units_factor(Current.Units)); gtk_spin_button_set_value (GTK_SPIN_BUTTON (circle->satur_entry), circle->satur); if (Current.RealTime) rcm_render_preview (Current.Bna->after); gdk_event_request_motions (event); return TRUE; }
gboolean rcm_motion_notify_event (GtkWidget *widget, GdkEventMotion *event, RcmCircle *circle) { gfloat clicked_angle, delta; clicked_angle = angle_mod_2PI (arctg (CENTER - event->y, event->x - CENTER)); delta = clicked_angle - circle->prev_clicked; circle->prev_clicked = clicked_angle; if (delta) { if (circle->mode == EACH) { *(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); } gtk_widget_queue_draw (widget); gdk_window_process_updates (gtk_widget_get_window (widget), FALSE); gtk_spin_button_set_value (GTK_SPIN_BUTTON (circle->alpha_entry), circle->angle->alpha * rcm_units_factor(Current.Units)); gtk_spin_button_set_value (GTK_SPIN_BUTTON (circle->beta_entry), circle->angle->beta * rcm_units_factor(Current.Units)); if (Current.RealTime) rcm_render_preview (Current.Bna->after); } gdk_event_request_motions (event); return TRUE; }
void rcm_set_hue (GtkWidget *entry, RcmGray *circle) { circle->hue = (gtk_spin_button_get_value (GTK_SPIN_BUTTON (entry)) / rcm_units_factor(Current.Units)); gtk_widget_queue_draw (circle->preview); rcm_render_preview (Current.Bna->after); }
static void rcm_spinbutton_to_radians_over_PI (GtkWidget *button, float value, GtkWidget *label) { GtkAdjustment *adj; adj = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (button)); adj->value = value * rcm_units_factor (Current.Units); adj->upper = 2.0; adj->step_increment = 0.0001; adj->page_increment = 0.001; gtk_spin_button_set_digits (GTK_SPIN_BUTTON (button), 4); gtk_label_set_text (GTK_LABEL (label), rcm_units_string (Current.Units)); }
void rcm_set_beta (GtkWidget *entry, gpointer data) { RcmCircle *circle = data; 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); rcm_draw_arrows (circle->preview->window, circle->preview->style->black_gc, circle->angle); rcm_render_preview (Current.Bna->after); }
static void rcm_spinbutton_to_radians_over_PI (GtkWidget *button, float value, GtkWidget *label) { GtkAdjustment *adj; adj = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (button)); gtk_adjustment_configure (adj, value * rcm_units_factor (Current.Units), gtk_adjustment_get_lower (adj), 2.0, 0.0001, 0.001, gtk_adjustment_get_page_size (adj)); gtk_spin_button_set_digits (GTK_SPIN_BUTTON (button), 4); gtk_label_set_text (GTK_LABEL (label), rcm_units_string (Current.Units)); }
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 (circle->preview->window, style->black_gc, circle->angle); rcm_render_preview (Current.Bna->after); }
gboolean rcm_gray_button_press_event (GtkWidget *widget, GdkEventButton *event, RcmGray *circle) { GtkStyle *style = gtk_widget_get_style (widget); int 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; if (circle->satur > 1.0) circle->satur = 1; gtk_widget_queue_draw (circle->preview); color_rotate_draw_little_circle (widget->window, style->black_gc, circle->hue, circle->satur); color_rotate_draw_large_circle (circle->preview->window, 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)); gtk_spin_button_set_value (GTK_SPIN_BUTTON (circle->satur_entry), circle->satur); if (Current.RealTime) rcm_render_preview (Current.Bna->after); return TRUE; }
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 (circle->preview->window, style->black_gc, circle->hue, circle->satur); color_rotate_draw_large_circle (circle->preview->window, style->black_gc, circle->gray_sat); rcm_render_preview (Current.Bna->after); }
gboolean rcm_motion_notify_event (GtkWidget *widget, GdkEventMotion *event, RcmCircle *circle) { gfloat clicked_angle, delta; gfloat *alpha, *beta; gint cw_ccw; GdkGCValues values; 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 (Current.From->preview->window, &values, GDK_GC_FUNCTION); clicked_angle = angle_mod_2PI (arctg (CENTER - event->y, event->x - CENTER)); delta = clicked_angle - circle->prev_clicked; circle->prev_clicked = clicked_angle; 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 (widget->window, xor_gc, circle->angle); } if (circle->mode == EACH) { *(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); } gdk_window_process_updates (widget->window, FALSE); color_rotate_draw_arrows (widget->window, xor_gc, circle->angle); gtk_spin_button_set_value (GTK_SPIN_BUTTON (circle->alpha_entry), circle->angle->alpha * rcm_units_factor(Current.Units)); gtk_spin_button_set_value (GTK_SPIN_BUTTON (circle->beta_entry), circle->angle->beta * rcm_units_factor(Current.Units)); if (Current.RealTime) rcm_render_preview (Current.Bna->after); } gdk_event_request_motions (event); return TRUE; }