Gtk3: replace expose_event size_request functions

expose_event has been replaced with draw
size_request has become get_preferred_width and get_preferred_height
This commit is contained in:
Geert Janssens 2017-03-13 20:44:56 +01:00
parent 2ca938bd67
commit f07ad114c4
5 changed files with 43 additions and 62 deletions

View File

@ -83,7 +83,7 @@ static void gnc_dense_cal_dispose(GObject *object);
static void gnc_dense_cal_realize(GtkWidget *widget, gpointer user_data);
static void gnc_dense_cal_configure(GtkWidget *widget, GdkEventConfigure *event, gpointer user_data);
static void gnc_dense_cal_draw_to_buffer(GncDenseCal *dcal);
static gboolean gnc_dense_cal_expose(GtkWidget *widget, GdkEventExpose *event, gpointer user_data);
static gboolean gnc_dense_cal_draw(GtkWidget *widget, cairo_t *cr, gpointer user_data);
static void gdc_reconfig(GncDenseCal *dcal);
@ -300,7 +300,7 @@ gnc_dense_cal_init(GncDenseCal *dcal)
| GDK_POINTER_MOTION_MASK
| GDK_POINTER_MOTION_HINT_MASK));
gtk_box_pack_start(GTK_BOX(dcal), GTK_WIDGET(dcal->cal_drawing_area), TRUE, TRUE, 0);
g_signal_connect(G_OBJECT(dcal->cal_drawing_area), "expose_event", G_CALLBACK(gnc_dense_cal_expose), (gpointer)dcal);
g_signal_connect(G_OBJECT(dcal->cal_drawing_area), "draw", G_CALLBACK(gnc_dense_cal_draw), (gpointer)dcal);
g_signal_connect(G_OBJECT(dcal->cal_drawing_area), "realize", G_CALLBACK(gnc_dense_cal_realize), (gpointer)dcal);
g_signal_connect(G_OBJECT(dcal->cal_drawing_area), "configure_event", G_CALLBACK(gnc_dense_cal_configure), (gpointer)dcal);
@ -865,25 +865,18 @@ free_rect(gpointer data, gpointer ud)
}
static gboolean
gnc_dense_cal_expose(GtkWidget *widget,
GdkEventExpose *event,
gpointer user_data)
gnc_dense_cal_draw(GtkWidget *widget, cairo_t *cr, gpointer user_data)
{
GncDenseCal *dcal;
cairo_t *cr;
g_return_val_if_fail(widget != NULL, FALSE);
g_return_val_if_fail(GNC_IS_DENSE_CAL(user_data), FALSE);
g_return_val_if_fail(event != NULL, FALSE);
if (event->count > 0)
return FALSE;
dcal = GNC_DENSE_CAL(user_data);
cr = gdk_cairo_create (gtk_widget_get_window (GTK_WIDGET(dcal->cal_drawing_area)));
cairo_save (cr);;
cairo_set_source_surface (cr, dcal->surface, 0, 0);
cairo_paint (cr);
cairo_destroy (cr);
cairo_restore (cr);
return TRUE;
}

View File

@ -49,24 +49,18 @@ enum
};
static gboolean
gnc_header_expose (GtkWidget *header,
GdkEventExpose *event)
gnc_header_draw (GtkWidget *header, cairo_t *cr)
{
cairo_t *cr;
GdkWindow *binwin = gtk_layout_get_bin_window(GTK_LAYOUT(header));
cr = gdk_cairo_create (binwin);
cairo_save (cr);
cairo_set_source_surface (cr, GNC_HEADER(header)->surface, 0, 0);
cairo_paint (cr);
cairo_destroy (cr);
GTK_WIDGET_CLASS (parent_class)->expose_event (header, event);
cairo_restore (cr);
return TRUE;
}
static void
gnc_header_draw (GncHeader *header)
gnc_header_draw_offscreen (GncHeader *header)
{
SheetBlockStyle *style = header->style;
Table *table = header->sheet->table;
@ -216,7 +210,7 @@ gnc_header_request_redraw (GncHeader *header)
if (!header->style)
return;
gnc_header_draw (header);
gnc_header_draw_offscreen (header);
gtk_widget_queue_draw (GTK_WIDGET(header));
}
@ -636,10 +630,8 @@ gnc_header_class_init (GncHeaderClass *header_class)
item_class->unrealize = gnc_header_unrealize;
// item_class->update = gnc_header_update;
item_class->expose_event = gnc_header_expose;
item_class->draw = gnc_header_draw;
item_class->event = gnc_header_event;
// item_class->point = gnc_header_point;
}

View File

@ -629,11 +629,15 @@ draw_block (GnucashSheet *sheet,
}
gboolean
gnucash_sheet_draw_internal (GnucashSheet *sheet, cairo_t *cr,
int x, int y, int width, int height)
gnucash_sheet_draw_internal (GnucashSheet* sheet, cairo_t* cr,
GtkAllocation* alloc)
{
VirtualLocation virt_loc;
SheetBlock *sheet_block;
int x = alloc->x;
int y = alloc->y;
int width = alloc->width;
int height = alloc->height;
if (x < 0 || y < 0)
return FALSE;

View File

@ -697,45 +697,42 @@ gnucash_sheet_create (Table *table)
return sheet;
}
static gint
compute_optimal_width (GnucashSheet *sheet)
static void
gnucash_sheet_get_preferred_width (G_GNUC_UNUSED GtkWidget *widget,
gint *minimal_width,
gint *natural_width)
{
return DEFAULT_SHEET_WIDTH;
*minimal_width = *natural_width = DEFAULT_SHEET_WIDTH;
}
/* Compute the height needed to show DEFAULT_REGISTER_INITIAL_ROWS rows */
static gint
compute_optimal_height (GnucashSheet *sheet)
static void
gnucash_sheet_get_preferred_height (G_GNUC_UNUSED GtkWidget *widget,
gint *minimal_width,
gint *natural_width)
{
GnucashSheet *sheet = GNUCASH_SHEET(widget);
SheetBlockStyle *style;
CellDimensions *cd;
gint row_height;
*minimal_width = *natural_width = DEFAULT_SHEET_HEIGHT;
if (!sheet)
return DEFAULT_SHEET_HEIGHT;
return;
style = gnucash_sheet_get_style_from_cursor (sheet, CURSOR_HEADER);
if (!style)
return DEFAULT_SHEET_HEIGHT;
return;
cd = gnucash_style_get_cell_dimensions (style, 0, 0);
if (cd == NULL)
return DEFAULT_SHEET_HEIGHT;
return;
row_height = cd->pixel_height;
return row_height * DEFAULT_SHEET_INITIAL_ROWS;
}
static void
gnucash_sheet_size_request (GtkWidget *widget, GtkRequisition *requisition)
{
GnucashSheet *sheet = GNUCASH_SHEET(widget);
requisition->width = compute_optimal_width (sheet);
requisition->height = compute_optimal_height (sheet);
*minimal_width = *natural_width = row_height * DEFAULT_SHEET_INITIAL_ROWS;
}
const char *
@ -1050,23 +1047,17 @@ gnucash_sheet_delete_cb (GtkWidget *widget,
}
static gboolean
gnucash_sheet_draw (GtkWidget *widget, GdkEventExpose *event)
gnucash_sheet_draw (GtkWidget *widget, cairo_t *cr)
{
GnucashSheet *sheet = GNUCASH_SHEET (widget);
int x = event->area.x;
int y = event->area.y;
int width = event->area.width;
int height = event->area.height;
GdkWindow *binwin = gtk_layout_get_bin_window(GTK_LAYOUT(sheet));
cairo_t *cr;
GtkAllocation alloc;
gtk_widget_get_allocation(widget, &alloc);
gboolean result;
cr = gdk_cairo_create (binwin);
result = gnucash_sheet_draw_internal (sheet, cr, x, y, width, height);
cairo_save (cr);
result = gnucash_sheet_draw_internal (sheet, cr, &alloc);
gnucash_sheet_draw_cursor (sheet->cursor, cr);
cairo_destroy(cr);
cairo_restore (cr);
return result;
}
@ -2457,7 +2448,8 @@ gnucash_sheet_class_init (GnucashSheetClass *klass)
/* Method override */
gobject_class->finalize = gnucash_sheet_finalize;
widget_class->size_request = gnucash_sheet_size_request;
widget_class->get_preferred_width = gnucash_sheet_get_preferred_width;
widget_class->get_preferred_height = gnucash_sheet_get_preferred_height;
widget_class->size_allocate = gnucash_sheet_size_allocate;
widget_class->focus_in_event = gnucash_sheet_focus_in_event;
@ -2469,7 +2461,7 @@ gnucash_sheet_class_init (GnucashSheetClass *klass)
widget_class->button_release_event = gnucash_button_release_event;
widget_class->scroll_event = gnucash_scroll_event;
widget_class->expose_event = gnucash_sheet_draw;
widget_class->draw = gnucash_sheet_draw;
}

View File

@ -135,7 +135,7 @@ void gnucash_sheet_refresh_from_prefs (GnucashSheet *sheet);
gboolean gnucash_sheet_find_loc_by_pixel (GnucashSheet *sheet, gint x, gint y,
VirtualLocation *vcell_loc);
gboolean gnucash_sheet_draw_internal (GnucashSheet *sheet, cairo_t *cr,
int x, int y, int width, int height);
GtkAllocation *alloc);
void gnucash_sheet_draw_cursor (GnucashCursor *cursor, cairo_t *cr);