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.Drawing.Imaging;
31 using System.Reflection;
33 namespace System.Windows.Forms
35 internal enum UIIcon {
36 PlacesRecentDocuments,
49 internal struct CPColor {
51 internal Color DarkDark;
53 internal Color LightLight;
55 internal static CPColor Empty;
58 // Implements a pool of system resources
59 internal class SystemResPool
61 private Hashtable pens = new Hashtable ();
62 private Hashtable dashpens = new Hashtable ();
63 private Hashtable sizedpens = new Hashtable ();
64 private Hashtable solidbrushes = new Hashtable ();
65 private Hashtable hatchbrushes = new Hashtable ();
66 private Hashtable uiImages = new Hashtable();
67 private Hashtable cpcolors = new Hashtable ();
69 public SystemResPool () {}
71 public Pen GetPen (Color color)
73 int hash = color.ToArgb ();
76 Pen res = pens [hash] as Pen;
80 Pen pen = new Pen (color);
86 public Pen GetDashPen (Color color, DashStyle dashStyle)
88 string hash = color.ToString() + dashStyle;
91 Pen res = dashpens [hash] as Pen;
95 Pen pen = new Pen (color);
96 pen.DashStyle = dashStyle;
97 dashpens [hash] = pen;
102 public Pen GetSizedPen (Color color, int size)
104 string hash = color.ToString () + size;
107 Pen res = sizedpens [hash] as Pen;
111 Pen pen = new Pen (color, size);
112 sizedpens [hash] = pen;
117 public SolidBrush GetSolidBrush (Color color)
119 int hash = color.ToArgb ();
121 lock (solidbrushes) {
122 SolidBrush res = solidbrushes [hash] as SolidBrush;
126 SolidBrush brush = new SolidBrush (color);
127 solidbrushes.Add (hash, brush);
132 public HatchBrush GetHatchBrush (HatchStyle hatchStyle, Color foreColor, Color backColor)
134 string hash = ((int)hatchStyle).ToString () + foreColor.ToString () + backColor.ToString ();
136 lock (hatchbrushes) {
137 HatchBrush brush = (HatchBrush) hatchbrushes[hash];
139 brush = new HatchBrush (hatchStyle, foreColor, backColor);
140 hatchbrushes.Add (hash, brush);
146 public void AddUIImage (Image image, string name, int size)
148 string hash = name + size.ToString();
151 if (uiImages.Contains (hash))
153 uiImages.Add (hash, image);
157 public Image GetUIImage(string name, int size)
159 string hash = name + size.ToString();
161 Image image = uiImages [hash] as Image;
166 public CPColor GetCPColor (Color color)
169 object tmp = cpcolors [color];
172 CPColor cpcolor = new CPColor ();
173 cpcolor.Dark = ControlPaint.Dark (color);
174 cpcolor.DarkDark = ControlPaint.DarkDark (color);
175 cpcolor.Light = ControlPaint.Light (color);
176 cpcolor.LightLight = ControlPaint.LightLight (color);
178 cpcolors.Add (color, cpcolor);
188 internal abstract class Theme
190 protected Array syscolors;
191 private readonly Font default_font;
192 protected Font window_border_font;
193 protected Color defaultWindowBackColor;
194 protected Color defaultWindowForeColor;
195 internal SystemResPool ResPool = new SystemResPool ();
196 private MethodInfo update;
201 default_font = SystemFonts.DefaultFont;
203 default_font = new Font (FontFamily.GenericSansSerif, 8.25f);
207 private void SetSystemColors (KnownColor kc, Color value)
209 if (update == null) {
210 Type known_colors = Type.GetType ("System.Drawing.KnownColors, " + Consts.AssemblySystem_Drawing);
211 if (known_colors != null)
212 update = known_colors.GetMethod ("Update", BindingFlags.Static | BindingFlags.Public);
215 update.Invoke (null, new object [2] { (int)kc, value.ToArgb () });
218 /* OS Feature support */
219 public abstract Version Version {
223 /* Default properties */
224 public virtual Color ColorScrollBar {
225 get { return SystemColors.ScrollBar; }
226 set { SetSystemColors (KnownColor.ScrollBar, value); }
229 public virtual Color ColorDesktop {
230 get { return SystemColors.Desktop;}
231 set { SetSystemColors (KnownColor.Desktop, value); }
234 public virtual Color ColorActiveCaption {
235 get { return SystemColors.ActiveCaption;}
236 set { SetSystemColors (KnownColor.ActiveCaption, value); }
239 public virtual Color ColorInactiveCaption {
240 get { return SystemColors.InactiveCaption;}
241 set { SetSystemColors (KnownColor.InactiveCaption, value); }
244 public virtual Color ColorMenu {
245 get { return SystemColors.Menu;}
246 set { SetSystemColors (KnownColor.Menu, value); }
249 public virtual Color ColorWindow {
250 get { return SystemColors.Window;}
251 set { SetSystemColors (KnownColor.Window, value); }
254 public virtual Color ColorWindowFrame {
255 get { return SystemColors.WindowFrame;}
256 set { SetSystemColors (KnownColor.WindowFrame, value); }
259 public virtual Color ColorMenuText {
260 get { return SystemColors.MenuText;}
261 set { SetSystemColors (KnownColor.MenuText, value); }
264 public virtual Color ColorWindowText {
265 get { return SystemColors.WindowText;}
266 set { SetSystemColors (KnownColor.WindowText, value); }
269 public virtual Color ColorActiveCaptionText {
270 get { return SystemColors.ActiveCaptionText;}
271 set { SetSystemColors (KnownColor.ActiveCaptionText, value); }
274 public virtual Color ColorActiveBorder {
275 get { return SystemColors.ActiveBorder;}
276 set { SetSystemColors (KnownColor.ActiveBorder, value); }
279 public virtual Color ColorInactiveBorder{
280 get { return SystemColors.InactiveBorder;}
281 set { SetSystemColors (KnownColor.InactiveBorder, value); }
284 public virtual Color ColorAppWorkspace {
285 get { return SystemColors.AppWorkspace;}
286 set { SetSystemColors (KnownColor.AppWorkspace, value); }
289 public virtual Color ColorHighlight {
290 get { return SystemColors.Highlight;}
291 set { SetSystemColors (KnownColor.Highlight, value); }
294 public virtual Color ColorHighlightText {
295 get { return SystemColors.HighlightText;}
296 set { SetSystemColors (KnownColor.HighlightText, value); }
299 public virtual Color ColorControl {
300 get { return SystemColors.Control;}
301 set { SetSystemColors (KnownColor.Control, value); }
304 public virtual Color ColorControlDark {
305 get { return SystemColors.ControlDark;}
306 set { SetSystemColors (KnownColor.ControlDark, value); }
309 public virtual Color ColorGrayText {
310 get { return SystemColors.GrayText;}
311 set { SetSystemColors (KnownColor.GrayText, value); }
314 public virtual Color ColorControlText {
315 get { return SystemColors.ControlText;}
316 set { SetSystemColors (KnownColor.ControlText, value); }
319 public virtual Color ColorInactiveCaptionText {
320 get { return SystemColors.InactiveCaptionText;}
321 set { SetSystemColors (KnownColor.InactiveCaptionText, value); }
324 public virtual Color ColorControlLight {
325 get { return SystemColors.ControlLight;}
326 set { SetSystemColors (KnownColor.ControlLight, value); }
329 public virtual Color ColorControlDarkDark {
330 get { return SystemColors.ControlDarkDark;}
331 set { SetSystemColors (KnownColor.ControlDarkDark, value); }
334 public virtual Color ColorControlLightLight {
335 get { return SystemColors.ControlLightLight;}
336 set { SetSystemColors (KnownColor.ControlLightLight, value); }
339 public virtual Color ColorInfoText {
340 get { return SystemColors.InfoText;}
341 set { SetSystemColors (KnownColor.InfoText, value); }
344 public virtual Color ColorInfo {
345 get { return SystemColors.Info;}
346 set { SetSystemColors (KnownColor.Info, value); }
349 public virtual Color ColorHotTrack {
350 get { return SystemColors.HotTrack;}
351 set { SetSystemColors (KnownColor.HotTrack, value);}
354 public virtual Color DefaultControlBackColor {
355 get { return ColorControl; }
356 set { ColorControl = value; }
359 public virtual Color DefaultControlForeColor {
360 get { return ColorControlText; }
361 set { ColorControlText = value; }
364 public virtual Font DefaultFont {
365 get { return default_font; }
368 public virtual Color DefaultWindowBackColor {
369 get { return defaultWindowBackColor; }
372 public virtual Color DefaultWindowForeColor {
373 get { return defaultWindowForeColor; }
376 public virtual Color GetColor (XplatUIWin32.GetSysColorIndex idx)
378 return (Color) syscolors.GetValue ((int)idx);
381 public virtual void SetColor (XplatUIWin32.GetSysColorIndex idx, Color color)
383 syscolors.SetValue (color, (int) idx);
386 // Theme/UI specific defaults
387 public virtual ArrangeDirection ArrangeDirection {
389 return ArrangeDirection.Down;
393 public virtual ArrangeStartingPosition ArrangeStartingPosition {
395 return ArrangeStartingPosition.BottomLeft;
399 public virtual int BorderMultiplierFactor { get { return 1; } }
401 public virtual Size BorderSizableSize {
403 return new Size (3, 3);
407 public virtual Size Border3DSize {
409 return XplatUI.Border3DSize;
413 public virtual Size BorderStaticSize {
415 return new Size(1, 1);
419 public virtual Size BorderSize {
421 return XplatUI.BorderSize;
425 public virtual Size CaptionButtonSize {
427 return XplatUI.CaptionButtonSize;
431 public virtual int CaptionHeight {
433 return XplatUI.CaptionHeight;
437 public virtual Size DoubleClickSize {
439 return new Size(4, 4);
443 public virtual int DoubleClickTime {
445 return XplatUI.DoubleClickTime;
449 public virtual Size FixedFrameBorderSize {
451 return XplatUI.FixedFrameBorderSize;
455 public virtual Size FrameBorderSize {
457 return XplatUI.FrameBorderSize;
461 public virtual int HorizontalFocusThickness { get { return 1; } }
463 public virtual int HorizontalScrollBarArrowWidth {
469 public virtual int HorizontalScrollBarHeight {
475 public virtual int HorizontalScrollBarThumbWidth {
481 public virtual Size IconSpacingSize {
483 return new Size(75, 75);
487 public virtual bool MenuAccessKeysUnderlined {
489 return XplatUI.MenuAccessKeysUnderlined;
493 public virtual Size MenuBarButtonSize {
494 get { return XplatUI.MenuBarButtonSize; }
497 public virtual Size MenuButtonSize {
499 return new Size(18, 18);
503 public virtual Size MenuCheckSize {
505 return new Size(13, 13);
509 public virtual Font MenuFont {
515 public virtual int MenuHeight {
517 return XplatUI.MenuHeight;
521 public virtual int MouseWheelScrollLines {
527 public virtual bool RightAlignedMenus {
533 public virtual Size ToolWindowCaptionButtonSize {
535 return XplatUI.ToolWindowCaptionButtonSize;
539 public virtual int ToolWindowCaptionHeight {
541 return XplatUI.ToolWindowCaptionHeight;
545 public virtual int VerticalFocusThickness { get { return 1; } }
547 public virtual int VerticalScrollBarArrowHeight {
553 public virtual int VerticalScrollBarThumbHeight {
559 public virtual int VerticalScrollBarWidth {
565 public virtual Font WindowBorderFont {
567 return window_border_font;
571 public int Clamp (int value, int lower, int upper)
573 if (value < lower) return lower;
574 else if (value > upper) return upper;
578 [MonoTODO("Figure out where to point for My Network Places")]
579 public virtual string Places(UIIcon index) {
581 case UIIcon.PlacesRecentDocuments: {
582 // Default = "Recent Documents"
583 return Environment.GetFolderPath(Environment.SpecialFolder.Recent);
586 case UIIcon.PlacesDesktop: {
587 // Default = "Desktop"
588 return Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
591 case UIIcon.PlacesPersonal: {
592 // Default = "My Documents"
593 return Environment.GetFolderPath(Environment.SpecialFolder.Personal);
596 case UIIcon.PlacesMyComputer: {
597 // Default = "My Computer"
598 return Environment.GetFolderPath(Environment.SpecialFolder.MyComputer);
601 case UIIcon.PlacesMyNetwork: {
602 // Default = "My Network Places"
607 throw new ArgumentOutOfRangeException("index", index, "Unsupported place");
613 // This routine fetches images embedded as assembly resources (not
614 // resgen resources). It optionally scales the image to fit the
615 // specified size x dimension (it adjusts y automatically to fit that).
617 private Image GetSizedResourceImage(string name, int width)
619 Image image = ResPool.GetUIImage (name, width);
627 fullname = String.Format("{1}_{0}", name, width);
628 image = ResourceImageLoader.Get (fullname);
630 ResPool.AddUIImage (image, name, width);
636 image = ResourceImageLoader.Get (name);
640 ResPool.AddUIImage (image, name, 0);
641 if (image.Width != width && width != 0){
642 Console.Error.WriteLine ("warning: requesting icon that not been tuned {0}_{1} {2}", width, name, image.Width);
643 int height = (image.Height * width)/image.Width;
644 Bitmap b = new Bitmap (width, height);
645 Graphics g = Graphics.FromImage (b);
646 g.DrawImage (image, 0, 0, width, height);
647 ResPool.AddUIImage (b, name, width);
654 public virtual Image Images(UIIcon index) {
655 return Images(index, 0);
658 public virtual Image Images(UIIcon index, int size) {
660 case UIIcon.PlacesRecentDocuments:
661 return GetSizedResourceImage ("document-open.png", size);
662 case UIIcon.PlacesDesktop:
663 return GetSizedResourceImage ("user-desktop.png", size);
664 case UIIcon.PlacesPersonal:
665 return GetSizedResourceImage ("user-home.png", size);
666 case UIIcon.PlacesMyComputer:
667 return GetSizedResourceImage ("computer.png", size);
668 case UIIcon.PlacesMyNetwork:
669 return GetSizedResourceImage ("folder-remote.png", size);
671 // Icons for message boxes
672 case UIIcon.MessageBoxError:
673 return GetSizedResourceImage ("dialog-error.png", size);
674 case UIIcon.MessageBoxInfo:
675 return GetSizedResourceImage ("dialog-information.png", size);
676 case UIIcon.MessageBoxQuestion:
677 return GetSizedResourceImage ("dialog-question.png", size);
678 case UIIcon.MessageBoxWarning:
679 return GetSizedResourceImage ("dialog-warning.png", size);
682 case UIIcon.NormalFolder:
683 return GetSizedResourceImage ("folder.png", size);
686 throw new ArgumentException("Invalid Icon type requested", "index");
691 public virtual Image Images(string mimetype, string extension, int size) {
695 #region Principal Theme Methods
696 // 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)
697 public abstract void ResetDefaults();
699 // If the theme writes directly to a window instead of a device context
700 public abstract bool DoubleBufferingSupported {get;}
701 #endregion // Principal Theme Methods
703 #region OwnerDraw Support
704 public abstract void DrawOwnerDrawBackground (DrawItemEventArgs e);
705 public abstract void DrawOwnerDrawFocusRectangle (DrawItemEventArgs e);
706 #endregion // OwnerDraw Support
710 public abstract Size CalculateButtonAutoSize (Button button);
712 public abstract void CalculateButtonTextAndImageLayout (ButtonBase b, out Rectangle textRectangle, out Rectangle imageRectangle);
713 public abstract void DrawButton (Graphics g, Button b, Rectangle textBounds, Rectangle imageBounds, Rectangle clipRectangle);
714 public abstract void DrawFlatButton (Graphics g, ButtonBase b, Rectangle textBounds, Rectangle imageBounds, Rectangle clipRectangle);
715 public abstract void DrawPopupButton (Graphics g, Button b, Rectangle textBounds, Rectangle imageBounds, Rectangle clipRectangle);
720 public abstract void DrawButtonBase(Graphics dc, Rectangle clip_area, ButtonBase button);
723 public abstract Size ButtonBaseDefaultSize{get;}
724 #endregion // ButtonBase
728 public abstract Size CalculateCheckBoxAutoSize (CheckBox checkBox);
729 public abstract void CalculateCheckBoxTextAndImageLayout (ButtonBase b, Point offset, out Rectangle glyphArea, out Rectangle textRectangle, out Rectangle imageRectangle);
730 public abstract void DrawCheckBox (Graphics g, CheckBox cb, Rectangle glyphArea, Rectangle textBounds, Rectangle imageBounds, Rectangle clipRectangle);
732 public abstract void DrawCheckBox (Graphics dc, Rectangle clip_area, CheckBox checkbox);
734 #endregion // CheckBox
736 #region CheckedListBox
738 public abstract void DrawCheckedListBoxItem (CheckedListBox ctrl, DrawItemEventArgs e);
739 #endregion // CheckedListBox
743 public abstract void DrawComboBoxItem (ComboBox ctrl, DrawItemEventArgs e);
744 public abstract void DrawFlatStyleComboButton (Graphics graphics, Rectangle rectangle, ButtonState state);
745 public abstract void ComboBoxDrawNormalDropDownButton (ComboBox comboBox, Graphics g, Rectangle clippingArea, Rectangle area, ButtonState state);
746 public abstract bool ComboBoxNormalDropDownButtonHasTransparentBackground (ComboBox comboBox, ButtonState state);
747 public abstract bool ComboBoxDropDownButtonHasHotElementStyle (ComboBox comboBox);
748 public abstract void ComboBoxDrawBackground (ComboBox comboBox, Graphics g, Rectangle clippingArea, FlatStyle style);
749 public abstract bool CombBoxBackgroundHasHotElementStyle (ComboBox comboBox);
750 #endregion // ComboBox
753 public abstract Font GetLinkFont (Control control);
754 #endregion // Control
757 public abstract int DataGridPreferredColumnWidth { get; }
758 public abstract int DataGridMinimumColumnCheckBoxHeight { get; }
759 public abstract int DataGridMinimumColumnCheckBoxWidth { get; }
762 public abstract Color DataGridAlternatingBackColor { get; }
763 public abstract Color DataGridBackColor { get; }
764 public abstract Color DataGridBackgroundColor { get; }
765 public abstract Color DataGridCaptionBackColor { get; }
766 public abstract Color DataGridCaptionForeColor { get; }
767 public abstract Color DataGridGridLineColor { get; }
768 public abstract Color DataGridHeaderBackColor { get; }
769 public abstract Color DataGridHeaderForeColor { get; }
770 public abstract Color DataGridLinkColor { get; }
771 public abstract Color DataGridLinkHoverColor { get; }
772 public abstract Color DataGridParentRowsBackColor { get; }
773 public abstract Color DataGridParentRowsForeColor { get; }
774 public abstract Color DataGridSelectionBackColor { get; }
775 public abstract Color DataGridSelectionForeColor { get; }
777 public abstract void DataGridPaint (PaintEventArgs pe, DataGrid grid);
778 public abstract void DataGridPaintCaption (Graphics g, Rectangle clip, DataGrid grid);
779 public abstract void DataGridPaintColumnHeaders (Graphics g, Rectangle clip, DataGrid grid);
780 public abstract void DataGridPaintRowContents (Graphics g, int row, Rectangle row_rect, bool is_newrow, Rectangle clip, DataGrid grid);
781 public abstract void DataGridPaintRowHeader (Graphics g, Rectangle bounds, int row, DataGrid grid);
782 public abstract void DataGridPaintRowHeaderArrow (Graphics g, Rectangle bounds, DataGrid grid);
783 public abstract void DataGridPaintParentRows (Graphics g, Rectangle bounds, DataGrid grid);
784 public abstract void DataGridPaintParentRow (Graphics g, Rectangle bounds, DataGridDataSource row, DataGrid grid);
785 public abstract void DataGridPaintRows (Graphics g, Rectangle cells, Rectangle clip, DataGrid grid);
786 public abstract void DataGridPaintRow (Graphics g, int row, Rectangle row_rect, bool is_newrow, Rectangle clip, DataGrid grid);
787 public abstract void DataGridPaintRelationRow (Graphics g, int row, Rectangle row_rect, bool is_newrow, Rectangle clip, DataGrid grid);
789 #endregion // Datagrid
793 #region DataGridViewHeaderCell
794 #region DataGridViewRowHeaderCell
795 public abstract bool DataGridViewRowHeaderCellDrawBackground (DataGridViewRowHeaderCell cell, Graphics g, Rectangle bounds);
796 public abstract bool DataGridViewRowHeaderCellDrawSelectionBackground (DataGridViewRowHeaderCell cell);
797 public abstract bool DataGridViewRowHeaderCellDrawBorder (DataGridViewRowHeaderCell cell, Graphics g, Rectangle bounds);
799 #region DataGridViewColumnHeaderCell
800 public abstract bool DataGridViewColumnHeaderCellDrawBackground (DataGridViewColumnHeaderCell cell, Graphics g, Rectangle bounds);
801 public abstract bool DataGridViewColumnHeaderCellDrawBorder (DataGridViewColumnHeaderCell cell, Graphics g, Rectangle bounds);
803 public abstract bool DataGridViewHeaderCellHasPressedStyle (DataGridView dataGridView);
804 public abstract bool DataGridViewHeaderCellHasHotStyle (DataGridView dataGridView);
809 #region DateTimePicker
810 public abstract void DrawDateTimePicker(Graphics dc, Rectangle clip_rectangle, DateTimePicker dtp);
811 public abstract bool DateTimePickerBorderHasHotElementStyle { get; }
812 public abstract Rectangle DateTimePickerGetDropDownButtonArea (DateTimePicker dateTimePicker);
813 public abstract Rectangle DateTimePickerGetDateArea (DateTimePicker dateTimePicker);
814 public abstract bool DateTimePickerDropDownButtonHasHotElementStyle { get; }
815 #endregion // DateTimePicker
819 public abstract void DrawGroupBox (Graphics dc, Rectangle clip_area, GroupBox box);
822 public abstract Size GroupBoxDefaultSize{get;}
823 #endregion // GroupBox
826 public abstract Size HScrollBarDefaultSize{get;} // Default size of the scrollbar
827 #endregion // HScrollBar
831 public abstract void DrawListBoxItem (ListBox ctrl, DrawItemEventArgs e);
832 #endregion // ListBox
836 public abstract void DrawListViewItems (Graphics dc, Rectangle clip_rectangle, ListView control);
837 public abstract void DrawListViewHeader (Graphics dc, Rectangle clip_rectangle, ListView control);
838 public abstract void DrawListViewHeaderDragDetails (Graphics dc, ListView control, ColumnHeader drag_column, int target_x);
839 public abstract bool ListViewHasHotHeaderStyle { get; }
842 public abstract int ListViewGetHeaderHeight (ListView listView, Font font);
843 public abstract Size ListViewCheckBoxSize { get; }
844 public abstract int ListViewColumnHeaderHeight { get; }
845 public abstract int ListViewDefaultColumnWidth { get; }
846 public abstract int ListViewVerticalSpacing { get; }
847 public abstract int ListViewEmptyColumnWidth { get; }
848 public abstract int ListViewHorizontalSpacing { get; }
849 public abstract Size ListViewDefaultSize { get; }
850 public abstract int ListViewGroupHeight { get; }
851 public abstract int ListViewItemPaddingWidth { get; }
852 public abstract int ListViewTileWidthFactor { get; }
853 public abstract int ListViewTileHeightFactor { get; }
854 #endregion // ListView
857 public abstract void CalcItemSize (Graphics dc, MenuItem item, int y, int x, bool menuBar);
858 public abstract void CalcPopupMenuSize (Graphics dc, Menu menu);
859 public abstract int CalcMenuBarSize (Graphics dc, Menu menu, int width);
860 public abstract void DrawMenuBar (Graphics dc, Menu menu, Rectangle rect);
861 public abstract void DrawMenuItem (MenuItem item, DrawItemEventArgs e);
862 public abstract void DrawPopupMenu (Graphics dc, Menu menu, Rectangle cliparea, Rectangle rect);
865 #region MonthCalendar
866 public abstract void DrawMonthCalendar(Graphics dc, Rectangle clip_rectangle, MonthCalendar month_calendar);
867 #endregion // MonthCalendar
871 public abstract Size PanelDefaultSize{get;}
876 public abstract void DrawPictureBox (Graphics dc, Rectangle clip, PictureBox pb);
879 public abstract Size PictureBoxDefaultSize{get;}
880 #endregion // PictureBox
882 #region PrintPreviewControl
883 public abstract int PrintPreviewControlPadding{get;}
884 public abstract Size PrintPreviewControlGetPageSize (PrintPreviewControl preview);
885 public abstract void PrintPreviewControlPaint (PaintEventArgs pe, PrintPreviewControl preview, Size page_image_size);
886 #endregion // PrintPreviewControl
890 public abstract void DrawProgressBar (Graphics dc, Rectangle clip_rectangle, ProgressBar progress_bar);
893 public abstract Size ProgressBarDefaultSize{get;}
894 #endregion // ProgressBar
899 public abstract Size CalculateRadioButtonAutoSize (RadioButton rb);
900 public abstract void CalculateRadioButtonTextAndImageLayout (ButtonBase b, Point offset, out Rectangle glyphArea, out Rectangle textRectangle, out Rectangle imageRectangle);
901 public abstract void DrawRadioButton (Graphics g, RadioButton rb, Rectangle glyphArea, Rectangle textBounds, Rectangle imageBounds, Rectangle clipRectangle);
903 public abstract void DrawRadioButton (Graphics dc, Rectangle clip_rectangle, RadioButton radio_button);
906 public abstract Size RadioButtonDefaultSize{get;}
907 #endregion // RadioButton
911 //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);
912 public abstract void DrawScrollBar (Graphics dc, Rectangle clip_rectangle, ScrollBar bar);
915 public abstract int ScrollBarButtonSize {get;} // Size of the scroll button
917 public abstract bool ScrollBarHasHotElementStyles { get; }
919 public abstract bool ScrollBarHasPressedThumbStyle { get; }
921 public abstract bool ScrollBarHasHoverArrowButtonStyle { get; }
922 #endregion // ScrollBar
926 public abstract void DrawStatusBar (Graphics dc, Rectangle clip_rectangle, StatusBar sb);
929 public abstract int StatusBarSizeGripWidth {get;} // Size of Resize area
930 public abstract int StatusBarHorzGapWidth {get;} // Gap between panels
931 public abstract Size StatusBarDefaultSize{get;}
932 #endregion // StatusBar
935 public abstract Size TabControlDefaultItemSize {get; }
936 public abstract Point TabControlDefaultPadding {get; }
937 public abstract int TabControlMinimumTabWidth {get; }
938 public abstract Rectangle TabControlSelectedDelta { get; }
939 public abstract int TabControlSelectedSpacing { get; }
940 public abstract int TabPanelOffsetX { get; }
941 public abstract int TabPanelOffsetY { get; }
942 public abstract int TabControlColSpacing { get; }
943 public abstract Point TabControlImagePadding { get; }
944 public abstract int TabControlScrollerWidth { get; }
946 public abstract Rectangle TabControlGetLeftScrollRect (TabControl tab);
947 public abstract Rectangle TabControlGetRightScrollRect (TabControl tab);
948 public abstract Rectangle TabControlGetDisplayRectangle (TabControl tab);
949 public abstract Rectangle TabControlGetPanelRect (TabControl tab);
950 public abstract Size TabControlGetSpacing (TabControl tab);
951 public abstract void DrawTabControl (Graphics dc, Rectangle area, TabControl tab);
955 public abstract void TextBoxBaseFillBackground (TextBoxBase textBoxBase, Graphics g, Rectangle clippingArea);
956 public abstract bool TextBoxBaseHandleWmNcPaint (TextBoxBase textBoxBase, ref Message m);
957 public abstract bool TextBoxBaseShouldPaintBackground (TextBoxBase textBoxBase);
962 public abstract void DrawToolBar (Graphics dc, Rectangle clip_rectangle, ToolBar control);
965 public abstract int ToolBarGripWidth {get;} // Grip width for the ToolBar
966 public abstract int ToolBarImageGripWidth {get;} // Grip width for the Image on the ToolBarButton
967 public abstract int ToolBarSeparatorWidth {get;} // width of the separator
968 public abstract int ToolBarDropDownWidth { get; } // width of the dropdown arrow rect
969 public abstract int ToolBarDropDownArrowWidth { get; } // width for the dropdown arrow on the ToolBarButton
970 public abstract int ToolBarDropDownArrowHeight { get; } // height for the dropdown arrow on the ToolBarButton
971 public abstract Size ToolBarDefaultSize{get;}
973 public abstract bool ToolBarHasHotElementStyles (ToolBar toolBar);
974 public abstract bool ToolBarHasHotCheckedElementStyles { get; }
975 #endregion // ToolBar
978 public abstract void DrawToolTip(Graphics dc, Rectangle clip_rectangle, ToolTip.ToolTipWindow control);
979 public abstract Size ToolTipSize(ToolTip.ToolTipWindow tt, string text);
980 public abstract bool ToolTipTransparentBackground { get; }
981 #endregion // ToolTip
983 #region BalloonWindow
985 public abstract void ShowBalloonWindow (IntPtr handle, int timeout, string title, string text, ToolTipIcon icon);
986 public abstract void DrawBalloonWindow (Graphics dc, Rectangle clip, NotifyIcon.BalloonWindow control);
987 public abstract Rectangle BalloonWindowRect (NotifyIcon.BalloonWindow control);
989 #endregion // BalloonWindow
993 public abstract void DrawTrackBar (Graphics dc, Rectangle clip_rectangle, TrackBar tb);
996 public abstract Size TrackBarDefaultSize{get; } // Default size for the TrackBar control
998 public abstract int TrackBarValueFromMousePosition (int x, int y, TrackBar tb);
1000 public abstract bool TrackBarHasHotThumbStyle { get; }
1001 #endregion // TrackBar
1004 public abstract void UpDownBaseDrawButton (Graphics g, Rectangle bounds, bool top, VisualStyles.PushButtonState state);
1005 public abstract bool UpDownBaseHasHotButtonStyle { get; }
1009 public abstract Size VScrollBarDefaultSize{get;} // Default size of the scrollbar
1010 #endregion // VScrollBar
1013 public abstract Size TreeViewDefaultSize { get; }
1014 public abstract void TreeViewDrawNodePlusMinus (TreeView treeView, TreeNode node, Graphics dc, int x, int middle);
1017 #region Managed window
1018 public abstract void DrawManagedWindowDecorations (Graphics dc, Rectangle clip, InternalWindowManager wm);
1019 public abstract int ManagedWindowTitleBarHeight (InternalWindowManager wm);
1020 public abstract int ManagedWindowBorderWidth (InternalWindowManager wm);
1021 public abstract int ManagedWindowIconWidth (InternalWindowManager wm);
1022 public abstract Size ManagedWindowButtonSize (InternalWindowManager wm);
1023 public abstract void ManagedWindowSetButtonLocations (InternalWindowManager wm);
1024 public abstract Rectangle ManagedWindowGetTitleBarIconArea (InternalWindowManager wm);
1027 #region ControlPaint Methods
1028 public abstract void CPDrawBorder (Graphics graphics, Rectangle bounds, Color leftColor, int leftWidth,
1029 ButtonBorderStyle leftStyle, Color topColor, int topWidth, ButtonBorderStyle topStyle,
1030 Color rightColor, int rightWidth, ButtonBorderStyle rightStyle, Color bottomColor,
1031 int bottomWidth, ButtonBorderStyle bottomStyle);
1033 public abstract void CPDrawBorder (Graphics graphics, RectangleF bounds, Color leftColor, int leftWidth,
1034 ButtonBorderStyle leftStyle, Color topColor, int topWidth, ButtonBorderStyle topStyle,
1035 Color rightColor, int rightWidth, ButtonBorderStyle rightStyle, Color bottomColor,
1036 int bottomWidth, ButtonBorderStyle bottomStyle);
1038 public abstract void CPDrawBorder3D (Graphics graphics, Rectangle rectangle, Border3DStyle style, Border3DSide sides);
1039 public abstract void CPDrawBorder3D (Graphics graphics, Rectangle rectangle, Border3DStyle style, Border3DSide sides, Color control_color);
1040 public abstract void CPDrawButton (Graphics graphics, Rectangle rectangle, ButtonState state);
1041 public abstract void CPDrawCaptionButton (Graphics graphics, Rectangle rectangle, CaptionButton button, ButtonState state);
1042 public abstract void CPDrawCheckBox (Graphics graphics, Rectangle rectangle, ButtonState state);
1043 public abstract void CPDrawComboButton (Graphics graphics, Rectangle rectangle, ButtonState state);
1044 public abstract void CPDrawContainerGrabHandle (Graphics graphics, Rectangle bounds);
1045 public abstract void CPDrawFocusRectangle (Graphics graphics, Rectangle rectangle, Color foreColor, Color backColor);
1046 public abstract void CPDrawGrabHandle (Graphics graphics, Rectangle rectangle, bool primary, bool enabled);
1047 public abstract void CPDrawGrid (Graphics graphics, Rectangle area, Size pixelsBetweenDots, Color backColor);
1048 public abstract void CPDrawImageDisabled (Graphics graphics, Image image, int x, int y, Color background);
1049 public abstract void CPDrawLockedFrame (Graphics graphics, Rectangle rectangle, bool primary);
1050 public abstract void CPDrawMenuGlyph (Graphics graphics, Rectangle rectangle, MenuGlyph glyph, Color color, Color backColor);
1051 public abstract void CPDrawMixedCheckBox (Graphics graphics, Rectangle rectangle, ButtonState state);
1052 public abstract void CPDrawRadioButton (Graphics graphics, Rectangle rectangle, ButtonState state);
1053 public abstract void CPDrawReversibleFrame (Rectangle rectangle, Color backColor, FrameStyle style);
1054 public abstract void CPDrawReversibleLine (Point start, Point end, Color backColor);
1055 public abstract void CPDrawScrollButton (Graphics graphics, Rectangle rectangle, ScrollButton button, ButtonState state);
1056 public abstract void CPDrawSelectionFrame (Graphics graphics, bool active, Rectangle outsideRect, Rectangle insideRect,
1058 public abstract void CPDrawSizeGrip (Graphics graphics, Color backColor, Rectangle bounds);
1059 public abstract void CPDrawStringDisabled (Graphics graphics, string s, Font font, Color color, RectangleF layoutRectangle,
1060 StringFormat format);
1062 public abstract void CPDrawStringDisabled (IDeviceContext dc, string s, Font font, Color color, Rectangle layoutRectangle, TextFormatFlags format);
1063 public abstract void CPDrawVisualStyleBorder (Graphics graphics, Rectangle bounds);
1065 public abstract void CPDrawBorderStyle (Graphics dc, Rectangle area, BorderStyle border_style);
1066 #endregion // ControlPaint Methods