Bug 118312 - "NS_THEME_TREEVIEW* implementations (GTK)" (implement NS_THEME_TREEVIEW_HEADER_SORTARROW) [p=twanno@lycos.nl (Teune van Steeg) r+sr=roc a1.9=schrep]

This commit is contained in:
reed@reedloden.com 2007-11-13 00:43:03 -08:00
Родитель 4a537c78b5
Коммит 2300d3516a
5 изменённых файлов: 76 добавлений и 22 удалений

Просмотреть файл

@ -127,15 +127,7 @@ listheader[sortable="true"]:hover:active {
/* ..... sort direction icon ..... */
.listheader-sortdirection {
list-style-image: none;
}
.listheader-sortdirection[sortDirection="ascending"] {
list-style-image: url("chrome://global/skin/tree/sort-asc.gif");
}
.listheader-sortdirection[sortDirection="descending"] {
list-style-image: url("chrome://global/skin/tree/sort-dsc.gif");
-moz-appearance: treeheadersortarrow;
}
/* ::::: listcell ::::: */

Просмотреть файл

@ -311,15 +311,7 @@ treechildren::-moz-tree-column(insertafter) {
/* ::::: sort direction indicator ::::: */
.treecol-sortdirection {
list-style-image: none;
}
treecol:not([hideheader="true"]) > .treecol-sortdirection[sortDirection="ascending"] {
list-style-image: url("chrome://global/skin/tree/sort-asc.gif");
}
treecol:not([hideheader="true"]) > .treecol-sortdirection[sortDirection="descending"] {
list-style-image: url("chrome://global/skin/tree/sort-dsc.gif");
-moz-appearance: treeheadersortarrow;
}
/* ::::: column picker ::::: */

Просмотреть файл

@ -80,6 +80,7 @@ static GtkWidget* gMenuItemWidget;
static GtkWidget* gCheckMenuItemWidget;
static GtkWidget* gTreeViewWidget;
static GtkWidget* gTreeHeaderCellWidget;
static GtkWidget* gTreeHeaderSortArrowWidget;
static GtkShadowType gMenuBarShadowType;
static GtkShadowType gToolbarShadowType;
@ -379,6 +380,8 @@ ensure_tree_header_cell_widget()
gtk_tree_view_append_column(GTK_TREE_VIEW(gTreeViewWidget), treeViewColumn);
gTreeHeaderCellWidget = treeViewColumn->button;
gtk_tree_view_column_set_sort_indicator(treeViewColumn, TRUE);
gTreeHeaderSortArrowWidget = treeViewColumn->arrow;
}
return MOZ_GTK_SUCCESS;
}
@ -1028,7 +1031,7 @@ moz_gtk_treeview_paint(GdkDrawable* drawable, GdkRectangle* rect,
/* only handle disabled and normal states, otherwise the whole background
* area will be painted differently with other states */
state_type = state->disabled ? GTK_STATE_INSENSITIVE : GTK_STATE_NORMAL;
style = gTreeViewWidget->style;
TSOffsetStyleGCs(style, rect->x, rect->y);
@ -1049,6 +1052,36 @@ moz_gtk_tree_header_cell_paint(GdkDrawable* drawable, GdkRectangle* rect,
return MOZ_GTK_SUCCESS;
}
static gint
moz_gtk_tree_header_sort_arrow_paint(GdkDrawable* drawable, GdkRectangle* rect,
GdkRectangle* cliprect, GtkWidgetState* state,
GtkArrowType flags)
{
GdkRectangle arrow_rect;
GtkStateType state_type = ConvertGtkState(state);
GtkShadowType shadow_type = GTK_SHADOW_IN;
GtkArrowType arrow_type = flags;
GtkStyle* style;
ensure_tree_header_cell_widget();
/* hard code these values */
arrow_rect.width = 11;
arrow_rect.height = 11;
arrow_rect.x = rect->x + (rect->width - arrow_rect.width) / 2;
arrow_rect.y = rect->y + (rect->height - arrow_rect.height) / 2;
style = gTreeHeaderSortArrowWidget->style;
TSOffsetStyleGCs(style, arrow_rect.x, arrow_rect.y);
gtk_paint_arrow(style, drawable, state_type, shadow_type, cliprect,
gTreeHeaderSortArrowWidget, "arrow", arrow_type, TRUE,
arrow_rect.x, arrow_rect.y,
arrow_rect.width, arrow_rect.height);
return MOZ_GTK_SUCCESS;
}
static gint
moz_gtk_option_menu_paint(GdkDrawable* drawable, GdkRectangle* rect,
GdkRectangle* cliprect, GtkWidgetState* state)
@ -1149,7 +1182,7 @@ moz_gtk_dropdown_arrow_paint(GdkDrawable* drawable, GdkRectangle* rect,
real_arrow_rect.y = floor (arrow_rect.y + ((arrow_rect.height - real_arrow_rect.height) / 2) + 0.5);
gtk_paint_arrow(style, drawable, state_type, shadow_type, cliprect,
gHorizScrollbarWidget, "arrow", GTK_ARROW_DOWN, TRUE,
gDropdownButtonWidget, "arrow", GTK_ARROW_DOWN, TRUE,
real_arrow_rect.x, real_arrow_rect.y,
real_arrow_rect.width, real_arrow_rect.height);
@ -1650,6 +1683,10 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top,
*bottom += gTreeHeaderCellWidget->style->ythickness;
return MOZ_GTK_SUCCESS;
}
case MOZ_GTK_TREE_HEADER_SORTARROW:
ensure_tree_header_cell_widget();
w = gTreeHeaderSortArrowWidget;
break;
case MOZ_GTK_DROPDOWN_ARROW:
ensure_arrow_widget();
w = gDropdownButtonWidget;
@ -1912,6 +1949,9 @@ moz_gtk_widget_paint(GtkThemeWidgetType widget, GdkDrawable* drawable,
case MOZ_GTK_TREE_HEADER_CELL:
return moz_gtk_tree_header_cell_paint(drawable, rect, cliprect, state);
break;
case MOZ_GTK_TREE_HEADER_SORTARROW:
return moz_gtk_tree_header_sort_arrow_paint(drawable, rect, cliprect, state, (GtkArrowType) flags);
break;
case MOZ_GTK_ENTRY:
return moz_gtk_entry_paint(drawable, rect, cliprect, state);
break;
@ -2021,6 +2061,7 @@ moz_gtk_shutdown()
gCheckMenuItemWidget = NULL;
gTreeViewWidget = NULL;
gTreeHeaderCellWidget = NULL;
gTreeHeaderSortArrowWidget = NULL;
is_initialized = FALSE;

Просмотреть файл

@ -157,6 +157,8 @@ typedef enum {
MOZ_GTK_TREEVIEW,
/* Paints treeheader cells */
MOZ_GTK_TREE_HEADER_CELL,
/* Paints sort arrows in treeheader cells */
MOZ_GTK_TREE_HEADER_SORTARROW,
/* Paints the background of the menu bar. */
MOZ_GTK_MENUBAR,
/* Paints the background of menus, context menus. */

Просмотреть файл

@ -61,6 +61,7 @@
#include <gdk/gdkprivate.h>
#include <gdk/gdkx.h>
#include <gtk/gtk.h>
#include "gfxContext.h"
#include "gfxPlatformGtk.h"
@ -377,6 +378,31 @@ nsNativeThemeGTK::GetGtkWidgetAndState(PRUint8 aWidgetType, nsIFrame* aFrame,
case NS_THEME_TREEVIEW_HEADER_CELL:
aGtkWidgetType = MOZ_GTK_TREE_HEADER_CELL;
break;
case NS_THEME_TREEVIEW_HEADER_SORTARROW:
if (aWidgetFlags) {
switch (GetTreeSortDirection(aFrame)) {
case eTreeSortDirection_Ascending:
*aWidgetFlags = GTK_ARROW_DOWN;
break;
case eTreeSortDirection_Descending:
*aWidgetFlags = GTK_ARROW_UP;
break;
case eTreeSortDirection_Natural:
default:
/* GTK_ARROW_NONE is implemented since GTK 2.10
* This prevents the treecolums from getting smaller
* and wider when switching sort direction off and on
* */
#if GTK_CHECK_VERSION(2,10,0)
*aWidgetFlags = GTK_ARROW_NONE;
#else
return PR_FALSE; // Don't draw when we shouldn't
#endif // GTK_CHECK_VERSION(2,10,0)
break;
}
}
aGtkWidgetType = MOZ_GTK_TREE_HEADER_SORTARROW;
break;
case NS_THEME_DROPDOWN:
aGtkWidgetType = MOZ_GTK_DROPDOWN;
break;
@ -851,6 +877,7 @@ nsNativeThemeGTK::GetMinimumWidgetSize(nsIRenderingContext* aContext,
aResult->height = border.top + border.bottom;
}
break;
case NS_THEME_TREEVIEW_HEADER_SORTARROW:
case NS_THEME_SPINNER_UP_BUTTON:
case NS_THEME_SPINNER_DOWN_BUTTON:
// hard code these sizes
@ -862,7 +889,6 @@ nsNativeThemeGTK::GetMinimumWidgetSize(nsIRenderingContext* aContext,
aResult->width = aResult->height = 15;
break;
}
return NS_OK;
}
@ -883,6 +909,7 @@ nsNativeThemeGTK::WidgetStateChanged(nsIFrame* aFrame, PRUint8 aWidgetType,
aWidgetType == NS_THEME_MENUBAR ||
aWidgetType == NS_THEME_MENUPOPUP ||
aWidgetType == NS_THEME_TOOLTIP ||
aWidgetType == NS_THEME_TREEVIEW_HEADER_SORTARROW ||
aWidgetType == NS_THEME_WINDOW ||
aWidgetType == NS_THEME_DIALOG) {
*aShouldRepaint = PR_FALSE;
@ -959,7 +986,7 @@ nsNativeThemeGTK::ThemeSupportsWidget(nsPresContext* aPresContext,
// case NS_THEME_TREEVIEW_LINE:
// case NS_THEME_TREEVIEW_HEADER:
case NS_THEME_TREEVIEW_HEADER_CELL:
// case NS_THEME_TREEVIEW_HEADER_SORTARROW:
case NS_THEME_TREEVIEW_HEADER_SORTARROW:
// case NS_THEME_TREEVIEW_TWISTY_OPEN:
case NS_THEME_PROGRESSBAR:
case NS_THEME_PROGRESSBAR_CHUNK: