/// <summary> /// Breaks off contol at most at height. /// </summary> /// <returns> /// Array of two controls: broken control with height equal to height param or lower and second control representing rest part of oryginal control /// </returns> /// <param name='control'> /// Control to broke off /// </param> /// <param name='height'> /// Height. /// </param> public Control[] BreakOffControlAtMostAtHeight(Cairo.Context c, Control control, double height) { Control[] controls = new Control[2]; TextBlock textBlock = control.CreateControl() as TextBlock; controls[1] = textBlock; var newTextBlock = control.CreateControl() as TextBlock; textBlock.Top = 0; int charNumber = c.GetBreakLineCharacterIndexbyMaxHeight (textBlock,height); if (charNumber > 0) { newTextBlock.Text = textBlock.Text.Substring (0,charNumber-1); newTextBlock.Padding = new Thickness(textBlock.Padding.Left,0,textBlock.Padding.Right,textBlock.Padding.Bottom); var newSize = c.DrawTextBlock (newTextBlock, false); newTextBlock.Height = newSize.Height; textBlock.Height = textBlock.Height - newSize.Height; textBlock.Text = textBlock.Text.Substring (charNumber-1); } else if (charNumber == 0) { newTextBlock.Height = textBlock.Padding.Top; newTextBlock.Text = String.Empty; textBlock.Height = textBlock.Height - newTextBlock.Height; } else if (charNumber == -1) { newTextBlock.Height = height; newTextBlock.Text = String.Empty; textBlock.Height = textBlock.Height - height; textBlock.Padding = new Thickness (textBlock.Padding.Left,textBlock.Padding.Top - height,textBlock.Padding.Right,textBlock.Padding.Bottom); } else if (charNumber == -2) { newTextBlock.Height = height; textBlock.Text = String.Empty; textBlock.FieldName = String.Empty; textBlock.Height = textBlock.Height - height; textBlock.Padding = new Thickness (textBlock.Padding.Left,textBlock.Padding.Top - height,textBlock.Padding.Right,textBlock.Padding.Bottom); } controls[0] = newTextBlock; return controls; }
public void Render(Cairo.Context c,Control control) { TextBlock textBlock = control as TextBlock; Rectangle borderRect; c.Save(); borderRect = new Rectangle (textBlock.Location.X * unitMulitipier , textBlock.Location.Y * unitMulitipier, textBlock.Width * unitMulitipier, textBlock.Height * unitMulitipier); if(!textBlock.CanGrow || DesignMode) c.ClipRectangle(borderRect); var rect = c.DrawTextBlock (textBlock,false); if(!DesignMode && (textBlock.CanGrow && rect.Height > textBlock.Height || textBlock.CanShrink && rect.Height < textBlock.Height )){ borderRect = new Rectangle (textBlock.Location.X, textBlock.Location.Y, textBlock.Width, rect.Height); } else { borderRect = new Rectangle (textBlock.Location.X, textBlock.Location.Y, textBlock.Width, textBlock.Height); } c.FillRectangleInUnit(borderRect,textBlock.BackgroundColor.ToCairoColor()); if(DesignMode){ c.DrawInsideSelectorInUnits (borderRect, new Border(1),4); } c.DrawTextBlock (textBlock,true); c.DrawInsideBorderInUnit (borderRect, textBlock.Border,true); c.Restore(); if(MonoreportsSettings.debugMode) c.DrawDebug( string.Format(Catalog.GetString("bottom: {0}"),textBlock.Bottom.ToUnitString()),borderRect.X,textBlock.Bottom); }
public Size Measure(Cairo.Context c, Control control) { TextBlock textBlock = control as TextBlock; Rectangle borderRect; var rect = c.DrawTextBlock (textBlock,false); if(textBlock.CanGrow && rect.Height > textBlock.Height || textBlock.CanShrink && rect.Height < textBlock.Height){ borderRect = new Rectangle (textBlock.Location.X, textBlock.Location.Y, textBlock.Width, rect.Height); } else { borderRect = new Rectangle (textBlock.Location.X, textBlock.Location.Y, textBlock.Width, textBlock.Height); } return new Size(borderRect.Width, borderRect.Height); }
public void Render(Cairo.Context c,Control control) { TextBlock textBlock = control as TextBlock; Rectangle borderRect; c.Save(); borderRect = new Rectangle (textBlock.Location.X, textBlock.Location.Y, textBlock.Width, textBlock.Height); if(!textBlock.CanGrow || DesignMode) c.ClipRectangle(borderRect); var rect = c.DrawTextBlock (textBlock,false); if(!DesignMode && (textBlock.CanGrow && rect.Height > textBlock.Height || textBlock.CanShrink && rect.Height < textBlock.Height)){ borderRect = new Rectangle (textBlock.Location.X, textBlock.Location.Y, textBlock.Width, rect.Height); } else { borderRect = new Rectangle (textBlock.Location.X, textBlock.Location.Y, textBlock.Width, textBlock.Height); } c.FillRectangle(borderRect,textBlock.BackgroundColor.ToCairoColor()); c.DrawTextBlock (textBlock,true); c.DrawInsideBorder (borderRect, textBlock.Border,true); c.Restore(); }