#define DEFAULT_COLUMN_WIDTH 80
#define DEFAULT_ROW_HEIGHT 25
+static void set_entry_widget_font (GtkSheet *sheet);
+
static void gtk_sheet_update_primary_selection (GtkSheet *sheet);
static void draw_column_title_buttons_range (GtkSheet *sheet, gint first, gint n);
static void draw_row_title_buttons_range (GtkSheet *sheet, gint first, gint n);
static inline glong
max_visible_row (const GtkSheet *sheet)
{
- return row_from_ypixel (sheet,
- sheet->vadjustment->value +
- sheet->vadjustment->page_size);
+ return row_from_ypixel (sheet, sheet->vadjustment->value + sheet->vadjustment->page_size);
}
static inline glong
max_visible_column (const GtkSheet *sheet)
{
- return column_from_xpixel (sheet,
- sheet->hadjustment->value +
- sheet->hadjustment->page_size);
+ return column_from_xpixel (sheet, sheet->hadjustment->value + sheet->hadjustment->page_size);
}
static inline glong
static void gtk_sheet_unmap (GtkWidget *widget);
static gint gtk_sheet_expose (GtkWidget *widget,
GdkEventExpose *event);
+
static void gtk_sheet_forall (GtkContainer *container,
gboolean include_internals,
GtkCallback callback,
/* Sheet queries */
static gboolean gtk_sheet_range_isvisible (const GtkSheet *sheet,
- GtkSheetRange range);
+ const GtkSheetRange *range);
static gboolean gtk_sheet_cell_isvisible (GtkSheet *sheet,
gint row, gint column);
/* Drawing Routines */
static void gtk_sheet_entry_changed (GtkWidget *widget,
gpointer data);
-static void gtk_sheet_hide_active_cell (GtkSheet *sheet);
+static void gtk_sheet_hide_entry_widget (GtkSheet *sheet);
static void change_active_cell (GtkSheet *sheet,
gint row, gint col);
static void gtk_sheet_draw_active_cell (GtkSheet *sheet);
-static void gtk_sheet_show_active_cell (GtkSheet *sheet);
+static void gtk_sheet_show_entry_widget (GtkSheet *sheet);
static gboolean gtk_sheet_click_cell (GtkSheet *sheet,
gint row,
gint column);
sheet->sheet_window = NULL;
sheet->entry_widget = NULL;
- sheet->entry_container = NULL;
sheet->entry_handler_id = 0;
sheet->button = NULL;
/* create sheet entry */
- sheet->entry_type = 0;
+ sheet->entry_type = GTK_TYPE_ENTRY;
create_sheet_entry (sheet);
/* create global selection button */
if ( !GTK_WIDGET_REALIZED (GTK_WIDGET (sheet)))
return;
- if ( max_visible_row (sheet) > g_sheet_model_get_row_count (sheet->model)
- ||
- max_visible_column (sheet) > g_sheet_model_get_column_count (sheet->model))
- {
- gtk_sheet_moveto (sheet, 0, 0, 0, 0);
- }
-
if ( ( row0 < 0 && col0 < 0 ) || ( rowi < 0 && coli < 0 ) )
{
gtk_sheet_range_draw (sheet, NULL);
* Returns: the new sheet widget
*/
GtkWidget *
-gtk_sheet_new (void *vgeo, void *hgeo, GSheetModel *model)
+gtk_sheet_new (GSheetModel *model)
{
GtkWidget *widget = g_object_new (GTK_TYPE_SHEET,
"model", model,
state = sheet->state;
if (sheet->state == GTK_SHEET_NORMAL)
- gtk_sheet_hide_active_cell (sheet);
+ gtk_sheet_hide_entry_widget (sheet);
sheet->entry_type = entry_type;
if (state == GTK_SHEET_NORMAL)
{
- gtk_sheet_show_active_cell (sheet);
+ gtk_sheet_show_entry_widget (sheet);
}
}
static gboolean
gtk_sheet_range_isvisible (const GtkSheet *sheet,
- GtkSheetRange range)
+ const GtkSheetRange *range)
{
g_return_val_if_fail (sheet != NULL, FALSE);
- if (range.row0 < 0 || range.row0 >= psppire_axis_unit_count (sheet->vaxis))
+ if (range->row0 < 0 || range->row0 >= psppire_axis_unit_count (sheet->vaxis))
return FALSE;
- if (range.rowi < 0 || range.rowi >= psppire_axis_unit_count (sheet->vaxis))
+ if (range->rowi < 0 || range->rowi >= psppire_axis_unit_count (sheet->vaxis))
return FALSE;
- if (range.col0 < 0 || range.col0 >= psppire_axis_unit_count (sheet->haxis))
+ if (range->col0 < 0 || range->col0 >= psppire_axis_unit_count (sheet->haxis))
return FALSE;
- if (range.coli < 0 || range.coli >= psppire_axis_unit_count (sheet->haxis))
+ if (range->coli < 0 || range->coli >= psppire_axis_unit_count (sheet->haxis))
return FALSE;
- if (range.rowi < min_visible_row (sheet))
+ if (range->rowi < min_visible_row (sheet))
return FALSE;
- if (range.row0 > max_visible_row (sheet))
+ if (range->row0 > max_visible_row (sheet))
return FALSE;
- if (range.coli < min_visible_column (sheet))
+ if (range->coli < min_visible_column (sheet))
return FALSE;
- if (range.col0 > max_visible_column (sheet))
+ if (range->col0 > max_visible_column (sheet))
return FALSE;
return TRUE;
range.rowi = row;
range.coli = column;
- return gtk_sheet_range_isvisible (sheet, range);
+ return gtk_sheet_range_isvisible (sheet, &range);
}
void
if (sheet->vaxis) g_object_unref (sheet->vaxis);
if (sheet->haxis) g_object_unref (sheet->haxis);
- g_object_unref (sheet->entry_container);
- sheet->entry_container = NULL;
-
g_object_unref (sheet->button);
sheet->button = NULL;
gtk_style_set_background (widget->style, widget->window, widget->state);
}
+ set_entry_widget_font (sheet);
}
+#define BORDER_WIDTH 2
+
static void
gtk_sheet_realize (GtkWidget *widget)
{
const gint attributes_mask =
GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP | GDK_WA_CURSOR;
- GdkGCValues values, auxvalues;
+ GdkGCValues values;
GdkColormap *colormap;
GdkDisplay *display;
sheet->fg_gc = gdk_gc_new (widget->window);
sheet->bg_gc = gdk_gc_new (widget->window);
- gdk_gc_get_values (sheet->fg_gc, &auxvalues);
-
values.foreground = widget->style->white;
values.function = GDK_INVERT;
values.subwindow_mode = GDK_INCLUDE_INFERIORS;
- values.line_width = 3;
+ values.line_width = BORDER_WIDTH;
sheet->xor_gc = gdk_gc_new_with_values (widget->window,
&values,
global_button_clicked (GtkWidget *widget, gpointer data)
{
gtk_sheet_click_cell (GTK_SHEET (data), -1, -1);
- gtk_widget_grab_focus (GTK_WIDGET (data));
}
{
PangoLayout *layout;
PangoRectangle text;
+ PangoFontDescription *font_desc = GTK_WIDGET (sheet)->style->font_desc;
gint font_height;
gchar *label;
layout = gtk_widget_create_pango_layout (GTK_WIDGET (sheet), label);
dispose_string (sheet, label);
- pango_layout_set_font_description (layout, attributes.font_desc);
+ pango_layout_set_font_description (layout, font_desc);
+
pango_layout_get_pixel_extents (layout, NULL, &text);
gdk_gc_set_clip_rectangle (sheet->fg_gc, &area);
- font_height = pango_font_description_get_size (attributes.font_desc);
- if ( !pango_font_description_get_size_is_absolute (attributes.font_desc))
+ font_height = pango_font_description_get_size (font_desc);
+ if ( !pango_font_description_get_size_is_absolute (font_desc))
font_height /= PANGO_SCALE;
/* Centre the text vertically */
drawing_range.rowi = MIN (range->rowi, max_visible_row (sheet));
drawing_range.coli = MIN (range->coli, max_visible_column (sheet));
-
rectangle_from_range (sheet, &drawing_range, &area);
}
+ g_return_if_fail (drawing_range.rowi >= drawing_range.row0);
+ g_return_if_fail (drawing_range.coli >= drawing_range.col0);
- gdk_draw_rectangle (sheet->sheet_window,
- GTK_WIDGET (sheet)->style->white_gc,
- TRUE,
- area.x, area.y,
- area.width, area.height);
+ gdk_window_begin_paint_rect (sheet->sheet_window, &area);
for (i = drawing_range.row0; i <= drawing_range.rowi; i++)
for (j = drawing_range.col0; j <= drawing_range.coli; j++)
}
if (sheet->state != GTK_SHEET_NORMAL &&
- gtk_sheet_range_isvisible (sheet, sheet->range))
+ gtk_sheet_range_isvisible (sheet, &sheet->range))
gtk_sheet_range_draw_selection (sheet, drawing_range);
if (sheet->state == GTK_STATE_NORMAL &&
sheet->active_cell.row <= drawing_range.rowi &&
sheet->active_cell.col >= drawing_range.col0 &&
sheet->active_cell.col <= drawing_range.coli)
- gtk_sheet_show_active_cell (sheet);
+ gtk_sheet_show_entry_widget (sheet);
+
+ gdk_window_end_paint (sheet->sheet_window);
}
static void
range.row0 > sheet->range.rowi || range.rowi < sheet->range.row0)
return;
- if (!gtk_sheet_range_isvisible (sheet, range)) return;
+ if (!gtk_sheet_range_isvisible (sheet, &range)) return;
if (!GTK_WIDGET_REALIZED (GTK_WIDGET (sheet))) return;
aux = range;
if ( row == -1 || col == -1)
{
- gtk_sheet_hide_active_cell (sheet);
+ gtk_sheet_hide_entry_widget (sheet);
return;
}
sheet->active_cell.row = -1;
sheet->active_cell.col = -1;
- text = gtk_entry_get_text (GTK_ENTRY (gtk_sheet_get_entry (sheet)));
-
-
+ text = gtk_entry_get_text (gtk_sheet_get_entry (sheet));
if (text && strlen (text) > 0)
{
static void
-gtk_sheet_hide_active_cell (GtkSheet *sheet)
+gtk_sheet_hide_entry_widget (GtkSheet *sheet)
{
- GdkRectangle area;
-
if (!GTK_WIDGET_REALIZED (GTK_WIDGET (sheet)))
return;
gtk_widget_hide (sheet->entry_widget);
gtk_widget_unmap (sheet->entry_widget);
- rectangle_from_cell (sheet,
- sheet->active_cell.row, sheet->active_cell.col,
- &area);
-
- gdk_draw_rectangle (sheet->sheet_window,
- GTK_WIDGET (sheet)->style->white_gc,
- TRUE,
- area.x, area.y,
- area.width, area.height);
-
- gtk_sheet_cell_draw (sheet, sheet->active_cell.row,
- sheet->active_cell.col);
-
GTK_WIDGET_UNSET_FLAGS (GTK_WIDGET (sheet->entry_widget), GTK_VISIBLE);
}
gtk_sheet_real_unselect_range (sheet, NULL);
}
+
g_signal_handler_block (sheet->entry_widget, sheet->entry_handler_id);
old_row = sheet->active_cell.row;
old_col = sheet->active_cell.col;
+ {
+ /* Redraw the neighbourhood of the old active cell */
+ GtkSheetRange r;
+ r.col0 = old_col - 1;
+ r.coli = old_col + 1;
+ r.row0 = old_row - 1;
+ r.rowi = old_row + 1;
+
+ maximize_int (&r.row0, 0);
+ maximize_int (&r.col0, 0);
+ minimize_int (&r.rowi, psppire_axis_unit_count (sheet->vaxis) - 1);
+ minimize_int (&r.coli, psppire_axis_unit_count (sheet->haxis) - 1);
+
+
+ if ( gtk_sheet_range_isvisible (sheet, &r))
+ gtk_sheet_range_draw (sheet, &r);
+ }
+
sheet->range.row0 = row;
sheet->range.col0 = col;
sheet->range.rowi = row;
GTK_SHEET_UNSET_FLAGS (sheet, GTK_SHEET_IN_SELECTION);
- gtk_sheet_show_active_cell (sheet);
+ gtk_sheet_draw_active_cell (sheet);
+ gtk_sheet_show_entry_widget (sheet);
g_signal_emit (sheet, sheet_signals [ACTIVATE], 0,
}
static void
-gtk_sheet_show_active_cell (GtkSheet *sheet)
+gtk_sheet_show_entry_widget (GtkSheet *sheet)
{
GtkEntry *sheet_entry;
GtkSheetCellAttr attributes;
GTK_WIDGET_SET_FLAGS (GTK_WIDGET (sheet->entry_widget), GTK_VISIBLE);
- sheet_entry = GTK_ENTRY (gtk_sheet_get_entry (sheet));
+ sheet_entry = gtk_sheet_get_entry (sheet);
gtk_sheet_get_attributes (sheet, row, col, &attributes);
if ( ! text )
text = g_strdup ("");
- gtk_entry_set_visibility (GTK_ENTRY (sheet_entry), attributes.is_visible);
-
-
if ( GTK_IS_ENTRY (sheet_entry))
{
const gchar *old_text = gtk_entry_get_text (GTK_ENTRY (sheet_entry));
if (strcmp (old_text, text) != 0)
- gtk_entry_set_text (GTK_ENTRY (sheet_entry), text);
+ gtk_entry_set_text (sheet_entry, text);
switch (attributes.justification)
{
gtk_sheet_size_allocate_entry (sheet);
+ gtk_widget_set_sensitive (GTK_WIDGET (sheet_entry),
+ g_sheet_model_is_editable (sheet->model,
+ row, col));
gtk_widget_map (sheet->entry_widget);
- gtk_widget_grab_focus (GTK_WIDGET (sheet_entry));
-
dispose_string (sheet, text);
}
*range = new_range;
}
+
+
static void
gtk_sheet_draw_border (GtkSheet *sheet, GtkSheetRange new_range)
{
gdk_draw_rectangle (sheet->sheet_window,
sheet->xor_gc,
FALSE,
- area.x + 1,
- area.y + 1,
- area.width - 2,
- area.height - 2);
+ area.x,
+ area.y,
+ area.width + 1,
+ area.height + 1);
}
g_signal_emit (sheet, sheet_signals[SELECT_COLUMN], 0, -1);
g_signal_emit (sheet, sheet_signals[SELECT_ROW], 0, -1);
-#if 0
- if (gtk_sheet_range_isvisible (sheet, *range))
- gtk_sheet_draw_backing_pixmap (sheet, *range);
-#endif
-
sheet->range.row0 = -1;
sheet->range.rowi = -1;
sheet->range.col0 = -1;
}
- range.row0 =
- row_from_ypixel (sheet,
- event->area.y + sheet->vadjustment->value);
- range.row0--;
+ {
+ gint y = event->area.y + sheet->vadjustment->value;
+ gint x = event->area.x + sheet->hadjustment->value;
+
+ if ( sheet->column_titles_visible)
+ y -= sheet->column_title_area.height;
+
+ if ( sheet->row_titles_visible)
+ x -= sheet->row_title_area.width;
- range.rowi =
- row_from_ypixel (sheet,
- event->area.y +
- event->area.height + sheet->vadjustment->value);
- range.rowi++;
+ maximize_int (&x, 0);
+ maximize_int (&y, 0);
- range.col0 =
- column_from_xpixel (sheet,
- event->area.x + sheet->hadjustment->value);
- range.col0--;
+ range.row0 = row_from_ypixel (sheet, y);
- range.coli =
- column_from_xpixel (sheet,
- event->area.x + event->area.width +
- sheet->hadjustment->value);
- range.coli++;
+ range.rowi = row_from_ypixel (sheet, y + event->area.height);
+
+ range.col0 = column_from_xpixel (sheet, x);
+
+ range.coli = column_from_xpixel (sheet, x + event->area.width);
+ }
if (event->window == sheet->sheet_window)
{
if (sheet->state != GTK_SHEET_NORMAL)
{
- if (gtk_sheet_range_isvisible (sheet, sheet->range))
+ if (gtk_sheet_range_isvisible (sheet, &sheet->range))
gtk_sheet_range_draw (sheet, &sheet->range);
if (GTK_SHEET_IN_RESIZE (sheet) || GTK_SHEET_IN_DRAG (sheet))
gtk_sheet_range_draw (sheet, &sheet->drag_range);
- if (gtk_sheet_range_isvisible (sheet, sheet->range))
+ if (gtk_sheet_range_isvisible (sheet, &sheet->range))
gtk_sheet_range_draw_selection (sheet, sheet->range);
if (GTK_SHEET_IN_RESIZE (sheet) || GTK_SHEET_IN_DRAG (sheet))
draw_xor_rectangle (sheet, sheet->drag_range);
}
}
- if (sheet->state != GTK_SHEET_NORMAL && GTK_SHEET_IN_SELECTION (sheet))
- gtk_widget_grab_focus (GTK_WIDGET (sheet));
-
(* GTK_WIDGET_CLASS (parent_class)->expose_event) (widget, event);
return FALSE;
NULL, NULL, event->time);
gtk_grab_add (GTK_WIDGET (sheet));
- /* This seems to be a kludge to work around a problem where the sheet
- scrolls to another position. The timeout scrolls it back to its
- original posn. JMD 3 July 2007
- */
- gtk_widget_grab_focus (GTK_WIDGET (sheet));
-
if (sheet->selection_mode != GTK_SELECTION_SINGLE &&
sheet->selection_mode != GTK_SELECTION_NONE &&
sheet->cursor_drag->type == GDK_SIZING &&
{
veto = gtk_sheet_click_cell (sheet, -1, column);
gtk_grab_add (GTK_WIDGET (sheet));
- gtk_widget_grab_focus (GTK_WIDGET (sheet));
GTK_SHEET_SET_FLAGS (sheet, GTK_SHEET_IN_SELECTION);
}
}
{
veto = gtk_sheet_click_cell (sheet, row, -1);
gtk_grab_add (GTK_WIDGET (sheet));
- gtk_widget_grab_focus (GTK_WIDGET (sheet));
GTK_SHEET_SET_FLAGS (sheet, GTK_SHEET_IN_SELECTION);
}
}
sheet->range.coli = column;
sheet->state = GTK_SHEET_NORMAL;
GTK_SHEET_SET_FLAGS (sheet, GTK_SHEET_IN_SELECTION);
+
gtk_sheet_draw_active_cell (sheet);
+
+ gtk_widget_grab_focus (GTK_WIDGET (sheet->entry_widget));
+
return TRUE;
}
change_active_cell (sheet, new_cell.row, new_cell.col);
+
if ( new_cell.col > max_fully_visible_column (sheet))
{
glong hpos =
gtk_adjustment_set_value (sheet->vadjustment,
vpos);
}
+
+ gtk_widget_grab_focus (GTK_WIDGET (sheet->entry_widget));
}
allocation->width - 2 * border_width,
allocation->height - 2 * border_width);
- /* use internal allocation structure for all the math
- * because it's easier than always subtracting the container
- * border width */
- sheet->internal_allocation.x = 0;
- sheet->internal_allocation.y = 0;
- sheet->internal_allocation.width = allocation->width - 2 * border_width;
- sheet->internal_allocation.height = allocation->height - 2 * border_width;
-
sheet_allocation.x = 0;
sheet_allocation.y = 0;
sheet_allocation.width = allocation->width - 2 * border_width;
if (!GTK_WIDGET_REALIZED (GTK_WIDGET (sheet))) return;
if (!GTK_WIDGET_MAPPED (GTK_WIDGET (sheet))) return;
- sheet_entry = GTK_ENTRY (gtk_sheet_get_entry (sheet));
+ sheet_entry = gtk_sheet_get_entry (sheet);
if ( ! gtk_sheet_get_attributes (sheet, sheet->active_cell.row,
sheet->active_cell.col,
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 += BORDER_WIDTH / 2;
+ entry_alloc.y += BORDER_WIDTH / 2;
+
+
gtk_widget_set_size_request (sheet->entry_widget, entry_alloc.width,
entry_alloc.height);
gtk_widget_size_allocate (sheet->entry_widget, &entry_alloc);
}
+/* Copy the sheet's font to the entry widget */
+static void
+set_entry_widget_font (GtkSheet *sheet)
+{
+ GtkRcStyle *style = gtk_widget_get_modifier_style (sheet->entry_widget);
+
+ pango_font_description_free (style->font_desc);
+ style->font_desc = pango_font_description_copy (GTK_WIDGET (sheet)->style->font_desc);
+
+ gtk_widget_modify_style (sheet->entry_widget, style);
+}
+
+
+
static void
create_sheet_entry (GtkSheet *sheet)
{
gtk_widget_unparent (sheet->entry_widget);
}
- if (sheet->entry_type)
- {
- sheet->entry_container = g_object_new (sheet->entry_type, NULL);
- g_object_ref_sink (sheet->entry_container);
- sheet->entry_widget = gtk_sheet_get_entry (sheet);
+ sheet->entry_widget = g_object_new (sheet->entry_type, NULL);
+ g_object_ref_sink (sheet->entry_widget);
- if ( NULL == sheet->entry_widget)
- {
- g_warning ("Entry type is %s. It must be GtkEntry subclass, or a widget containing one. "
- "Using default", g_type_name (sheet->entry_type));
- g_object_unref (sheet->entry_container);
- sheet->entry_widget = sheet->entry_container = gtk_entry_new ();
- }
- else
- {
- sheet->entry_widget = sheet->entry_container ;
- }
- }
- else
+ gtk_widget_size_request (sheet->entry_widget, NULL);
+
+ if ( GTK_IS_ENTRY (sheet->entry_widget))
{
- sheet->entry_widget = sheet->entry_container = gtk_entry_new ();
- g_object_ref_sink (sheet->entry_container);
+ g_object_set (sheet->entry_widget,
+ "has-frame", FALSE,
+ NULL);
}
- gtk_widget_size_request (sheet->entry_widget, NULL);
-
if (GTK_WIDGET_REALIZED (sheet))
{
gtk_widget_set_parent_window (sheet->entry_widget, sheet->sheet_window);
G_CALLBACK (gtk_sheet_entry_changed),
sheet);
+ set_entry_widget_font (sheet);
+
gtk_widget_show (sheet->entry_widget);
}
}
}
-GtkWidget *
+
+GtkEntry *
gtk_sheet_get_entry (GtkSheet *sheet)
{
- GtkWidget *parent;
- GtkWidget *entry = NULL;
+ GtkWidget *w = sheet->entry_widget;
g_return_val_if_fail (sheet != NULL, NULL);
g_return_val_if_fail (GTK_IS_SHEET (sheet), NULL);
g_return_val_if_fail (sheet->entry_widget != NULL, NULL);
- if (GTK_IS_ENTRY (sheet->entry_container))
- return (sheet->entry_container);
-
- parent = sheet->entry_container;
-
- if (GTK_IS_CONTAINER (parent))
+ while (! GTK_IS_ENTRY (w))
{
- gtk_container_forall (GTK_CONTAINER (parent), find_entry, &entry);
-
- if (GTK_IS_ENTRY (entry))
- return entry;
- }
+ GtkWidget *entry = NULL;
- if (!GTK_IS_ENTRY (entry)) return NULL;
-
- return (entry);
+ if (GTK_IS_CONTAINER (w))
+ {
+ gtk_container_forall (GTK_CONTAINER (w), find_entry, &entry);
-}
+ if (NULL == entry)
+ break;
-GtkWidget *
-gtk_sheet_get_entry_widget (GtkSheet *sheet)
-{
- g_return_val_if_fail (sheet != NULL, NULL);
- g_return_val_if_fail (GTK_IS_SHEET (sheet), NULL);
- g_return_val_if_fail (sheet->entry_widget != NULL, NULL);
+ w = entry;
+ }
+ }
- return (sheet->entry_widget);
+ return GTK_ENTRY (w);
}
allocation.y += 2 * sheet->button->style->ythickness;
- if (button->label && strlen (button->label)>0)
+ if (button->label && strlen (button->label) > 0)
{
PangoRectangle rect;
gchar *line = button->label;
static void
draw_column_title_buttons_range (GtkSheet *sheet, gint first, gint last)
{
- GdkRegion *region;
+ GdkRectangle rect;
gint col;
if (!GTK_WIDGET_REALIZED (GTK_WIDGET (sheet))) return;
g_return_if_fail (first >= min_visible_column (sheet));
g_return_if_fail (last <= max_visible_column (sheet));
- region =
- gdk_drawable_get_visible_region (GDK_DRAWABLE (sheet->column_title_window));
+ rect.y = 0;
+ rect.height = sheet->column_title_area.height;
+ rect.x = psppire_axis_pixel_start (sheet->haxis, first) + CELL_SPACING;
+ rect.width = psppire_axis_pixel_start (sheet->haxis, last) + CELL_SPACING
+ + psppire_axis_unit_size (sheet->haxis, last);
+
+ rect.x -= sheet->hadjustment->value;
- gdk_window_begin_paint_region (sheet->column_title_window, region);
+ minimize_int (&rect.width, sheet->column_title_area.width);
+ maximize_int (&rect.x, 0);
+
+ gdk_window_begin_paint_rect (sheet->column_title_window, &rect);
for (col = first ; col <= last ; ++col)
{
static void
draw_row_title_buttons_range (GtkSheet *sheet, gint first, gint last)
{
- GdkRegion *region;
+ GdkRectangle rect;
gint row;
if (!GTK_WIDGET_REALIZED (GTK_WIDGET (sheet))) return;
g_return_if_fail (first >= min_visible_row (sheet));
g_return_if_fail (last <= max_visible_row (sheet));
+ rect.x = 0;
+ rect.width = sheet->row_title_area.width;
+ rect.y = psppire_axis_pixel_start (sheet->vaxis, first) + CELL_SPACING;
+ rect.height = psppire_axis_pixel_start (sheet->vaxis, last) + CELL_SPACING
+ + psppire_axis_unit_size (sheet->vaxis, last);
- region =
- gdk_drawable_get_visible_region (GDK_DRAWABLE (sheet->row_title_window));
-
- gdk_window_begin_paint_region (sheet->row_title_window, region);
+ rect.y -= sheet->vadjustment->value;
+ minimize_int (&rect.height, sheet->row_title_area.height);
+ maximize_int (&rect.y, 0);
+ gdk_window_begin_paint_rect (sheet->row_title_window, &rect);
for (row = first; row <= last; ++row)
{
GdkRectangle allocation;
gtk_sheet_range_draw (sheet, NULL);
draw_row_title_buttons (sheet);
// size_allocate_global_button (sheet);
+ gtk_sheet_draw_active_cell (sheet);
gdk_window_end_paint (sheet->sheet_window);
}
draw_column_title_buttons (sheet);
// size_allocate_global_button (sheet);
+ gtk_sheet_draw_active_cell (sheet);
+
gdk_window_end_paint (sheet->sheet_window);
}
{
GdkColor *fg, *bg;
const GtkJustification *j ;
- const PangoFontDescription *font_desc ;
const GtkSheetCellBorder *border ;
GdkColormap *colormap;
attr->border.join_style = GDK_JOIN_MITER;
attr->border.mask = 0;
attr->border.color = GTK_WIDGET (sheet)->style->black;
- attr->font_desc = GTK_WIDGET (sheet)->style->font_desc;
attr->is_editable = g_sheet_model_is_editable (sheet->model, row, col);
- attr->is_visible = g_sheet_model_is_visible (sheet->model, row, col);
-
colormap = gtk_widget_get_colormap (GTK_WIDGET (sheet));
fg = g_sheet_model_get_foreground (sheet->model, row, col);
if (j)
attr->justification = *j;
- font_desc = g_sheet_model_get_font_desc (sheet->model, row, col);
- if ( font_desc ) attr->font_desc = font_desc;
-
border = g_sheet_model_get_cell_border (sheet->model, row, col);
if ( border ) attr->border = *border;
if (sheet->button && sheet->button->parent)
(* callback) (sheet->button, callback_data);
- if (sheet->entry_container && GTK_IS_CONTAINER (sheet->entry_container))
- (* callback) (sheet->entry_container, callback_data);
+ if (sheet->entry_widget && GTK_IS_CONTAINER (sheet->entry_widget))
+ (* callback) (sheet->entry_widget, callback_data);
}
gint r, c;
GString *string;
- if ( !gtk_sheet_range_isvisible (sheet, sheet->range))
+ if ( !gtk_sheet_range_isvisible (sheet, &sheet->range))
return NULL;
string = g_string_sized_new (80);
gint r, c;
GString *string;
- if ( !gtk_sheet_range_isvisible (sheet, sheet->range))
+ if ( !gtk_sheet_range_isvisible (sheet, &sheet->range))
return NULL;
string = g_string_sized_new (480);
clipboard = gtk_widget_get_clipboard (GTK_WIDGET (sheet),
GDK_SELECTION_PRIMARY);
- if (gtk_sheet_range_isvisible (sheet, sheet->range))
+ if (gtk_sheet_range_isvisible (sheet, &sheet->range))
{
if (!gtk_clipboard_set_with_owner (clipboard, targets,
G_N_ELEMENTS (targets),