New tests.
[mono.git] / mcs / class / Managed.Windows.Forms / System.Windows.Forms / Theme.cs
index d633cd34ab8ca5062e48f14d98882f61a7bddce2..e4154e726f197b2595dc28fa8aa0a2ce69a34da2 100644 (file)
@@ -24,7 +24,6 @@
 //     Peter Dennis Bartok, pbartok@novell.com
 //
 
-
 using System.Collections;
 using System.Drawing;
 using System.Drawing.Drawing2D;
@@ -56,7 +55,7 @@ namespace System.Windows.Forms
                internal static CPColor Empty;
        }
        
-       // Implements a pool of system resources        
+       // Implements a pool of system resources
        internal class SystemResPool
        {
                private Hashtable pens = new Hashtable ();
@@ -71,7 +70,7 @@ namespace System.Windows.Forms
                
                public Pen GetPen (Color color)
                {
-                       int hash = color.ToArgb ();                     
+                       int hash = color.ToArgb ();
 
                        lock (pens) {
                                Pen res = pens [hash] as Pen;
@@ -132,14 +131,14 @@ namespace System.Windows.Forms
                
                public HatchBrush GetHatchBrush (HatchStyle hatchStyle, Color foreColor, Color backColor)
                {
-                       string hash = hatchStyle.ToString () + foreColor.ToString () + backColor.ToString ();                   
+                       string hash = ((int)hatchStyle).ToString () + foreColor.ToString () + backColor.ToString ();
 
                        lock (hatchbrushes) {
-                               if (hatchbrushes.Contains (hash))
-                                       return (HatchBrush) hatchbrushes[hash];                                                 
-
-                               HatchBrush brush = new HatchBrush (hatchStyle, foreColor, backColor);
-                               hatchbrushes.Add (hash, brush);
+                               HatchBrush brush = (HatchBrush) hatchbrushes[hash];
+                               if (brush == null) {
+                                       brush = new HatchBrush (hatchStyle, foreColor, backColor);
+                                       hatchbrushes.Add (hash, brush);
+                               }
                                return brush;
                        }
                }
@@ -187,163 +186,170 @@ namespace System.Windows.Forms
        }
 
        internal abstract class Theme
-       {               
+       {
                protected Array syscolors;
-               protected Font default_font;
-        protected Font window_border_font;
+               private readonly Font default_font;
+               protected Font window_border_font;
                protected Color defaultWindowBackColor;
-               protected Color defaultWindowForeColor;         
-               protected bool always_draw_hotkeys = true;
+               protected Color defaultWindowForeColor;
                internal SystemResPool ResPool = new SystemResPool ();
-               private Type system_colors = Type.GetType("System.Drawing.SystemColors, System.Drawing");
+               private MethodInfo update;
 
-               private void SetSystemColors(string name, Color value) {
-                       if (system_colors != null) {
-                               MethodInfo update;
+               protected Theme ()
+               {
+#if NET_2_0
+                       default_font = SystemFonts.DefaultFont;
+#else
+                       default_font = new Font (FontFamily.GenericSansSerif, 8.25f);
+#endif
+                       syscolors = null;
+               }
 
-                               system_colors.GetField(name, System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic).SetValue(null, value);
-                               update = system_colors.GetMethod("UpdateColors", BindingFlags.Static | BindingFlags.NonPublic);
-                               if (update != null) {
-                                       update.Invoke(null, null);
-                               }
+               private void SetSystemColors (KnownColor kc, Color value)
+               {
+                       if (update == null) {
+                               Type known_colors = Type.GetType ("System.Drawing.KnownColors, " + Consts.AssemblySystem_Drawing);
+                               if (known_colors != null)
+                                       update = known_colors.GetMethod ("Update", BindingFlags.Static | BindingFlags.Public);
                        }
+                       if (update != null)
+                               update.Invoke (null, new object [2] { (int)kc, value.ToArgb () });
                }
 
-
                /* OS Feature support */
                public abstract Version Version {
                        get;
                }
 
-               /* Default properties */                
+               /* Default properties */
                public virtual Color ColorScrollBar {
-                       get { return SystemColors.ScrollBar;}
-                       set { SetSystemColors("scroll_bar", value); }
+                       get { return SystemColors.ScrollBar; }
+                       set { SetSystemColors (KnownColor.ScrollBar, value); }
                }
 
                public virtual Color ColorDesktop {
                        get { return SystemColors.Desktop;}
-                       set { SetSystemColors("desktop", value); }
+                       set { SetSystemColors (KnownColor.Desktop, value); }
                }
 
                public virtual Color ColorActiveCaption {
                        get { return SystemColors.ActiveCaption;}
-                       set { SetSystemColors("active_caption", value); }
+                       set { SetSystemColors (KnownColor.ActiveCaption, value); }
                }
 
                public virtual Color ColorInactiveCaption {
                        get { return SystemColors.InactiveCaption;}
-                       set { SetSystemColors("inactive_caption", value); }
+                       set { SetSystemColors (KnownColor.InactiveCaption, value); }
                }
 
                public virtual Color ColorMenu {
                        get { return SystemColors.Menu;}
-                       set { SetSystemColors("menu", value); }
+                       set { SetSystemColors (KnownColor.Menu, value); }
                }
 
                public virtual Color ColorWindow {
                        get { return SystemColors.Window;}
-                       set { SetSystemColors("window", value); }
+                       set { SetSystemColors (KnownColor.Window, value); }
                }
 
                public virtual Color ColorWindowFrame {
                        get { return SystemColors.WindowFrame;}
-                       set { SetSystemColors("window_frame", value); }
+                       set { SetSystemColors (KnownColor.WindowFrame, value); }
                }
 
                public virtual Color ColorMenuText {
                        get { return SystemColors.MenuText;}
-                       set { SetSystemColors("menu_text", value); }
+                       set { SetSystemColors (KnownColor.MenuText, value); }
                }
 
                public virtual Color ColorWindowText {
                        get { return SystemColors.WindowText;}
-                       set { SetSystemColors("window_text", value); }
+                       set { SetSystemColors (KnownColor.WindowText, value); }
                }
 
                public virtual Color ColorActiveCaptionText {
                        get { return SystemColors.ActiveCaptionText;}
-                       set { SetSystemColors("active_caption_text", value); }
+                       set { SetSystemColors (KnownColor.ActiveCaptionText, value); }
                }
 
                public virtual Color ColorActiveBorder {
                        get { return SystemColors.ActiveBorder;}
-                       set { SetSystemColors("active_border", value); }
+                       set { SetSystemColors (KnownColor.ActiveBorder, value); }
                }
 
                public virtual Color ColorInactiveBorder{
                        get { return SystemColors.InactiveBorder;}
-                       set { SetSystemColors("inactive_border", value); }
+                       set { SetSystemColors (KnownColor.InactiveBorder, value); }
                }
 
                public virtual Color ColorAppWorkspace {
                        get { return SystemColors.AppWorkspace;}
-                       set { SetSystemColors("app_workspace", value); }
+                       set { SetSystemColors (KnownColor.AppWorkspace, value); }
                }
 
                public virtual Color ColorHighlight {
                        get { return SystemColors.Highlight;}
-                       set { SetSystemColors("highlight", value); }
+                       set { SetSystemColors (KnownColor.Highlight, value); }
                }
 
                public virtual Color ColorHighlightText {
                        get { return SystemColors.HighlightText;}
-                       set { SetSystemColors("highlight_text", value); }
+                       set { SetSystemColors (KnownColor.HighlightText, value); }
                }
 
                public virtual Color ColorControl {
                        get { return SystemColors.Control;}
-                       set { SetSystemColors("control", value); }
+                       set { SetSystemColors (KnownColor.Control, value); }
                }
 
                public virtual Color ColorControlDark {
                        get { return SystemColors.ControlDark;}
-                       set { SetSystemColors("control_dark", value); }
+                       set { SetSystemColors (KnownColor.ControlDark, value); }
                }
 
                public virtual Color ColorGrayText {
                        get { return SystemColors.GrayText;}
-                       set { SetSystemColors("gray_text", value); }
+                       set { SetSystemColors (KnownColor.GrayText, value); }
                }
 
                public virtual Color ColorControlText {
                        get { return SystemColors.ControlText;}
-                       set { SetSystemColors("control_text", value); }
+                       set { SetSystemColors (KnownColor.ControlText, value); }
                }
 
                public virtual Color ColorInactiveCaptionText {
                        get { return SystemColors.InactiveCaptionText;}
-                       set { SetSystemColors("inactive_caption_text", value); }
+                       set { SetSystemColors (KnownColor.InactiveCaptionText, value); }
                }
 
                public virtual Color ColorControlLight {
                        get { return SystemColors.ControlLight;}
-                       set { SetSystemColors("control_light", value); }
+                       set { SetSystemColors (KnownColor.ControlLight, value); }
                }
 
                public virtual Color ColorControlDarkDark {
                        get { return SystemColors.ControlDarkDark;}
-                       set { SetSystemColors("control_dark_dark", value); }
+                       set { SetSystemColors (KnownColor.ControlDarkDark, value); }
                }
 
                public virtual Color ColorControlLightLight {
                        get { return SystemColors.ControlLightLight;}
-                       set { SetSystemColors("control_light_light", value); }
+                       set { SetSystemColors (KnownColor.ControlLightLight, value); }
                }
 
                public virtual Color ColorInfoText {
                        get { return SystemColors.InfoText;}
-                       set { SetSystemColors("info_text", value); }
+                       set { SetSystemColors (KnownColor.InfoText, value); }
                }
 
                public virtual Color ColorInfo {
                        get { return SystemColors.Info;}
-                       set { SetSystemColors("info", value); }
+                       set { SetSystemColors (KnownColor.Info, value); }
                }
 
                public virtual Color ColorHotTrack {
                        get { return SystemColors.HotTrack;}
-                       set { SetSystemColors("hot_track", value);}
+                       set { SetSystemColors (KnownColor.HotTrack, value);}
                }
 
                public virtual Color DefaultControlBackColor {
@@ -361,7 +367,7 @@ namespace System.Windows.Forms
                }
 
                public virtual Color DefaultWindowBackColor {
-                       get { return defaultWindowBackColor; }                  
+                       get { return defaultWindowBackColor; }
                }
 
                public virtual Color DefaultWindowForeColor {
@@ -391,21 +397,35 @@ namespace System.Windows.Forms
                        }
                }
 
+               public virtual int BorderMultiplierFactor { get { return 1; } }
+               
+               public virtual Size BorderSizableSize {
+                       get {
+                               return new Size (3, 3);
+                       }
+               }
+
                public virtual Size Border3DSize {
                        get {
-                               return new Size(2, 2);
+                               return XplatUI.Border3DSize;
                        }
                }
 
-               public virtual Size BorderSize {
+               public virtual Size BorderStaticSize {
                        get {
                                return new Size(1, 1);
                        }
                }
 
+               public virtual Size BorderSize {
+                       get {
+                               return XplatUI.BorderSize;
+                       }
+               }
+
                public virtual Size CaptionButtonSize {
                        get {
-                               return new Size(18, 18);
+                               return XplatUI.CaptionButtonSize;
                        }
                }
 
@@ -423,13 +443,13 @@ namespace System.Windows.Forms
 
                public virtual int DoubleClickTime {
                        get {
-                               return 500;
+                               return XplatUI.DoubleClickTime;
                        }
                }
 
                public virtual Size FixedFrameBorderSize {
                        get {
-                               return new Size(3, 3);
+                               return XplatUI.FixedFrameBorderSize;
                        }
                }
 
@@ -439,6 +459,8 @@ namespace System.Windows.Forms
                        }
                }
 
+               public virtual int HorizontalFocusThickness { get { return 1; } }
+               
                public virtual int HorizontalScrollBarArrowWidth {
                        get {
                                return 16;
@@ -463,9 +485,19 @@ namespace System.Windows.Forms
                        }
                }
 
+               public virtual bool MenuAccessKeysUnderlined {
+                       get {
+                               return XplatUI.MenuAccessKeysUnderlined;
+                       }
+               }
+               
+               public virtual Size MenuBarButtonSize {
+                       get { return XplatUI.MenuBarButtonSize; }
+               }
+               
                public virtual Size MenuButtonSize {
                        get {
-                               return new Size(18, 18);
+                               return XplatUI.MenuButtonSize;
                        }
                }
 
@@ -501,16 +533,18 @@ namespace System.Windows.Forms
 
                public virtual Size ToolWindowCaptionButtonSize {
                        get {
-                               return new Size(15, 15);
+                               return XplatUI.ToolWindowCaptionButtonSize;
                        }
                }
 
                public virtual int ToolWindowCaptionHeight {
                        get {
-                               return 16;
+                               return XplatUI.ToolWindowCaptionHeight;
                        }
                }
 
+               public virtual int VerticalFocusThickness { get { return 1; } }
+
                public virtual int VerticalScrollBarArrowHeight {
                        get {
                                return 16;
@@ -529,11 +563,11 @@ namespace System.Windows.Forms
                        }
                }
 
-        public virtual Font WindowBorderFont {
-            get {
-                return window_border_font;
-            }
-        }
+               public virtual Font WindowBorderFont {
+                       get {
+                               return window_border_font;
+                       }
+               }
 
                public int Clamp (int value, int lower, int upper)
                {
@@ -542,7 +576,7 @@ namespace System.Windows.Forms
                        else return value;
                }
 
-               [MonoTODO("Figure out where to point for My Network Places")]
+               [MonoInternalNote ("Figure out where to point for My Network Places")]
                public virtual string Places(UIIcon index) {
                        switch (index) {
                                case UIIcon.PlacesRecentDocuments: {
@@ -552,7 +586,7 @@ namespace System.Windows.Forms
 
                                case UIIcon.PlacesDesktop: {
                                        // Default = "Desktop"
-                                       return Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
+                                       return Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
                                }
 
                                case UIIcon.PlacesPersonal: {
@@ -673,6 +707,13 @@ namespace System.Windows.Forms
                #endregion      // OwnerDraw Support
 
                #region Button
+#if NET_2_0
+               public abstract Size CalculateButtonAutoSize (Button button);
+#endif
+               public abstract void CalculateButtonTextAndImageLayout (ButtonBase b, out Rectangle textRectangle, out Rectangle imageRectangle);
+               public abstract void DrawButton (Graphics g, Button b, Rectangle textBounds, Rectangle imageBounds, Rectangle clipRectangle);
+               public abstract void DrawFlatButton (Graphics g, ButtonBase b, Rectangle textBounds, Rectangle imageBounds, Rectangle clipRectangle);
+               public abstract void DrawPopupButton (Graphics g, Button b, Rectangle textBounds, Rectangle imageBounds, Rectangle clipRectangle);
                #endregion      // Button
 
                #region ButtonBase
@@ -684,20 +725,33 @@ namespace System.Windows.Forms
                #endregion      // ButtonBase
 
                #region CheckBox
-               public abstract void DrawCheckBox(Graphics dc, Rectangle clip_area, CheckBox checkbox);
+#if NET_2_0
+               public abstract Size CalculateCheckBoxAutoSize (CheckBox checkBox);
+               public abstract void CalculateCheckBoxTextAndImageLayout (ButtonBase b, Point offset, out Rectangle glyphArea, out Rectangle textRectangle, out Rectangle imageRectangle);
+               public abstract void DrawCheckBox (Graphics g, CheckBox cb, Rectangle glyphArea, Rectangle textBounds, Rectangle imageBounds, Rectangle clipRectangle);
+#endif
+               public abstract void DrawCheckBox (Graphics dc, Rectangle clip_area, CheckBox checkbox);
+
                #endregion      // CheckBox
                
                #region CheckedListBox
-               // Drawing              
+               // Drawing
                public abstract void DrawCheckedListBoxItem (CheckedListBox ctrl, DrawItemEventArgs e);
                #endregion // CheckedListBox
                
                #region ComboBox
                // Drawing
                public abstract void DrawComboBoxItem (ComboBox ctrl, DrawItemEventArgs e);
+               public abstract void DrawFlatStyleComboButton (Graphics graphics, Rectangle rectangle, ButtonState state);
+               public abstract void ComboBoxDrawNormalDropDownButton (ComboBox comboBox, Graphics g, Rectangle clippingArea, Rectangle area, ButtonState state);
+               public abstract bool ComboBoxNormalDropDownButtonHasTransparentBackground (ComboBox comboBox, ButtonState state);
+               public abstract bool ComboBoxDropDownButtonHasHotElementStyle (ComboBox comboBox);
+               public abstract void ComboBoxDrawBackground (ComboBox comboBox, Graphics g, Rectangle clippingArea, FlatStyle style);
+               public abstract bool CombBoxBackgroundHasHotElementStyle (ComboBox comboBox);
                #endregion      // ComboBox
 
                #region Control
+               public abstract Font GetLinkFont (Control control);
                #endregion      // Control
                
                #region Datagrid
@@ -706,11 +760,11 @@ namespace System.Windows.Forms
                public abstract int DataGridMinimumColumnCheckBoxWidth { get; }
                
                // Default colours
-               public abstract Color DataGridAlternatingBackColor { get; }             
-               public abstract Color DataGridBackColor { get; }                
+               public abstract Color DataGridAlternatingBackColor { get; }
+               public abstract Color DataGridBackColor { get; }
                public abstract Color DataGridBackgroundColor { get; }
                public abstract Color DataGridCaptionBackColor { get; }
-               public abstract Color DataGridCaptionForeColor { get; }         
+               public abstract Color DataGridCaptionForeColor { get; }
                public abstract Color DataGridGridLineColor { get; }
                public abstract Color DataGridHeaderBackColor { get; }
                public abstract Color DataGridHeaderForeColor { get; }
@@ -724,9 +778,11 @@ namespace System.Windows.Forms
                public abstract void DataGridPaint (PaintEventArgs pe, DataGrid grid);
                public abstract void DataGridPaintCaption (Graphics g, Rectangle clip, DataGrid grid);
                public abstract void DataGridPaintColumnHeaders (Graphics g, Rectangle clip, DataGrid grid);
+               public abstract void DataGridPaintColumnHeader (Graphics g, Rectangle bounds, DataGrid grid, int col);
                public abstract void DataGridPaintRowContents (Graphics g, int row, Rectangle row_rect, bool is_newrow, Rectangle clip, DataGrid grid);
                public abstract void DataGridPaintRowHeader (Graphics g, Rectangle bounds, int row, DataGrid grid);
                public abstract void DataGridPaintRowHeaderArrow (Graphics g, Rectangle bounds, DataGrid grid);
+               public abstract void DataGridPaintRowHeaderStar (Graphics g, Rectangle bounds, DataGrid grid);
                public abstract void DataGridPaintParentRows (Graphics g, Rectangle bounds, DataGrid grid);
                public abstract void DataGridPaintParentRow (Graphics g, Rectangle bounds, DataGridDataSource row, DataGrid grid);
                public abstract void DataGridPaintRows (Graphics g, Rectangle cells, Rectangle clip, DataGrid grid);
@@ -735,10 +791,30 @@ namespace System.Windows.Forms
                
                #endregion // Datagrid
 
-               #region DateTimePicker
+#if NET_2_0
+               #region DataGridView
+               #region DataGridViewHeaderCell
+               #region DataGridViewRowHeaderCell
+               public abstract bool DataGridViewRowHeaderCellDrawBackground (DataGridViewRowHeaderCell cell, Graphics g, Rectangle bounds);
+               public abstract bool DataGridViewRowHeaderCellDrawSelectionBackground (DataGridViewRowHeaderCell cell);
+               public abstract bool DataGridViewRowHeaderCellDrawBorder (DataGridViewRowHeaderCell cell, Graphics g, Rectangle bounds);
+               #endregion
+               #region DataGridViewColumnHeaderCell
+               public abstract bool DataGridViewColumnHeaderCellDrawBackground (DataGridViewColumnHeaderCell cell, Graphics g, Rectangle bounds);
+               public abstract bool DataGridViewColumnHeaderCellDrawBorder (DataGridViewColumnHeaderCell cell, Graphics g, Rectangle bounds);
+               #endregion
+               public abstract bool DataGridViewHeaderCellHasPressedStyle (DataGridView dataGridView);
+               public abstract bool DataGridViewHeaderCellHasHotStyle (DataGridView dataGridView);
+               #endregion
+               #endregion
+#endif
 
+               #region DateTimePicker
                public abstract void DrawDateTimePicker(Graphics dc, Rectangle clip_rectangle, DateTimePicker dtp);
-
+               public abstract bool DateTimePickerBorderHasHotElementStyle { get; }
+               public abstract Rectangle DateTimePickerGetDropDownButtonArea (DateTimePicker dateTimePicker);
+               public abstract Rectangle DateTimePickerGetDateArea (DateTimePicker dateTimePicker);
+               public abstract bool DateTimePickerDropDownButtonHasHotElementStyle { get; }
                #endregion      // DateTimePicker
 
                #region GroupBox
@@ -753,30 +829,20 @@ namespace System.Windows.Forms
                public abstract Size HScrollBarDefaultSize{get;}        // Default size of the scrollbar
                #endregion      // HScrollBar
 
-               #region Label
-               // Drawing
-               public abstract void DrawLabel (Graphics dc, Rectangle clip_rectangle, Label label);
-
-               // Sizing
-               public abstract Size LabelDefaultSize{get;}
-               #endregion      // Label
-
-               #region LinkLabel
-               public abstract void DrawLinkLabel (Graphics dc, Rectangle clip_rectangle, LinkLabel label);
-               #endregion      // LinkLabel
-               
                #region ListBox
                // Drawing
-               public abstract void DrawListBoxItem (ListBox ctrl, DrawItemEventArgs e);               
-               #endregion      // ListBox              
+               public abstract void DrawListBoxItem (ListBox ctrl, DrawItemEventArgs e);
+               #endregion      // ListBox
                
                #region ListView
                // Drawing
                public abstract void DrawListViewItems (Graphics dc, Rectangle clip_rectangle, ListView control);
                public abstract void DrawListViewHeader (Graphics dc, Rectangle clip_rectangle, ListView control);
                public abstract void DrawListViewHeaderDragDetails (Graphics dc, ListView control, ColumnHeader drag_column, int target_x);
+               public abstract bool ListViewHasHotHeaderStyle { get; }
 
                // Sizing
+               public abstract int ListViewGetHeaderHeight (ListView listView, Font font);
                public abstract Size ListViewCheckBoxSize { get; }
                public abstract int ListViewColumnHeaderHeight { get; }
                public abstract int ListViewDefaultColumnWidth { get; }
@@ -784,6 +850,10 @@ namespace System.Windows.Forms
                public abstract int ListViewEmptyColumnWidth { get; }
                public abstract int ListViewHorizontalSpacing { get; }
                public abstract Size ListViewDefaultSize { get; }
+               public abstract int ListViewGroupHeight { get; }
+               public abstract int ListViewItemPaddingWidth { get; }
+               public abstract int ListViewTileWidthFactor { get; }
+               public abstract int ListViewTileHeightFactor { get; }
                #endregion      // ListView
                
                #region Menus
@@ -792,7 +862,7 @@ namespace System.Windows.Forms
                public abstract int CalcMenuBarSize (Graphics dc, Menu menu, int width);
                public abstract void DrawMenuBar (Graphics dc, Menu menu, Rectangle rect);
                public abstract void DrawMenuItem (MenuItem item, DrawItemEventArgs e);
-               public abstract void DrawPopupMenu (Graphics dc, Menu menu, Rectangle cliparea, Rectangle rect);                
+               public abstract void DrawPopupMenu (Graphics dc, Menu menu, Rectangle cliparea, Rectangle rect);
                #endregion      // Menus
 
                #region MonthCalendar
@@ -828,6 +898,11 @@ namespace System.Windows.Forms
 
                #region RadioButton
                // Drawing
+#if NET_2_0
+               public abstract Size CalculateRadioButtonAutoSize (RadioButton rb);
+               public abstract void CalculateRadioButtonTextAndImageLayout (ButtonBase b, Point offset, out Rectangle glyphArea, out Rectangle textRectangle, out Rectangle imageRectangle);
+               public abstract void DrawRadioButton (Graphics g, RadioButton rb, Rectangle glyphArea, Rectangle textBounds, Rectangle imageBounds, Rectangle clipRectangle);
+#endif
                public abstract void DrawRadioButton (Graphics dc, Rectangle clip_rectangle, RadioButton radio_button);
 
                // Sizing
@@ -841,6 +916,12 @@ namespace System.Windows.Forms
 
                // Sizing
                public abstract int ScrollBarButtonSize {get;}          // Size of the scroll button
+
+               public abstract bool ScrollBarHasHotElementStyles { get; }
+
+               public abstract bool ScrollBarHasPressedThumbStyle { get; }
+
+               public abstract bool ScrollBarHasHoverArrowButtonStyle { get; }
                #endregion      // ScrollBar
 
                #region StatusBar
@@ -854,17 +935,29 @@ namespace System.Windows.Forms
                #endregion      // StatusBar
 
                #region TabControl
-               public abstract Size TabControlDefaultItemSize { get; }
-               public abstract Point TabControlDefaultPadding { get; }
-               public abstract int TabControlMinimumTabWidth { get; }
-
-               public abstract Rectangle GetTabControlLeftScrollRect (TabControl tab);
-               public abstract Rectangle GetTabControlRightScrollRect (TabControl tab);
-               public abstract Rectangle GetTabControlDisplayRectangle (TabControl tab);
+               public abstract Size TabControlDefaultItemSize {get; }
+               public abstract Point TabControlDefaultPadding {get; }
+               public abstract int TabControlMinimumTabWidth {get; }
+               public abstract Rectangle TabControlSelectedDelta { get; }
+               public abstract int TabControlSelectedSpacing { get; }
+               public abstract int TabPanelOffsetX { get; }
+               public abstract int TabPanelOffsetY { get; }
+               public abstract int TabControlColSpacing { get; }
+               public abstract Point TabControlImagePadding { get; }
+               public abstract int TabControlScrollerWidth { get; }
+
+               public abstract Rectangle TabControlGetDisplayRectangle (TabControl tab);
+               public abstract Rectangle TabControlGetPanelRect (TabControl tab);
                public abstract Size TabControlGetSpacing (TabControl tab);
                public abstract void DrawTabControl (Graphics dc, Rectangle area, TabControl tab);
                #endregion
 
+               #region TextBoxBase
+               public abstract void TextBoxBaseFillBackground (TextBoxBase textBoxBase, Graphics g, Rectangle clippingArea);
+               public abstract bool TextBoxBaseHandleWmNcPaint (TextBoxBase textBoxBase, ref Message m);
+               public abstract bool TextBoxBaseShouldPaintBackground (TextBoxBase textBoxBase);
+               #endregion
+
                #region ToolBar
                // Drawing
                public abstract void DrawToolBar (Graphics dc, Rectangle clip_rectangle, ToolBar control);
@@ -877,14 +970,25 @@ namespace System.Windows.Forms
                public abstract int ToolBarDropDownArrowWidth { get; }   // width for the dropdown arrow on the ToolBarButton
                public abstract int ToolBarDropDownArrowHeight { get; }  // height for the dropdown arrow on the ToolBarButton
                public abstract Size ToolBarDefaultSize{get;}
-               public abstract bool ToolBarInvalidateEntireButton { get; }
+
+               public abstract bool ToolBarHasHotElementStyles (ToolBar toolBar);
+               public abstract bool ToolBarHasHotCheckedElementStyles { get; }
                #endregion      // ToolBar
 
                #region ToolTip
                public abstract void DrawToolTip(Graphics dc, Rectangle clip_rectangle, ToolTip.ToolTipWindow control);
                public abstract Size ToolTipSize(ToolTip.ToolTipWindow tt, string text);
-               #endregion      // ToolTip              
+               public abstract bool ToolTipTransparentBackground { get; }
+               #endregion      // ToolTip
                
+               #region BalloonWindow
+#if NET_2_0
+               public abstract void ShowBalloonWindow (IntPtr handle, int timeout, string title, string text, ToolTipIcon icon);
+               public abstract void HideBalloonWindow (IntPtr handle);
+               public abstract void DrawBalloonWindow (Graphics dc, Rectangle clip, NotifyIcon.BalloonWindow control);
+               public abstract Rectangle BalloonWindowRect (NotifyIcon.BalloonWindow control);
+#endif
+               #endregion      // BalloonWindow
 
                #region TrackBar
                // Drawing
@@ -892,49 +996,40 @@ namespace System.Windows.Forms
 
                // Sizing
                public abstract Size TrackBarDefaultSize{get; }         // Default size for the TrackBar control
+               
+               public abstract int TrackBarValueFromMousePosition (int x, int y, TrackBar tb);
+
+               public abstract bool TrackBarHasHotThumbStyle { get; }
                #endregion      // TrackBar
 
+               #region UpDownBase
+               public abstract void UpDownBaseDrawButton (Graphics g, Rectangle bounds, bool top, VisualStyles.PushButtonState state);
+               public abstract bool UpDownBaseHasHotButtonStyle { get; }
+               #endregion
+
                #region VScrollBar
                public abstract Size VScrollBarDefaultSize{get;}        // Default size of the scrollbar
                #endregion      // VScrollBar
 
                #region TreeView
                public abstract Size TreeViewDefaultSize { get; }
+               public abstract void TreeViewDrawNodePlusMinus (TreeView treeView, TreeNode node, Graphics dc, int x, int middle);
                #endregion
 
-               public virtual void DrawManagedWindowDecorations (Graphics dc, Rectangle clip, InternalWindowManager wm)
-               {
-                       // Just making virtual for now so all the themes still build.
-               }
-
-               public virtual int ManagedWindowTitleBarHeight (InternalWindowManager wm)
-               {
-                       // Just making virtual for now so all the themes still build.
-                       return 15;
-               }
-
-               public virtual int ManagedWindowBorderWidth (InternalWindowManager wm)
-               {
-                       // Just making virtual for now so all the themes still build.
-                       return 3;
-               }
-
-               public virtual int ManagedWindowIconWidth (InternalWindowManager wm)
-               {
-                       // Just making virtual for now so all the themes still build.
-                       return ManagedWindowTitleBarHeight (wm) - 5;
-               }
-
-               public virtual Size ManagedWindowButtonSize (InternalWindowManager wm)
-               {
-                       // Just making virtual for now so all the themes still build.
-                       return new Size (10, 10);
-               }
-
-               public virtual void ManagedWindowSetButtonLocations (InternalWindowManager wm)
-               {
-                       // Just making virtual for now so all the themes still build.
-               }
+               #region Managed window
+               public abstract void DrawManagedWindowDecorations (Graphics dc, Rectangle clip, InternalWindowManager wm);
+               public abstract int ManagedWindowTitleBarHeight (InternalWindowManager wm);
+               public abstract int ManagedWindowBorderWidth (InternalWindowManager wm);
+               public abstract int ManagedWindowIconWidth (InternalWindowManager wm);
+               public abstract Size ManagedWindowButtonSize (InternalWindowManager wm);
+               public abstract void ManagedWindowSetButtonLocations (InternalWindowManager wm);
+               public abstract Rectangle ManagedWindowGetTitleBarIconArea (InternalWindowManager wm);
+               public abstract Size ManagedWindowGetMenuButtonSize (InternalWindowManager wm);
+               public abstract bool ManagedWindowTitleButtonHasHotElementStyle (TitleButton button, Form form);
+               public abstract void ManagedWindowDrawMenuButton (Graphics dc, TitleButton button, Rectangle clip, InternalWindowManager wm);
+               public abstract void ManagedWindowOnSizeInitializedOrChanged (Form form);
+               public const int ManagedWindowSpacingAfterLastTitleButton = 2;
+               #endregion
 
                #region ControlPaint Methods
                public abstract void CPDrawBorder (Graphics graphics, Rectangle bounds, Color leftColor, int leftWidth,
@@ -942,7 +1037,13 @@ namespace System.Windows.Forms
                        Color rightColor, int rightWidth, ButtonBorderStyle rightStyle, Color bottomColor,
                        int bottomWidth, ButtonBorderStyle bottomStyle);
 
+               public abstract void CPDrawBorder (Graphics graphics, RectangleF bounds, Color leftColor, int leftWidth,
+                       ButtonBorderStyle leftStyle, Color topColor, int topWidth, ButtonBorderStyle topStyle,
+                       Color rightColor, int rightWidth, ButtonBorderStyle rightStyle, Color bottomColor,
+                       int bottomWidth, ButtonBorderStyle bottomStyle);
+
                public abstract void CPDrawBorder3D (Graphics graphics, Rectangle rectangle, Border3DStyle style, Border3DSide sides);
+               public abstract void CPDrawBorder3D (Graphics graphics, Rectangle rectangle, Border3DStyle style, Border3DSide sides, Color control_color);
                public abstract void CPDrawButton (Graphics graphics, Rectangle rectangle, ButtonState state);
                public abstract void CPDrawCaptionButton (Graphics graphics, Rectangle rectangle, CaptionButton button, ButtonState state);
                public abstract void CPDrawCheckBox (Graphics graphics, Rectangle rectangle, ButtonState state);
@@ -953,7 +1054,8 @@ namespace System.Windows.Forms
                public abstract void CPDrawGrid (Graphics graphics, Rectangle area, Size pixelsBetweenDots, Color backColor);
                public abstract void CPDrawImageDisabled (Graphics graphics, Image image, int x, int y, Color background);
                public abstract void CPDrawLockedFrame (Graphics graphics, Rectangle rectangle, bool primary);
-               public abstract void CPDrawMenuGlyph (Graphics graphics, Rectangle rectangle, MenuGlyph glyph, Color color);
+               public abstract void CPDrawMenuGlyph (Graphics graphics, Rectangle rectangle, MenuGlyph glyph, Color color, Color backColor);
+               public abstract void CPDrawMixedCheckBox (Graphics graphics, Rectangle rectangle, ButtonState state);
                public abstract void CPDrawRadioButton (Graphics graphics, Rectangle rectangle, ButtonState state);
                public abstract void CPDrawReversibleFrame (Rectangle rectangle, Color backColor, FrameStyle style);
                public abstract void CPDrawReversibleLine (Point start, Point end, Color backColor);
@@ -963,6 +1065,10 @@ namespace System.Windows.Forms
                public abstract void CPDrawSizeGrip (Graphics graphics, Color backColor, Rectangle bounds);
                public abstract void CPDrawStringDisabled (Graphics graphics, string s, Font font, Color color, RectangleF layoutRectangle,
                        StringFormat format);
+#if NET_2_0
+               public abstract void CPDrawStringDisabled (IDeviceContext dc, string s, Font font, Color color, Rectangle layoutRectangle, TextFormatFlags format);
+               public abstract void CPDrawVisualStyleBorder (Graphics graphics, Rectangle bounds);
+#endif
                public abstract void CPDrawBorderStyle (Graphics dc, Rectangle area, BorderStyle border_style);
                #endregion      // ControlPaint Methods
        }