Xamarin Public Jenkins 6992685b86 Imported Upstream version 4.2.0.179
Former-commit-id: 0a113cb3a6feb7873f632839b1307cc6033cd595
2015-11-10 14:54:39 +00:00

1175 lines
36 KiB
C#

//
// VisualStylesGtkPlus.cs: IVisualStyles that uses GtkPlus.
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to
// permit persons to whom the Software is furnished to do so, subject to
// the following conditions:
//
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
// Copyright (c) 2008 George Giolfan
//
// Authors:
// George Giolfan (georgegiolfan@yahoo.com)
//
using System.Drawing;
using System.Collections.Generic;
namespace System.Windows.Forms.VisualStyles
{
class VisualStylesGtkPlus : IVisualStyles
{
public static bool Initialize ()
{
return GtkPlus.Initialize ();
}
static GtkPlus GtkPlus {
get {
return GtkPlus.Instance;
}
}
enum S {
S_OK,
S_FALSE
}
enum ThemeHandle {
BUTTON = 1,
COMBOBOX,
EDIT,
HEADER,
PROGRESS,
REBAR,
SCROLLBAR,
SPIN,
STATUS,
TAB,
TOOLBAR,
TRACKBAR,
TREEVIEW
}
#region UxTheme
public int UxThemeCloseThemeData (IntPtr hTheme)
{
#if DEBUG
return (int)((Enum.IsDefined (typeof (ThemeHandle), (int)hTheme)) ? S.S_OK : S.S_FALSE);
#else
return (int)S.S_OK;
#endif
}
public int UxThemeDrawThemeParentBackground (IDeviceContext dc, Rectangle bounds, Control childControl)
{
return (int)S.S_FALSE;
}
public int UxThemeDrawThemeBackground (IntPtr hTheme, IDeviceContext dc, int iPartId, int iStateId, Rectangle bounds, Rectangle clipRectangle)
{
return (int)(DrawBackground ((ThemeHandle)(int)hTheme, dc, iPartId, iStateId, bounds, clipRectangle, Rectangle.Empty) ? S.S_OK : S.S_FALSE);
}
public int UxThemeDrawThemeBackground (IntPtr hTheme, IDeviceContext dc, int iPartId, int iStateId, Rectangle bounds)
{
return UxThemeDrawThemeBackground (hTheme, dc, iPartId, iStateId, bounds, bounds);
}
bool DrawBackground (ThemeHandle themeHandle, IDeviceContext dc, int part, int state, Rectangle bounds, Rectangle clipRectangle, Rectangle excludedArea) {
GtkPlusState gtk_plus_state;
GtkPlusToggleButtonValue gtk_plus_toggle_button_value;
switch (themeHandle) {
#region BUTTON
case ThemeHandle.BUTTON:
switch ((BUTTONPARTS)part) {
#region BP_PUSHBUTTON
case BUTTONPARTS.BP_PUSHBUTTON:
switch ((PUSHBUTTONSTATES)state) {
case PUSHBUTTONSTATES.PBS_NORMAL:
gtk_plus_state = GtkPlusState.Normal;
break;
case PUSHBUTTONSTATES.PBS_HOT:
gtk_plus_state = GtkPlusState.Hot;
break;
case PUSHBUTTONSTATES.PBS_PRESSED:
gtk_plus_state = GtkPlusState.Pressed;
break;
case PUSHBUTTONSTATES.PBS_DISABLED:
gtk_plus_state = GtkPlusState.Disabled;
break;
case PUSHBUTTONSTATES.PBS_DEFAULTED:
gtk_plus_state = GtkPlusState.Normal;
break;
default:
return false;
}
GtkPlus.ButtonPaint (dc, bounds, clipRectangle, (PUSHBUTTONSTATES)state == PUSHBUTTONSTATES.PBS_DEFAULTED, gtk_plus_state);
return true;
#endregion
#region BP_RADIOBUTTON
case BUTTONPARTS.BP_RADIOBUTTON:
switch ((RADIOBUTTONSTATES)state) {
case RADIOBUTTONSTATES.RBS_UNCHECKEDNORMAL:
gtk_plus_state = GtkPlusState.Normal;
gtk_plus_toggle_button_value = GtkPlusToggleButtonValue.Unchecked;
break;
case RADIOBUTTONSTATES.RBS_UNCHECKEDPRESSED:
gtk_plus_state = GtkPlusState.Pressed;
gtk_plus_toggle_button_value = GtkPlusToggleButtonValue.Unchecked;
break;
case RADIOBUTTONSTATES.RBS_UNCHECKEDHOT:
gtk_plus_state = GtkPlusState.Hot;
gtk_plus_toggle_button_value = GtkPlusToggleButtonValue.Unchecked;
break;
case RADIOBUTTONSTATES.RBS_UNCHECKEDDISABLED:
gtk_plus_state = GtkPlusState.Disabled;
gtk_plus_toggle_button_value = GtkPlusToggleButtonValue.Unchecked;
break;
case RADIOBUTTONSTATES.RBS_CHECKEDNORMAL:
gtk_plus_state = GtkPlusState.Normal;
gtk_plus_toggle_button_value = GtkPlusToggleButtonValue.Checked;
break;
case RADIOBUTTONSTATES.RBS_CHECKEDPRESSED:
gtk_plus_state = GtkPlusState.Pressed;
gtk_plus_toggle_button_value = GtkPlusToggleButtonValue.Checked;
break;
case RADIOBUTTONSTATES.RBS_CHECKEDHOT:
gtk_plus_state = GtkPlusState.Hot;
gtk_plus_toggle_button_value = GtkPlusToggleButtonValue.Checked;
break;
case RADIOBUTTONSTATES.RBS_CHECKEDDISABLED:
gtk_plus_state = GtkPlusState.Disabled;
gtk_plus_toggle_button_value = GtkPlusToggleButtonValue.Checked;
break;
default:
return false;
}
GtkPlus.RadioButtonPaint (dc, bounds, clipRectangle, gtk_plus_state, gtk_plus_toggle_button_value);
return true;
#endregion
#region BP_CHECKBOX
case BUTTONPARTS.BP_CHECKBOX:
switch ((CHECKBOXSTATES)state) {
case CHECKBOXSTATES.CBS_UNCHECKEDNORMAL:
gtk_plus_state = GtkPlusState.Normal;
gtk_plus_toggle_button_value = GtkPlusToggleButtonValue.Unchecked;
break;
case CHECKBOXSTATES.CBS_UNCHECKEDPRESSED:
gtk_plus_state = GtkPlusState.Pressed;
gtk_plus_toggle_button_value = GtkPlusToggleButtonValue.Unchecked;
break;
case CHECKBOXSTATES.CBS_UNCHECKEDHOT:
gtk_plus_state = GtkPlusState.Hot;
gtk_plus_toggle_button_value = GtkPlusToggleButtonValue.Unchecked;
break;
case CHECKBOXSTATES.CBS_UNCHECKEDDISABLED:
gtk_plus_state = GtkPlusState.Disabled;
gtk_plus_toggle_button_value = GtkPlusToggleButtonValue.Unchecked;
break;
case CHECKBOXSTATES.CBS_CHECKEDNORMAL:
gtk_plus_state = GtkPlusState.Normal;
gtk_plus_toggle_button_value = GtkPlusToggleButtonValue.Checked;
break;
case CHECKBOXSTATES.CBS_CHECKEDPRESSED:
gtk_plus_state = GtkPlusState.Pressed;
gtk_plus_toggle_button_value = GtkPlusToggleButtonValue.Checked;
break;
case CHECKBOXSTATES.CBS_CHECKEDHOT:
gtk_plus_state = GtkPlusState.Hot;
gtk_plus_toggle_button_value = GtkPlusToggleButtonValue.Checked;
break;
case CHECKBOXSTATES.CBS_CHECKEDDISABLED:
gtk_plus_state = GtkPlusState.Disabled;
gtk_plus_toggle_button_value = GtkPlusToggleButtonValue.Checked;
break;
case CHECKBOXSTATES.CBS_MIXEDNORMAL:
gtk_plus_state = GtkPlusState.Normal;
gtk_plus_toggle_button_value = GtkPlusToggleButtonValue.Mixed;
break;
case CHECKBOXSTATES.CBS_MIXEDPRESSED:
gtk_plus_state = GtkPlusState.Pressed;
gtk_plus_toggle_button_value = GtkPlusToggleButtonValue.Mixed;
break;
case CHECKBOXSTATES.CBS_MIXEDHOT:
gtk_plus_state = GtkPlusState.Hot;
gtk_plus_toggle_button_value = GtkPlusToggleButtonValue.Mixed;
break;
case CHECKBOXSTATES.CBS_MIXEDDISABLED:
gtk_plus_state = GtkPlusState.Disabled;
gtk_plus_toggle_button_value = GtkPlusToggleButtonValue.Mixed;
break;
default:
return false;
}
GtkPlus.CheckBoxPaint (dc, bounds, clipRectangle, gtk_plus_state, gtk_plus_toggle_button_value);
return true;
#endregion
#region BP_GROUPBOX
case BUTTONPARTS.BP_GROUPBOX:
switch ((GROUPBOXSTATES)state) {
case GROUPBOXSTATES.GBS_NORMAL:
gtk_plus_state = GtkPlusState.Normal;
break;
case GROUPBOXSTATES.GBS_DISABLED:
gtk_plus_state = GtkPlusState.Disabled;
break;
default:
return false;
}
GtkPlus.GroupBoxPaint (dc, bounds, excludedArea, gtk_plus_state);
return true;
#endregion
default: return false;
}
#endregion
#region COMBOBOX
case ThemeHandle.COMBOBOX:
switch ((COMBOBOXPARTS)part) {
#region CP_DROPDOWNBUTTON
case COMBOBOXPARTS.CP_DROPDOWNBUTTON:
switch ((COMBOBOXSTYLESTATES)state) {
case COMBOBOXSTYLESTATES.CBXS_NORMAL: gtk_plus_state = GtkPlusState.Normal; break;
case COMBOBOXSTYLESTATES.CBXS_HOT: gtk_plus_state = GtkPlusState.Hot; break;
case COMBOBOXSTYLESTATES.CBXS_PRESSED: gtk_plus_state = GtkPlusState.Pressed; break;
case COMBOBOXSTYLESTATES.CBXS_DISABLED: gtk_plus_state = GtkPlusState.Disabled; break;
default: return false;
}
GtkPlus.ComboBoxPaintDropDownButton (dc, bounds, clipRectangle, gtk_plus_state);
return true;
#endregion
#region CP_BORDER
case COMBOBOXPARTS.CP_BORDER:
switch ((BORDERSTATES)state) {
case BORDERSTATES.CBB_NORMAL:
case BORDERSTATES.CBB_HOT:
case BORDERSTATES.CBB_FOCUSED:
case BORDERSTATES.CBB_DISABLED:
GtkPlus.ComboBoxPaintBorder (dc, bounds, clipRectangle);
return true;
default: return false;
}
#endregion
default: return false;
}
#endregion
#region EDIT
case ThemeHandle.EDIT:
switch ((EDITPARTS)part) {
#region EP_EDITTEXT
case EDITPARTS.EP_EDITTEXT:
switch ((EDITTEXTSTATES)state) {
case EDITTEXTSTATES.ETS_NORMAL:
case EDITTEXTSTATES.ETS_ASSIST:
case EDITTEXTSTATES.ETS_READONLY:
case EDITTEXTSTATES.ETS_HOT:
case EDITTEXTSTATES.ETS_SELECTED:
case EDITTEXTSTATES.ETS_FOCUSED:
gtk_plus_state = GtkPlusState.Normal;
break;
case EDITTEXTSTATES.ETS_DISABLED:
gtk_plus_state = GtkPlusState.Disabled;
break;
default: return false;
}
GtkPlus.TextBoxPaint (dc, bounds, excludedArea, gtk_plus_state);
return true;
#endregion
default: return false;
}
#endregion
#region HEADER
case ThemeHandle.HEADER:
switch ((HEADERPARTS)part) {
#region HP_HEADERITEM
case HEADERPARTS.HP_HEADERITEM:
switch ((HEADERITEMSTATES)state) {
case HEADERITEMSTATES.HIS_NORMAL:
gtk_plus_state = GtkPlusState.Normal;
break;
case HEADERITEMSTATES.HIS_HOT:
gtk_plus_state = GtkPlusState.Hot;
break;
case HEADERITEMSTATES.HIS_PRESSED:
gtk_plus_state = GtkPlusState.Pressed;
break;
default: return false;
}
GtkPlus.HeaderPaint (dc, bounds, clipRectangle, gtk_plus_state);
return true;
#endregion
default: return false;
}
#endregion
#region PROGRESS
case ThemeHandle.PROGRESS:
switch ((PROGRESSPARTS)part) {
case PROGRESSPARTS.PP_BAR:
case PROGRESSPARTS.PP_BARVERT:
GtkPlus.ProgressBarPaintBar (dc, bounds, clipRectangle);
return true;
case PROGRESSPARTS.PP_CHUNK:
case PROGRESSPARTS.PP_CHUNKVERT:
GtkPlus.ProgressBarPaintChunk (dc, bounds, clipRectangle);
return true;
default: return false;
}
#endregion
#region REBAR
case ThemeHandle.REBAR:
switch ((REBARPARTS)part) {
case REBARPARTS.RP_BAND:
GtkPlus.ToolBarPaint (dc, bounds, clipRectangle);
return true;
default: return false;
}
#endregion
#region SCROLLBAR
case ThemeHandle.SCROLLBAR:
switch ((SCROLLBARPARTS)part) {
#region SBP_ARROWBTN
case SCROLLBARPARTS.SBP_ARROWBTN:
bool horizontal;
bool up_or_left;
switch ((ARROWBTNSTATES)state) {
case ARROWBTNSTATES.ABS_UPNORMAL:
gtk_plus_state = GtkPlusState.Normal;
horizontal = false;
up_or_left = true;
break;
case ARROWBTNSTATES.ABS_UPHOT:
gtk_plus_state = GtkPlusState.Hot;
horizontal = false;
up_or_left = true;
break;
case ARROWBTNSTATES.ABS_UPPRESSED:
gtk_plus_state = GtkPlusState.Pressed;
horizontal = false;
up_or_left = true;
break;
case ARROWBTNSTATES.ABS_UPDISABLED:
gtk_plus_state = GtkPlusState.Disabled;
horizontal = false;
up_or_left = true;
break;
case ARROWBTNSTATES.ABS_DOWNNORMAL:
gtk_plus_state = GtkPlusState.Normal;
horizontal = false;
up_or_left = false;
break;
case ARROWBTNSTATES.ABS_DOWNHOT:
gtk_plus_state = GtkPlusState.Hot;
horizontal = false;
up_or_left = false;
break;
case ARROWBTNSTATES.ABS_DOWNPRESSED:
gtk_plus_state = GtkPlusState.Pressed;
horizontal = false;
up_or_left = false;
break;
case ARROWBTNSTATES.ABS_DOWNDISABLED:
gtk_plus_state = GtkPlusState.Disabled;
horizontal = false;
up_or_left = false;
break;
case ARROWBTNSTATES.ABS_LEFTNORMAL:
gtk_plus_state = GtkPlusState.Normal;
horizontal = true;
up_or_left = true;
break;
case ARROWBTNSTATES.ABS_LEFTHOT:
gtk_plus_state = GtkPlusState.Hot;
horizontal = true;
up_or_left = true;
break;
case ARROWBTNSTATES.ABS_LEFTPRESSED:
gtk_plus_state = GtkPlusState.Pressed;
horizontal = true;
up_or_left = true;
break;
case ARROWBTNSTATES.ABS_LEFTDISABLED:
gtk_plus_state = GtkPlusState.Disabled;
horizontal = true;
up_or_left = true;
break;
case ARROWBTNSTATES.ABS_RIGHTNORMAL:
gtk_plus_state = GtkPlusState.Normal;
horizontal = true;
up_or_left = false;
break;
case ARROWBTNSTATES.ABS_RIGHTHOT:
gtk_plus_state = GtkPlusState.Hot;
horizontal = true;
up_or_left = false;
break;
case ARROWBTNSTATES.ABS_RIGHTPRESSED:
gtk_plus_state = GtkPlusState.Pressed;
horizontal = true;
up_or_left = false;
break;
case ARROWBTNSTATES.ABS_RIGHTDISABLED:
gtk_plus_state = GtkPlusState.Disabled;
horizontal = true;
up_or_left = false;
break;
default: return false;
}
GtkPlus.ScrollBarPaintArrowButton (dc, bounds, clipRectangle, gtk_plus_state, horizontal, up_or_left);
return true;
#endregion
#region SBP_THUMBBTNHORZ, SBP_THUMBBTNVERT
case SCROLLBARPARTS.SBP_THUMBBTNHORZ:
case SCROLLBARPARTS.SBP_THUMBBTNVERT:
if (!GetGtkPlusState ((SCROLLBARSTYLESTATES)state, out gtk_plus_state))
return false;
GtkPlus.ScrollBarPaintThumbButton (
dc,
bounds,
clipRectangle,
gtk_plus_state,
(SCROLLBARPARTS)part == SCROLLBARPARTS.SBP_THUMBBTNHORZ);
return true;
#endregion
#region SBP_LOWERTRACKHORZ, SBP_UPPERTRACKHORZ, SBP_LOWERTRACKVERT, SBP_UPPERTRACKVERT
case SCROLLBARPARTS.SBP_LOWERTRACKHORZ:
case SCROLLBARPARTS.SBP_UPPERTRACKHORZ:
case SCROLLBARPARTS.SBP_LOWERTRACKVERT:
case SCROLLBARPARTS.SBP_UPPERTRACKVERT:
if (!GetGtkPlusState ((SCROLLBARSTYLESTATES)state, out gtk_plus_state))
return false;
GtkPlus.ScrollBarPaintTrack (
dc,
bounds,
clipRectangle,
gtk_plus_state,
(SCROLLBARPARTS)part == SCROLLBARPARTS.SBP_LOWERTRACKHORZ ||
(SCROLLBARPARTS)part == SCROLLBARPARTS.SBP_UPPERTRACKHORZ,
(SCROLLBARPARTS)part == SCROLLBARPARTS.SBP_UPPERTRACKHORZ ||
(SCROLLBARPARTS)part == SCROLLBARPARTS.SBP_UPPERTRACKVERT);
return true;
#endregion
default: return false;
}
#endregion
#region SPIN
case ThemeHandle.SPIN:
bool up;
switch ((SPINPARTS)part) {
#region SPNP_UP
case SPINPARTS.SPNP_UP:
up = true;
switch ((UPSTATES)state) {
case UPSTATES.UPS_NORMAL: gtk_plus_state = GtkPlusState.Normal; break;
case UPSTATES.UPS_HOT: gtk_plus_state = GtkPlusState.Hot; break;
case UPSTATES.UPS_PRESSED: gtk_plus_state = GtkPlusState.Pressed; break;
case UPSTATES.UPS_DISABLED: gtk_plus_state = GtkPlusState.Disabled; break;
default: return false;
}
break;
#endregion
#region SPNP_DOWN
case SPINPARTS.SPNP_DOWN:
up = false;
switch ((DOWNSTATES)state) {
case DOWNSTATES.DNS_NORMAL: gtk_plus_state = GtkPlusState.Normal; break;
case DOWNSTATES.DNS_HOT: gtk_plus_state = GtkPlusState.Hot; break;
case DOWNSTATES.DNS_PRESSED: gtk_plus_state = GtkPlusState.Pressed; break;
case DOWNSTATES.DNS_DISABLED: gtk_plus_state = GtkPlusState.Disabled; break;
default: return false;
}
break;
#endregion
default: return false;
}
GtkPlus.UpDownPaint (dc, bounds, clipRectangle, up, gtk_plus_state);
return true;
#endregion
#region STATUS
case ThemeHandle.STATUS:
switch ((STATUSPARTS)part) {
case STATUSPARTS.SP_GRIPPER:
GtkPlus.StatusBarPaintGripper (dc, bounds, clipRectangle);
return true;
default: return false;
}
#endregion
#region TABCONTROL
case ThemeHandle.TAB:
bool selected;
switch ((TABPARTS)part) {
#region TABP_TABITEM
case TABPARTS.TABP_TABITEM:
switch ((TABITEMSTATES)state) {
case TABITEMSTATES.TIS_SELECTED:
selected = true;
break;
case TABITEMSTATES.TIS_NORMAL:
case TABITEMSTATES.TIS_HOT:
case TABITEMSTATES.TIS_DISABLED:
selected = false;
break;
default: return false;
}
break;
#endregion
#region TABP_TABITEMLEFTEDGE
case TABPARTS.TABP_TABITEMLEFTEDGE:
switch ((TABITEMLEFTEDGESTATES)state) {
case TABITEMLEFTEDGESTATES.TILES_SELECTED:
selected = true;
break;
case TABITEMLEFTEDGESTATES.TILES_NORMAL:
case TABITEMLEFTEDGESTATES.TILES_HOT:
case TABITEMLEFTEDGESTATES.TILES_DISABLED:
selected = false;
break;
default: return false;
}
break;
#endregion
#region TABP_TABITEMRIGHTEDGE
case TABPARTS.TABP_TABITEMRIGHTEDGE:
switch ((TABITEMRIGHTEDGESTATES)state) {
case TABITEMRIGHTEDGESTATES.TIRES_SELECTED:
selected = true;
break;
case TABITEMRIGHTEDGESTATES.TIRES_NORMAL:
case TABITEMRIGHTEDGESTATES.TIRES_HOT:
case TABITEMRIGHTEDGESTATES.TIRES_DISABLED:
selected = false;
break;
default: return false;
}
break;
#endregion
#region TABP_TABITEMBOTHEDGE
case TABPARTS.TABP_TABITEMBOTHEDGE:
selected = false;
break;
#endregion
#region TABP_TOPTABITEM
case TABPARTS.TABP_TOPTABITEM:
switch ((TOPTABITEMSTATES)state) {
case TOPTABITEMSTATES.TTIS_SELECTED:
selected = true;
break;
case TOPTABITEMSTATES.TTIS_NORMAL:
case TOPTABITEMSTATES.TTIS_HOT:
case TOPTABITEMSTATES.TTIS_DISABLED:
selected = false;
break;
default: return false;
}
break;
#endregion
#region TABP_TOPTABITEMLEFTEDGE
case TABPARTS.TABP_TOPTABITEMLEFTEDGE:
switch ((TOPTABITEMLEFTEDGESTATES)state) {
case TOPTABITEMLEFTEDGESTATES.TTILES_SELECTED:
selected = true;
break;
case TOPTABITEMLEFTEDGESTATES.TTILES_NORMAL:
case TOPTABITEMLEFTEDGESTATES.TTILES_HOT:
case TOPTABITEMLEFTEDGESTATES.TTILES_DISABLED:
selected = false;
break;
default: return false;
}
break;
#endregion
#region TABP_TOPTABITEMRIGHTEDGE
case TABPARTS.TABP_TOPTABITEMRIGHTEDGE:
switch ((TOPTABITEMRIGHTEDGESTATES)state) {
case TOPTABITEMRIGHTEDGESTATES.TTIRES_SELECTED:
selected = true;
break;
case TOPTABITEMRIGHTEDGESTATES.TTIRES_NORMAL:
case TOPTABITEMRIGHTEDGESTATES.TTIRES_HOT:
case TOPTABITEMRIGHTEDGESTATES.TTIRES_DISABLED:
selected = false;
break;
default: return false;
}
break;
#endregion
#region TABP_TOPTABITEMBOTHEDGE
case TABPARTS.TABP_TOPTABITEMBOTHEDGE:
selected = false;
break;
#endregion
#region TABP_PANE
case TABPARTS.TABP_PANE:
GtkPlus.TabControlPaintPane (dc, bounds, clipRectangle);
return true;
#endregion
default: return false;
}
GtkPlus.TabControlPaintTabItem (dc, bounds, clipRectangle, selected ? GtkPlusState.Pressed : GtkPlusState.Normal);
return true;
#endregion
#region TOOLBAR
case ThemeHandle.TOOLBAR:
switch ((TOOLBARPARTS)part) {
case TOOLBARPARTS.TP_BUTTON:
switch ((TOOLBARSTYLESTATES)state) {
case TOOLBARSTYLESTATES.TS_NORMAL:
gtk_plus_state = GtkPlusState.Normal;
break;
case TOOLBARSTYLESTATES.TS_HOT:
gtk_plus_state = GtkPlusState.Hot;
break;
case TOOLBARSTYLESTATES.TS_PRESSED:
gtk_plus_state = GtkPlusState.Pressed;
break;
case TOOLBARSTYLESTATES.TS_DISABLED:
gtk_plus_state = GtkPlusState.Disabled;
break;
case TOOLBARSTYLESTATES.TS_CHECKED:
case TOOLBARSTYLESTATES.TS_HOTCHECKED:
GtkPlus.ToolBarPaintCheckedButton (dc, bounds, clipRectangle);
return true;
default: return false;
}
GtkPlus.ToolBarPaintButton (dc, bounds, clipRectangle, gtk_plus_state);
return true;
default: return false;
}
#endregion
#region TRACKBAR
case ThemeHandle.TRACKBAR:
switch ((TRACKBARPARTS)part) {
#region TKP_TRACK
case TRACKBARPARTS.TKP_TRACK:
switch ((TRACKSTATES)state) {
case TRACKSTATES.TRS_NORMAL:
GtkPlus.TrackBarPaintTrack (dc, bounds, clipRectangle, true);
return true;
default: return false;
}
#endregion
#region TKP_TRACKVERT
case TRACKBARPARTS.TKP_TRACKVERT:
switch ((TRACKVERTSTATES)state) {
case TRACKVERTSTATES.TRVS_NORMAL:
GtkPlus.TrackBarPaintTrack (dc, bounds, clipRectangle, false);
return true;
default: return false;
}
#endregion
#region TKP_THUMB
case TRACKBARPARTS.TKP_THUMB:
switch ((THUMBSTATES)state) {
case THUMBSTATES.TUS_NORMAL:
gtk_plus_state = GtkPlusState.Normal;
break;
case THUMBSTATES.TUS_HOT:
gtk_plus_state = GtkPlusState.Hot;
break;
case THUMBSTATES.TUS_PRESSED:
gtk_plus_state = GtkPlusState.Pressed;
break;
case THUMBSTATES.TUS_FOCUSED:
gtk_plus_state = GtkPlusState.Selected;
break;
case THUMBSTATES.TUS_DISABLED:
gtk_plus_state = GtkPlusState.Disabled;
break;
default: return false;
}
GtkPlus.TrackBarPaintThumb (dc, bounds, clipRectangle, gtk_plus_state, true);
return true;
#endregion
#region TKP_THUMBVERT
case TRACKBARPARTS.TKP_THUMBVERT:
switch ((THUMBVERTSTATES)state) {
case THUMBVERTSTATES.TUVS_NORMAL:
gtk_plus_state = GtkPlusState.Normal;
break;
case THUMBVERTSTATES.TUVS_HOT:
gtk_plus_state = GtkPlusState.Hot;
break;
case THUMBVERTSTATES.TUVS_PRESSED:
gtk_plus_state = GtkPlusState.Pressed;
break;
case THUMBVERTSTATES.TUVS_FOCUSED:
gtk_plus_state = GtkPlusState.Selected;
break;
case THUMBVERTSTATES.TUVS_DISABLED:
gtk_plus_state = GtkPlusState.Disabled;
break;
default: return false;
}
GtkPlus.TrackBarPaintThumb (dc, bounds, clipRectangle, gtk_plus_state, false);
return true;
#endregion
default: return false;
}
#endregion
#region TREEVIEW
case ThemeHandle.TREEVIEW:
switch ((TREEVIEWPARTS)part) {
case TREEVIEWPARTS.TVP_GLYPH:
bool closed;
switch ((GLYPHSTATES)state) {
case GLYPHSTATES.GLPS_CLOSED : closed = true; break;
case GLYPHSTATES.GLPS_OPENED: closed = false; break;
default: return false;
}
GtkPlus.TreeViewPaintGlyph (dc, bounds, clipRectangle, closed);
return true;
default: return false;
}
#endregion
default: return false;
}
}
static bool GetGtkPlusState (SCROLLBARSTYLESTATES state, out GtkPlusState result)
{
switch (state) {
case SCROLLBARSTYLESTATES.SCRBS_NORMAL:
result = GtkPlusState.Normal;
break;
case SCROLLBARSTYLESTATES.SCRBS_HOT:
result = GtkPlusState.Hot;
break;
case SCROLLBARSTYLESTATES.SCRBS_PRESSED:
result = GtkPlusState.Pressed;
break;
case SCROLLBARSTYLESTATES.SCRBS_DISABLED:
result = GtkPlusState.Disabled;
break;
default:
result = (GtkPlusState)0;
return false;
}
return true;
}
public int UxThemeDrawThemeEdge (IntPtr hTheme, IDeviceContext dc, int iPartId, int iStateId, Rectangle bounds, Edges edges, EdgeStyle style, EdgeEffects effects, out Rectangle result)
{
result = Rectangle.Empty;
return (int)S.S_FALSE;
}
public int UxThemeDrawThemeText (IntPtr hTheme, IDeviceContext dc, int iPartId, int iStateId, string text, TextFormatFlags textFlags, Rectangle bounds)
{
return (int)S.S_FALSE;
}
public int UxThemeGetThemeBackgroundContentRect (IntPtr hTheme, IDeviceContext dc, int iPartId, int iStateId, Rectangle bounds, out Rectangle result)
{
return (int)(GetBackgroundContentRectangle ((ThemeHandle)(int)hTheme, iPartId, iStateId, bounds, out result) ? S.S_OK : S.S_FALSE);
}
bool GetBackgroundContentRectangle (ThemeHandle handle, int part, int state, Rectangle bounds, out Rectangle result)
{
switch (handle) {
case ThemeHandle.PROGRESS:
switch ((PROGRESSPARTS)part) {
case PROGRESSPARTS.PP_BAR:
case PROGRESSPARTS.PP_BARVERT:
result = GtkPlus.ProgressBarGetBackgroundContentRectagle (bounds);
return true;
}
break;
}
result = Rectangle.Empty;
return false;
}
public int UxThemeGetThemeBackgroundExtent (IntPtr hTheme, IDeviceContext dc, int iPartId, int iStateId, Rectangle contentBounds, out Rectangle result)
{
result = Rectangle.Empty;
return (int)S.S_FALSE;
}
public int UxThemeGetThemeBackgroundRegion (IntPtr hTheme, IDeviceContext dc, int iPartId, int iStateId, Rectangle bounds, out Region result)
{
result = null;
return (int)S.S_FALSE;
}
public int UxThemeGetThemeBool (IntPtr hTheme, int iPartId, int iStateId, BooleanProperty prop, out bool result)
{
result = false;
return (int)S.S_FALSE;
}
public int UxThemeGetThemeColor (IntPtr hTheme, int iPartId, int iStateId, ColorProperty prop, out Color result)
{
result = Color.Black;
return (int)S.S_FALSE;
}
public int UxThemeGetThemeEnumValue (IntPtr hTheme, int iPartId, int iStateId, EnumProperty prop, out int result)
{
result = 0;
return (int)S.S_FALSE;
}
public int UxThemeGetThemeFilename (IntPtr hTheme, int iPartId, int iStateId, FilenameProperty prop, out string result)
{
result = null;
return (int)S.S_FALSE;
}
public int UxThemeGetThemeInt (IntPtr hTheme, int iPartId, int iStateId, IntegerProperty prop, out int result)
{
return (int)(GetInteger ((ThemeHandle)(int)hTheme, iPartId, iStateId, prop, out result) ? S.S_OK : S.S_FALSE);
}
bool GetInteger (ThemeHandle handle, int part, int state, IntegerProperty property, out int result)
{
switch (handle) {
case ThemeHandle.PROGRESS:
switch ((PROGRESSPARTS)part) {
case PROGRESSPARTS.PP_CHUNK:
case PROGRESSPARTS.PP_CHUNKVERT:
switch (property) {
case IntegerProperty.ProgressChunkSize:
result = ThemeWin32Classic.ProgressBarGetChunkSize ();
return true;
case IntegerProperty.ProgressSpaceSize:
result = ThemeWin32Classic.ProgressBarChunkSpacing;
return true;
}
break;
}
break;
}
result = 0;
return false;
}
public int UxThemeGetThemeMargins (IntPtr hTheme, IDeviceContext dc, int iPartId, int iStateId, MarginProperty prop, out Padding result)
{
result = Padding.Empty;
return (int)S.S_FALSE;
}
public int UxThemeGetThemePartSize (IntPtr hTheme, IDeviceContext dc, int iPartId, int iStateId, Rectangle bounds, ThemeSizeType type, out Size result)
{
return (int)(GetPartSize ((ThemeHandle)(int)hTheme, dc, iPartId, iStateId, bounds, true, type, out result) ? S.S_OK : S.S_FALSE);
}
public int UxThemeGetThemePartSize (IntPtr hTheme, IDeviceContext dc, int iPartId, int iStateId, ThemeSizeType type, out Size result)
{
return (int)(GetPartSize ((ThemeHandle)(int)hTheme, dc, iPartId, iStateId, Rectangle.Empty, false, type, out result) ? S.S_OK : S.S_FALSE);
}
bool GetPartSize (ThemeHandle themeHandle, IDeviceContext dc, int part, int state, Rectangle bounds, bool rectangleSpecified, ThemeSizeType type, out Size result)
{
switch (themeHandle) {
#region BUTTON
case ThemeHandle.BUTTON:
switch ((BUTTONPARTS)part) {
case BUTTONPARTS.BP_RADIOBUTTON:
result = GtkPlus.RadioButtonGetSize ();
return true;
case BUTTONPARTS.BP_CHECKBOX:
result = GtkPlus.CheckBoxGetSize ();
return true;
}
break;
#endregion
#region HEADER
case ThemeHandle.HEADER:
switch ((HEADERPARTS)part) {
case HEADERPARTS.HP_HEADERITEM:
result = new Size (0, ThemeWin32Classic.ListViewGetHeaderHeight ());
return true;
}
break;
#endregion
#region TRACKBAR
case ThemeHandle.TRACKBAR:
switch ((TRACKBARPARTS)part) {
case TRACKBARPARTS.TKP_TRACK:
result = new Size (0, ThemeWin32Classic.TrackBarHorizontalTrackHeight);
return true;
case TRACKBARPARTS.TKP_TRACKVERT:
result = new Size (ThemeWin32Classic.TrackBarVerticalTrackWidth, 0);
return true;
case TRACKBARPARTS.TKP_THUMB:
case TRACKBARPARTS.TKP_THUMBVERT:
result = ThemeWin32Classic.TrackBarGetThumbSize ();
if ((TRACKBARPARTS)part == TRACKBARPARTS.TKP_THUMBVERT) {
int temporary = result.Width;
result.Width = result.Height;
result.Height = temporary;
}
return true;
}
break;
#endregion
}
result = Size.Empty;
return false;
}
public int UxThemeGetThemePosition (IntPtr hTheme, int iPartId, int iStateId, PointProperty prop, out Point result)
{
result = Point.Empty;
return (int)S.S_FALSE;
}
public int UxThemeGetThemeString (IntPtr hTheme, int iPartId, int iStateId, StringProperty prop, out string result)
{
result = null;
return (int)S.S_FALSE;
}
public int UxThemeGetThemeTextExtent (IntPtr hTheme, IDeviceContext dc, int iPartId, int iStateId, string textToDraw, TextFormatFlags flags, Rectangle bounds, out Rectangle result)
{
result = Rectangle.Empty;
return (int)S.S_FALSE;
}
public int UxThemeGetThemeTextExtent (IntPtr hTheme, IDeviceContext dc, int iPartId, int iStateId, string textToDraw, TextFormatFlags flags, out Rectangle result)
{
result = Rectangle.Empty;
return (int)S.S_FALSE;
}
public int UxThemeGetThemeTextMetrics (IntPtr hTheme, IDeviceContext dc, int iPartId, int iStateId, out TextMetrics result)
{
result = new TextMetrics ();
return (int)S.S_FALSE;
}
public int UxThemeHitTestThemeBackground (IntPtr hTheme, IDeviceContext dc, int iPartId, int iStateId, HitTestOptions options, Rectangle backgroundRectangle, IntPtr hrgn, Point pt, out HitTestCode result)
{
result = HitTestCode.Bottom;
return (int)S.S_FALSE;
}
public bool UxThemeIsAppThemed ()
{
return true;
}
public bool UxThemeIsThemeActive ()
{
return true;
}
public bool UxThemeIsThemeBackgroundPartiallyTransparent (IntPtr hTheme, int iPartId, int iStateId)
{
return true;
}
public bool UxThemeIsThemePartDefined (IntPtr hTheme, int iPartId)
{
switch ((ThemeHandle)(int)hTheme) {
#region BUTTON
case ThemeHandle.BUTTON:
switch ((BUTTONPARTS)iPartId) {
case BUTTONPARTS.BP_PUSHBUTTON:
case BUTTONPARTS.BP_CHECKBOX:
case BUTTONPARTS.BP_RADIOBUTTON:
case BUTTONPARTS.BP_GROUPBOX:
return true;
default: return false;
}
#endregion
#region COMBOBOX
case ThemeHandle.COMBOBOX:
switch ((COMBOBOXPARTS)iPartId) {
case COMBOBOXPARTS.CP_DROPDOWNBUTTON:
case COMBOBOXPARTS.CP_BORDER:
return true;
default: return false;
}
#endregion
#region EDIT
case ThemeHandle.EDIT:
switch ((EDITPARTS)iPartId) {
case EDITPARTS.EP_EDITTEXT:
return true;
default: return false;
}
#endregion
#region HEADER
case ThemeHandle.HEADER:
switch ((HEADERPARTS)iPartId) {
case HEADERPARTS.HP_HEADERITEM:
return true;
default: return false;
}
#endregion
#region PROGRESS
case ThemeHandle.PROGRESS:
switch ((PROGRESSPARTS)iPartId) {
case PROGRESSPARTS.PP_BAR:
case PROGRESSPARTS.PP_BARVERT:
case PROGRESSPARTS.PP_CHUNK:
case PROGRESSPARTS.PP_CHUNKVERT:
return true;
default: return false;
}
#endregion
#region REBAR
case ThemeHandle.REBAR:
switch ((REBARPARTS)iPartId) {
case REBARPARTS.RP_BAND:
return true;
default: return false;
}
#endregion
#region SCROLLBAR
case ThemeHandle.SCROLLBAR:
switch ((SCROLLBARPARTS)iPartId) {
case SCROLLBARPARTS.SBP_ARROWBTN:
case SCROLLBARPARTS.SBP_THUMBBTNHORZ:
case SCROLLBARPARTS.SBP_THUMBBTNVERT:
case SCROLLBARPARTS.SBP_LOWERTRACKHORZ:
case SCROLLBARPARTS.SBP_UPPERTRACKHORZ:
case SCROLLBARPARTS.SBP_LOWERTRACKVERT:
case SCROLLBARPARTS.SBP_UPPERTRACKVERT:
return true;
default: return false;
}
#endregion
#region SPIN
case ThemeHandle.SPIN:
switch ((SPINPARTS)iPartId) {
case SPINPARTS.SPNP_UP:
case SPINPARTS.SPNP_DOWN:
return true;
default: return false;
}
#endregion
#region STATUS
case ThemeHandle.STATUS:
switch ((STATUSPARTS)iPartId) {
case STATUSPARTS.SP_GRIPPER:
return true;
default: return false;
}
#endregion
#region TABCONTROL
case ThemeHandle.TAB:
switch ((TABPARTS)iPartId) {
case TABPARTS.TABP_TABITEM:
case TABPARTS.TABP_TABITEMLEFTEDGE:
case TABPARTS.TABP_TABITEMRIGHTEDGE:
case TABPARTS.TABP_TABITEMBOTHEDGE:
case TABPARTS.TABP_TOPTABITEM:
case TABPARTS.TABP_TOPTABITEMLEFTEDGE:
case TABPARTS.TABP_TOPTABITEMRIGHTEDGE:
case TABPARTS.TABP_TOPTABITEMBOTHEDGE:
case TABPARTS.TABP_PANE:
return true;
default: return false;
}
#endregion
#region TOOLBAR
case ThemeHandle.TOOLBAR:
switch ((TOOLBARPARTS)iPartId) {
case TOOLBARPARTS.TP_BUTTON:
return true;
default: return false;
}
#endregion
#region TRACKBAR
case ThemeHandle.TRACKBAR:
switch ((TRACKBARPARTS)iPartId) {
case TRACKBARPARTS.TKP_TRACK:
case TRACKBARPARTS.TKP_TRACKVERT:
case TRACKBARPARTS.TKP_THUMB:
case TRACKBARPARTS.TKP_THUMBVERT:
return true;
default: return false;
}
#endregion
#region TREEVIEW
case ThemeHandle.TREEVIEW:
switch ((TREEVIEWPARTS)iPartId) {
case TREEVIEWPARTS.TVP_GLYPH:
return true;
default: return false;
}
#endregion
default: return false;
}
}
public IntPtr UxThemeOpenThemeData (IntPtr hWnd, string classList)
{
ThemeHandle theme_handle;
try {
theme_handle = (ThemeHandle)Enum.Parse (typeof (ThemeHandle), classList);
} catch (ArgumentException) {
return IntPtr.Zero;
}
return (IntPtr)(int)theme_handle;
}
#endregion
#region VisualStyleInformation
public string VisualStyleInformationAuthor {
get {
return null;
}
}
public string VisualStyleInformationColorScheme {
get {
return null;
}
}
public string VisualStyleInformationCompany {
get {
return null;
}
}
public Color VisualStyleInformationControlHighlightHot {
get {
return Color.Black;
}
}
public string VisualStyleInformationCopyright {
get {
return null;
}
}
public string VisualStyleInformationDescription {
get {
return null;
}
}
public string VisualStyleInformationDisplayName {
get {
return null;
}
}
public string VisualStyleInformationFileName {
get {
return null;
}
}
public bool VisualStyleInformationIsSupportedByOS
{
get {
return true;
}
}
public int VisualStyleInformationMinimumColorDepth {
get {
return 0;
}
}
public string VisualStyleInformationSize {
get {
return null;
}
}
public bool VisualStyleInformationSupportsFlatMenus {
get {
return false;
}
}
public Color VisualStyleInformationTextControlBorder {
get {
return Color.Black;
}
}
public string VisualStyleInformationUrl {
get {
return null;
}
}
public string VisualStyleInformationVersion {
get {
return null;
}
}
#endregion
#region VisualStyleRenderer
public void VisualStyleRendererDrawBackgroundExcludingArea (IntPtr theme, IDeviceContext dc, int part, int state, Rectangle bounds, Rectangle excludedArea)
{
DrawBackground ((ThemeHandle)(int)theme, dc, part, state, bounds, bounds, excludedArea);
}
#endregion
}
}