/// <summary> Draw text with current font of indicated graphics context. </summary>
        /// <param name="display"> The display pointer, that specifies the connection to the X server. <see cref="IntPtr"/> </param>
        /// <param name="window"> The window to draw on. <see cref="IntPtr"/> </param>
        /// <param name="gc"> The graphics context to use for drawing. <see cref="IntPtr"/> </param>
        /// <param name="text"> The tyt to draw. <see cref="X11.TChar[]"/> </param>
        /// <param name="area"> The area to draw within. <see cref="Rectangle"/> </param>
        /// <param name="horzAlign"> The horizontal alignment (0.5F is centered). <see cref="XFloat"/> </param>
        /// <param name="vertAlign"> The vertical alignment (0.5F is centered). <see cref="XFloat"/> </param>
        public virtual void DrawTextLine(IntPtr display, IntPtr window, IntPtr gc, X11.TChar[] text, X11.TRectangle area, float horzAlign, float vertAlign)
        {
            if (display == IntPtr.Zero)
            {
                Console.WriteLine(CLASS_NAME + "::DrawTextLine () ERROR: Argument null: display");
                return;
            }
            if (window == IntPtr.Zero)
            {
                Console.WriteLine(CLASS_NAME + "::DrawTextLine () ERROR: Argument null: window");
                return;
            }
            if (gc == IntPtr.Zero)
            {
                Console.WriteLine(CLASS_NAME + "::DrawTextLine () ERROR: Argument null: gc");
                return;
            }

            if (horzAlign < 0.0F || horzAlign > 1.0F)
            {
                Console.WriteLine(CLASS_NAME + "::DrawTextLine () ERROR: Argument out of range (0.0 ... 1.0): horzAlign");
                if (horzAlign < 0.0F)
                {
                    horzAlign = 0.0F;
                }
                if (horzAlign > 1.0F)
                {
                    horzAlign = 1.0F;
                }
            }
            if (vertAlign < 0.0F || vertAlign > 1.0F)
            {
                Console.WriteLine(CLASS_NAME + "::DrawTextLine () ERROR: Argument out of range (0.0 ... 1.0): vertAlign");
                if (vertAlign < 0.0F)
                {
                    vertAlign = 0.0F;
                }
                if (vertAlign > 1.0F)
                {
                    vertAlign = 1.0F;
                }
            }

            TSize textMeasure = MeasureTextLine(display, gc, text);
            int   textX       = (int)((area.Width - textMeasure.Width) * horzAlign);

            if (textX < _borderWidth + 2)
            {
                textX = _borderWidth + 2;
            }
            if (textX > area.Width - textMeasure.Width - _borderWidth - 2)
            {
                textX = area.Width - textMeasure.Width - _borderWidth - 2;
            }

            int textY = (int)((area.Height - textMeasure.Height) * vertAlign) + (int)(textMeasure.Height * 0.85F);

            X11lib.XDrawString(display, window, gc, (TInt)((int)area.Left + (int)textX), (TInt)((int)area.Top + (int)textY), text, (X11.TInt)text.Length);
        }