- internal bool Layout ()
- {
- if (Parent == null || !Visible)
- return false;
-
- Size psize = Parent.ButtonSize;
- Size size = psize;
- if (!Parent.SizeSpecified) {
- size = CalculateSize ();
- if (size.Width == 0 || size.Height == 0)
- size = psize;
- }
- return Layout (size);
- }
-
- internal bool Layout (Size size)
- {
- if (Parent == null || !Visible)
- return false;
-
- bounds.Size = size;
-
- Size image_size = (Parent.ImageSize == Size.Empty) ? new Size (16, 16) : Parent.ImageSize;
- int grip = ThemeEngine.Current.ToolBarImageGripWidth;
-
- Rectangle new_image_rect, new_text_rect;
-
- if (Parent.TextAlign == ToolBarTextAlign.Underneath) {
- new_image_rect = new Rectangle ((bounds.Size.Width - image_size.Width) / 2 - grip, 0, image_size.Width + 2 + grip, image_size.Height + 2 * grip);
- new_text_rect = new Rectangle (0, new_image_rect.Height, bounds.Size.Width, bounds.Size.Height - new_image_rect.Height);
- } else {
- new_image_rect = new Rectangle (0, 0, image_size.Width + 2 * grip, image_size.Height + 2 * grip);
- new_text_rect = new Rectangle (new_image_rect.Width, 0, bounds.Size.Width - new_image_rect.Width, bounds.Size.Height);
- }
-
- bool changed = false;
-
- if (new_image_rect != image_rect || new_text_rect != text_rect)
- changed = true;
-
- image_rect = new_image_rect;
- text_rect = new_text_rect;
-
- return changed;
- }
-
- const int text_padding = 3;
-
- Size TextSize {
- get {
- SizeF sz = Parent.DeviceContext.MeasureString (Text, Parent.Font);
- if (sz == SizeF.Empty)
- return Size.Empty;
- return new Size ((int) Math.Ceiling (sz.Width) + 2 * text_padding, (int) Math.Ceiling (sz.Height));
- }
- }
-
- Size CalculateSize ()
- {
- if (Parent == null)
- return Size.Empty;
-
- Theme theme = ThemeEngine.Current;
-
- int ht = Parent.ButtonSize.Height + 2 * theme.ToolBarGripWidth;
-
- if (Style == ToolBarButtonStyle.Separator)
- return new Size (theme.ToolBarSeparatorWidth, ht);
-
- Size size = TextSize;
- Size image_size = (Parent.ImageSize == Size.Empty) ? new Size (16, 16) : Parent.ImageSize;
-
- int image_width = image_size.Width + 2 * theme.ToolBarImageGripWidth;
- int image_height = image_size.Height + 2 * theme.ToolBarImageGripWidth;
-
- if (Parent.TextAlign == ToolBarTextAlign.Right) {
- size.Width = image_width + size.Width;
- size.Height = (size.Height > image_height) ? size.Height : image_height;
- } else {
- size.Height = image_height + size.Height;
- size.Width = (size.Width > image_width) ? size.Width : image_width;
- }
-
- size.Width += theme.ToolBarGripWidth;
- size.Height += theme.ToolBarGripWidth;
- return size;
- }
-
- internal void InvalidateBorder ()
- {
- if (ThemeEngine.Current.ToolBarInvalidateEntireButton) {
- Invalidate ();
- }
- else {
- if (Rectangle == Rectangle.Empty)
- return;
-
- /* invalidate the four sides of our border */
- Parent.Invalidate (new Rectangle (Rectangle.X - 2, Rectangle.Y - 2,
- Rectangle.Width + 4, 4));
- Parent.Invalidate (new Rectangle (Rectangle.X - 2, Rectangle.Y - 2,
- 4, Rectangle.Height + 4));
- Parent.Invalidate (new Rectangle (Rectangle.X - 2, Rectangle.Y + Rectangle.Height - 2,
- Rectangle.Width + 4, 4));
- Parent.Invalidate (new Rectangle (Rectangle.X + Rectangle.Width - 2, Rectangle.Y - 2,
- 4, Rectangle.Height + 4));
- }
- }
-
- void Invalidate ()