adding support for native tab widgets. not part of the build.

This commit is contained in:
bryner%netscape.com 2005-08-20 07:12:30 +00:00
Родитель 9929343612
Коммит be93e36094
7 изменённых файлов: 138 добавлений и 14 удалений

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

@ -57,6 +57,7 @@ extern GtkWidget* gHandleBoxWidget;
extern GtkWidget* gFrameWidget;
extern GtkWidget* gProtoWindow;
extern GtkWidget* gProgressWidget;
extern GtkWidget* gTabWidget;
extern GtkTooltips* gTooltipWidget;
GtkStateType
@ -410,3 +411,22 @@ moz_gtk_progress_chunk_paint(GdkWindow* window, GtkStyle* style,
rect->width, rect->height);
}
void
moz_gtk_tab_paint(GdkWindow* window, GtkStyle* style, GdkRectangle* rect,
GdkRectangle* cliprect, GtkTabType type)
{
gtk_paint_extension(style, window,
(type == kTabSelected ? GTK_STATE_NORMAL : GTK_STATE_ACTIVE),
GTK_SHADOW_OUT, cliprect, gTabWidget, "tab", rect->x,
rect->y, rect->width, rect->height, GTK_POS_BOTTOM);
/* Here is the sleazy hack for before/after selected tab */
if (type == kTabBeforeSelected)
gtk_paint_extension(style, window, GTK_STATE_NORMAL, GTK_SHADOW_OUT,
cliprect, gTabWidget, "tab", rect->x + rect->width,
rect->y, rect->width, rect->height, GTK_POS_BOTTOM);
else if (type == kTabAfterSelected)
gtk_paint_extension(style, window, GTK_STATE_NORMAL, GTK_SHADOW_OUT,
cliprect, gTabWidget, "tab", rect->x - rect->width,
rect->y, rect->width, rect->height, GTK_POS_BOTTOM);
}

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

@ -56,6 +56,13 @@ typedef struct {
PRPackedBool canDefault;
} GtkWidgetState;
typedef enum {
kTabNormal,
kTabBeforeSelected,
kTabSelected,
kTabAfterSelected
} GtkTabType;
void
moz_gtk_button_paint(GdkWindow* window, GtkStyle* style, GdkRectangle* rect,
GdkRectangle* cliprect, GtkWidgetState* state,
@ -123,6 +130,10 @@ void
moz_gtk_progress_chunk_paint(GdkWindow* window, GtkStyle* style,
GdkRectangle* rect, GdkRectangle* cliprect);
void
moz_gtk_tab_paint(GdkWindow* window, GtkStyle* style, GdkRectangle* rect,
GdkRectangle* cliprect, GtkTabType type);
#ifdef __cplusplus
}
#endif /* __cplusplus */

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

@ -67,6 +67,7 @@ GtkWidget* gHandleBoxWidget;
GtkWidget* gFrameWidget;
GtkWidget* gProtoWindow;
GtkWidget* gProgressWidget;
GtkWidget* gTabWidget;
GtkTooltips* gTooltipWidget;
nsNativeThemeGTK::nsNativeThemeGTK()
@ -352,6 +353,36 @@ nsNativeThemeGTK::DrawWidgetBackground(nsIRenderingContext* aContext,
moz_gtk_progress_chunk_paint(window, gProgressWidget->style, &gdk_rect,
&gdk_clip);
break;
// case NS_THEME_TAB_PANELS:
// EnsureTabWidget();
// break;
case NS_THEME_TAB:
case NS_THEME_TAB_LEFT_EDGE:
case NS_THEME_TAB_RIGHT_EDGE:
{
EnsureTabWidget();
GtkTabType tab_type;
switch (aWidgetType) {
case NS_THEME_TAB:
{
PRBool isSelected = CheckBooleanAttr(aFrame, mSelectedAtom);
tab_type = (isSelected ? kTabSelected : kTabNormal);
}
break;
case NS_THEME_TAB_LEFT_EDGE:
tab_type = kTabBeforeSelected;
break;
case NS_THEME_TAB_RIGHT_EDGE:
tab_type = kTabAfterSelected;
break;
}
moz_gtk_tab_paint(window, gTabWidget->style, &gdk_rect, &gdk_clip,
tab_type);
break;
}
}
return NS_OK;
@ -555,7 +586,7 @@ nsNativeThemeGTK::ThemeSupportsWidget(nsIPresContext* aPresContext,
case NS_THEME_TOOLBAR_GRIPPER:
case NS_THEME_STATUSBAR:
case NS_THEME_STATUSBAR_PANEL:
// case NS_THEME_RESIZER:
// case NS_THEME_RESIZER: (n/a for gtk)
// case NS_THEME_LISTBOX:
// case NS_THEME_LISTBOX_LISTITEM:
// case NS_THEME_TREEVIEW:
@ -570,16 +601,16 @@ nsNativeThemeGTK::ThemeSupportsWidget(nsIPresContext* aPresContext,
case NS_THEME_PROGRESSBAR_CHUNK:
case NS_THEME_PROGRESSBAR_VERTICAL:
case NS_THEME_PROGRESSBAR_CHUNK_VERTICAL:
// case NS_THEME_TAB:
case NS_THEME_TAB:
// case NS_THEME_TAB_PANEL:
// case NS_THEME_TAB_LEFT_EDGE:
// case NS_THEME_TAB_RIGHT_EDGE:
case NS_THEME_TAB_LEFT_EDGE:
case NS_THEME_TAB_RIGHT_EDGE:
// case NS_THEME_TAB_PANELS:
case NS_THEME_TOOLTIP:
// case NS_THEME_SPINNER:
// case NS_THEME_SPINNER_UP_BUTTON:
// case NS_THEME_SPINNER_DOWN_BUTTON:
// case NS_THEME_SCROLLBAR:
// case NS_THEME_SCROLLBAR: (n/a for gtk)
case NS_THEME_SCROLLBAR_BUTTON_UP:
case NS_THEME_SCROLLBAR_BUTTON_DOWN:
case NS_THEME_SCROLLBAR_BUTTON_LEFT:
@ -588,8 +619,8 @@ nsNativeThemeGTK::ThemeSupportsWidget(nsIPresContext* aPresContext,
case NS_THEME_SCROLLBAR_TRACK_VERTICAL:
case NS_THEME_SCROLLBAR_THUMB_HORIZONTAL:
case NS_THEME_SCROLLBAR_THUMB_VERTICAL:
// case NS_THEME_SCROLLBAR_GRIPPER_HORIZONTAL:
// case NS_THEME_SCROLLBAR_GRIPPER_VERTICAL:
// case NS_THEME_SCROLLBAR_GRIPPER_HORIZONTAL: (n/a for gtk)
// case NS_THEME_SCROLLBAR_GRIPPER_VERTICAL: (n/a for gtk)
case NS_THEME_TEXTFIELD:
// case NS_THEME_TEXTFIELD_CARET:
// case NS_THEME_DROPDOWN:
@ -734,3 +765,12 @@ nsNativeThemeGTK::EnsureProgressBarWidget()
}
}
void
nsNativeThemeGTK::EnsureTabWidget()
{
if (!gTabWidget) {
gTabWidget = gtk_notebook_new();
SetupWidgetPrototype(gTabWidget);
}
}

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

@ -99,6 +99,7 @@ protected:
void EnsureTooltipWidget();
void EnsureFrameWidget();
void EnsureProgressBarWidget();
void EnsureTabWidget();
private:
nsCOMPtr<nsIAtom> mCheckedAtom;

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

@ -56,6 +56,13 @@ typedef struct {
PRPackedBool canDefault;
} GtkWidgetState;
typedef enum {
kTabNormal,
kTabBeforeSelected,
kTabSelected,
kTabAfterSelected
} GtkTabType;
void
moz_gtk_button_paint(GdkWindow* window, GtkStyle* style, GdkRectangle* rect,
GdkRectangle* cliprect, GtkWidgetState* state,
@ -123,6 +130,10 @@ void
moz_gtk_progress_chunk_paint(GdkWindow* window, GtkStyle* style,
GdkRectangle* rect, GdkRectangle* cliprect);
void
moz_gtk_tab_paint(GdkWindow* window, GtkStyle* style, GdkRectangle* rect,
GdkRectangle* cliprect, GtkTabType type);
#ifdef __cplusplus
}
#endif /* __cplusplus */

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

@ -67,6 +67,7 @@ GtkWidget* gHandleBoxWidget;
GtkWidget* gFrameWidget;
GtkWidget* gProtoWindow;
GtkWidget* gProgressWidget;
GtkWidget* gTabWidget;
GtkTooltips* gTooltipWidget;
nsNativeThemeGTK::nsNativeThemeGTK()
@ -352,6 +353,36 @@ nsNativeThemeGTK::DrawWidgetBackground(nsIRenderingContext* aContext,
moz_gtk_progress_chunk_paint(window, gProgressWidget->style, &gdk_rect,
&gdk_clip);
break;
// case NS_THEME_TAB_PANELS:
// EnsureTabWidget();
// break;
case NS_THEME_TAB:
case NS_THEME_TAB_LEFT_EDGE:
case NS_THEME_TAB_RIGHT_EDGE:
{
EnsureTabWidget();
GtkTabType tab_type;
switch (aWidgetType) {
case NS_THEME_TAB:
{
PRBool isSelected = CheckBooleanAttr(aFrame, mSelectedAtom);
tab_type = (isSelected ? kTabSelected : kTabNormal);
}
break;
case NS_THEME_TAB_LEFT_EDGE:
tab_type = kTabBeforeSelected;
break;
case NS_THEME_TAB_RIGHT_EDGE:
tab_type = kTabAfterSelected;
break;
}
moz_gtk_tab_paint(window, gTabWidget->style, &gdk_rect, &gdk_clip,
tab_type);
break;
}
}
return NS_OK;
@ -555,7 +586,7 @@ nsNativeThemeGTK::ThemeSupportsWidget(nsIPresContext* aPresContext,
case NS_THEME_TOOLBAR_GRIPPER:
case NS_THEME_STATUSBAR:
case NS_THEME_STATUSBAR_PANEL:
// case NS_THEME_RESIZER:
// case NS_THEME_RESIZER: (n/a for gtk)
// case NS_THEME_LISTBOX:
// case NS_THEME_LISTBOX_LISTITEM:
// case NS_THEME_TREEVIEW:
@ -570,16 +601,16 @@ nsNativeThemeGTK::ThemeSupportsWidget(nsIPresContext* aPresContext,
case NS_THEME_PROGRESSBAR_CHUNK:
case NS_THEME_PROGRESSBAR_VERTICAL:
case NS_THEME_PROGRESSBAR_CHUNK_VERTICAL:
// case NS_THEME_TAB:
case NS_THEME_TAB:
// case NS_THEME_TAB_PANEL:
// case NS_THEME_TAB_LEFT_EDGE:
// case NS_THEME_TAB_RIGHT_EDGE:
case NS_THEME_TAB_LEFT_EDGE:
case NS_THEME_TAB_RIGHT_EDGE:
// case NS_THEME_TAB_PANELS:
case NS_THEME_TOOLTIP:
// case NS_THEME_SPINNER:
// case NS_THEME_SPINNER_UP_BUTTON:
// case NS_THEME_SPINNER_DOWN_BUTTON:
// case NS_THEME_SCROLLBAR:
// case NS_THEME_SCROLLBAR: (n/a for gtk)
case NS_THEME_SCROLLBAR_BUTTON_UP:
case NS_THEME_SCROLLBAR_BUTTON_DOWN:
case NS_THEME_SCROLLBAR_BUTTON_LEFT:
@ -588,8 +619,8 @@ nsNativeThemeGTK::ThemeSupportsWidget(nsIPresContext* aPresContext,
case NS_THEME_SCROLLBAR_TRACK_VERTICAL:
case NS_THEME_SCROLLBAR_THUMB_HORIZONTAL:
case NS_THEME_SCROLLBAR_THUMB_VERTICAL:
// case NS_THEME_SCROLLBAR_GRIPPER_HORIZONTAL:
// case NS_THEME_SCROLLBAR_GRIPPER_VERTICAL:
// case NS_THEME_SCROLLBAR_GRIPPER_HORIZONTAL: (n/a for gtk)
// case NS_THEME_SCROLLBAR_GRIPPER_VERTICAL: (n/a for gtk)
case NS_THEME_TEXTFIELD:
// case NS_THEME_TEXTFIELD_CARET:
// case NS_THEME_DROPDOWN:
@ -734,3 +765,12 @@ nsNativeThemeGTK::EnsureProgressBarWidget()
}
}
void
nsNativeThemeGTK::EnsureTabWidget()
{
if (!gTabWidget) {
gTabWidget = gtk_notebook_new();
SetupWidgetPrototype(gTabWidget);
}
}

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

@ -99,6 +99,7 @@ protected:
void EnsureTooltipWidget();
void EnsureFrameWidget();
void EnsureProgressBarWidget();
void EnsureTabWidget();
private:
nsCOMPtr<nsIAtom> mCheckedAtom;