X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2FManaged.Windows.Forms%2FSystem.Windows.Forms%2FThemeWin32Classic.cs;h=b4da2611af4cfc42953cdd59f0ca3609e0307854;hb=477ebc4976f2641083c06ba1b3e24e5fa0805b98;hp=8b86d2670b85c152b45ce9bfbf9571c5205b6cb3;hpb=f11aa9faf50ec2997ea88350885a0d10ec0d815c;p=mono.git diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ThemeWin32Classic.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ThemeWin32Classic.cs index 8b86d2670b8..b4da2611af4 100644 --- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ThemeWin32Classic.cs +++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ThemeWin32Classic.cs @@ -17,13 +17,13 @@ // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // -// Copyright (c) 2004-2005 Novell, Inc. +// Copyright (c) 2004-2006 Novell, Inc. // // Authors: // Jordi Mas i Hernandez, jordi@ximian.com // Peter Bartok, pbartok@novell.com // John BouAntoun, jba-mono@optusnet.com.au -// Marek Safar, marek.safar@seznam.cz +// Marek Safar, marek.safar@seznam.cz // @@ -79,6 +79,7 @@ namespace System.Windows.Forms string_format_menu_menubar_text.LineAlignment = StringAlignment.Center; string_format_menu_menubar_text.Alignment = StringAlignment.Center; string_format_menu_menubar_text.HotkeyPrefix = HotkeyPrefix.Show; + always_draw_hotkeys = false; } public override void ResetDefaults() { @@ -94,13 +95,13 @@ namespace System.Windows.Forms protected SolidBrush GetControlBackBrush (Color c) { if (c == DefaultControlBackColor) return ResPool.GetSolidBrush (ColorControl); - return new SolidBrush (c); + return ResPool.GetSolidBrush (c); } protected SolidBrush GetControlForeBrush (Color c) { if (c == DefaultControlForeColor) return ResPool.GetSolidBrush (ColorControlText); - return new SolidBrush (c); + return ResPool.GetSolidBrush (c); } #endregion // Internal Methods @@ -149,7 +150,7 @@ namespace System.Windows.Forms // set up the button rectangle buttonRectangle = button.ClientRectangle; - if (button.has_focus) { + if (button.has_focus || button.paint_as_acceptbutton) { // shrink the rectangle for the normal button drawing inside the focus rectangle borderRectangle = Rectangle.Inflate(buttonRectangle, -1, -1); } else { @@ -160,7 +161,7 @@ namespace System.Windows.Forms DrawFlatStyleButton (dc, borderRectangle, button); } else { CPDrawButton(dc, borderRectangle, button.ButtonState); - if (button.has_focus) { + if (button.has_focus || button.paint_as_acceptbutton) { dc.DrawRectangle(ResPool.GetPen(button.ForeColor), borderRectangle); } } @@ -604,6 +605,11 @@ namespace System.Windows.Forms } /* Place the text; to be compatible with Windows place it after the checkbox has been drawn */ + + // Windows seems to not wrap text in certain situations, this matches as close as I could get it + if ((float)(checkbox.Font.Height * 1.5f) > text_rectangle.Height) { + text_format.FormatFlags |= StringFormatFlags.NoWrap; + } if (checkbox.Enabled) { sb = ResPool.GetSolidBrush(checkbox.ForeColor); dc.DrawString(checkbox.Text, checkbox.Font, sb, text_rectangle, text_format); @@ -665,7 +671,7 @@ namespace System.Windows.Forms ControlPaint.DrawBorder(graphics, checkbox_rectangle, checkbox.ForeColor, ButtonBorderStyle.Solid); } else { // draw sunken effect - CPDrawBorder3D (graphics, checkbox_rectangle, Border3DStyle.SunkenInner, Border3DSide.All, checkbox.BackColor); + CPDrawBorder3D (graphics, checkbox_rectangle, Border3DStyle.SunkenInner, Border3DSide.Left | Border3DSide.Right | Border3DSide.Top | Border3DSide.Bottom, checkbox.BackColor); } } else { graphics.FillRectangle(ResPool.GetSolidBrush (ControlPaint.LightLight (checkbox.BackColor)), fill_rectangle); @@ -744,23 +750,23 @@ namespace System.Windows.Forms /* Draw text*/ if ((e.State & DrawItemState.Selected) == DrawItemState.Selected) { - back_color = ThemeEngine.Current.ColorHighlight; - fore_color = ThemeEngine.Current.ColorHighlightText; + back_color = ColorHighlight; + fore_color = ColorHighlightText; } else { back_color = e.BackColor; fore_color = e.ForeColor; } - e.Graphics.FillRectangle (ThemeEngine.Current.ResPool.GetSolidBrush + e.Graphics.FillRectangle (ResPool.GetSolidBrush (back_color), item_rect); e.Graphics.DrawString (ctrl.GetItemText (ctrl.Items[e.Index]), e.Font, - ThemeEngine.Current.ResPool.GetSolidBrush (fore_color), + ResPool.GetSolidBrush (fore_color), item_rect, string_format); if ((e.State & DrawItemState.Focus) == DrawItemState.Focus) { - ThemeEngine.Current.CPDrawFocusRectangle (e.Graphics, item_rect, + CPDrawFocusRectangle (e.Graphics, item_rect, fore_color, back_color); } } @@ -823,7 +829,7 @@ namespace System.Windows.Forms DrawComboBoxEditDecorations (dc, ctrl, cl); } else { - dc.DrawRectangle (ThemeEngine.Current.ResPool.GetPen (ThemeEngine.Current.ColorWindowFrame), + dc.DrawRectangle (ResPool.GetPen (ColorWindowFrame), cl.X, cl.Y, cl.Width - 1, cl.Height - 1); } } @@ -836,24 +842,24 @@ namespace System.Windows.Forms string_format.FormatFlags = StringFormatFlags.LineLimit; if ((e.State & DrawItemState.Selected) == DrawItemState.Selected) { - back_color = ThemeEngine.Current.ColorHighlight; - fore_color = ThemeEngine.Current.ColorHighlightText; + back_color = ColorHighlight; + fore_color = ColorHighlightText; } else { back_color = e.BackColor; fore_color = e.ForeColor; } - e.Graphics.FillRectangle (ThemeEngine.Current.ResPool.GetSolidBrush (back_color), e.Bounds); + e.Graphics.FillRectangle (ResPool.GetSolidBrush (back_color), e.Bounds); if (e.Index != -1) { e.Graphics.DrawString (ctrl.GetItemText (ctrl.Items[e.Index]), e.Font, - ThemeEngine.Current.ResPool.GetSolidBrush (fore_color), + ResPool.GetSolidBrush (fore_color), text_draw, string_format); } if ((e.State & DrawItemState.Focus) == DrawItemState.Focus) { - ThemeEngine.Current.CPDrawFocusRectangle (e.Graphics, e.Bounds, fore_color, back_color); + CPDrawFocusRectangle (e.Graphics, e.Bounds, fore_color, back_color); } string_format.Dispose (); @@ -915,7 +921,7 @@ namespace System.Windows.Forms modified_area); g.DrawString (grid.CaptionText, grid.CaptionFont, - ThemeEngine.Current.ResPool.GetSolidBrush (grid.CaptionForeColor), + ResPool.GetSolidBrush (grid.CaptionForeColor), grid.grid_drawing.caption_area); } @@ -973,17 +979,12 @@ namespace System.Windows.Forms current_clip.Dispose (); g.ResetClip (); - - // This fills with background colour the unused part in the row headers - if (rect_columnhdr.X + rect_columnhdr.Height < grid.ClientRectangle.X + grid.ClientRectangle.Width) { - Rectangle not_usedarea = columnshdrs_area_complete; - not_usedarea.X = rect_columnhdr.X + rect_columnhdr.Width; - not_usedarea.Width = grid.ClientRectangle.X + grid.ClientRectangle.Width - rect_columnhdr.X - rect_columnhdr.Height; + Rectangle not_usedarea = columnshdrs_area_complete; + not_usedarea.X = rect_columnhdr.X + rect_columnhdr.Width; + not_usedarea.Width = grid.ClientRectangle.X + grid.ClientRectangle.Width - rect_columnhdr.X - rect_columnhdr.Height; + g.FillRectangle (ResPool.GetSolidBrush (grid.BackgroundColor), not_usedarea); - g.FillRectangle (ResPool.GetSolidBrush (grid.BackgroundColor), - not_usedarea); - } } public override void DataGridPaintRowsHeaders (Graphics g, Rectangle clip, DataGrid grid) @@ -991,9 +992,9 @@ namespace System.Windows.Forms Rectangle rowshdrs_area_complete = grid.grid_drawing.rowshdrs_area; rowshdrs_area_complete.Height = grid.grid_drawing.rowshdrs_maxheight; Rectangle rect_row = new Rectangle (); - rect_row.X = grid.grid_drawing.rowshdrs_area.X; - int last_y = 0; + rect_row.X = grid.grid_drawing.rowshdrs_area.X; int rowcnt = grid.FirstVisibleRow + grid.VisibleRowCount; + Rectangle not_usedarea = rowshdrs_area_complete; if (rowcnt < grid.RowsCount) { // Paint one row more for partial rows rowcnt++; @@ -1007,25 +1008,14 @@ namespace System.Windows.Forms rect_row.Y = grid.grid_drawing.rowshdrs_area.Y + ((row - grid.FirstVisibleRow) * grid.RowHeight); if (clip.IntersectsWith (rect_row)) { - DataGridPaintRowHeader (g, rect_row, row, grid); - last_y = rect_row.Y; + DataGridPaintRowHeader (g, rect_row, row, grid); } } g.ResetClip (); - - // This fills with background colour the unused part in the row headers - if (last_y > 0 && rect_row.Y + rect_row.Height < grid.grid_drawing.cells_area.Y + grid.grid_drawing.cells_area.Height) { - Rectangle not_usedarea = clip; - not_usedarea.Intersect (rowshdrs_area_complete); - - not_usedarea.Y = rect_row.Y + rect_row.Height; - not_usedarea.Height = rowshdrs_area_complete.Y + rowshdrs_area_complete.Height - rect_row.Height - rect_row.Y; - g.FillRectangle (ResPool.GetSolidBrush (grid.BackgroundColor), - not_usedarea); - } - - + not_usedarea.Height = grid.grid_drawing.rowshdrs_maxheight - grid.grid_drawing.rowshdrs_area.Height; + not_usedarea.Y = grid.grid_drawing.rowshdrs_area.Y + grid.grid_drawing.rowshdrs_area.Height; + g.FillRectangle (ResPool.GetSolidBrush (grid.BackgroundColor), not_usedarea); } public override void DataGridPaintRowHeaderArrow (Graphics g, Rectangle bounds, DataGrid grid) @@ -1050,33 +1040,33 @@ namespace System.Windows.Forms arrow[1] = P2; arrow[2] = P3; - g.FillPolygon (ThemeEngine.Current.ResPool.GetSolidBrush + g.FillPolygon (ResPool.GetSolidBrush (grid.CurrentTableStyle.CurrentHeaderForeColor), arrow, FillMode.Winding); } public override void DataGridPaintRowHeader (Graphics g, Rectangle bounds, int row, DataGrid grid) { // Background - g.FillRectangle (ThemeEngine.Current.ResPool.GetSolidBrush (grid.CurrentTableStyle.CurrentHeaderBackColor), + g.FillRectangle (ResPool.GetSolidBrush (grid.CurrentTableStyle.CurrentHeaderBackColor), bounds); if (grid.FlatMode == false) { // Paint Borders - g.DrawLine (ThemeEngine.Current.ResPool.GetPen (ThemeEngine.Current.ColorControlLight), + g.DrawLine (ResPool.GetPen (ColorControlLight), bounds.X, bounds.Y, bounds.X + bounds.Width, bounds.Y); - g.DrawLine (ThemeEngine.Current.ResPool.GetPen (ThemeEngine.Current.ColorControlLight), + g.DrawLine (ResPool.GetPen (ColorControlLight), bounds.X, bounds.Y + 1, bounds.X, bounds.Y + bounds.Height - 1); - g.DrawLine (ThemeEngine.Current.ResPool.GetPen (ThemeEngine.Current.ColorControlDark), + g.DrawLine (ResPool.GetPen (ColorControlDark), bounds.X + bounds.Width - 1, bounds.Y + 1 , bounds.X + bounds.Width - 1, bounds.Y + bounds.Height - 1); - g.DrawLine (ThemeEngine.Current.ResPool.GetPen (ThemeEngine.Current.ColorControlDark), + g.DrawLine (ResPool.GetPen (ColorControlDark), bounds.X, bounds.Y + bounds.Height -1, bounds.X + bounds.Width, bounds.Y + bounds.Height -1); } - if (grid.ShowEditRow && row == grid.RowsCount && !(row == grid.CurrentCell.RowNumber && grid.is_changing == true)) { + if (grid.ShowEditRow && grid.RowsCount > 0 && row == grid.RowsCount && !(row == grid.CurrentCell.RowNumber && grid.is_changing == true)) { g.DrawString ("*", grid.grid_drawing.font_newrow, ResPool.GetSolidBrush (grid.CurrentTableStyle.CurrentHeaderForeColor), bounds); @@ -1087,7 +1077,7 @@ namespace System.Windows.Forms if (grid.is_changing == true) { g.DrawString ("...", grid.Font, - ThemeEngine.Current.ResPool.GetSolidBrush (grid.CurrentTableStyle.CurrentHeaderForeColor), + ResPool.GetSolidBrush (grid.CurrentTableStyle.CurrentHeaderForeColor), bounds); } else { @@ -1107,7 +1097,7 @@ namespace System.Windows.Forms int rowcnt = grid.FirstVisibleRow + grid.VisibleRowCount; - if (grid.ShowEditRow) { + if (grid.ShowEditRow && grid.RowsCount > 0) { rowcnt--; } @@ -1124,20 +1114,19 @@ namespace System.Windows.Forms } } - if (grid.ShowEditRow && grid.FirstVisibleRow + grid.VisibleRowCount == grid.RowsCount + 1) { + if (grid.ShowEditRow && grid.RowsCount > 0 && grid.FirstVisibleRow + grid.VisibleRowCount == grid.RowsCount + 1) { rect_row.Y = cells.Y + ((rowcnt - grid.FirstVisibleRow) * grid.RowHeight); if (clip.IntersectsWith (rect_row)) { DataGridPaintRow (g, rowcnt, rect_row, true, grid); } - } - + } + not_usedarea.Height = cells.Y + cells.Height - rect_row.Y - rect_row.Height; not_usedarea.Y = rect_row.Y + rect_row.Height; not_usedarea.Width = rect_row.Width = cells.Width; - not_usedarea.X = cells.X; - - g.FillRectangle (ThemeEngine.Current.ResPool.GetSolidBrush (grid.BackgroundColor), - not_usedarea); + not_usedarea.X = cells.X; + + g.FillRectangle (ResPool.GetSolidBrush (grid.BackgroundColor), not_usedarea); } public override void DataGridPaintRow (Graphics g, int row, Rectangle row_rect, bool is_newrow, DataGrid grid) @@ -1179,13 +1168,13 @@ namespace System.Windows.Forms if (is_newrow) { grid.CurrentTableStyle.GridColumnStyles[column].PaintNewRow (g, rect_cell, - ThemeEngine.Current.ResPool.GetSolidBrush (backcolor), - ThemeEngine.Current.ResPool.GetSolidBrush (forecolor)); + ResPool.GetSolidBrush (backcolor), + ResPool.GetSolidBrush (forecolor)); } else { grid.CurrentTableStyle.GridColumnStyles[column].Paint (g, rect_cell, grid.ListManager, row, - ThemeEngine.Current.ResPool.GetSolidBrush (backcolor), - ThemeEngine.Current.ResPool.GetSolidBrush (forecolor), + ResPool.GetSolidBrush (backcolor), + ResPool.GetSolidBrush (forecolor), grid.RightToLeft == RightToLeft.Yes); } @@ -1199,7 +1188,7 @@ namespace System.Windows.Forms not_usedarea.Width = row_rect.X + row_rect.Width - rect_cell.X - rect_cell.Width; not_usedarea.Y = row_rect.Y; not_usedarea.Height = row_rect.Height; - g.FillRectangle (ThemeEngine.Current.ResPool.GetSolidBrush (grid.BackgroundColor), + g.FillRectangle (ResPool.GetSolidBrush (grid.BackgroundColor), not_usedarea); } } @@ -1213,7 +1202,7 @@ namespace System.Windows.Forms if (!dtp.ShowUpDown && clip_rectangle.IntersectsWith (dtp.ClientRectangle)) { // draw the outer border Rectangle button_bounds = dtp.ClientRectangle; - this.CPDrawBorder3D (dc, button_bounds, Border3DStyle.Sunken, Border3DSide.All, dtp.BackColor); + this.CPDrawBorder3D (dc, button_bounds, Border3DStyle.Sunken, Border3DSide.Left | Border3DSide.Right | Border3DSide.Top | Border3DSide.Bottom, dtp.BackColor); // deflate by the border width if (clip_rectangle.IntersectsWith (dtp.drop_down_arrow_rect)) { @@ -1229,11 +1218,11 @@ namespace System.Windows.Forms // render the date part if (clip_rectangle.IntersectsWith (dtp.date_area_rect)) { // fill the background - dc.FillRectangle (ResPool.GetSolidBrush (ThemeEngine.Current.ColorWindow), dtp.date_area_rect); + dc.FillRectangle (ResPool.GetSolidBrush (ColorWindow), dtp.date_area_rect); // fill the currently highlighted area if (dtp.hilight_date_area != Rectangle.Empty) { - dc.FillRectangle (ResPool.GetSolidBrush (ThemeEngine.Current.ColorHighlight), dtp.hilight_date_area); + dc.FillRectangle (ResPool.GetSolidBrush (ColorHighlight), dtp.hilight_date_area); } // draw the text part @@ -1364,7 +1353,7 @@ namespace System.Windows.Forms else dc.DrawString (label.pieces[i].text, label.GetPieceFont (label.pieces[i]), ResPool.GetSolidBrush (color), label.pieces[i].rect.X, label.pieces[i].rect.Y); - + if (label.pieces[i].focused) { CPDrawFocusRectangle (dc, label.pieces[i].rect, label.ForeColor, label.BackColor); } @@ -1398,23 +1387,23 @@ namespace System.Windows.Forms StringFormat string_format = ctrl.GetFormatString (); if ((e.State & DrawItemState.Selected) == DrawItemState.Selected) { - back_color = ThemeEngine.Current.ColorHighlight; - fore_color = ThemeEngine.Current.ColorHighlightText; + back_color = ColorHighlight; + fore_color = ColorHighlightText; } else { back_color = e.BackColor; fore_color = e.ForeColor; } - e.Graphics.FillRectangle (ThemeEngine.Current.ResPool.GetSolidBrush + e.Graphics.FillRectangle (ResPool.GetSolidBrush (back_color), e.Bounds); e.Graphics.DrawString (ctrl.GetItemText (ctrl.Items[e.Index]), e.Font, - ThemeEngine.Current.ResPool.GetSolidBrush (fore_color), + ResPool.GetSolidBrush (fore_color), e.Bounds.X, e.Bounds.Y, string_format); if ((e.State & DrawItemState.Focus) == DrawItemState.Focus) { - ThemeEngine.Current.CPDrawFocusRectangle (e.Graphics, e.Bounds, + CPDrawFocusRectangle (e.Graphics, e.Bounds, fore_color, back_color); } } @@ -1423,31 +1412,16 @@ namespace System.Windows.Forms #region ListView // Drawing - public override void DrawListView (Graphics dc, Rectangle clip, ListView control) + public override void DrawListViewItems (Graphics dc, Rectangle clip, ListView control) { - bool details = (control.View == View.Details); - Rectangle client_area_nohdrs; - DrawListViewHeader (dc, clip, control); - - if (details && control.Columns.Count > 0) { - client_area_nohdrs = control.client_area; - client_area_nohdrs.Y += control.Columns[0].Ht; - client_area_nohdrs.Height -= control.Columns[0].Ht; - dc.SetClip (client_area_nohdrs); - } else - dc.SetClip (control.client_area); - + bool details = control.View == View.Details; + dc.FillRectangle (ResPool.GetSolidBrush (control.BackColor), clip); - - // In case of details view draw the items only if - // columns are non-zero - if (!details || control.Columns.Count > 0) { - int first = control.FirstVisibleIndex; - - for (int i = first; i <= control.LastItemIndex; i ++) { - if (clip.IntersectsWith (control.Items[i].GetBounds (ItemBoundsPortion.Entire))) - DrawListViewItem (dc, control, control.Items[i]); - } + int first = control.FirstVisibleIndex; + + for (int i = first; i <= control.LastVisibleIndex; i ++) { + if (clip.IntersectsWith (control.Items[i].GetBounds (ItemBoundsPortion.Entire))) + DrawListViewItem (dc, control, control.Items [i]); } // draw the gridlines @@ -1493,7 +1467,7 @@ namespace System.Windows.Forms } - private void DrawListViewHeader (Graphics dc, Rectangle clip, ListView control) + public override void DrawListViewHeader (Graphics dc, Rectangle clip, ListView control) { bool details = (control.View == View.Details); @@ -1502,48 +1476,61 @@ namespace System.Windows.Forms dc.FillRectangle (ResPool.GetSolidBrush (control.BackColor), 0, 0, control.TotalWidth, control.Font.Height + 5); if (control.Columns.Count > 0) { - if (control.HeaderStyle == ColumnHeaderStyle.Clickable) { - foreach (ColumnHeader col in control.Columns) { - Rectangle rect = col.Rect; - rect.X -= control.h_marker; - this.CPDrawButton (dc, rect, - (col.Pressed ? - ButtonState.Pushed : - ButtonState.Normal)); - dc.DrawString (col.Text, ThemeEngine.Current.DefaultFont, - ResPool.GetSolidBrush - (this.ColorControlText), - rect.X + 3, - rect.Y + rect.Height/2 + 1, - col.Format); - } - } - // Non-clickable columns - else { - foreach (ColumnHeader col in control.Columns) { - Rectangle rect = col.Rect; - rect.X -= control.h_marker; - this.CPDrawButton (dc, rect, ButtonState.Flat); - dc.DrawString (col.Text, ThemeEngine.Current.DefaultFont, - ResPool.GetSolidBrush - (this.ColorControlText), - rect.X + 3, - rect.Y + rect.Height/2 + 1, - col.Format); - } + foreach (ColumnHeader col in control.Columns) { + Rectangle rect = col.Rect; + rect.X -= control.h_marker; + ButtonState state; + if (control.HeaderStyle == ColumnHeaderStyle.Clickable) + state = col.Pressed ? ButtonState.Pushed : ButtonState.Normal; + else + state = ButtonState.Flat; + this.CPDrawButton (dc, rect, state); + rect.X += 3; + rect.Width -= 8; + if (rect.Width <= 0) + continue; + dc.DrawString (col.Text, DefaultFont, + ResPool.GetSolidBrush (ColorControlText), + rect, col.Format); } } } } + public override void DrawListViewHeaderDragDetails (Graphics dc, ListView view, ColumnHeader col, int target_x) + { + Rectangle rect = col.Rect; + rect.X -= view.h_marker; + Color color = Color.FromArgb (0x7f, ColorControlDark.R, ColorControlDark.G, ColorControlDark.B); + dc.FillRectangle (ResPool.GetSolidBrush (color), rect); + rect.X += 3; + rect.Width -= 8; + if (rect.Width <= 0) + return; + color = Color.FromArgb (0x7f, ColorControlText.R, ColorControlText.G, ColorControlText.B); + dc.DrawString (col.Text, DefaultFont, ResPool.GetSolidBrush (color), rect, col.Format); + Pen pen = new Pen (ColorHighlight, 2); + dc.DrawLine (pen, target_x, 0, target_x, col.Rect.Height); + } + // draws the ListViewItem of the given index - private void DrawListViewItem (Graphics dc, ListView control, ListViewItem item) + protected virtual void DrawListViewItem (Graphics dc, ListView control, ListViewItem item) { + int col_offset; + if (control.View == View.Details && control.Columns.Count > 0) + col_offset = control.Columns [0].Rect.X; + else + col_offset = 0; + Rectangle rect_checkrect = item.CheckRectReal; + rect_checkrect.X += col_offset; Rectangle rect_iconrect = item.GetBounds (ItemBoundsPortion.Icon); + rect_iconrect.X += col_offset; Rectangle full_rect = item.GetBounds (ItemBoundsPortion.Entire); + full_rect.X += col_offset; Rectangle text_rect = item.GetBounds (ItemBoundsPortion.Label); - + text_rect.X += col_offset; + if (control.CheckBoxes) { if (control.StateImageList == null) { // Make sure we've got at least a line width of 1 @@ -1609,7 +1596,10 @@ namespace System.Windows.Forms // draw the item text // format for the item text StringFormat format = new StringFormat (); - format.LineAlignment = StringAlignment.Center; + if (control.View == View.SmallIcon) + format.LineAlignment = StringAlignment.Near; + else + format.LineAlignment = StringAlignment.Center; if (control.View == View.LargeIcon) format.Alignment = StringAlignment.Center; else @@ -1622,7 +1612,7 @@ namespace System.Windows.Forms if (control.View == View.Details) { if (control.FullRowSelect) { // fill the entire rect excluding the checkbox - full_rect.Location = item.LabelRect.Location; + full_rect.Location = item.GetBounds (ItemBoundsPortion.Label).Location; dc.FillRectangle (this.ResPool.GetSolidBrush (this.ColorHighlight), full_rect); } @@ -1669,14 +1659,14 @@ namespace System.Windows.Forms // set the format for subitems format.FormatFlags = StringFormatFlags.NoWrap; - format.Alignment = StringAlignment.Near; // 0th subitem is the item already drawn for (int index = 1; index < count; index++) { subItem = subItems [index]; col = control.Columns [index]; - sub_item_rect.X = col.Rect.Left; - sub_item_rect.Width = col.Wd; + format.Alignment = col.Format.Alignment; + sub_item_rect.X = col.Rect.Left + 3; + sub_item_rect.Width = col.Wd - 6; sub_item_rect.X -= control.h_marker; SolidBrush sub_item_back_br = null; @@ -1765,8 +1755,11 @@ namespace System.Windows.Forms item.X = x; item.Y = y; - if (item.Visible == false) + if (item.Visible == false) { + item.Width = 0; + item.Height = 0; return; + } if (item.Separator == true) { item.Height = SEPARATOR_HEIGHT / 2; @@ -1782,25 +1775,25 @@ namespace System.Windows.Forms return; } else { SizeF size; - size = dc.MeasureString (item.Text, ThemeEngine.Current.MenuFont); + size = dc.MeasureString (item.Text, MenuFont); item.Width = (int) size.Width; item.Height = (int) size.Height; if (!menuBar) { if (item.Shortcut != Shortcut.None && item.ShowShortcut) { - item.XTab = ThemeEngine.Current.MenuCheckSize.Width + MENU_TAB_SPACE + (int) size.Width; - size = dc.MeasureString (" " + item.GetShortCutText (), ThemeEngine.Current.MenuFont); + item.XTab = MenuCheckSize.Width + MENU_TAB_SPACE + (int) size.Width; + size = dc.MeasureString (" " + item.GetShortCutText (), MenuFont); item.Width += MENU_TAB_SPACE + (int) size.Width; } - item.Width += 4 + (ThemeEngine.Current.MenuCheckSize.Width * 2); + item.Width += 4 + (MenuCheckSize.Width * 2); } else { item.Width += MENU_BAR_ITEMS_SPACE; x += item.Width; } - if (item.Height < ThemeEngine.Current.MenuHeight) - item.Height = ThemeEngine.Current.MenuHeight; + if (item.Height < MenuHeight) + item.Height = MenuHeight; } } @@ -1881,10 +1874,15 @@ namespace System.Windows.Forms public override void DrawMenuBar (Graphics dc, Menu menu, Rectangle rect) { if (menu.Height == 0) - ThemeEngine.Current.CalcMenuBarSize (dc, menu, rect.Width); + CalcMenuBarSize (dc, menu, rect.Width); + bool keynav = (menu as MainMenu).tracker.Navigating; + HotkeyPrefix hp = always_draw_hotkeys || keynav ? HotkeyPrefix.Show : HotkeyPrefix.Hide; + string_format_menu_menubar_text.HotkeyPrefix = hp; + string_format_menu_text.HotkeyPrefix = hp; + rect.Height = menu.Height; - dc.FillRectangle (ThemeEngine.Current.ResPool.GetSolidBrush (menu.Wnd.BackColor), rect); + dc.FillRectangle (ResPool.GetSolidBrush(ColorMenu), rect); for (int i = 0; i < menu.MenuItems.Count; i++) { MenuItem item = menu.MenuItems [i]; @@ -1892,7 +1890,7 @@ namespace System.Windows.Forms item_rect.X += rect.X; item_rect.Y += rect.Y; item.MenuHeight = menu.Height; - item.PerformDrawItem (new DrawItemEventArgs (dc, ThemeEngine.Current.MenuFont, item_rect, i, item.Status)); + item.PerformDrawItem (new DrawItemEventArgs (dc, MenuFont, item_rect, i, item.Status)); } } @@ -1910,17 +1908,17 @@ namespace System.Windows.Forms string_format = string_format_menu_text; if (item.Separator == true) { - e.Graphics.DrawLine (ThemeEngine.Current.ResPool.GetPen (ThemeEngine.Current.ColorControlDark), + e.Graphics.DrawLine (ResPool.GetPen (ColorControlDark), e.Bounds.X, e.Bounds.Y, e.Bounds.X + e.Bounds.Width, e.Bounds.Y); - e.Graphics.DrawLine (ThemeEngine.Current.ResPool.GetPen (ThemeEngine.Current.ColorControlLight), + e.Graphics.DrawLine (ResPool.GetPen (ColorControlLight), e.Bounds.X, e.Bounds.Y + 1, e.Bounds.X + e.Bounds.Width, e.Bounds.Y + 1); return; } if (!item.MenuBar) - rect_text.X += ThemeEngine.Current.MenuCheckSize.Width; + rect_text.X += MenuCheckSize.Width; if (item.BarBreak) { /* Draw vertical break bar*/ Rectangle rect = e.Bounds; @@ -1928,10 +1926,10 @@ namespace System.Windows.Forms rect.Width = 3; rect.Height = item.MenuHeight - 6; - e.Graphics.DrawLine (ThemeEngine.Current.ResPool.GetPen (ThemeEngine.Current.ColorControlDark), + e.Graphics.DrawLine (ResPool.GetPen (ColorControlDark), rect.X, rect.Y , rect.X, rect.Y + rect.Height); - e.Graphics.DrawLine (ThemeEngine.Current.ResPool.GetPen (ThemeEngine.Current.ColorControlLight), + e.Graphics.DrawLine (ResPool.GetPen (ColorControlLight), rect.X + 1, rect.Y , rect.X +1, rect.Y + rect.Height); } @@ -1939,22 +1937,22 @@ namespace System.Windows.Forms Color color_back; if ((e.State & DrawItemState.Selected) == DrawItemState.Selected) { - color_text = ThemeEngine.Current.ColorHighlightText; - color_back = ThemeEngine.Current.ColorHighlight; + color_text = ColorHighlightText; + color_back = ColorHighlight; } else { - color_text = ThemeEngine.Current.ColorMenuText; - color_back = ThemeEngine.Current.ColorMenu; + color_text = ColorMenuText; + color_back = ColorMenu; } /* Draw background */ Rectangle rect_back = e.Bounds; rect_back.X++; rect_back.Width -=2; - e.Graphics.FillRectangle (ThemeEngine.Current.ResPool.GetSolidBrush (color_back), rect_back); + e.Graphics.FillRectangle (ResPool.GetSolidBrush (color_back), rect_back); if (item.Enabled) { e.Graphics.DrawString (item.Text, e.Font, - ThemeEngine.Current.ResPool.GetSolidBrush (color_text), + ResPool.GetSolidBrush (color_text), rect_text, string_format); if (!item.MenuBar && item.Shortcut != Shortcut.None && item.ShowShortcut) { @@ -1963,7 +1961,7 @@ namespace System.Windows.Forms rect.X = item.XTab; rect.Width -= item.XTab; - e.Graphics.DrawString (str, e.Font, ThemeEngine.Current.ResPool.GetSolidBrush (color_text), + e.Graphics.DrawString (str, e.Font, ResPool.GetSolidBrush (color_text), rect, string_format_menu_shortcut); } } else { @@ -1972,10 +1970,10 @@ namespace System.Windows.Forms } /* Draw arrow */ - if (item.MenuBar == false && item.IsPopup) { + if (item.MenuBar == false && item.IsPopup || item.MdiList) { - int cx = ThemeEngine.Current.MenuCheckSize.Width; - int cy = ThemeEngine.Current.MenuCheckSize.Height; + int cx = MenuCheckSize.Width; + int cy = MenuCheckSize.Height; Bitmap bmp = new Bitmap (cx, cy); Graphics gr = Graphics.FromImage (bmp); Rectangle rect_arrow = new Rectangle (0, 0, cx, cy); @@ -1998,8 +1996,8 @@ namespace System.Windows.Forms if (item.MenuBar == false && item.Checked) { Rectangle area = e.Bounds; - int cx = ThemeEngine.Current.MenuCheckSize.Width; - int cy = ThemeEngine.Current.MenuCheckSize.Height; + int cx = MenuCheckSize.Width; + int cy = MenuCheckSize.Height; Bitmap bmp = new Bitmap (cx, cy); Graphics gr = Graphics.FromImage (bmp); Rectangle rect_arrow = new Rectangle (0, 0, cx, cy); @@ -2020,33 +2018,33 @@ namespace System.Windows.Forms public override void DrawPopupMenu (Graphics dc, Menu menu, Rectangle cliparea, Rectangle rect) { - dc.FillRectangle (ThemeEngine.Current.ResPool.GetSolidBrush - (ThemeEngine.Current.ColorMenu), cliparea); + dc.FillRectangle (ResPool.GetSolidBrush + (ColorMenu), cliparea); /* Draw menu borders */ - dc.DrawLine (ThemeEngine.Current.ResPool.GetPen (ThemeEngine.Current.ColorHighlightText), + dc.DrawLine (ResPool.GetPen (ColorHighlightText), rect.X, rect.Y, rect.X + rect.Width, rect.Y); - dc.DrawLine (ThemeEngine.Current.ResPool.GetPen (ThemeEngine.Current.ColorHighlightText), + dc.DrawLine (ResPool.GetPen (ColorHighlightText), rect.X, rect.Y, rect.X, rect.Y + rect.Height); - dc.DrawLine (ThemeEngine.Current.ResPool.GetPen (ThemeEngine.Current.ColorControlDark), + dc.DrawLine (ResPool.GetPen (ColorControlDark), rect.X + rect.Width - 1 , rect.Y , rect.X + rect.Width - 1, rect.Y + rect.Height); - dc.DrawLine (ThemeEngine.Current.ResPool.GetPen (ThemeEngine.Current.ColorControlDarkDark), + dc.DrawLine (ResPool.GetPen (ColorControlDarkDark), rect.X + rect.Width, rect.Y , rect.X + rect.Width, rect.Y + rect.Height); - dc.DrawLine (ThemeEngine.Current.ResPool.GetPen (ThemeEngine.Current.ColorControlDark), + dc.DrawLine (ResPool.GetPen (ColorControlDark), rect.X , rect.Y + rect.Height - 1 , rect.X + rect.Width - 1, rect.Y + rect.Height -1); - dc.DrawLine (ThemeEngine.Current.ResPool.GetPen (ThemeEngine.Current.ColorControlDarkDark), + dc.DrawLine (ResPool.GetPen (ColorControlDarkDark), rect.X , rect.Y + rect.Height, rect.X + rect.Width - 1, rect.Y + rect.Height); for (int i = 0; i < menu.MenuItems.Count; i++) if (cliparea.IntersectsWith (menu.MenuItems [i].bounds)) { MenuItem item = menu.MenuItems [i]; item.MenuHeight = menu.Height; - item.PerformDrawItem (new DrawItemEventArgs (dc, ThemeEngine.Current.MenuFont, + item.PerformDrawItem (new DrawItemEventArgs (dc, MenuFont, item.bounds, i, item.Status)); } } @@ -2424,7 +2422,7 @@ namespace System.Windows.Forms dc.DrawRectangle (SystemPens.ControlDark, button_rect); } else { - CPDrawBorder3D (dc, button_rect, Border3DStyle.Raised, Border3DSide.All); + CPDrawBorder3D (dc, button_rect, Border3DStyle.Raised, Border3DSide.Left | Border3DSide.Right | Border3DSide.Top | Border3DSide.Bottom); } // draw the arrow dc.FillPolygon (SystemBrushes.ControlText, arrow_path); @@ -2609,7 +2607,7 @@ namespace System.Windows.Forms increment = block_width + space_betweenblocks; /* Draw border */ - CPDrawBorder3D (dc, ctrl.ClientRectangle, Border3DStyle.SunkenInner, Border3DSide.All & ~Border3DSide.Middle, ColorControl); + CPDrawBorder3D (dc, ctrl.ClientRectangle, Border3DStyle.SunkenInner, Border3DSide.Left | Border3DSide.Right | Border3DSide.Top | Border3DSide.Bottom & ~Border3DSide.Middle, ColorControl); /* Draw Blocks */ block_rect = new Rectangle (client_area.X, client_area.Y, block_width, client_area.Height); @@ -2823,8 +2821,6 @@ namespace System.Windows.Forms protected virtual void RadioButton_DrawText(RadioButton radio_button, Rectangle text_rectangle, Graphics dc, StringFormat text_format) { - SolidBrush sb; - // offset the text if it's pressed and a button if (radio_button.Appearance == Appearance.Button) { if (radio_button.Checked || (radio_button.Capture && radio_button.FlatStyle != FlatStyle.Flat)) { @@ -2836,11 +2832,14 @@ namespace System.Windows.Forms } /* Place the text; to be compatible with Windows place it after the radiobutton has been drawn */ - dc.DrawString (radio_button.Text, radio_button.Font, ThemeEngine.Current.ResPool.GetSolidBrush (radio_button.ForeColor), text_rectangle, text_format); - + + // Windows seems to not wrap text in certain situations, this matches as close as I could get it + if ((float)(radio_button.Font.Height * 1.5f) > text_rectangle.Height) { + text_format.FormatFlags |= StringFormatFlags.NoWrap; + } + if (radio_button.Enabled) { - sb = ResPool.GetSolidBrush(radio_button.ForeColor); - dc.DrawString(radio_button.Text, radio_button.Font, sb, text_rectangle, text_format); + dc.DrawString (radio_button.Text, radio_button.Font, ResPool.GetSolidBrush (radio_button.ForeColor), text_rectangle, text_format); } else if (radio_button.FlatStyle == FlatStyle.Flat) { dc.DrawString(radio_button.Text, radio_button.Font, ResPool.GetSolidBrush (ControlPaint.DarkDark (this.ColorControl)), text_rectangle, text_format); } else { @@ -2860,7 +2859,7 @@ namespace System.Windows.Forms } // renders a radio button with the Flat and Popup FlatStyle - private void DrawFlatStyleRadioButton (Graphics graphics, Rectangle rectangle, RadioButton radio_button) + protected void DrawFlatStyleRadioButton (Graphics graphics, Rectangle rectangle, RadioButton radio_button) { int lineWidth; @@ -3022,7 +3021,7 @@ namespace System.Windows.Forms if ( intersect != Rectangle.Empty ) { - Brush h = ResPool.GetHatchBrush( HatchStyle.Percent50, ColorScrollBar, ColorWindow); + Brush h = ResPool.GetHatchBrush( HatchStyle.Percent50, ColorScrollBar, Color.White); dc.FillRectangle( h, intersect ); } } @@ -3034,7 +3033,7 @@ namespace System.Windows.Forms Rectangle intersect = Rectangle.Intersect( clip, r ); if ( intersect != Rectangle.Empty ) - dc.FillRectangle( ResPool.GetHatchBrush( HatchStyle.Percent50, ColorScrollBar, ColorWindow ), intersect ); + dc.FillRectangle( ResPool.GetHatchBrush( HatchStyle.Percent50, ColorScrollBar, Color.White ), intersect ); r.X = 0; r.Y = thumb_pos.Y + thumb_pos.Height; @@ -3062,7 +3061,7 @@ namespace System.Windows.Forms intersect = Rectangle.Intersect( clip, r ); if ( intersect != Rectangle.Empty ) - dc.FillRectangle( ResPool.GetHatchBrush( HatchStyle.Percent50, ColorScrollBar, ColorWindow), intersect ); + dc.FillRectangle( ResPool.GetHatchBrush( HatchStyle.Percent50, ColorScrollBar, Color.White), intersect ); } protected virtual void ScrollBar_Horizontal_Draw_ThumbMoving_None( int scrollbutton_width, ScrollBar bar, Rectangle clip, Graphics dc ) @@ -3072,7 +3071,7 @@ namespace System.Windows.Forms Rectangle intersect = Rectangle.Intersect( clip, r ); if ( intersect != Rectangle.Empty ) - dc.FillRectangle( ResPool.GetHatchBrush( HatchStyle.Percent50, ColorScrollBar, ColorWindow), intersect ); + dc.FillRectangle( ResPool.GetHatchBrush( HatchStyle.Percent50, ColorScrollBar, Color.White), intersect ); } protected virtual void ScrollBar_Horizontal_Draw_ThumbMoving_Forward( int scrollbutton_width, Rectangle thumb_pos, ScrollBar bar, Rectangle clip, Graphics dc ) @@ -3082,7 +3081,7 @@ namespace System.Windows.Forms Rectangle intersect = Rectangle.Intersect( clip, r ); if ( intersect != Rectangle.Empty ) - dc.FillRectangle( ResPool.GetHatchBrush( HatchStyle.Percent50, ColorScrollBar, ColorWindow ), intersect ); + dc.FillRectangle( ResPool.GetHatchBrush( HatchStyle.Percent50, ColorScrollBar, Color.White), intersect ); r.X = thumb_pos.X + thumb_pos.Width; r.Y = 0; @@ -3110,7 +3109,7 @@ namespace System.Windows.Forms intersect = Rectangle.Intersect( clip, r ); if ( intersect != Rectangle.Empty ) - dc.FillRectangle( ResPool.GetHatchBrush( HatchStyle.Percent50, ColorScrollBar, ColorWindow), intersect ); + dc.FillRectangle( ResPool.GetHatchBrush( HatchStyle.Percent50, ColorScrollBar, Color.White), intersect ); } public override int ScrollBarButtonSize { @@ -3172,7 +3171,7 @@ namespace System.Windows.Forms Border3DStyle border_style = Border3DStyle.SunkenInner; if (panel.BorderStyle == StatusBarPanelBorderStyle.Raised) border_style = Border3DStyle.RaisedOuter; - CPDrawBorder3D(dc, area, border_style, Border3DSide.All, ColorControl); + CPDrawBorder3D(dc, area, border_style, Border3DSide.Left | Border3DSide.Right | Border3DSide.Top | Border3DSide.Bottom, panel.Parent.BackColor); } if (panel.Style == StatusBarPanelStyle.OwnerDraw) { @@ -3397,9 +3396,9 @@ namespace System.Windows.Forms } if (is_selected) { - CPDrawBorder3D (dc, bounds, Border3DStyle.Sunken, Border3DSide.All); + CPDrawBorder3D (dc, bounds, Border3DStyle.Sunken, Border3DSide.Left | Border3DSide.Right | Border3DSide.Top | Border3DSide.Bottom); } else if (tab.Appearance != TabAppearance.FlatButtons) { - CPDrawBorder3D (dc, bounds, Border3DStyle.Raised, Border3DSide.All); + CPDrawBorder3D (dc, bounds, Border3DStyle.Raised, Border3DSide.Left | Border3DSide.Right | Border3DSide.Top | Border3DSide.Bottom); } interior = new Rectangle (bounds.Left + 2, bounds.Top + 2, bounds.Width - 4, bounds.Height - 4); @@ -3501,33 +3500,33 @@ namespace System.Windows.Forms break; } + } - if (tab.DrawMode == TabDrawMode.Normal && page.Text != null) { - if (tab.Alignment == TabAlignment.Left) { - int wo = interior.Width / 2; - int ho = interior.Height / 2; - dc.TranslateTransform (interior.X + wo, interior.Y + ho); - dc.RotateTransform (180); - dc.DrawString (page.Text, page.Font, ThemeEngine.Current.ResPool.GetSolidBrush (SystemColors.ControlText), 0, 0, string_format); - dc.ResetTransform (); - } else { - dc.DrawString (page.Text, page.Font, - ThemeEngine.Current.ResPool.GetSolidBrush (SystemColors.ControlText), - interior, string_format); - } - } else if (page.Text != null) { - DrawItemState state = DrawItemState.None; - if (page == tab.SelectedTab) - state |= DrawItemState.Selected; - DrawItemEventArgs e = new DrawItemEventArgs (dc, - tab.Font, bounds, tab.IndexForTabPage (page), - state, page.ForeColor, page.BackColor); - tab.OnDrawItemInternal (e); - return res; - } + if (tab.DrawMode == TabDrawMode.Normal && page.Text != null) { + if (tab.Alignment == TabAlignment.Left) { + int wo = interior.Width / 2; + int ho = interior.Height / 2; + dc.TranslateTransform (interior.X + wo, interior.Y + ho); + dc.RotateTransform (180); + dc.DrawString (page.Text, page.Font, ResPool.GetSolidBrush (SystemColors.ControlText), 0, 0, string_format); + dc.ResetTransform (); + } else { + dc.DrawString (page.Text, page.Font, + ResPool.GetSolidBrush (SystemColors.ControlText), + interior, string_format); + } + } else if (page.Text != null) { + DrawItemState state = DrawItemState.None; + if (page == tab.SelectedTab) + state |= DrawItemState.Selected; + DrawItemEventArgs e = new DrawItemEventArgs (dc, + tab.Font, bounds, tab.IndexForTabPage (page), + state, page.ForeColor, page.BackColor); + tab.OnDrawItemInternal (e); + return res; } - if (page.Focused) { + if (page.parent.Focused && is_selected) { CPDrawFocusRectangle (dc, interior, tab.ForeColor, tab.BackColor); } @@ -3607,7 +3606,7 @@ namespace System.Windows.Forms /* Draw the button frame, only if it is not a separator */ if (flat) { if (button.Pushed || button.Pressed) { - CPDrawBorder3D (dc, buttonArea, Border3DStyle.SunkenOuter, Border3DSide.All, ColorControl); + CPDrawBorder3D (dc, buttonArea, Border3DStyle.SunkenOuter, Border3DSide.Left | Border3DSide.Right | Border3DSide.Top | Border3DSide.Bottom, ColorControl); } else if (button.Hilight) { dc.DrawRectangle (ResPool.GetPen (ColorControlText), buttonArea); if (! ddRect.IsEmpty) { @@ -3620,7 +3619,7 @@ namespace System.Windows.Forms else { // normal toolbar if (button.Pushed || button.Pressed) { CPDrawBorder3D (dc, buttonArea, Border3DStyle.SunkenInner, - Border3DSide.All, ColorControl); + Border3DSide.Left | Border3DSide.Right | Border3DSide.Top | Border3DSide.Bottom, ColorControl); if (! ddRect.IsEmpty) { CPDrawBorder3D (dc, ddRect, Border3DStyle.SunkenInner, Border3DSide.Left, ColorControl); @@ -3629,7 +3628,7 @@ namespace System.Windows.Forms } else { CPDrawBorder3D (dc, buttonArea, Border3DStyle.RaisedInner, - Border3DSide.All, ColorControl); + Border3DSide.Left | Border3DSide.Right | Border3DSide.Top | Border3DSide.Bottom, ColorControl); if (! ddRect.IsEmpty) { CPDrawBorder3D (dc, ddRect, Border3DStyle.RaisedInner, Border3DSide.Left, ColorControl); @@ -3682,7 +3681,7 @@ namespace System.Windows.Forms button.Parent.ImageList.Draw (dc, imgRect.X, imgRect.Y, imgRect.Width, imgRect.Height, button.ImageIndex); else { - dc.FillRectangle (ThemeEngine.Current.ResPool.GetSolidBrush (ColorGrayText), imgRect); + dc.FillRectangle (ResPool.GetSolidBrush (ColorGrayText), imgRect); ControlPaint.DrawBorder3D (dc, imgRect, Border3DStyle.SunkenOuter, Border3DSide.Right | Border3DSide.Bottom); } @@ -3700,7 +3699,7 @@ namespace System.Windows.Forms button.Parent.ImageList.Draw (dc, imgRect.X, imgRect.Y, imgRect.Width, imgRect.Height, button.ImageIndex); else { - dc.FillRectangle (ThemeEngine.Current.ResPool.GetSolidBrush (ColorGrayText), imgRect); + dc.FillRectangle (ResPool.GetSolidBrush (ColorGrayText), imgRect); ControlPaint.DrawBorder3D (dc, imgRect, Border3DStyle.SunkenOuter, Border3DSide.Right | Border3DSide.Bottom); } @@ -3719,7 +3718,7 @@ namespace System.Windows.Forms button.Parent.ImageList.Draw (dc, imgRect.X, imgRect.Y, imgRect.Width, imgRect.Height, button.ImageIndex); else { - dc.FillRectangle (ThemeEngine.Current.ResPool.GetSolidBrush (ColorGrayText), imgRect); + dc.FillRectangle (ResPool.GetSolidBrush (ColorGrayText), imgRect); CPDrawBorder3D (dc, imgRect, Border3DStyle.SunkenOuter, Border3DSide.Right | Border3DSide.Bottom, ColorControl); } @@ -3738,7 +3737,7 @@ namespace System.Windows.Forms button.Parent.ImageList.Draw (dc, imgRect.X, imgRect.Y, imgRect.Width, imgRect.Height, button.ImageIndex); else { - dc.FillRectangle (ThemeEngine.Current.ResPool.GetSolidBrush (ColorGrayText), imgRect); + dc.FillRectangle (ResPool.GetSolidBrush (ColorGrayText), imgRect); CPDrawBorder3D (dc, imgRect, Border3DStyle.SunkenOuter, Border3DSide.Right | Border3DSide.Bottom, ColorControl); } @@ -3772,7 +3771,7 @@ namespace System.Windows.Forms button.Parent.ImageList.Draw (dc, imgRect.X, imgRect.Y, imgRect.Width, imgRect.Height, button.ImageIndex); else { - dc.FillRectangle (ThemeEngine.Current.ResPool.GetSolidBrush (ColorGrayText), imgRect); + dc.FillRectangle (ResPool.GetSolidBrush (ColorGrayText), imgRect); CPDrawBorder3D (dc, imgRect, Border3DStyle.SunkenOuter, Border3DSide.Right | Border3DSide.Bottom, ColorControl); } @@ -3850,6 +3849,7 @@ namespace System.Windows.Forms float pixels_betweenticks; const int space_from_right = 8; const int space_from_left = 8; + const int space_from_bottom = 11; Rectangle area = tb.ClientRectangle; switch (tb.TickStyle) { @@ -3898,19 +3898,19 @@ namespace System.Windows.Forms /* Convert thumb position from mouse position to value*/ if (mouse_value) { - - if (value_pos >= channel_startpoint.Y) - value_pos = (int)(((float) (value_pos - channel_startpoint.Y)) / pixels_betweenticks); + if (value_pos < thumb_area.Bottom) + value_pos = (int) ((thumb_area.Bottom - value_pos) / pixels_betweenticks); else value_pos = 0; if (value_pos + tb.Minimum > tb.Maximum) value_pos = tb.Maximum - tb.Minimum; - + tb.Value = value_pos + tb.Minimum; } - - thumb_pos.Y = channel_startpoint.Y + (int) (pixels_betweenticks * (float) value_pos); + + // thumb_pos.Y = channel_startpoint.Y ; // + (int) (pixels_betweenticks * (float) value_pos); + thumb_pos.Y = thumb_area.Bottom - space_from_bottom - (int) (pixels_betweenticks * (float) value_pos); /* Draw thumb fixed 10x22 size */ thumb_pos.Width = 10; @@ -4747,7 +4747,7 @@ namespace System.Windows.Forms } else { pen=new Pen(Color.White, 1); if (enabled==true) { - sb=ThemeEngine.Current.ResPool.GetSolidBrush (Color.Black); + sb=ResPool.GetSolidBrush (Color.Black); } else { sb=ResPool.GetSolidBrush (ColorControl); } @@ -4968,84 +4968,79 @@ namespace System.Windows.Forms /* Scroll button: regular button + direction arrow */ public override void CPDrawScrollButton (Graphics dc, Rectangle area, ScrollButton type, ButtonState state) { - bool enabled = (state == ButtonState.Inactive) ? false: true; - DrawScrollButtonPrimitive (dc, area, state); - - if (area.Width < 12 || area.Height < 12) /* Cannot see a thing at smaller sizes */ - return; - - /* Paint arrows */ - switch (type) { - case ScrollButton.Up: { - int x = area.X + (area.Width / 2) - 4; - int y = area.Y + 9; - - for (int i = 0; i < 3; i++) - if (enabled) - dc.DrawLine (ResPool.GetPen (arrow_color), x + i, y - i, x + i + 6 - 2*i, y - i); - else - dc.DrawLine (ResPool.GetPen (ColorGrayText), x + i, y - i, x + i + 6 - 2*i, y - i); - - dc.FillRectangle (enabled ? ResPool.GetSolidBrush (arrow_color) : ResPool.GetSolidBrush (ColorGrayText), - x + 3, area.Y + 6, 1, 1); - - break; + // A lot of the following is adapted from the rewind project + Rectangle rect = new Rectangle (area.X - 3, area.Y - 3, + area.Width + 6, area.Height + 6); + int small_diam = rect.Width > rect.Height ? rect.Height : rect.Width; + if (rect.Width < rect.Height) { + rect.Y += (rect.Height - rect.Width) / 2; + rect.Height = small_diam; + } else if (rect.Width > rect.Height) { + rect.X += (rect.Width - rect.Height) / 2; + rect.Width = small_diam; } - case ScrollButton.Down: { - int x = area.X + (area.Width / 2) - 5; - int y = area.Y + 5; - for (int i = 4; i != 0; i--) - if (enabled) - dc.DrawLine (ResPool.GetPen (arrow_color), x + i, y + i, x + i + 8 - 2*i, y + i); - else - dc.DrawLine (ResPool.GetPen (ColorGrayText), x + i, y + i, x + i + 8 - 2*i, y + i); - - - dc.FillRectangle (enabled ? ResPool.GetSolidBrush (arrow_color) : ResPool.GetSolidBrush (ColorGrayText), - x + 4, y + 4, 1, 1); - break; - } + small_diam -= 2; - case ScrollButton.Left: { - int y = area.Y + (area.Height / 2) - 4; - int x = area.X + 9; + int tri = 290 * small_diam / 1000 - 1; + if (tri == 0) + tri = 1; - for (int i = 0; i < 3; i++) - if (enabled) - dc.DrawLine (ResPool.GetPen (arrow_color), x - i, y + i, x - i, y + i + 6 - 2*i); - else - dc.DrawLine (ResPool.GetPen (ColorGrayText), x - i, y + i, x - i, y + i + 6 - 2*i); + Point [] arrow = new Point [3]; + for (int i = 0; i < 3; i++) + arrow [i] = new Point (); - dc.FillRectangle (enabled ? ResPool.GetSolidBrush (arrow_color) : ResPool.GetSolidBrush (ColorGrayText), - x - 3, y + 3, 1, 1); + switch(type) { + default: + case ScrollButton.Down: + arrow [2].X = rect.Left + 470 * small_diam / 1000 + 2; + arrow [2].Y = rect.Top + 687 * small_diam / 1000 + 1; + arrow [0].X = arrow [2].X - tri; + arrow [1].X = arrow [2].X + tri; + arrow [0].Y = arrow [1].Y = arrow [2].Y - tri; break; - } - - case ScrollButton.Right: { - int y = area.Y + (area.Height / 2) - 5; - int x = area.X + 5; - for (int i = 4; i != 0; i--) - if (enabled) - dc.DrawLine (ResPool.GetPen (arrow_color), x + i, y + i, x + i, y + i + 8 - 2*i); - else - dc.DrawLine (ResPool.GetPen (ColorGrayText), x + i, y + i, x + i, y + i + 8 - 2*i); + case ScrollButton.Up: + arrow [2].X = rect.Left + 470 * small_diam / 1000 + 2; + arrow [2].Y = rect.Bottom - (687 * small_diam / 1000 + 1); + arrow [0].X = arrow [2].X - tri; + arrow [1].X = arrow [2].X + tri; + arrow [0].Y = arrow [1].Y = arrow [2].Y + tri; + break; - dc.FillRectangle (enabled ? ResPool.GetSolidBrush (arrow_color) : ResPool.GetSolidBrush (ColorGrayText), - x + 4, y + 4, 1, 1); + case ScrollButton.Left: + arrow [2].X = rect.Right - (687 * small_diam / 1000 + 1); + arrow [2].Y = rect.Top + 470 * small_diam / 1000 + 2; + arrow [0].Y = arrow [2].Y - tri; + arrow [1].Y = arrow [2].Y + tri; + arrow [0].X = arrow [1].X = arrow [2].X + tri; + break; + case ScrollButton.Right: + arrow [2].X = rect.Left + 687 * small_diam / 1000 + 1; + arrow [2].Y = rect.Top + 470 * small_diam / 1000 + 2; + arrow [0].Y = arrow [2].Y - tri; + arrow [1].Y = arrow [2].Y + tri; + arrow [0].X = arrow [1].X = arrow [2].X - tri; break; } - default: - break; + /* Draw the arrow */ + if ((state & ButtonState.Inactive)!=0) { + dc.FillPolygon (SystemBrushes.ControlLightLight, arrow, FillMode.Winding); + for (int i = 0; i < 3; i++) { + arrow [i].X--; + arrow [i].Y--; + } + + dc.FillPolygon (SystemBrushes.ControlDark, arrow, FillMode.Winding); + } else { + dc.FillPolygon (SystemBrushes.ControlText, arrow, FillMode.Winding); } } - public override void CPDrawSelectionFrame (Graphics graphics, bool active, Rectangle outsideRect, Rectangle insideRect, Color backColor) { @@ -5072,10 +5067,7 @@ namespace System.Windows.Forms public override void CPDrawStringDisabled (Graphics graphics, string s, Font font, Color color, RectangleF layoutRectangle, StringFormat format) { - layoutRectangle.Offset(1.0f, 1.0f); - graphics.DrawString(s, font, ResPool.GetSolidBrush (ControlPaint.Light(color, 95)), layoutRectangle, format); - layoutRectangle.Offset(-1.0f, -1.0f); - graphics.DrawString(s, font, ResPool.GetSolidBrush (ControlPaint.Light(color, 50)), layoutRectangle, format); + graphics.DrawString(s, font, ResPool.GetSolidBrush (ColorGrayText), layoutRectangle, format); } @@ -5272,7 +5264,7 @@ namespace System.Windows.Forms still look like MS's scaled caption buttons. (as opposed to scaling a bitmap) */ - private static void DrawCaptionHelper(Graphics graphics, Color color, Pen pen, int lineWidth, int shift, Rectangle captionRect, CaptionButton button) { + private void DrawCaptionHelper(Graphics graphics, Color color, Pen pen, int lineWidth, int shift, Rectangle captionRect, CaptionButton button) { switch(button) { case CaptionButton.Close: { pen.StartCap=LineCap.Triangle; @@ -5295,7 +5287,7 @@ namespace System.Windows.Forms sf.LineAlignment=StringAlignment.Center; - graphics.DrawString("?", font, ThemeEngine.Current.ResPool.GetSolidBrush (color), captionRect.X+captionRect.Width/2+shift, captionRect.Y+captionRect.Height/2+shift+lineWidth/2, sf); + graphics.DrawString("?", font, ResPool.GetSolidBrush (color), captionRect.X+captionRect.Width/2+shift, captionRect.Y+captionRect.Height/2+shift+lineWidth/2, sf); sf.Dispose(); font.Dispose();