Example #1
0
        /// <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);
        }
Example #4
0
        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();
        }