1 // Permission is hereby granted, free of charge, to any person obtaining
2 // a copy of this software and associated documentation files (the
3 // "Software"), to deal in the Software without restriction, including
4 // without limitation the rights to use, copy, modify, merge, publish,
5 // distribute, sublicense, and/or sell copies of the Software, and to
6 // permit persons to whom the Software is furnished to do so, subject to
7 // the following conditions:
9 // The above copyright notice and this permission notice shall be
10 // included in all copies or substantial portions of the Software.
12 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
13 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
14 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
15 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
16 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
17 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
18 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
20 // Copyright (c) 2004-2005 Novell, Inc.
23 // Jordi Mas i Hernandez, jordi@ximian.com
24 // Peter Dennis Bartok, pbartok@novell.com
27 using System.Collections;
29 using System.Drawing.Drawing2D;
30 using System.Reflection;
32 namespace System.Windows.Forms
34 internal enum UIIcon {
35 PlacesRecentDocuments,
48 internal struct CPColor {
50 internal Color DarkDark;
52 internal Color LightLight;
54 internal static CPColor Empty;
57 // Implements a pool of system resources
58 internal class SystemResPool
60 private Hashtable pens = new Hashtable ();
61 private Hashtable dashpens = new Hashtable ();
62 private Hashtable sizedpens = new Hashtable ();
63 private Hashtable solidbrushes = new Hashtable ();
64 private Hashtable hatchbrushes = new Hashtable ();
65 private Hashtable uiImages = new Hashtable();
66 private Hashtable cpcolors = new Hashtable ();
68 public SystemResPool () {}
70 public Pen GetPen (Color color)
72 int hash = color.ToArgb ();
75 Pen res = pens [hash] as Pen;
79 Pen pen = new Pen (color);
85 public Pen GetDashPen (Color color, DashStyle dashStyle)
87 string hash = color.ToString() + dashStyle;
90 Pen res = dashpens [hash] as Pen;
94 Pen pen = new Pen (color);
95 pen.DashStyle = dashStyle;
96 dashpens [hash] = pen;
101 public Pen GetSizedPen (Color color, int size)
103 string hash = color.ToString () + size;
106 Pen res = sizedpens [hash] as Pen;
110 Pen pen = new Pen (color, size);
111 sizedpens [hash] = pen;
116 public SolidBrush GetSolidBrush (Color color)
118 int hash = color.ToArgb ();
120 lock (solidbrushes) {
121 SolidBrush res = solidbrushes [hash] as SolidBrush;
125 SolidBrush brush = new SolidBrush (color);
126 solidbrushes.Add (hash, brush);
131 public HatchBrush GetHatchBrush (HatchStyle hatchStyle, Color foreColor, Color backColor)
133 string hash = ((int)hatchStyle).ToString () + foreColor.ToString () + backColor.ToString ();
135 lock (hatchbrushes) {
136 HatchBrush brush = (HatchBrush) hatchbrushes[hash];
138 brush = new HatchBrush (hatchStyle, foreColor, backColor);
139 hatchbrushes.Add (hash, brush);
145 public void AddUIImage (Image image, string name, int size)
147 string hash = name + size.ToString();
150 if (uiImages.Contains (hash))
152 uiImages.Add (hash, image);
156 public Image GetUIImage(string name, int size)
158 string hash = name + size.ToString();
160 Image image = uiImages [hash] as Image;
165 public CPColor GetCPColor (Color color)
168 object tmp = cpcolors [color];
171 CPColor cpcolor = new CPColor ();
172 cpcolor.Dark = ControlPaint.Dark (color);
173 cpcolor.DarkDark = ControlPaint.DarkDark (color);
174 cpcolor.Light = ControlPaint.Light (color);
175 cpcolor.LightLight = ControlPaint.LightLight (color);
177 cpcolors.Add (color, cpcolor);
187 internal abstract class Theme
189 protected Array syscolors;
191 protected Color defaultWindowBackColor;
192 protected Color defaultWindowForeColor;
193 internal SystemResPool ResPool = new SystemResPool ();
194 private MethodInfo update;
200 private void SetSystemColors (KnownColor kc, Color value)
202 if (update == null) {
203 Type known_colors = Type.GetType ("System.Drawing.KnownColors, " + Consts.AssemblySystem_Drawing);
204 if (known_colors != null)
205 update = known_colors.GetMethod ("Update", BindingFlags.Static | BindingFlags.Public);
208 update.Invoke (null, new object [2] { (int)kc, value.ToArgb () });
211 /* OS Feature support */
212 public abstract Version Version {
216 /* Default properties */
217 public virtual Color ColorScrollBar {
218 get { return SystemColors.ScrollBar; }
219 set { SetSystemColors (KnownColor.ScrollBar, value); }
222 public virtual Color ColorDesktop {
223 get { return SystemColors.Desktop;}
224 set { SetSystemColors (KnownColor.Desktop, value); }
227 public virtual Color ColorActiveCaption {
228 get { return SystemColors.ActiveCaption;}
229 set { SetSystemColors (KnownColor.ActiveCaption, value); }
232 public virtual Color ColorInactiveCaption {
233 get { return SystemColors.InactiveCaption;}
234 set { SetSystemColors (KnownColor.InactiveCaption, value); }
237 public virtual Color ColorMenu {
238 get { return SystemColors.Menu;}
239 set { SetSystemColors (KnownColor.Menu, value); }
242 public virtual Color ColorWindow {
243 get { return SystemColors.Window;}
244 set { SetSystemColors (KnownColor.Window, value); }
247 public virtual Color ColorWindowFrame {
248 get { return SystemColors.WindowFrame;}
249 set { SetSystemColors (KnownColor.WindowFrame, value); }
252 public virtual Color ColorMenuText {
253 get { return SystemColors.MenuText;}
254 set { SetSystemColors (KnownColor.MenuText, value); }
257 public virtual Color ColorWindowText {
258 get { return SystemColors.WindowText;}
259 set { SetSystemColors (KnownColor.WindowText, value); }
262 public virtual Color ColorActiveCaptionText {
263 get { return SystemColors.ActiveCaptionText;}
264 set { SetSystemColors (KnownColor.ActiveCaptionText, value); }
267 public virtual Color ColorActiveBorder {
268 get { return SystemColors.ActiveBorder;}
269 set { SetSystemColors (KnownColor.ActiveBorder, value); }
272 public virtual Color ColorInactiveBorder{
273 get { return SystemColors.InactiveBorder;}
274 set { SetSystemColors (KnownColor.InactiveBorder, value); }
277 public virtual Color ColorAppWorkspace {
278 get { return SystemColors.AppWorkspace;}
279 set { SetSystemColors (KnownColor.AppWorkspace, value); }
282 public virtual Color ColorHighlight {
283 get { return SystemColors.Highlight;}
284 set { SetSystemColors (KnownColor.Highlight, value); }
287 public virtual Color ColorHighlightText {
288 get { return SystemColors.HighlightText;}
289 set { SetSystemColors (KnownColor.HighlightText, value); }
292 public virtual Color ColorControl {
293 get { return SystemColors.Control;}
294 set { SetSystemColors (KnownColor.Control, value); }
297 public virtual Color ColorControlDark {
298 get { return SystemColors.ControlDark;}
299 set { SetSystemColors (KnownColor.ControlDark, value); }
302 public virtual Color ColorGrayText {
303 get { return SystemColors.GrayText;}
304 set { SetSystemColors (KnownColor.GrayText, value); }
307 public virtual Color ColorControlText {
308 get { return SystemColors.ControlText;}
309 set { SetSystemColors (KnownColor.ControlText, value); }
312 public virtual Color ColorInactiveCaptionText {
313 get { return SystemColors.InactiveCaptionText;}
314 set { SetSystemColors (KnownColor.InactiveCaptionText, value); }
317 public virtual Color ColorControlLight {
318 get { return SystemColors.ControlLight;}
319 set { SetSystemColors (KnownColor.ControlLight, value); }
322 public virtual Color ColorControlDarkDark {
323 get { return SystemColors.ControlDarkDark;}
324 set { SetSystemColors (KnownColor.ControlDarkDark, value); }
327 public virtual Color ColorControlLightLight {
328 get { return SystemColors.ControlLightLight;}
329 set { SetSystemColors (KnownColor.ControlLightLight, value); }
332 public virtual Color ColorInfoText {
333 get { return SystemColors.InfoText;}
334 set { SetSystemColors (KnownColor.InfoText, value); }
337 public virtual Color ColorInfo {
338 get { return SystemColors.Info;}
339 set { SetSystemColors (KnownColor.Info, value); }
342 public virtual Color ColorHotTrack {
343 get { return SystemColors.HotTrack;}
344 set { SetSystemColors (KnownColor.HotTrack, value);}
347 public virtual Color DefaultControlBackColor {
348 get { return ColorControl; }
349 set { ColorControl = value; }
352 public virtual Color DefaultControlForeColor {
353 get { return ColorControlText; }
354 set { ColorControlText = value; }
357 public virtual Font DefaultFont {
358 get { return default_font ?? (default_font = SystemFonts.DefaultFont); }
361 public virtual Color DefaultWindowBackColor {
362 get { return defaultWindowBackColor; }
365 public virtual Color DefaultWindowForeColor {
366 get { return defaultWindowForeColor; }
369 public virtual Color GetColor (XplatUIWin32.GetSysColorIndex idx)
371 return (Color) syscolors.GetValue ((int)idx);
374 public virtual void SetColor (XplatUIWin32.GetSysColorIndex idx, Color color)
376 syscolors.SetValue (color, (int) idx);
379 // Theme/UI specific defaults
380 public virtual ArrangeDirection ArrangeDirection {
382 return ArrangeDirection.Down;
386 public virtual ArrangeStartingPosition ArrangeStartingPosition {
388 return ArrangeStartingPosition.BottomLeft;
392 public virtual int BorderMultiplierFactor { get { return 1; } }
394 public virtual Size BorderSizableSize {
396 return new Size (3, 3);
400 public virtual Size Border3DSize {
402 return XplatUI.Border3DSize;
406 public virtual Size BorderStaticSize {
408 return new Size(1, 1);
412 public virtual Size BorderSize {
414 return XplatUI.BorderSize;
418 public virtual Size CaptionButtonSize {
420 return XplatUI.CaptionButtonSize;
424 public virtual int CaptionHeight {
426 return XplatUI.CaptionHeight;
430 public virtual Size DoubleClickSize {
432 return new Size(4, 4);
436 public virtual int DoubleClickTime {
438 return XplatUI.DoubleClickTime;
442 public virtual Size FixedFrameBorderSize {
444 return XplatUI.FixedFrameBorderSize;
448 public virtual Size FrameBorderSize {
450 return XplatUI.FrameBorderSize;
454 public virtual int HorizontalFocusThickness { get { return 1; } }
456 public virtual int HorizontalScrollBarArrowWidth {
462 public virtual int HorizontalScrollBarHeight {
468 public virtual int HorizontalScrollBarThumbWidth {
474 public virtual Size IconSpacingSize {
476 return new Size(75, 75);
480 public virtual bool MenuAccessKeysUnderlined {
482 return XplatUI.MenuAccessKeysUnderlined;
486 public virtual Size MenuBarButtonSize {
487 get { return XplatUI.MenuBarButtonSize; }
490 public virtual Size MenuButtonSize {
492 return XplatUI.MenuButtonSize;
496 public virtual Size MenuCheckSize {
498 return new Size(13, 13);
502 public virtual Font MenuFont {
504 return default_font ?? (default_font = SystemFonts.DefaultFont);
508 public virtual int MenuHeight {
510 return XplatUI.MenuHeight;
514 public virtual int MouseWheelScrollLines {
520 public virtual bool RightAlignedMenus {
526 public virtual Size ToolWindowCaptionButtonSize {
528 return XplatUI.ToolWindowCaptionButtonSize;
532 public virtual int ToolWindowCaptionHeight {
534 return XplatUI.ToolWindowCaptionHeight;
538 public virtual int VerticalFocusThickness { get { return 1; } }
540 public virtual int VerticalScrollBarArrowHeight {
546 public virtual int VerticalScrollBarThumbHeight {
552 public virtual int VerticalScrollBarWidth {
558 public abstract Font WindowBorderFont {
562 public int Clamp (int value, int lower, int upper)
564 if (value < lower) return lower;
565 else if (value > upper) return upper;
569 [MonoInternalNote ("Figure out where to point for My Network Places")]
570 public virtual string Places(UIIcon index) {
572 case UIIcon.PlacesRecentDocuments: {
573 // Default = "Recent Documents"
574 return Environment.GetFolderPath(Environment.SpecialFolder.Recent);
577 case UIIcon.PlacesDesktop: {
578 // Default = "Desktop"
579 return Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
582 case UIIcon.PlacesPersonal: {
583 // Default = "My Documents"
584 return Environment.GetFolderPath(Environment.SpecialFolder.Personal);
587 case UIIcon.PlacesMyComputer: {
588 // Default = "My Computer"
589 return Environment.GetFolderPath(Environment.SpecialFolder.MyComputer);
592 case UIIcon.PlacesMyNetwork: {
593 // Default = "My Network Places"
598 throw new ArgumentOutOfRangeException("index", index, "Unsupported place");
604 // This routine fetches images embedded as assembly resources (not
605 // resgen resources). It optionally scales the image to fit the
606 // specified size x dimension (it adjusts y automatically to fit that).
608 private Image GetSizedResourceImage(string name, int width)
610 Image image = ResPool.GetUIImage (name, width);
618 fullname = String.Format("{1}_{0}", name, width);
619 image = ResourceImageLoader.Get (fullname);
621 ResPool.AddUIImage (image, name, width);
627 image = ResourceImageLoader.Get (name);
631 ResPool.AddUIImage (image, name, 0);
632 if (image.Width != width && width != 0){
633 Console.Error.WriteLine ("warning: requesting icon that not been tuned {0}_{1} {2}", width, name, image.Width);
634 int height = (image.Height * width)/image.Width;
635 Bitmap b = new Bitmap (width, height);
636 using (Graphics g = Graphics.FromImage (b))
637 g.DrawImage (image, 0, 0, width, height);
638 ResPool.AddUIImage (b, name, width);
645 public virtual Image Images(UIIcon index) {
646 return Images(index, 0);
649 public virtual Image Images(UIIcon index, int size) {
651 case UIIcon.PlacesRecentDocuments:
652 return GetSizedResourceImage ("document-open.png", size);
653 case UIIcon.PlacesDesktop:
654 return GetSizedResourceImage ("user-desktop.png", size);
655 case UIIcon.PlacesPersonal:
656 return GetSizedResourceImage ("user-home.png", size);
657 case UIIcon.PlacesMyComputer:
658 return GetSizedResourceImage ("computer.png", size);
659 case UIIcon.PlacesMyNetwork:
660 return GetSizedResourceImage ("folder-remote.png", size);
662 // Icons for message boxes
663 case UIIcon.MessageBoxError:
664 return GetSizedResourceImage ("dialog-error.png", size);
665 case UIIcon.MessageBoxInfo:
666 return GetSizedResourceImage ("dialog-information.png", size);
667 case UIIcon.MessageBoxQuestion:
668 return GetSizedResourceImage ("dialog-question.png", size);
669 case UIIcon.MessageBoxWarning:
670 return GetSizedResourceImage ("dialog-warning.png", size);
673 case UIIcon.NormalFolder:
674 return GetSizedResourceImage ("folder.png", size);
677 throw new ArgumentException("Invalid Icon type requested", "index");
682 public virtual Image Images(string mimetype, string extension, int size) {
686 #region Principal Theme Methods
687 // To let the theme now that a change of defaults (colors, etc) was detected and force a re-read (and possible recreation of cached resources)
688 public abstract void ResetDefaults();
690 // If the theme writes directly to a window instead of a device context
691 public abstract bool DoubleBufferingSupported {get;}
692 #endregion // Principal Theme Methods
694 #region OwnerDraw Support
695 public abstract void DrawOwnerDrawBackground (DrawItemEventArgs e);
696 public abstract void DrawOwnerDrawFocusRectangle (DrawItemEventArgs e);
697 #endregion // OwnerDraw Support
700 public abstract Size CalculateButtonAutoSize (Button button);
701 public abstract void CalculateButtonTextAndImageLayout (ButtonBase b, out Rectangle textRectangle, out Rectangle imageRectangle);
702 public abstract void DrawButton (Graphics g, Button b, Rectangle textBounds, Rectangle imageBounds, Rectangle clipRectangle);
703 public abstract void DrawFlatButton (Graphics g, ButtonBase b, Rectangle textBounds, Rectangle imageBounds, Rectangle clipRectangle);
704 public abstract void DrawPopupButton (Graphics g, Button b, Rectangle textBounds, Rectangle imageBounds, Rectangle clipRectangle);
709 public abstract void DrawButtonBase(Graphics dc, Rectangle clip_area, ButtonBase button);
712 public abstract Size ButtonBaseDefaultSize{get;}
713 #endregion // ButtonBase
716 public abstract Size CalculateCheckBoxAutoSize (CheckBox checkBox);
717 public abstract void CalculateCheckBoxTextAndImageLayout (ButtonBase b, Point offset, out Rectangle glyphArea, out Rectangle textRectangle, out Rectangle imageRectangle);
718 public abstract void DrawCheckBox (Graphics g, CheckBox cb, Rectangle glyphArea, Rectangle textBounds, Rectangle imageBounds, Rectangle clipRectangle);
719 public abstract void DrawCheckBox (Graphics dc, Rectangle clip_area, CheckBox checkbox);
721 #endregion // CheckBox
723 #region CheckedListBox
725 public abstract void DrawCheckedListBoxItem (CheckedListBox ctrl, DrawItemEventArgs e);
726 #endregion // CheckedListBox
730 public abstract void DrawComboBoxItem (ComboBox ctrl, DrawItemEventArgs e);
731 public abstract void DrawFlatStyleComboButton (Graphics graphics, Rectangle rectangle, ButtonState state);
732 public abstract void ComboBoxDrawNormalDropDownButton (ComboBox comboBox, Graphics g, Rectangle clippingArea, Rectangle area, ButtonState state);
733 public abstract bool ComboBoxNormalDropDownButtonHasTransparentBackground (ComboBox comboBox, ButtonState state);
734 public abstract bool ComboBoxDropDownButtonHasHotElementStyle (ComboBox comboBox);
735 public abstract void ComboBoxDrawBackground (ComboBox comboBox, Graphics g, Rectangle clippingArea, FlatStyle style);
736 public abstract bool CombBoxBackgroundHasHotElementStyle (ComboBox comboBox);
737 #endregion // ComboBox
740 public abstract Font GetLinkFont (Control control);
741 #endregion // Control
744 public abstract int DataGridPreferredColumnWidth { get; }
745 public abstract int DataGridMinimumColumnCheckBoxHeight { get; }
746 public abstract int DataGridMinimumColumnCheckBoxWidth { get; }
749 public abstract Color DataGridAlternatingBackColor { get; }
750 public abstract Color DataGridBackColor { get; }
751 public abstract Color DataGridBackgroundColor { get; }
752 public abstract Color DataGridCaptionBackColor { get; }
753 public abstract Color DataGridCaptionForeColor { get; }
754 public abstract Color DataGridGridLineColor { get; }
755 public abstract Color DataGridHeaderBackColor { get; }
756 public abstract Color DataGridHeaderForeColor { get; }
757 public abstract Color DataGridLinkColor { get; }
758 public abstract Color DataGridLinkHoverColor { get; }
759 public abstract Color DataGridParentRowsBackColor { get; }
760 public abstract Color DataGridParentRowsForeColor { get; }
761 public abstract Color DataGridSelectionBackColor { get; }
762 public abstract Color DataGridSelectionForeColor { get; }
764 public abstract void DataGridPaint (PaintEventArgs pe, DataGrid grid);
765 public abstract void DataGridPaintCaption (Graphics g, Rectangle clip, DataGrid grid);
766 public abstract void DataGridPaintColumnHeaders (Graphics g, Rectangle clip, DataGrid grid);
767 public abstract void DataGridPaintColumnHeader (Graphics g, Rectangle bounds, DataGrid grid, int col);
768 public abstract void DataGridPaintRowContents (Graphics g, int row, Rectangle row_rect, bool is_newrow, Rectangle clip, DataGrid grid);
769 public abstract void DataGridPaintRowHeader (Graphics g, Rectangle bounds, int row, DataGrid grid);
770 public abstract void DataGridPaintRowHeaderArrow (Graphics g, Rectangle bounds, DataGrid grid);
771 public abstract void DataGridPaintRowHeaderStar (Graphics g, Rectangle bounds, DataGrid grid);
772 public abstract void DataGridPaintParentRows (Graphics g, Rectangle bounds, DataGrid grid);
773 public abstract void DataGridPaintParentRow (Graphics g, Rectangle bounds, DataGridDataSource row, DataGrid grid);
774 public abstract void DataGridPaintRows (Graphics g, Rectangle cells, Rectangle clip, DataGrid grid);
775 public abstract void DataGridPaintRow (Graphics g, int row, Rectangle row_rect, bool is_newrow, Rectangle clip, DataGrid grid);
776 public abstract void DataGridPaintRelationRow (Graphics g, int row, Rectangle row_rect, bool is_newrow, Rectangle clip, DataGrid grid);
778 #endregion // Datagrid
781 #region DataGridViewHeaderCell
782 #region DataGridViewRowHeaderCell
783 public abstract bool DataGridViewRowHeaderCellDrawBackground (DataGridViewRowHeaderCell cell, Graphics g, Rectangle bounds);
784 public abstract bool DataGridViewRowHeaderCellDrawSelectionBackground (DataGridViewRowHeaderCell cell);
785 public abstract bool DataGridViewRowHeaderCellDrawBorder (DataGridViewRowHeaderCell cell, Graphics g, Rectangle bounds);
787 #region DataGridViewColumnHeaderCell
788 public abstract bool DataGridViewColumnHeaderCellDrawBackground (DataGridViewColumnHeaderCell cell, Graphics g, Rectangle bounds);
789 public abstract bool DataGridViewColumnHeaderCellDrawBorder (DataGridViewColumnHeaderCell cell, Graphics g, Rectangle bounds);
791 public abstract bool DataGridViewHeaderCellHasPressedStyle (DataGridView dataGridView);
792 public abstract bool DataGridViewHeaderCellHasHotStyle (DataGridView dataGridView);
796 #region DateTimePicker
797 public abstract void DrawDateTimePicker(Graphics dc, Rectangle clip_rectangle, DateTimePicker dtp);
798 public abstract bool DateTimePickerBorderHasHotElementStyle { get; }
799 public abstract Rectangle DateTimePickerGetDropDownButtonArea (DateTimePicker dateTimePicker);
800 public abstract Rectangle DateTimePickerGetDateArea (DateTimePicker dateTimePicker);
801 public abstract bool DateTimePickerDropDownButtonHasHotElementStyle { get; }
802 #endregion // DateTimePicker
806 public abstract void DrawGroupBox (Graphics dc, Rectangle clip_area, GroupBox box);
809 public abstract Size GroupBoxDefaultSize{get;}
810 #endregion // GroupBox
813 public abstract Size HScrollBarDefaultSize{get;} // Default size of the scrollbar
814 #endregion // HScrollBar
818 public abstract void DrawListBoxItem (ListBox ctrl, DrawItemEventArgs e);
819 #endregion // ListBox
823 public abstract void DrawListViewItems (Graphics dc, Rectangle clip_rectangle, ListView control);
824 public abstract void DrawListViewHeader (Graphics dc, Rectangle clip_rectangle, ListView control);
825 public abstract void DrawListViewHeaderDragDetails (Graphics dc, ListView control, ColumnHeader drag_column, int target_x);
826 public abstract bool ListViewHasHotHeaderStyle { get; }
829 public abstract int ListViewGetHeaderHeight (ListView listView, Font font);
830 public abstract Size ListViewCheckBoxSize { get; }
831 public abstract int ListViewColumnHeaderHeight { get; }
832 public abstract int ListViewDefaultColumnWidth { get; }
833 public abstract int ListViewVerticalSpacing { get; }
834 public abstract int ListViewEmptyColumnWidth { get; }
835 public abstract int ListViewHorizontalSpacing { get; }
836 public abstract Size ListViewDefaultSize { get; }
837 public abstract int ListViewGroupHeight { get; }
838 public abstract int ListViewItemPaddingWidth { get; }
839 public abstract int ListViewTileWidthFactor { get; }
840 public abstract int ListViewTileHeightFactor { get; }
841 #endregion // ListView
844 public abstract void CalcItemSize (Graphics dc, MenuItem item, int y, int x, bool menuBar);
845 public abstract void CalcPopupMenuSize (Graphics dc, Menu menu);
846 public abstract int CalcMenuBarSize (Graphics dc, Menu menu, int width);
847 public abstract void DrawMenuBar (Graphics dc, Menu menu, Rectangle rect);
848 public abstract void DrawMenuItem (MenuItem item, DrawItemEventArgs e);
849 public abstract void DrawPopupMenu (Graphics dc, Menu menu, Rectangle cliparea, Rectangle rect);
852 #region MonthCalendar
853 public abstract void DrawMonthCalendar(Graphics dc, Rectangle clip_rectangle, MonthCalendar month_calendar);
854 #endregion // MonthCalendar
858 public abstract Size PanelDefaultSize{get;}
863 public abstract void DrawPictureBox (Graphics dc, Rectangle clip, PictureBox pb);
866 public abstract Size PictureBoxDefaultSize{get;}
867 #endregion // PictureBox
869 #region PrintPreviewControl
870 public abstract int PrintPreviewControlPadding{get;}
871 public abstract Size PrintPreviewControlGetPageSize (PrintPreviewControl preview);
872 public abstract void PrintPreviewControlPaint (PaintEventArgs pe, PrintPreviewControl preview, Size page_image_size);
873 #endregion // PrintPreviewControl
877 public abstract void DrawProgressBar (Graphics dc, Rectangle clip_rectangle, ProgressBar progress_bar);
880 public abstract Size ProgressBarDefaultSize{get;}
881 #endregion // ProgressBar
885 public abstract Size CalculateRadioButtonAutoSize (RadioButton rb);
886 public abstract void CalculateRadioButtonTextAndImageLayout (ButtonBase b, Point offset, out Rectangle glyphArea, out Rectangle textRectangle, out Rectangle imageRectangle);
887 public abstract void DrawRadioButton (Graphics g, RadioButton rb, Rectangle glyphArea, Rectangle textBounds, Rectangle imageBounds, Rectangle clipRectangle);
888 public abstract void DrawRadioButton (Graphics dc, Rectangle clip_rectangle, RadioButton radio_button);
891 public abstract Size RadioButtonDefaultSize{get;}
892 #endregion // RadioButton
896 //public abstract void DrawScrollBar (Graphics dc, Rectangle area, ScrollBar bar, ref Rectangle thumb_pos, ref Rectangle first_arrow_area, ref Rectangle second_arrow_area, ButtonState first_arrow, ButtonState second_arrow, ref int scrollbutton_width, ref int scrollbutton_height, bool vert);
897 public abstract void DrawScrollBar (Graphics dc, Rectangle clip_rectangle, ScrollBar bar);
900 public abstract int ScrollBarButtonSize {get;} // Size of the scroll button
902 public abstract bool ScrollBarHasHotElementStyles { get; }
904 public abstract bool ScrollBarHasPressedThumbStyle { get; }
906 public abstract bool ScrollBarHasHoverArrowButtonStyle { get; }
907 #endregion // ScrollBar
911 public abstract void DrawStatusBar (Graphics dc, Rectangle clip_rectangle, StatusBar sb);
914 public abstract int StatusBarSizeGripWidth {get;} // Size of Resize area
915 public abstract int StatusBarHorzGapWidth {get;} // Gap between panels
916 public abstract Size StatusBarDefaultSize{get;}
917 #endregion // StatusBar
920 public abstract Size TabControlDefaultItemSize {get; }
921 public abstract Point TabControlDefaultPadding {get; }
922 public abstract int TabControlMinimumTabWidth {get; }
923 public abstract Rectangle TabControlSelectedDelta { get; }
924 public abstract int TabControlSelectedSpacing { get; }
925 public abstract int TabPanelOffsetX { get; }
926 public abstract int TabPanelOffsetY { get; }
927 public abstract int TabControlColSpacing { get; }
928 public abstract Point TabControlImagePadding { get; }
929 public abstract int TabControlScrollerWidth { get; }
931 public abstract Rectangle TabControlGetDisplayRectangle (TabControl tab);
932 public abstract Rectangle TabControlGetPanelRect (TabControl tab);
933 public abstract Size TabControlGetSpacing (TabControl tab);
934 public abstract void DrawTabControl (Graphics dc, Rectangle area, TabControl tab);
938 public abstract void TextBoxBaseFillBackground (TextBoxBase textBoxBase, Graphics g, Rectangle clippingArea);
939 public abstract bool TextBoxBaseHandleWmNcPaint (TextBoxBase textBoxBase, ref Message m);
940 public abstract bool TextBoxBaseShouldPaintBackground (TextBoxBase textBoxBase);
945 public abstract void DrawToolBar (Graphics dc, Rectangle clip_rectangle, ToolBar control);
948 public abstract int ToolBarGripWidth {get;} // Grip width for the ToolBar
949 public abstract int ToolBarImageGripWidth {get;} // Grip width for the Image on the ToolBarButton
950 public abstract int ToolBarSeparatorWidth {get;} // width of the separator
951 public abstract int ToolBarDropDownWidth { get; } // width of the dropdown arrow rect
952 public abstract int ToolBarDropDownArrowWidth { get; } // width for the dropdown arrow on the ToolBarButton
953 public abstract int ToolBarDropDownArrowHeight { get; } // height for the dropdown arrow on the ToolBarButton
954 public abstract Size ToolBarDefaultSize{get;}
956 public abstract bool ToolBarHasHotElementStyles (ToolBar toolBar);
957 public abstract bool ToolBarHasHotCheckedElementStyles { get; }
958 #endregion // ToolBar
961 public abstract void DrawToolTip(Graphics dc, Rectangle clip_rectangle, ToolTip.ToolTipWindow control);
962 public abstract Size ToolTipSize(ToolTip.ToolTipWindow tt, string text);
963 public abstract bool ToolTipTransparentBackground { get; }
964 #endregion // ToolTip
966 #region BalloonWindow
967 public abstract void ShowBalloonWindow (IntPtr handle, int timeout, string title, string text, ToolTipIcon icon);
968 public abstract void HideBalloonWindow (IntPtr handle);
969 public abstract void DrawBalloonWindow (Graphics dc, Rectangle clip, NotifyIcon.BalloonWindow control);
970 public abstract Rectangle BalloonWindowRect (NotifyIcon.BalloonWindow control);
971 #endregion // BalloonWindow
975 public abstract void DrawTrackBar (Graphics dc, Rectangle clip_rectangle, TrackBar tb);
978 public abstract Size TrackBarDefaultSize{get; } // Default size for the TrackBar control
980 public abstract int TrackBarValueFromMousePosition (int x, int y, TrackBar tb);
982 public abstract bool TrackBarHasHotThumbStyle { get; }
983 #endregion // TrackBar
986 public abstract void UpDownBaseDrawButton (Graphics g, Rectangle bounds, bool top, VisualStyles.PushButtonState state);
987 public abstract bool UpDownBaseHasHotButtonStyle { get; }
991 public abstract Size VScrollBarDefaultSize{get;} // Default size of the scrollbar
992 #endregion // VScrollBar
995 public abstract Size TreeViewDefaultSize { get; }
996 public abstract void TreeViewDrawNodePlusMinus (TreeView treeView, TreeNode node, Graphics dc, int x, int middle);
999 #region Managed window
1000 public abstract void DrawManagedWindowDecorations (Graphics dc, Rectangle clip, InternalWindowManager wm);
1001 public abstract int ManagedWindowTitleBarHeight (InternalWindowManager wm);
1002 public abstract int ManagedWindowBorderWidth (InternalWindowManager wm);
1003 public abstract int ManagedWindowIconWidth (InternalWindowManager wm);
1004 public abstract Size ManagedWindowButtonSize (InternalWindowManager wm);
1005 public abstract void ManagedWindowSetButtonLocations (InternalWindowManager wm);
1006 public abstract Rectangle ManagedWindowGetTitleBarIconArea (InternalWindowManager wm);
1007 public abstract Size ManagedWindowGetMenuButtonSize (InternalWindowManager wm);
1008 public abstract bool ManagedWindowTitleButtonHasHotElementStyle (TitleButton button, Form form);
1009 public abstract void ManagedWindowDrawMenuButton (Graphics dc, TitleButton button, Rectangle clip, InternalWindowManager wm);
1010 public abstract void ManagedWindowOnSizeInitializedOrChanged (Form form);
1011 public const int ManagedWindowSpacingAfterLastTitleButton = 2;
1014 #region ControlPaint Methods
1015 public abstract void CPDrawBorder (Graphics graphics, Rectangle bounds, Color leftColor, int leftWidth,
1016 ButtonBorderStyle leftStyle, Color topColor, int topWidth, ButtonBorderStyle topStyle,
1017 Color rightColor, int rightWidth, ButtonBorderStyle rightStyle, Color bottomColor,
1018 int bottomWidth, ButtonBorderStyle bottomStyle);
1020 public abstract void CPDrawBorder (Graphics graphics, RectangleF bounds, Color leftColor, int leftWidth,
1021 ButtonBorderStyle leftStyle, Color topColor, int topWidth, ButtonBorderStyle topStyle,
1022 Color rightColor, int rightWidth, ButtonBorderStyle rightStyle, Color bottomColor,
1023 int bottomWidth, ButtonBorderStyle bottomStyle);
1025 public abstract void CPDrawBorder3D (Graphics graphics, Rectangle rectangle, Border3DStyle style, Border3DSide sides);
1026 public abstract void CPDrawBorder3D (Graphics graphics, Rectangle rectangle, Border3DStyle style, Border3DSide sides, Color control_color);
1027 public abstract void CPDrawButton (Graphics graphics, Rectangle rectangle, ButtonState state);
1028 public abstract void CPDrawCaptionButton (Graphics graphics, Rectangle rectangle, CaptionButton button, ButtonState state);
1029 public abstract void CPDrawCheckBox (Graphics graphics, Rectangle rectangle, ButtonState state);
1030 public abstract void CPDrawComboButton (Graphics graphics, Rectangle rectangle, ButtonState state);
1031 public abstract void CPDrawContainerGrabHandle (Graphics graphics, Rectangle bounds);
1032 public abstract void CPDrawFocusRectangle (Graphics graphics, Rectangle rectangle, Color foreColor, Color backColor);
1033 public abstract void CPDrawGrabHandle (Graphics graphics, Rectangle rectangle, bool primary, bool enabled);
1034 public abstract void CPDrawGrid (Graphics graphics, Rectangle area, Size pixelsBetweenDots, Color backColor);
1035 public abstract void CPDrawImageDisabled (Graphics graphics, Image image, int x, int y, Color background);
1036 public abstract void CPDrawLockedFrame (Graphics graphics, Rectangle rectangle, bool primary);
1037 public abstract void CPDrawMenuGlyph (Graphics graphics, Rectangle rectangle, MenuGlyph glyph, Color color, Color backColor);
1038 public abstract void CPDrawMixedCheckBox (Graphics graphics, Rectangle rectangle, ButtonState state);
1039 public abstract void CPDrawRadioButton (Graphics graphics, Rectangle rectangle, ButtonState state);
1040 public abstract void CPDrawReversibleFrame (Rectangle rectangle, Color backColor, FrameStyle style);
1041 public abstract void CPDrawReversibleLine (Point start, Point end, Color backColor);
1042 public abstract void CPDrawScrollButton (Graphics graphics, Rectangle rectangle, ScrollButton button, ButtonState state);
1043 public abstract void CPDrawSelectionFrame (Graphics graphics, bool active, Rectangle outsideRect, Rectangle insideRect,
1045 public abstract void CPDrawSizeGrip (Graphics graphics, Color backColor, Rectangle bounds);
1046 public abstract void CPDrawStringDisabled (Graphics graphics, string s, Font font, Color color, RectangleF layoutRectangle,
1047 StringFormat format);
1048 public abstract void CPDrawStringDisabled (IDeviceContext dc, string s, Font font, Color color, Rectangle layoutRectangle, TextFormatFlags format);
1049 public abstract void CPDrawVisualStyleBorder (Graphics graphics, Rectangle bounds);
1050 public abstract void CPDrawBorderStyle (Graphics dc, Rectangle area, BorderStyle border_style);
1051 #endregion // ControlPaint Methods