/// <summary> /// Render the caret. /// </summary> /// <param name="textArea"></param> protected void CacheCaretImagery(Rectf textArea) { var w = (MultiLineEditbox)Window; var fnt = w.GetFont(); // require a font so that we can calculate caret position. if (fnt != null) { // get line that caret is in var caretLine = w.GetLineNumberFromIndex(w.GetCaretIndex()); var lines = w.GetFormattedLines(); // if caret line is valid. if (caretLine < lines.Count) { // calculate pixel offsets to where caret should be drawn var caretLineIdx = w.GetCaretIndex() - lines[caretLine].d_startIdx; var ypos = caretLine * fnt.GetLineSpacing(); var xpos = fnt.GetTextAdvance(w.GetText().CEGuiSubstring(lines[caretLine].d_startIdx, caretLineIdx)); //// get base offset to target layer for cursor. //Renderer* renderer = System::getSingleton().getRenderer(); //float baseZ = renderer->getZLayer(7) - renderer->getCurrentZ(); // get WidgetLookFeel for the assigned look. var wlf = GetLookNFeel(); // get caret imagery var caretImagery = wlf.GetImagerySection("Caret"); // calculate finat destination area for caret var caretArea = new Rectf { Left = textArea.Left + xpos, Top = textArea.Top + ypos, Width = caretImagery.GetBoundingRect(w).Size.Width, Height = fnt.GetLineSpacing() }; caretArea.Offset(new Lunatics.Mathematics.Vector2(-w.GetHorzScrollbar().GetScrollPosition(), -w.GetVertScrollbar().GetScrollPosition())); // Create the render geometry for the caret image caretImagery.Render(w, caretArea, null, textArea); } } }
public override void CreateRenderGeometry() { var w = (ListHeaderSegment)Window; // get WidgetLookFeel for the assigned look. var wlf = GetLookNFeel(); StateImagery imagery; // get imagery for main state. if (w.IsEffectiveDisabled()) { imagery = wlf.GetStateImagery("Disabled"); } else if ((w.IsSegmentHovering() != w.IsSegmentPushed()) && !w.IsSplitterHovering() && w.IsClickable()) { imagery = wlf.GetStateImagery("Hover"); } else if (w.IsSplitterHovering()) { imagery = wlf.GetStateImagery("SplitterHover"); } else { imagery = wlf.GetStateImagery("Normal"); } // do main rendering imagery.Render(w); // Render sorting icon as needed var sortDir = w.GetSortDirection(); if (sortDir == ListHeaderSegment.SortDirection.Ascending) { imagery = wlf.GetStateImagery("AscendingSortIcon"); imagery.Render(w); } else if (sortDir == ListHeaderSegment.SortDirection.Descending) { imagery = wlf.GetStateImagery("DescendingSortIcon"); imagery.Render(w); } // draw ghost copy if the segment is being dragged. if (w.IsBeingDragMoved()) { var pixelSize = w.GetPixelSize(); var targetArea = new Rectf(0, 0, pixelSize.Width, pixelSize.Height); targetArea.Offset(w.GetDragMoveOffset()); imagery = wlf.GetStateImagery("DragGhost"); imagery.Render(w, targetArea); // Render sorting icon as needed if (sortDir == ListHeaderSegment.SortDirection.Ascending) { imagery = wlf.GetStateImagery("GhostAscendingSortIcon"); imagery.Render(w, targetArea); } else if (sortDir == ListHeaderSegment.SortDirection.Descending) { imagery = wlf.GetStateImagery("GhostDescendingSortIcon"); imagery.Render(w, targetArea); } } }