Ejemplo n.º 1
0
            //! Constructor
            public SvgImageRenderSettings(ImageRenderSettings imgRenderSettings,
                                          Vector2 scaleFactor,
                                          bool antiAliasing)
                : base(imgRenderSettings)

            {
                d_scaleFactor  = scaleFactor;
                d_antiAliasing = antiAliasing;
            }
Ejemplo n.º 2
0
        /// <summary>
        /// Draw the tree item in its current state
        /// </summary>
        /// <param name="geometryBuffers"></param>
        /// <param name="targetRect"></param>
        /// <param name="alpha">
        /// Alpha value to be used when rendering the item (between 0.0f and 1.0f).
        /// </param>
        /// <param name="clipper">
        /// Rect object describing the clipping rectangle for the draw operation.
        /// </param>
        public virtual IEnumerable <GeometryBuffer> Draw(Rectf targetRect, float alpha, Rectf?clipper)
        {
            var geometryBuffers = new List <GeometryBuffer>();
            var finalRect       = targetRect;

            var imgRenderSettings = new ImageRenderSettings(finalRect, clipper, true, new ColourRect(0xffffffff), alpha);

            if (d_iconImage != null)
            {
                var finalPos = finalRect;
                finalPos.Width             = targetRect.Height; // xdinos ???
                finalPos.Height            = targetRect.Height;
                imgRenderSettings.DestArea = finalPos;
                geometryBuffers.AddRange(d_iconImage.CreateRenderGeometry(imgRenderSettings));
                finalRect.d_min.X += targetRect.Height;
            }

            imgRenderSettings.DestArea = finalRect;

            if (d_selected && d_selectBrush != null)
            {
                imgRenderSettings.MultiplyColours = d_selectCols;
                geometryBuffers.AddRange(d_selectBrush.CreateRenderGeometry(imgRenderSettings));
            }

            var font = GetFont();

            if (font == null)
            {
                return(geometryBuffers);
            }

            var draw_pos = finalRect.Position;

            draw_pos.Y -= (font.GetLineSpacing() - font.GetBaseline()) * 0.5f;

            if (!d_renderedStringValid)
            {
                ParseTextString();
            }

            var final_colours = new ColourRect(0xFFFFFFFF);

            for (var i = 0; i < d_renderedString.GetLineCount(); ++i)
            {
                //d_renderedString.Draw(d_owner, i, geometryBuffers, draw_pos, final_colours, clipper, 0.0f);
                geometryBuffers.AddRange(d_renderedString.CreateRenderGeometry(d_owner, i, draw_pos, final_colours, clipper, 0.0f));
                draw_pos.Y += d_renderedString.GetPixelSize(d_owner, i).Height;
            }

            return(geometryBuffers);
        }
Ejemplo n.º 3
0
        private void CreateRenderGeometry(ListView listView)
        {
            var itemsArea = GetViewRenderArea();
            var itemPos   = _itemViewRenderer.GetItemRenderStartPosition(listView, itemsArea);

            for (var i = 0; i < listView.GetItems().Count; ++i)
            {
                var item           = listView.GetItems()[i];
                var renderedString = item.d_string;
                var size           = item.d_size;

                size.Width = Math.Max(itemsArea.Width, size.Width);

                var itemRect = new Rectf(itemPos, size);

                if (!string.IsNullOrEmpty(item.d_icon))
                {
                    var img = ImageManager.GetSingleton().Get(item.d_icon);

                    var iconRect = itemRect;
                    iconRect.Width  = size.Height;
                    iconRect.Height = size.Height;

                    var iconClipper = iconRect.GetIntersection(itemsArea);

                    var renderSettings = new ImageRenderSettings(iconRect, iconClipper, true, ICON_COLOUR_RECT, 1.0f);
                    var imgGeomBuffers = img.CreateRenderGeometry(renderSettings);

                    if (item.d_isSelected)
                    {
                        renderSettings = new ImageRenderSettings(iconRect, iconClipper, true, listView.GetSelectionColourRect());
                        var brushGeomBuffers = listView.GetSelectionBrushImage().CreateRenderGeometry(renderSettings);
                        listView.AppendGeometryBuffers(brushGeomBuffers);
                    }

                    listView.AppendGeometryBuffers(imgGeomBuffers);

                    itemRect.Left = itemRect.Left + iconRect.Width;
                }

                var itemClipper = itemRect.GetIntersection(itemsArea);

                _itemViewRenderer.CreateRenderGeometryAndAddToItemView(listView, renderedString, itemRect,
                                                                       listView.GetFont(), itemClipper,
                                                                       item.d_isSelected);

                itemPos.Y += size.Height;
            }
        }
Ejemplo n.º 4
0
        public void CreateRenderGeometryAndAddToItemView(ItemView view, RenderedString renderedString, Rectf drawRect, Font font, Rectf?itemClipper, bool isSelected)
        {
            if (view.GetSelectionBrushImage() != null && isSelected)
            {
                var renderSettings   = new ImageRenderSettings(drawRect, itemClipper, true, view.GetSelectionColourRect());
                var brushGeomBuffers = view.GetSelectionBrushImage().CreateRenderGeometry(renderSettings);
                view.AppendGeometryBuffers(brushGeomBuffers);
            }

            var drawPos = drawRect.Position;

            for (var i = 0; i < renderedString.GetLineCount(); ++i)
            {
                drawPos.Y += CoordConverter.AlignToPixels((font.GetLineSpacing() - font.GetFontHeight()) * 0.5f);

                var stringGeomBuffers = renderedString.CreateRenderGeometry(view, i, drawPos, null, itemClipper, 0.0f);
                view.AppendGeometryBuffers(stringGeomBuffers);
                drawPos.Y += renderedString.GetPixelSize(view, i).Height;
            }
        }
Ejemplo n.º 5
0
        // Implement CEGUI::Image interface
        public override List <GeometryBuffer> CreateRenderGeometry(ImageRenderSettings renderSettings)
        {
            var dest = renderSettings.DestArea;

            // apply rendering offset to the destination Rect
            dest.Offset(d_scaledOffset);

            var clipArea = renderSettings.ClipArea;
            // Calculate the actual (clipped) area to which we want to render to
            var finalRect = clipArea.HasValue ? dest.GetIntersection(clipArea.Value) : dest;

            // check if our Image is totally clipped and return if it is
            if ((Math.Abs(finalRect.Width) < float.Epsilon) || (Math.Abs(finalRect.Height) < float.Epsilon))
            {
                return(new List <GeometryBuffer>());
            }

            // Calculate the scale factor for our Image which is the scaling of the Image
            // area to the destination area of our render call
            var scaleFactor = new Vector2(dest.Width / d_imageArea.Width, dest.Height / d_imageArea.Height);

            // URGENT FIXME: Shouldn't this be in the hands of the user?
            finalRect.d_min.X = CoordConverter.AlignToPixels(finalRect.d_min.X);
            finalRect.d_min.Y = CoordConverter.AlignToPixels(finalRect.d_min.Y);
            finalRect.d_max.X = CoordConverter.AlignToPixels(finalRect.d_max.X);
            finalRect.d_max.Y = CoordConverter.AlignToPixels(finalRect.d_max.Y);

            var svgRenderSettings = new SvgImageRenderSettings(renderSettings, scaleFactor, d_useGeometryAntialiasing);
            var geometryBuffers   = new List <GeometryBuffer>();

            foreach (var shape in d_svgData.getShapes())
            {
                geometryBuffers.AddRange(shape.CreateRenderGeometry(svgRenderSettings));
            }

            return(geometryBuffers);
        }
Ejemplo n.º 6
0
        public override List <GeometryBuffer> CreateRenderGeometry(Rectf targetRect, float alpha, Rectf?clipper)
        {
            var geomBuffers = new List <GeometryBuffer>();

            if (Selected && SelectBrush != null)
            {
                var imgRenderSettings = new ImageRenderSettings(targetRect, clipper, true, SelectCols, alpha);
                geomBuffers.AddRange(SelectBrush.CreateRenderGeometry(imgRenderSettings));
            }

            var font = GetFont();

            if (font == null)
            {
                return(geomBuffers);
            }

            var drawPos = targetRect.Position;

            drawPos.Y += CoordConverter.AlignToPixels((font.GetLineSpacing() - font.GetFontHeight()) * 0.5f);

            if (!_renderedStringValid)
            {
                ParseTextString();
            }

            var finalColours = new ColourRect(0xFFFFFFFF);

            for (var i = 0; i < _renderedString.GetLineCount(); ++i)
            {
                geomBuffers.AddRange(_renderedString.CreateRenderGeometry(Owner, i, drawPos, finalColours, clipper, 0.0f));
                drawPos.Y += _renderedString.GetPixelSize(Owner, i).Height;
            }

            return(geomBuffers);
        }
        /// <summary>
        /// Render text lines.
        /// </summary>
        /// <param name="destArea"></param>
        protected void CacheTextLines(Rectf destArea)
        {
            var w = (MultiLineEditbox)Window;

            // text is already formatted, we just grab the lines and
            // create the render geometry for them with the required alignment.
            var drawArea      = destArea;
            var vertScrollPos = w.GetVertScrollbar().GetScrollPosition();

            drawArea.Offset(new Lunatics.Mathematics.Vector2(-w.GetHorzScrollbar().GetScrollPosition(), -vertScrollPos));

            var fnt = w.GetFont();

            if (fnt != null)
            {
                // calculate final colours to use.
                var alpha         = w.GetEffectiveAlpha();
                var normalTextCol = new ColourRect();
                SetColourRectToUnselectedTextColour(ref normalTextCol);
                normalTextCol.ModulateAlpha(alpha);
                var selectTextCol = new ColourRect();
                SetColourRectToSelectedTextColour(ref selectTextCol);
                selectTextCol.ModulateAlpha(alpha);
                var selectBrushCol = new ColourRect();
                if (w.HasInputFocus())
                {
                    SetColourRectToActiveSelectionColour(ref selectBrushCol);
                }
                else
                {
                    SetColourRectToInactiveSelectionColour(ref selectBrushCol);
                }

                selectBrushCol.ModulateAlpha(alpha);

                var lines    = w.GetFormattedLines();
                var numLines = lines.Count;

                // calculate the range of visible lines
                var sidx = (int)(vertScrollPos / fnt.GetLineSpacing());
                var eidx = 1 + sidx + (int)(destArea.Height / fnt.GetLineSpacing());
                eidx              = Math.Min(eidx, numLines);
                drawArea.d_min.Y += fnt.GetLineSpacing() * sidx;

                // for each formatted line.
                for (var i = sidx; i < eidx; ++i)
                {
                    var lineRect = drawArea;
                    var currLine = lines[i];
                    var lineText = w.GetTextVisual().CEGuiSubstring(currLine.d_startIdx, currLine.d_length);

                    // offset the font little down so that it's centered within its own spacing
                    var oldTop = lineRect.Top;
                    lineRect.d_min.Y += (fnt.GetLineSpacing() - fnt.GetFontHeight()) * 0.5f;

                    // if it is a simple 'no selection area' case
                    ColourRect colours;
                    if ((currLine.d_startIdx >= w.GetSelectionEndIndex()) ||
                        ((currLine.d_startIdx + currLine.d_length) <= w.GetSelectionStartIndex()) ||
                        (w.GetSelectionBrushImage() == null))
                    {
                        colours = normalTextCol;

                        // Create Geometry buffers for the text and add to the Window
                        var nextGlyphPos    = 0.0f;
                        var textGeomBuffers = fnt.CreateRenderGeometryForText(lineText, out nextGlyphPos, lineRect.Position, destArea, true, colours);
                        w.AppendGeometryBuffers(textGeomBuffers);
                    }
                    else // we have at least some selection highlighting to do
                    {
                        // Start of actual rendering section.
                        String sect;
                        int    sectIdx = 0, sectLen;
                        float  selStartOffset = 0.0f;

                        // Create the render geometry for any text prior to selected region of line.
                        if (currLine.d_startIdx < w.GetSelectionStartIndex())
                        {
                            // calculate length of text section
                            sectLen = w.GetSelectionStartIndex() - currLine.d_startIdx;

                            // get text for this section
                            sect     = lineText.CEGuiSubstring(sectIdx, sectLen);
                            sectIdx += sectLen;

                            // get the pixel offset to the beginning of the selection area highlight.
                            selStartOffset = fnt.GetTextAdvance(sect);

                            // Create the render geometry for this portion of the text
                            colours = normalTextCol;
                            var geomBuffers = fnt.CreateRenderGeometryForText(sect, lineRect.Position, destArea, true, colours);

                            // set position ready for next portion of text
                            lineRect.d_min.X += selStartOffset;
                        }

                        // calculate the length of the selected section
                        sectLen = Math.Min(w.GetSelectionEndIndex() - currLine.d_startIdx, currLine.d_length) - sectIdx;

                        // get the text for this section
                        sect     = lineText.CEGuiSubstring(sectIdx, sectLen);
                        sectIdx += sectLen;

                        // get the extent to use as the width of the selection area highlight
                        var selAreaWidth = fnt.GetTextAdvance(sect);

                        var textTop = lineRect.Top;
                        lineRect.Top = oldTop;

                        // calculate area for the selection brush on this line
                        lineRect.Left   = drawArea.Left + selStartOffset;
                        lineRect.Right  = lineRect.Left + selAreaWidth;
                        lineRect.Bottom = lineRect.Top + fnt.GetLineSpacing();

                        // Create the render geometry for the selection area brush for this line
                        colours = selectBrushCol;
                        var renderSettings       = new ImageRenderSettings(lineRect, destArea, true, colours);
                        var selectionGeomBuffers = w.GetSelectionBrushImage().CreateRenderGeometry(renderSettings);
                        w.AppendGeometryBuffers(selectionGeomBuffers);

                        // Create the render geometry for the text for this section
                        colours = selectTextCol;
                        var textGeomBuffers = fnt.CreateRenderGeometryForText(sect, lineRect.Position, destArea, true, colours);
                        w.AppendGeometryBuffers(textGeomBuffers);

                        lineRect.Top = textTop;

                        // Create the render geometry for any text beyond selected region of line
                        if (sectIdx < currLine.d_length)
                        {
                            // update render position to the end of the selected area.
                            lineRect.d_min.X += selAreaWidth;

                            // calculate length of this section
                            sectLen = currLine.d_length - sectIdx;

                            // get the text for this section
                            sect = lineText.CEGuiSubstring(sectIdx, sectLen);

                            // render the text for this section.
                            colours = normalTextCol;

                            var textAfterSelectionGeomBuffers = fnt.CreateRenderGeometryForText(sect, lineRect.Position, destArea, true, colours);
                            w.AppendGeometryBuffers(textAfterSelectionGeomBuffers);
                        }
                    }

                    // update master position for next line in paragraph.
                    drawArea.d_min.Y += fnt.GetLineSpacing();
                }
            }
        }