Improve rendering of active cell border
[pspp-builds.git] / lib / gtksheet / gtksheet.c
index bab70950ae887e3ae110e045e8b1b88fc77421c7..a53426b6105a8b0ab1a9fd554e51db62bb71400f 100644 (file)
@@ -457,7 +457,7 @@ static void gtk_sheet_entry_changed          (GtkWidget *widget,
 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 gboolean gtk_sheet_draw_active_cell              (GtkSheet *sheet);
 static void gtk_sheet_show_entry_widget                 (GtkSheet *sheet);
 static gboolean gtk_sheet_click_cell            (GtkSheet *sheet,
                                                  gint row,
@@ -1679,7 +1679,7 @@ gtk_sheet_style_set (GtkWidget *widget,
   set_entry_widget_font (sheet);
 }
 
-#define BORDER_WIDTH 2
+#define BORDER_WIDTH 3
 
 static void
 gtk_sheet_realize (GtkWidget *widget)
@@ -1786,8 +1786,8 @@ gtk_sheet_realize (GtkWidget *widget)
   sheet->fg_gc = gdk_gc_new (widget->window);
   sheet->bg_gc = gdk_gc_new (widget->window);
 
-  values.foreground = widget->style->white;
-  values.function = GDK_INVERT;
+  values.foreground = widget->style->black;
+  values.function = GDK_COPY;
   values.subwindow_mode = GDK_INCLUDE_INFERIORS;
   values.line_width = BORDER_WIDTH;
 
@@ -2637,15 +2637,12 @@ gtk_sheet_show_entry_widget (GtkSheet *sheet)
   dispose_string (sheet, text);
 }
 
-static void
+static gboolean
 gtk_sheet_draw_active_cell (GtkSheet *sheet)
 {
   gint row, col;
   GtkSheetRange range;
 
-  if (!GTK_WIDGET_DRAWABLE (GTK_WIDGET (sheet))) return;
-  if (!GTK_WIDGET_REALIZED (GTK_WIDGET (sheet))) return;
-
   row = sheet->active_cell.row;
   col = sheet->active_cell.col;
 
@@ -2658,6 +2655,8 @@ gtk_sheet_draw_active_cell (GtkSheet *sheet)
   range.row0 = range.rowi = row;
 
   gtk_sheet_draw_border (sheet, range);
+
+  return FALSE;
 }
 
 
@@ -2916,10 +2915,8 @@ gtk_sheet_draw_border (GtkSheet *sheet, GtkSheetRange new_range)
   gdk_draw_rectangle (sheet->sheet_window,
                      sheet->xor_gc,
                      FALSE,
-                     area.x,
-                     area.y,
-                     area.width + 1,
-                     area.height + 1);
+                     area.x, area.y,
+                     area.width, area.height);
 }
 
 
@@ -3107,7 +3104,7 @@ gtk_sheet_expose (GtkWidget *widget,
       if ((!GTK_SHEET_IN_XDRAG (sheet)) && (!GTK_SHEET_IN_YDRAG (sheet)))
        {
          if (sheet->state == GTK_SHEET_NORMAL)
-           gtk_sheet_draw_active_cell (sheet);
+           g_idle_add (gtk_sheet_draw_active_cell, sheet);
        }
     }
 
@@ -4125,6 +4122,15 @@ step_sheet (GtkSheet *sheet, GtkScrollType dir)
     }
 
 
+  g_signal_emit (sheet, sheet_signals[TRAVERSE], 0,
+                &sheet->active_cell,
+                &new_cell,
+                &forbidden);
+
+  if (forbidden)
+    return;
+
+
   maximize_int (&new_cell.row, 0);
   maximize_int (&new_cell.col, 0);
 
@@ -4134,14 +4140,6 @@ step_sheet (GtkSheet *sheet, GtkScrollType dir)
   minimize_int (&new_cell.col,
                psppire_axis_unit_count (sheet->haxis) - 1);
 
-  g_signal_emit (sheet, sheet_signals[TRAVERSE], 0,
-                &sheet->active_cell,
-                &new_cell,
-               &forbidden);
-
-  if (forbidden)
-    return;
-
   change_active_cell (sheet, new_cell.row, new_cell.col);
 
 
@@ -4497,10 +4495,10 @@ gtk_sheet_size_allocate_entry (GtkSheet *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 += BORDER_WIDTH / 2;
-  entry_alloc.y += BORDER_WIDTH / 2;
+  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);
 
 
   gtk_widget_set_size_request (sheet->entry_widget, entry_alloc.width,
@@ -4844,10 +4842,12 @@ update_adjustment (GtkAdjustment *adj, PsppireAxis *axis, gint page_size)
   adj->lower = 0;
   adj->page_size = page_size;
 
+#if 0
   adj->value = position * (adj->upper - adj->lower) - adj->page_size;
 
   if ( adj->value < adj->lower)
     adj->value = adj->lower;
+#endif
 
   gtk_adjustment_changed (adj);
 }