Bug 897404 - Port GTK2 to GTK3 - treeview rendering, border patch. r=karlt

This commit is contained in:
Martin Stransky 2013-08-19 08:48:40 -04:00
parent 66fbee273a
commit adb418182b

View File

@ -2536,6 +2536,34 @@ moz_gtk_window_paint(cairo_t *cr, GdkRectangle* rect,
return MOZ_GTK_SUCCESS;
}
static void
moz_gtk_add_style_border(GtkStyleContext* style,
gint* left, gint* top, gint* right, gint* bottom)
{
GtkBorder border;
gtk_style_context_get_border(style, 0, &border);
*left += border.left;
*right += border.right;
*top += border.top;
*bottom += border.bottom;
}
static void
moz_gtk_add_style_padding(GtkStyleContext* style,
gint* left, gint* top, gint* right, gint* bottom)
{
GtkBorder padding;
gtk_style_context_get_padding(style, 0, &padding);
*left += padding.left;
*right += padding.right;
*top += padding.top;
*bottom += padding.bottom;
}
gint
moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top,
gint* right, gint* bottom, GtkTextDirection direction,
@ -2543,8 +2571,7 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top,
{
GtkWidget* w;
GtkStyleContext* style;
GtkBorder border;
GtkBorder padding;
*left = *top = *right = *bottom = 0;
switch (widget) {
case MOZ_GTK_BUTTON:
@ -2566,35 +2593,29 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top,
*top += focus_width + focus_pad + inner_border.top;
*bottom += focus_width + focus_pad + inner_border.bottom;
}
style = gtk_widget_get_style_context(gButtonWidget);
gtk_style_context_get_border(style, 0, &border);
*left += border.left;
*right += border.right;
*top += border.top;
*bottom += border.bottom;
moz_gtk_add_style_border(gtk_widget_get_style_context(gButtonWidget),
left, top, right, bottom);
return MOZ_GTK_SUCCESS;
}
case MOZ_GTK_ENTRY:
{
ensure_entry_widget();
style = gtk_widget_get_style_context(gEntryWidget);
gtk_style_context_get_border(style, 0, &border);
gtk_style_context_get_padding(style, 0, &padding);
*left = padding.left + border.left;
*right = padding.right + border.right;
*top = padding.top + border.top;
*bottom = padding.bottom + border.bottom;
moz_gtk_add_style_border(style, left, top, right, bottom);
moz_gtk_add_style_padding(style, left, top, right, bottom);
return MOZ_GTK_SUCCESS;
}
case MOZ_GTK_TREEVIEW:
ensure_tree_view_widget();
w = gTreeViewWidget;
break;
{
ensure_scrolled_window_widget();
style = gtk_widget_get_style_context(gScrolledWindowWidget);
gtk_style_context_save(style);
gtk_style_context_add_class(style, GTK_STYLE_CLASS_FRAME);
moz_gtk_add_style_border(style, left, top, right, bottom);
gtk_style_context_restore(style);
return MOZ_GTK_SUCCESS;
}
case MOZ_GTK_TREE_HEADER_CELL:
{
/* A Tree Header in GTK is just a different styled button
@ -2617,13 +2638,8 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top,
*top += focus_width + focus_pad + inner_border.top;
*bottom += focus_width + focus_pad + inner_border.bottom;
style = gtk_widget_get_style_context(gTreeHeaderCellWidget);
gtk_style_context_get_border(style, 0, &border);
*left += border.left;
*right += border.right;
*top += border.top;
*bottom += border.bottom;
moz_gtk_add_style_border(gtk_widget_get_style_context(gTreeHeaderCellWidget),
left, top, right, bottom);
return MOZ_GTK_SUCCESS;
}
case MOZ_GTK_TREE_HEADER_SORTARROW:
@ -2646,6 +2662,7 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top,
gboolean ignored_interior_focus, wide_separators;
gint focus_width, focus_pad, separator_width;
GtkRequisition arrow_req;
GtkBorder border;
ensure_combo_box_widgets();
@ -2737,8 +2754,6 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top,
if (interior_focus)
*left = *top = *right = *bottom = (focus_width + focus_pad);
else
*left = *top = *right = *bottom = 0;
return MOZ_GTK_SUCCESS;
}
@ -2780,21 +2795,12 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top,
break;
case MOZ_GTK_MENUITEM:
{
guint border_width;
ensure_menu_item_widget();
ensure_menu_bar_item_widget();
style = gtk_widget_get_style_context(gMenuItemWidget);
gtk_style_context_get_padding(style, 0, &padding);
border_width = gtk_container_get_border_width(GTK_CONTAINER(gMenuItemWidget));
*left = padding.left + border_width;
*right = padding.right + border_width;
*top = padding.top + border_width;
*bottom = padding.bottom + border_width;
*left = *top = *right = *bottom = gtk_container_get_border_width(GTK_CONTAINER(gMenuItemWidget));
moz_gtk_add_style_padding(gtk_widget_get_style_context(gMenuItemWidget),
left, top, right, bottom);
return MOZ_GTK_SUCCESS;
}
case MOZ_GTK_CHECKMENUITEM:
@ -2835,23 +2841,15 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top,
case MOZ_GTK_TOOLBAR:
case MOZ_GTK_MENUBAR:
case MOZ_GTK_TAB_SCROLLARROW:
*left = *top = *right = *bottom = 0;
return MOZ_GTK_SUCCESS;
default:
g_warning("Unsupported widget type: %d", widget);
return MOZ_GTK_UNKNOWN_WIDGET;
}
/* TODO - we're still missing some widget implementations */
if (!w) {
*right = *left = 0;
*bottom = *top = 0;
} else {
style = gtk_widget_get_style_context(w);
gtk_style_context_get_border(style, 0, &border);
*left = border.left;
*right = border.right;
*top = border.top;
*bottom = border.bottom;
if (w) {
moz_gtk_add_style_border(gtk_widget_get_style_context(w),
left, top, right, bottom);
}
return MOZ_GTK_SUCCESS;
}