- 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);
-
- clip_area.x = sheet->row_title_area.width;
- clip_area.y = sheet->column_title_area.height;
- clip_area.width = sheet->sheet_window_width;
- clip_area.height = sheet->sheet_window_height;
-
- if (!sheet->row_titles_visible) clip_area.x = 0;
- if (!sheet->column_titles_visible) clip_area.y = 0;
-
- if (area.x < 0)
- {
- area.width = area.width + area.x;
- area.x = 0;
- }
- if (area.width > clip_area.width) area.width = clip_area.width + 10;
- if (area.y < 0)
- {
- area.height = area.height + area.y;
- area.y = 0;
- }
- if (area.height > clip_area.height) area.height = clip_area.height + 10;
-
- clip_area.x--;
- clip_area.y--;
- clip_area.width += 3;
- clip_area.height += 3;
-
- gdk_gc_get_values (sheet->xor_gc, &values);
-
- gdk_gc_set_clip_rectangle (sheet->xor_gc, &clip_area);
-
- for (i =- 1; i <= 1; ++i)
- gdk_draw_rectangle (sheet->sheet_window,
- sheet->xor_gc,
- FALSE,
- area.x + i, area.y + i,
- area.width - 2 * i, area.height - 2 * i);
-
-
- gdk_gc_set_clip_rectangle (sheet->xor_gc, NULL);