X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=lib%2Fgtk-contrib%2Fpsppire-sheet.c;h=4baa27ddc1fa2bc4f1f4fd2d3cb98ae67fc4a93a;hb=c62b4284eb325eb993f24b4c2a1d115cdd3db448;hp=87547e84317bf3810fd1bfc801a17362bfd3359f;hpb=b93e51996d294eabe7bb43c33747c283cc865e11;p=pspp diff --git a/lib/gtk-contrib/psppire-sheet.c b/lib/gtk-contrib/psppire-sheet.c index 87547e8431..4baa27ddc1 100644 --- a/lib/gtk-contrib/psppire-sheet.c +++ b/lib/gtk-contrib/psppire-sheet.c @@ -759,7 +759,7 @@ psppire_sheet_set_vertical_axis (PsppireSheet *sheet, PsppireAxis *a) g_object_ref (sheet->vaxis); } -static const GtkBorder default_cell_padding = { 3, 3, 2, 2 }; +static const GtkBorder default_cell_padding = {3, 3, 3, 3}; static void psppire_sheet_set_property (GObject *object, @@ -1635,7 +1635,6 @@ psppire_sheet_select_row (PsppireSheet *sheet, gint row) sheet->range.col0 = 0; sheet->range.rowi = row; sheet->range.coli = psppire_axis_unit_count (sheet->haxis) - 1; - sheet->active_cell.row = row; g_signal_emit (sheet, sheet_signals[SELECT_ROW], 0, row); psppire_sheet_real_select_range (sheet, NULL); @@ -1659,7 +1658,6 @@ psppire_sheet_select_column (PsppireSheet *sheet, gint column) sheet->range.col0 = column; sheet->range.rowi = psppire_axis_unit_count (sheet->vaxis) - 1; sheet->range.coli = column; - sheet->active_cell.col = column; g_signal_emit (sheet, sheet_signals[SELECT_COLUMN], 0, column); psppire_sheet_real_select_range (sheet, NULL); @@ -1856,7 +1854,6 @@ psppire_sheet_style_set (GtkWidget *widget, set_entry_widget_font (sheet); } -#define BORDER_WIDTH 3 static void psppire_sheet_realize (GtkWidget *widget) @@ -1964,7 +1961,10 @@ psppire_sheet_realize (GtkWidget *widget) values.foreground = widget->style->white; values.function = GDK_INVERT; values.subwindow_mode = GDK_INCLUDE_INFERIORS; - values.line_width = BORDER_WIDTH; + values.line_width = MAX (sheet->cell_padding->left, + MAX (sheet->cell_padding->right, + MAX (sheet->cell_padding->top, + sheet->cell_padding->bottom))); sheet->xor_gc = gdk_gc_new_with_values (widget->window, &values, @@ -1974,7 +1974,6 @@ psppire_sheet_realize (GtkWidget *widget) GDK_GC_LINE_WIDTH ); - gtk_widget_set_parent_window (sheet->entry_widget, sheet->sheet_window); gtk_widget_set_parent (sheet->entry_widget, GTK_WIDGET (sheet)); @@ -2143,6 +2142,7 @@ psppire_sheet_unmap (GtkWidget *widget) gtk_widget_unmap (sheet->entry_widget); gtk_widget_unmap (sheet->button); + gtk_widget_unmap (sheet->hover_window->window); } /* get cell attributes of the given cell */ @@ -2716,11 +2716,11 @@ change_active_cell (PsppireSheet *sheet, gint row, gint col) old_row = sheet->active_cell.row; old_col = sheet->active_cell.col; - /* Erase the old cell */ - psppire_sheet_draw_active_cell (sheet); - entry_load_text (sheet); + /* Erase the old cell border */ + psppire_sheet_draw_active_cell (sheet); + sheet->range.row0 = row; sheet->range.col0 = col; sheet->range.rowi = row; @@ -3084,11 +3084,24 @@ psppire_sheet_draw_border (PsppireSheet *sheet, PsppireSheetRange new_range) rectangle_from_range (sheet, &new_range, &area); - gdk_draw_rectangle (sheet->sheet_window, - sheet->xor_gc, + area.width ++; + area.height ++; + + gdk_gc_set_clip_rectangle (sheet->xor_gc, &area); + + area.x += sheet->cell_padding->left / 2; + area.y += sheet->cell_padding->top / 2; + area.width -= (sheet->cell_padding->left + sheet->cell_padding->right ) / 2; + area.height -= (sheet->cell_padding->top + sheet->cell_padding->bottom ) / 2; + + gdk_draw_rectangle (sheet->sheet_window, sheet->xor_gc, FALSE, - area.x, area.y, - area.width, area.height); + area.x, + area.y, + area.width, + area.height); + + gdk_gc_set_clip_rectangle (sheet->xor_gc, NULL); } @@ -3153,8 +3166,6 @@ psppire_sheet_select_range (PsppireSheet *sheet, const PsppireSheetRange *range) sheet->range.rowi = range->rowi; sheet->range.col0 = range->col0; sheet->range.coli = range->coli; - sheet->active_cell.row = range->row0; - sheet->active_cell.col = range->col0; sheet->selection_cell.row = range->rowi; sheet->selection_cell.col = range->coli; @@ -3170,9 +3181,6 @@ psppire_sheet_unselect_range (PsppireSheet *sheet) psppire_sheet_real_unselect_range (sheet, NULL); sheet->state = GTK_STATE_NORMAL; - - change_active_cell (sheet, - sheet->active_cell.row, sheet->active_cell.col); } @@ -3279,7 +3287,7 @@ psppire_sheet_button_press (GtkWidget *widget, GdkModifierType mods; gint x, y; gint row, column; - gboolean veto; + g_return_val_if_fail (widget != NULL, FALSE); g_return_val_if_fail (PSPPIRE_IS_SHEET (widget), FALSE); @@ -3383,65 +3391,8 @@ psppire_sheet_button_press (GtkWidget *widget, NULL, NULL, event->time); gtk_grab_add (GTK_WIDGET (sheet)); - if (sheet->selection_mode != GTK_SELECTION_SINGLE && - sheet->selection_mode != GTK_SELECTION_NONE && - sheet->cursor_drag->type == GDK_SIZING && - !PSPPIRE_SHEET_IN_SELECTION (sheet) && !PSPPIRE_SHEET_IN_RESIZE (sheet)) - { - if (sheet->state == GTK_STATE_NORMAL) - { - row = sheet->active_cell.row; - column = sheet->active_cell.col; - sheet->active_cell.row = row; - sheet->active_cell.col = column; - sheet->drag_range = sheet->range; - sheet->state = PSPPIRE_SHEET_RANGE_SELECTED; - psppire_sheet_select_range (sheet, &sheet->drag_range); - } - sheet->x_drag = x; - sheet->y_drag = y; - if (row > sheet->range.rowi) row--; - if (column > sheet->range.coli) column--; - sheet->drag_cell.row = row; - sheet->drag_cell.col = column; - sheet->drag_range = sheet->range; - draw_xor_rectangle (sheet, sheet->drag_range); - PSPPIRE_SHEET_SET_FLAGS (sheet, PSPPIRE_SHEET_IN_RESIZE); - } - else if (sheet->cursor_drag->type == GDK_TOP_LEFT_ARROW && - !PSPPIRE_SHEET_IN_SELECTION (sheet) - && ! PSPPIRE_SHEET_IN_DRAG (sheet) - && sheet->active_cell.row >= 0 - && sheet->active_cell.col >= 0 - ) - { - if (sheet->state == GTK_STATE_NORMAL) - { - row = sheet->active_cell.row; - column = sheet->active_cell.col; - sheet->active_cell.row = row; - sheet->active_cell.col = column; - sheet->drag_range = sheet->range; - sheet->state = PSPPIRE_SHEET_RANGE_SELECTED; - psppire_sheet_select_range (sheet, &sheet->drag_range); - } - sheet->x_drag = x; - sheet->y_drag = y; - if (row < sheet->range.row0) row++; - if (row > sheet->range.rowi) row--; - if (column < sheet->range.col0) column++; - if (column > sheet->range.coli) column--; - sheet->drag_cell.row = row; - sheet->drag_cell.col = column; - sheet->drag_range = sheet->range; - draw_xor_rectangle (sheet, sheet->drag_range); - PSPPIRE_SHEET_SET_FLAGS (sheet, PSPPIRE_SHEET_IN_DRAG); - } - else - { - veto = psppire_sheet_click_cell (sheet, row, column); - if (veto) PSPPIRE_SHEET_SET_FLAGS (sheet, PSPPIRE_SHEET_IN_SELECTION); - } + if (psppire_sheet_click_cell (sheet, row, column)) + PSPPIRE_SHEET_SET_FLAGS (sheet, PSPPIRE_SHEET_IN_SELECTION); } if (event->window == sheet->column_title_window) @@ -3456,7 +3407,6 @@ psppire_sheet_button_press (GtkWidget *widget, if (psppire_sheet_model_get_column_sensitivity (sheet->model, column)) { - veto = psppire_sheet_click_cell (sheet, -1, column); gtk_grab_add (GTK_WIDGET (sheet)); PSPPIRE_SHEET_SET_FLAGS (sheet, PSPPIRE_SHEET_IN_SELECTION); } @@ -3473,7 +3423,6 @@ psppire_sheet_button_press (GtkWidget *widget, row = row_from_ypixel (sheet, y); if (psppire_sheet_model_get_row_sensitivity (sheet->model, row)) { - veto = psppire_sheet_click_cell (sheet, row, -1); gtk_grab_add (GTK_WIDGET (sheet)); PSPPIRE_SHEET_SET_FLAGS (sheet, PSPPIRE_SHEET_IN_SELECTION); } @@ -3533,8 +3482,6 @@ psppire_sheet_click_cell (PsppireSheet *sheet, gint row, gint column) sheet->range.rowi = psppire_axis_unit_count (sheet->vaxis) - 1; sheet->range.coli = psppire_axis_unit_count (sheet->haxis) - 1; - sheet->active_cell.row = 0; - sheet->active_cell.col = 0; psppire_sheet_select_range (sheet, NULL); return TRUE; } @@ -3549,8 +3496,6 @@ psppire_sheet_click_cell (PsppireSheet *sheet, gint row, gint column) change_active_cell (sheet, row, column); } - sheet->active_cell.row = row; - sheet->active_cell.col = column; sheet->selection_cell.row = row; sheet->selection_cell.col = column; sheet->range.row0 = row; @@ -3619,10 +3564,6 @@ psppire_sheet_button_release (GtkWidget *widget, psppire_sheet_real_unselect_range (sheet, NULL); - sheet->active_cell.row = sheet->active_cell.row + - (sheet->drag_range.row0 - sheet->range.row0); - sheet->active_cell.col = sheet->active_cell.col + - (sheet->drag_range.col0 - sheet->range.col0); sheet->selection_cell.row = sheet->selection_cell.row + (sheet->drag_range.row0 - sheet->range.row0); sheet->selection_cell.col = sheet->selection_cell.col + @@ -3644,10 +3585,6 @@ psppire_sheet_button_release (GtkWidget *widget, psppire_sheet_real_unselect_range (sheet, NULL); - sheet->active_cell.row = sheet->active_cell.row + - (sheet->drag_range.row0 - sheet->range.row0); - sheet->active_cell.col = sheet->active_cell.col + - (sheet->drag_range.col0 - sheet->range.col0); if (sheet->drag_range.row0 < sheet->range.row0) sheet->selection_cell.row = sheet->drag_range.row0; if (sheet->drag_range.rowi >= sheet->range.rowi) @@ -3752,7 +3689,8 @@ create_hover_window (void) #define HOVER_WINDOW_Y_OFFSET 2 static void -show_subtitle (PsppireSheet *sheet, gint row, gint column, const gchar *subtitle) +show_subtitle (PsppireSheet *sheet, gint row, gint column, + const gchar *subtitle) { gint x, y; gint px, py; @@ -4123,6 +4061,9 @@ psppire_sheet_crossing_notify (GtkWidget *widget, else if (event->window == sheet->row_title_window) sheet->row_title_under = event->type == GDK_ENTER_NOTIFY; + if (event->type == GDK_LEAVE_NOTIFY) + gtk_widget_hide (sheet->hover_window->window); + return TRUE; } @@ -4668,10 +4609,10 @@ psppire_sheet_size_allocate_entry (PsppireSheet *sheet) rectangle_from_cell (sheet, sheet->active_cell.row, sheet->active_cell.col, &entry_alloc); - entry_alloc.width -= BORDER_WIDTH ; - entry_alloc.height -= BORDER_WIDTH ; - entry_alloc.x += DIV_RND_UP (BORDER_WIDTH, 2); - entry_alloc.y += DIV_RND_UP (BORDER_WIDTH, 2); + entry_alloc.x += sheet->cell_padding->left; + entry_alloc.y += sheet->cell_padding->right; + entry_alloc.width -= sheet->cell_padding->left + sheet->cell_padding->right; + entry_alloc.height -= sheet->cell_padding->top + sheet->cell_padding->bottom; gtk_widget_set_size_request (sheet->entry_widget, entry_alloc.width,