#include <gtk/gtk.h>
#include <gdk/gdk.h>
#include <gdk/gdkkeysyms.h>
+#include <gdk/gdkkeysyms-compat.h>
#include <string.h>
#include "ui/gui/psppire-marshal.h"
attributes.height = allocation.height;
attributes.wclass = GDK_INPUT_OUTPUT;
attributes.visual = gtk_widget_get_visual (widget);
- attributes.colormap = gtk_widget_get_colormap (widget);
attributes.event_mask = GDK_VISIBILITY_NOTIFY_MASK;
- attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
+ attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL;
gtk_widget_set_window (widget,
gdk_window_new (gtk_widget_get_parent_window (widget),
/* Add them all up. */
gtk_widget_set_style (widget,
gtk_style_attach (gtk_widget_get_style (widget), gtk_widget_get_window (widget)));
- gdk_window_set_back_pixmap (gtk_widget_get_window (widget), NULL, FALSE);
gdk_window_set_background (tree_view->priv->bin_window, >k_widget_get_style (widget)->base[gtk_widget_get_state (widget)]);
gtk_style_set_background (gtk_widget_get_style (widget), tree_view->priv->header_window, GTK_STATE_NORMAL);
tree_view->priv->rubber_band_end_node = end_node;
}
+#define GDK_RECTANGLE_PTR(X) ((GdkRectangle *)(X))
+
static void
pspp_sheet_view_update_rubber_band (PsppSheetView *tree_view)
{
gint x, y;
- GdkRectangle old_area;
- GdkRectangle new_area;
- GdkRectangle common;
- GdkRegion *invalid_region;
+ cairo_rectangle_int_t old_area;
+ cairo_rectangle_int_t new_area;
+ cairo_rectangle_int_t common;
+ cairo_region_t *invalid_region;
PsppSheetViewColumn *column;
old_area.x = MIN (tree_view->priv->press_start_x, tree_view->priv->rubber_band_x);
new_area.width = ABS (x - tree_view->priv->press_start_x) + 1;
new_area.height = ABS (y - tree_view->priv->press_start_y) + 1;
- invalid_region = gdk_region_rectangle (&old_area);
- gdk_region_union_with_rect (invalid_region, &new_area);
+ invalid_region = cairo_region_create_rectangle (&old_area);
+ cairo_region_union_rectangle (invalid_region, &new_area);
- gdk_rectangle_intersect (&old_area, &new_area, &common);
+ gdk_rectangle_intersect (GDK_RECTANGLE_PTR (&old_area),
+ GDK_RECTANGLE_PTR (&new_area), GDK_RECTANGLE_PTR (&common));
if (common.width > 2 && common.height > 2)
{
- GdkRegion *common_region;
+ cairo_region_t *common_region;
/* make sure the border is invalidated */
common.x += 1;
common.width -= 2;
common.height -= 2;
- common_region = gdk_region_rectangle (&common);
+ common_region = cairo_region_create_rectangle (&common);
- gdk_region_subtract (invalid_region, common_region);
- gdk_region_destroy (common_region);
+ cairo_region_subtract (invalid_region, common_region);
+ cairo_region_destroy (common_region);
}
- gdk_window_invalidate_region (tree_view->priv->bin_window, invalid_region, TRUE);
+#if GTK_MAJOR_VERSION == 3
+ gdk_window_invalidate_region (tree_view->priv->bin_window, invalid_region, TRUE);
+#else
+ {
+ cairo_rectangle_int_t extents;
+ GdkRegion *ereg;
+ cairo_region_get_extents (invalid_region, &extents);
+ ereg = gdk_region_rectangle (GDK_RECTANGLE_PTR (&extents));
+ gdk_window_invalidate_region (tree_view->priv->bin_window, ereg, TRUE);
+ gdk_region_destroy (ereg);
+ }
+#endif
- gdk_region_destroy (invalid_region);
+ cairo_region_destroy (invalid_region);
tree_view->priv->rubber_band_x = x;
tree_view->priv->rubber_band_y = y;
pspp_sheet_view_update_rubber_band_selection (tree_view);
}
+#if GTK3_TRANSITION
static void
pspp_sheet_view_paint_rubber_band (PsppSheetView *tree_view,
GdkRectangle *area)
cairo_destroy (cr);
}
+#endif
+
static gboolean
pspp_sheet_view_motion_bin_window (GtkWidget *widget,
static void
pspp_sheet_view_draw_vertical_grid_lines (PsppSheetView *tree_view,
- GdkEventExpose *event,
- gint n_visible_columns,
- gint min_y,
- gint max_y)
+ cairo_t *cr,
+ gint n_visible_columns,
+ gint min_y,
+ gint max_y)
{
GList *list = tree_view->priv->columns;
gint i = 0;
current_x += column->width;
- if (current_x - 1 >= event->area.x
- && current_x - 1 < event->area.x + event->area.width)
- {
-#if GTK3_TRANSITION
- gdk_draw_line (event->window,
- tree_view->priv->grid_line_gc[GTK_WIDGET(tree_view)->state],
- current_x - 1, min_y,
- current_x - 1, max_y - min_y);
-#else
-
- cairo_t *cr = gdk_cairo_create (event->window);
- cairo_set_line_width (cr, 1.0);
- cairo_set_line_cap (cr, CAIRO_LINE_CAP_SQUARE);
- cairo_move_to (cr, current_x - 0.5, min_y);
- cairo_line_to (cr, current_x - 0.5 , max_y - min_y);
-
- cairo_stroke (cr);
- cairo_destroy (cr);
-#endif
- }
+ cairo_set_line_width (cr, 1.0);
+ cairo_set_line_cap (cr, CAIRO_LINE_CAP_SQUARE);
+ cairo_move_to (cr, current_x - 0.5, min_y);
+ cairo_line_to (cr, current_x - 0.5 , max_y - min_y);
+
+ cairo_stroke (cr);
}
}
gboolean row_ending_details;
gboolean draw_vgrid_lines, draw_hgrid_lines;
gint min_y, max_y;
+ cairo_t *cr = gdk_cairo_create (event->window);
+ GdkRectangle Zarea;
+ GtkAllocation allocation;
+ gtk_widget_get_allocation (widget, &allocation);
+
+ Zarea.x = 0;
+ Zarea.y = 0;
+ Zarea.width = gdk_window_get_width (event->window);
+ Zarea.height = allocation.height;
rtl = (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL);
if (tree_view->priv->row_count == 0)
{
- draw_empty_focus (tree_view, &event->area);
+ draw_empty_focus (tree_view, &Zarea);
return TRUE;
}
+#if GTK3_TRANSITION
/* clip event->area to the visible area */
- if (event->area.height < 0.5)
+ if (Zarea.height < 0.5)
return TRUE;
+#endif
validate_visible_area (tree_view);
- new_y = TREE_WINDOW_Y_TO_RBTREE_Y (tree_view, event->area.y);
+ new_y = TREE_WINDOW_Y_TO_RBTREE_Y (tree_view, Zarea.y);
if (new_y < 0)
new_y = 0;
event->window,
gtk_widget_get_state (widget),
GTK_SHADOW_NONE,
- &event->area,
+ &Zarea,
widget,
"cell_even",
0, tree_view->priv->height,
cell_offset = 0;
- background_area.y = y_offset + event->area.y;
+ background_area.y = y_offset + Zarea.y;
background_area.height = max_height;
max_y = background_area.y + max_height;
else
selected_column = TRUE;
- if (cell_offset > event->area.x + event->area.width ||
- cell_offset + column->width < event->area.x)
+#if GTK3_TRANSITION
+ if (cell_offset > Zarea.x + Zarea.width ||
+ cell_offset + column->width < Zarea.x)
{
cell_offset += column->width;
continue;
}
+#endif
if (selected && selected_column)
flags |= GTK_CELL_RENDERER_SELECTED;
cell_area.height -= grid_line_width;
}
+#if GTK3_TRANSITION
if (gdk_region_rect_in (event->region, &background_area) == GDK_OVERLAP_RECTANGLE_OUT)
{
cell_offset += column->width;
continue;
}
+#endif
pspp_sheet_view_column_cell_set_cell_data (column,
tree_view->priv->model,
event->window,
state,
GTK_SHADOW_NONE,
- &event->area,
+ &Zarea,
widget,
new_detail,
background_area.x,
event->window,
state,
GTK_SHADOW_NONE,
- &event->area,
+ &Zarea,
widget,
detail,
background_area.x,
if (draw_hgrid_lines)
{
- cairo_t *cr = gdk_cairo_create (event->window);
cairo_set_line_width (cr, 1.0);
cairo_set_line_cap (cr, CAIRO_LINE_CAP_SQUARE);
#endif
}
- if (y_offset + max_height >= event->area.height - 0.5)
+ if (y_offset + max_height >= Zarea.height - 0.5)
{
#if GTK3_TRANSITION
gdk_draw_line (event->window,
#endif
}
cairo_stroke (cr);
- cairo_destroy (cr);
}
_pspp_sheet_view_column_cell_render (column,
event->window,
&background_area,
&cell_area,
- &event->area,
+ &Zarea,
flags);
if (node == cursor && has_special_cell &&
event->window,
&background_area,
&cell_area,
- &event->area,
+ &Zarea,
flags);
}
cell_offset += column->width;
}
- if (cell_offset < event->area.x)
+ if (cell_offset < Zarea.x)
{
gtk_paint_flat_box (gtk_widget_get_style (widget),
event->window,
GTK_STATE_NORMAL,
GTK_SHADOW_NONE,
- &event->area,
+ &Zarea,
widget,
"base",
cell_offset,
background_area.y,
- event->area.x - cell_offset,
+ Zarea.x - cell_offset,
background_area.height);
}
gtk_paint_focus (gtk_widget_get_style (widget),
tree_view->priv->bin_window,
gtk_widget_get_state (widget),
- &event->area,
+ &Zarea,
widget,
(is_first
? (is_last ? "treeview-drop-indicator" : "treeview-drop-indicator-left" )
gtk_paint_focus (gtk_widget_get_style (widget),
tree_view->priv->bin_window,
gtk_widget_get_state (widget),
- &event->area,
+ &Zarea,
widget,
"treeview-drop-indicator",
0, BACKGROUND_FIRST_PIXEL (tree_view, node)
gtk_paint_focus (gtk_widget_get_style (widget),
tree_view->priv->bin_window,
focus_rect_state,
- &event->area,
+ &Zarea,
widget,
(is_first
? (is_last ? "treeview" : "treeview-left" )
gtk_paint_focus (gtk_widget_get_style (widget),
tree_view->priv->bin_window,
focus_rect_state,
- &event->area,
+ &Zarea,
widget,
"treeview",
0, tmp_y,
}
while (!done);
}
- while (y_offset < event->area.height);
+ while (y_offset < Zarea.height);
done:
- pspp_sheet_view_draw_vertical_grid_lines (tree_view, event, n_visible_columns,
+ pspp_sheet_view_draw_vertical_grid_lines (tree_view, cr, n_visible_columns,
min_y, max_y);
+#if GTK3_TRANSITION
if (tree_view->priv->rubber_band_status == RUBBER_BAND_ACTIVE)
{
GdkRectangle *rectangles;
g_free (rectangles);
}
+#endif
if (cursor_path)
gtk_tree_path_free (cursor_path);
GdkEventExpose *event)
{
PsppSheetView *tree_view = PSPP_SHEET_VIEW (widget);
+ cairo_t *cr = gdk_cairo_create (event->window);
if (event->window == tree_view->priv->bin_window)
{
n_visible_columns ++;
}
pspp_sheet_view_draw_vertical_grid_lines (tree_view,
- event,
- n_visible_columns,
- event->area.y,
- event->area.height);
+ cr,
+ n_visible_columns,
+ event->area.y,
+ event->area.height);
}
else if (event->window == tree_view->priv->drag_window)
{
if (gtk_widget_get_realized (widget))
{
- gdk_window_set_back_pixmap (gtk_widget_get_window (widget), NULL, FALSE);
gdk_window_set_background (tree_view->priv->bin_window, >k_widget_get_style (widget)->base[gtk_widget_get_state (widget)]);
gtk_style_set_background (gtk_widget_get_style (widget), tree_view->priv->header_window, GTK_STATE_NORMAL);
pspp_sheet_view_set_grid_lines (tree_view, tree_view->priv->grid_lines);
attributes.width = column->allocation.width;
attributes.height = column->allocation.height;
attributes.visual = gtk_widget_get_visual (GTK_WIDGET (tree_view));
- attributes.colormap = gtk_widget_get_colormap (GTK_WIDGET (tree_view));
attributes.event_mask = GDK_VISIBILITY_NOTIFY_MASK | GDK_EXPOSURE_MASK | GDK_POINTER_MOTION_MASK;
- attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
+ attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL ;
tree_view->priv->drag_window = gdk_window_new (tree_view->priv->bin_window,
&attributes,
if (gtk_widget_get_realized (widget))
{
GtkStyle *style = gtk_widget_get_style (widget);
- gdk_window_set_back_pixmap (gtk_widget_get_window (widget), NULL, FALSE);
gdk_window_set_background (tree_view->priv->bin_window, &style->base[gtk_widget_get_state (widget)]);
}