static void gimp_rotate_tool_dialog (GimpTransformTool *tr_tool) { GimpRotateTool *rotate = GIMP_ROTATE_TOOL (tr_tool); GtkWidget *table; GtkWidget *button; GtkWidget *scale; GtkAdjustment *adj; table = gtk_table_new (4, 2, FALSE); gtk_table_set_row_spacings (GTK_TABLE (table), 2); gtk_table_set_col_spacings (GTK_TABLE (table), 6); gtk_table_set_row_spacing (GTK_TABLE (table), 1, 6); gtk_box_pack_start (GTK_BOX (gimp_tool_gui_get_vbox (tr_tool->gui)), table, FALSE, FALSE, 0); gtk_widget_show (table); rotate->angle_adj = (GtkAdjustment *) gtk_adjustment_new (0, -180, 180, 0.1, 15, 0); button = gtk_spin_button_new (rotate->angle_adj, 1.0, 2); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (button), TRUE); gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (button), TRUE); gtk_entry_set_width_chars (GTK_ENTRY (button), SB_WIDTH); gimp_table_attach_aligned (GTK_TABLE (table), 0, 0, _("_Angle:"), 0.0, 0.5, button, 1, TRUE); rotate->angle_spin_button = button; g_signal_connect (rotate->angle_adj, "value-changed", G_CALLBACK (rotate_angle_changed), tr_tool); scale = gtk_scale_new (GTK_ORIENTATION_HORIZONTAL, rotate->angle_adj); gtk_scale_set_draw_value (GTK_SCALE (scale), FALSE); gtk_table_attach (GTK_TABLE (table), scale, 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, GTK_SHRINK, 0, 0); gtk_widget_show (scale); adj = (GtkAdjustment *) gtk_adjustment_new (0, -1, 1, 1, 10, 0); button = gtk_spin_button_new (adj, 1.0, 2); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (button), TRUE); gtk_entry_set_width_chars (GTK_ENTRY (button), SB_WIDTH); gimp_table_attach_aligned (GTK_TABLE (table), 0, 2, _("Center _X:"), 0.0, 0.5, button, 1, TRUE); rotate->sizeentry = gimp_size_entry_new (1, GIMP_UNIT_PIXEL, "%a", TRUE, TRUE, FALSE, SB_WIDTH, GIMP_SIZE_ENTRY_UPDATE_SIZE); gimp_size_entry_add_field (GIMP_SIZE_ENTRY (rotate->sizeentry), GTK_SPIN_BUTTON (button), NULL); gimp_size_entry_set_pixel_digits (GIMP_SIZE_ENTRY (rotate->sizeentry), 2); gimp_table_attach_aligned (GTK_TABLE (table), 0, 3, _("Center _Y:"), 0.0, 0.5, rotate->sizeentry, 1, TRUE); g_signal_connect (rotate->sizeentry, "value-changed", G_CALLBACK (rotate_center_changed), tr_tool); }
static void gimp_rotate_tool_prepare (GimpTransformTool *tr_tool) { GimpRotateTool *rotate = GIMP_ROTATE_TOOL (tr_tool); GimpDisplay *display = GIMP_TOOL (tr_tool)->display; GimpImage *image = gimp_display_get_image (display); gdouble xres; gdouble yres; tr_tool->px = (gdouble) (tr_tool->x1 + tr_tool->x2) / 2.0; tr_tool->py = (gdouble) (tr_tool->y1 + tr_tool->y2) / 2.0; tr_tool->trans_info[ANGLE] = 0.0; tr_tool->trans_info[REAL_ANGLE] = 0.0; tr_tool->trans_info[PIVOT_X] = tr_tool->px; tr_tool->trans_info[PIVOT_Y] = tr_tool->py; gimp_image_get_resolution (image, &xres, &yres); g_signal_handlers_block_by_func (rotate->sizeentry, rotate_center_changed, tr_tool); gimp_size_entry_set_unit (GIMP_SIZE_ENTRY (rotate->sizeentry), gimp_display_get_shell (display)->unit); gimp_size_entry_set_resolution (GIMP_SIZE_ENTRY (rotate->sizeentry), 0, xres, FALSE); gimp_size_entry_set_resolution (GIMP_SIZE_ENTRY (rotate->sizeentry), 1, yres, FALSE); gimp_size_entry_set_refval_boundaries (GIMP_SIZE_ENTRY (rotate->sizeentry), 0, -65536, 65536 + gimp_image_get_width (image)); gimp_size_entry_set_refval_boundaries (GIMP_SIZE_ENTRY (rotate->sizeentry), 1, -65536, 65536 + gimp_image_get_height (image)); gimp_size_entry_set_size (GIMP_SIZE_ENTRY (rotate->sizeentry), 0, tr_tool->x1, tr_tool->x2); gimp_size_entry_set_size (GIMP_SIZE_ENTRY (rotate->sizeentry), 1, tr_tool->y1, tr_tool->y2); g_signal_handlers_unblock_by_func (rotate->sizeentry, rotate_center_changed, tr_tool); }
static void gimp_rotate_tool_dialog_update (GimpTransformTool *tr_tool) { GimpRotateTool *rotate = GIMP_ROTATE_TOOL (tr_tool); gtk_adjustment_set_value (rotate->angle_adj, gimp_rad_to_deg (tr_tool->trans_info[ANGLE])); g_signal_handlers_block_by_func (rotate->sizeentry, rotate_center_changed, tr_tool); gimp_size_entry_set_refval (GIMP_SIZE_ENTRY (rotate->sizeentry), 0, tr_tool->trans_info[PIVOT_X]); gimp_size_entry_set_refval (GIMP_SIZE_ENTRY (rotate->sizeentry), 1, tr_tool->trans_info[PIVOT_Y]); g_signal_handlers_unblock_by_func (rotate->sizeentry, rotate_center_changed, tr_tool); }
static gboolean gimp_rotate_tool_key_press (GimpTool *tool, GdkEventKey *kevent, GimpDisplay *display) { GimpDrawTool *draw_tool = GIMP_DRAW_TOOL (tool); if (display == draw_tool->display) { GimpRotateTool *rotate = GIMP_ROTATE_TOOL (tool); GtkSpinButton *angle_spin = GTK_SPIN_BUTTON (rotate->angle_spin_button); switch (kevent->keyval) { case GDK_KEY_Up: gtk_spin_button_spin (angle_spin, GTK_SPIN_STEP_FORWARD, 0.0); return TRUE; case GDK_KEY_Down: gtk_spin_button_spin (angle_spin, GTK_SPIN_STEP_BACKWARD, 0.0); return TRUE; case GDK_KEY_Right: gtk_spin_button_spin (angle_spin, GTK_SPIN_PAGE_FORWARD, 0.0); return TRUE; case GDK_KEY_Left: gtk_spin_button_spin (angle_spin, GTK_SPIN_PAGE_BACKWARD, 0.0); return TRUE; default: break; } } return GIMP_TOOL_CLASS (parent_class)->key_press (tool, kevent, display); }