- sheet->old_vadjustment = sheet->vadjustment->value;
- adjustment->value = y;
-
-
- if (new_row == 0)
- {
- sheet->vadjustment->step_increment = yyy_row_height (sheet, 0);
- }
- else
- {
- sheet->vadjustment->step_increment =
- MIN (yyy_row_height (sheet, new_row), yyy_row_height (sheet, new_row - 1));
- }
-
- sheet->vadjustment->value = adjustment->value;
-
- value = adjustment->value;
-
- if (value >= - sheet->voffset)
- {
- /* scroll down */
- diff = value + sheet->voffset;
- }
- else
- {
- /* scroll up */
- diff = - sheet->voffset - value;
- }
-
- sheet->voffset = - value;
-
- sheet->view.row0 = ROW_FROM_YPIXEL (sheet, sheet->column_title_area.height + 1);
- sheet->view.rowi = ROW_FROM_YPIXEL (sheet, sheet->sheet_window_height - 1);
- if (!sheet->column_titles_visible)
- sheet->view.row0 = ROW_FROM_YPIXEL (sheet, 1);
-
- if (GTK_WIDGET_REALIZED (sheet->sheet_entry) &&
- sheet->state == GTK_SHEET_NORMAL &&
- sheet->active_cell.row >= 0 && sheet->active_cell.col >= 0 &&
- !gtk_sheet_cell_isvisible (sheet, sheet->active_cell.row,
- sheet->active_cell.col))
- {
- const gchar *text;
-
- text = gtk_entry_get_text (GTK_ENTRY (gtk_sheet_get_entry (sheet)));
-
- if (!text || strlen (text) == 0)
- gtk_sheet_cell_clear (sheet,
- sheet->active_cell.row,
- sheet->active_cell.col);
- gtk_widget_unmap (sheet->sheet_entry);
- }
-
- gtk_sheet_position_children (sheet);
-
- gtk_sheet_range_draw (sheet, NULL);
- size_allocate_row_title_buttons (sheet);
- size_allocate_global_button (sheet);
-}
-
-static void
-hadjustment_value_changed (GtkAdjustment * adjustment,
- gpointer data)
-{
- GtkSheet *sheet;
- gint i, diff, value, old_value;
- gint column, new_column;
- gint x = 0;
-
- g_return_if_fail (adjustment != NULL);
- g_return_if_fail (data != NULL);
- g_return_if_fail (GTK_IS_SHEET (data));
-
- sheet = GTK_SHEET (data);
-
- if (GTK_SHEET_IS_FROZEN (sheet)) return;
-
- column = COLUMN_FROM_XPIXEL (sheet,sheet->row_title_area.width + CELL_SPACING);
- if (!sheet->row_titles_visible)
- column = COLUMN_FROM_XPIXEL (sheet, CELL_SPACING);
-
- old_value = - sheet->hoffset;
-
- for (i = 0; i < xxx_column_count (sheet); i++)
- {
- if (xxx_column_is_visible (sheet, i)) x += xxx_column_width (sheet, i);
- if (x > adjustment->value) break;
- }
- x -= xxx_column_width (sheet, i);
- new_column = i;
-
- if (adjustment->value > sheet->old_hadjustment && sheet->old_hadjustment > 0 &&
- xxx_column_width (sheet, i) > sheet->hadjustment->step_increment)
- {
- /* This avoids embarrassing twitching */
- if (column == new_column && column != xxx_column_count (sheet) - 1 &&
- adjustment->value - sheet->old_hadjustment >=
- sheet->hadjustment->step_increment &&
- new_column + 1 != MIN_VISIBLE_COLUMN (sheet))
- {
- new_column += 1;
- x += xxx_column_width (sheet, column);
- }
- }
-
- /* Negative old_adjustment enforces the redraw, otherwise avoid spureous redraw */
- if (sheet->old_hadjustment >= 0. && new_column == column)
- {
- sheet->old_hadjustment = sheet->hadjustment->value;
- return;
- }
-
- sheet->old_hadjustment = sheet->hadjustment->value;
- adjustment->value = x;
-
- if (new_column == 0)
- {
- sheet->hadjustment->step_increment = xxx_column_width (sheet, 0);
- }
- else
- {
- sheet->hadjustment->step_increment =
- MIN (xxx_column_width (sheet, new_column), xxx_column_width (sheet, new_column - 1));
- }
-
-
- sheet->hadjustment->value = adjustment->value;
-
- value = adjustment->value;
-
- if (value >= - sheet->hoffset)
- {
- /* scroll right */
- diff = value + sheet->hoffset;
- }
- else
- {
- /* scroll left */
- diff = - sheet->hoffset - value;
- }
-
- sheet->hoffset = - value;
-
- sheet->view.col0 = COLUMN_FROM_XPIXEL (sheet, sheet->row_title_area.width + 1);
- sheet->view.coli = COLUMN_FROM_XPIXEL (sheet, sheet->sheet_window_width);
- if (!sheet->row_titles_visible)
- sheet->view.col0 = COLUMN_FROM_XPIXEL (sheet, 1);
-
- if (GTK_WIDGET_REALIZED (sheet->sheet_entry) &&
- sheet->state == GTK_SHEET_NORMAL &&
- sheet->active_cell.row >= 0 && sheet->active_cell.col >= 0 &&
- !gtk_sheet_cell_isvisible (sheet, sheet->active_cell.row,
- sheet->active_cell.col))
- {
- const gchar *text;
-
- text = gtk_entry_get_text (GTK_ENTRY (gtk_sheet_get_entry (sheet)));
- if (!text || strlen (text) == 0)
- gtk_sheet_cell_clear (sheet,
- sheet->active_cell.row,
- sheet->active_cell.col);
-
- gtk_widget_unmap (sheet->sheet_entry);
- }
-
- gtk_sheet_position_children (sheet);
-
- gtk_sheet_range_draw (sheet, NULL);
- size_allocate_column_title_buttons (sheet);
-}
-
-
-/* COLUMN RESIZING */
-static void
-draw_xor_vline (GtkSheet * sheet)
-{
- GtkWidget *widget;
-
- g_return_if_fail (sheet != NULL);
-
- widget = GTK_WIDGET (sheet);
-
- gdk_draw_line (widget->window, sheet->xor_gc,
- sheet->x_drag,
- sheet->column_title_area.height,
- sheet->x_drag,
- sheet->sheet_window_height + 1);
-}
-
-/* ROW RESIZING */
-static void
-draw_xor_hline (GtkSheet * sheet)
-{
- GtkWidget *widget;
-
- g_return_if_fail (sheet != NULL);
-
- widget = GTK_WIDGET (sheet);
-
- gdk_draw_line (widget->window, sheet->xor_gc,
- sheet->row_title_area.width,
- sheet->y_drag,
-
- sheet->sheet_window_width + 1,
- sheet->y_drag);
-}
-
-/* SELECTED RANGE */
-static void
-draw_xor_rectangle (GtkSheet *sheet, GtkSheetRange range)
-{
- gint i;
- GdkRectangle clip_area, area;
- GdkGCValues values;
-
- area.x = COLUMN_LEFT_XPIXEL (sheet, range.col0);
- area.y = ROW_TOP_YPIXEL (sheet, range.row0);
- area.width = COLUMN_LEFT_XPIXEL (sheet, range.coli)- area.x+
- xxx_column_width (sheet, range.coli);
- area.height = ROW_TOP_YPIXEL (sheet, range.rowi)- area.y+
- yyy_row_height (sheet, range.rowi);