func (t *CodeEditorLine) PaintBorders(c gxui.Canvas, info CodeEditorLinePaintInfo) { start, _ := info.LineSpan.Span() offsets := info.GlyphOffsets for _, l := range t.ce.layers { if l != nil && l.BorderColor() != nil { color := *l.BorderColor() interval.Visit(l.Spans(), info.LineSpan, func(vs, ve uint64, _ int) { s, e := vs-start, ve-start r := math.CreateRect(offsets[s].X, 0, offsets[e-1].X+info.GlyphWidth, info.LineHeight) c.DrawRoundedRect(r, 3, 3, 3, 3, gxui.CreatePen(0.5, color), gxui.TransparentBrush) }) } } }
func (t *CodeEditorLine) PaintBackgroundSpans(c gxui.Canvas, info CodeEditorLinePaintInfo) { start, _ := info.LineSpan.Span() offsets := info.GlyphOffsets remaining := interval.IntDataList{info.LineSpan} for _, l := range t.ce.layers { if l != nil && l.BackgroundColor() != nil { color := *l.BackgroundColor() for _, span := range l.Spans().Overlaps(info.LineSpan) { interval.Visit(&remaining, span, func(vs, ve uint64, _ int) { s, e := vs-start, ve-start r := math.CreateRect(offsets[s].X, 0, offsets[e-1].X+info.GlyphWidth, info.LineHeight) c.DrawRoundedRect(r, 3, 3, 3, 3, gxui.TransparentPen, gxui.Brush{Color: color}) }) interval.Remove(&remaining, span) } } } }
func (t *DefaultTextBoxLine) PaintSelections(c gxui.Canvas) { controller := t.textbox.controller ls, le := controller.LineStart(t.lineIndex), controller.LineEnd(t.lineIndex) selections := controller.Selections() if t.textbox.selectionDragging { interval.Replace(&selections, t.textbox.selectionDrag) } interval.Visit(&selections, gxui.CreateTextSelection(ls, le, false), func(s, e uint64, _ int) { if s < e { x := t.outer.MeasureRunes(ls, int(s)).W m := t.outer.MeasureRunes(int(s), int(e)) top := math.Point{X: t.caretWidth + x, Y: 0} bottom := top.Add(m.Point()) t.outer.PaintSelection(c, top, bottom) } }) }
func (t *CodeEditorLine) PaintGlyphs(c gxui.Canvas, info CodeEditorLinePaintInfo) { start, _ := info.LineSpan.Span() runes, offsets, font := info.Runes, info.GlyphOffsets, info.Font remaining := interval.IntDataList{info.LineSpan} for _, l := range t.ce.layers { if l != nil && l.Color() != nil { color := *l.Color() for _, span := range l.Spans().Overlaps(info.LineSpan) { interval.Visit(&remaining, span, func(vs, ve uint64, _ int) { s, e := vs-start, ve-start c.DrawRunes(font, runes[s:e], offsets[s:e], color) }) interval.Remove(&remaining, span) } } } for _, span := range remaining { s, e := span.Span() s, e = s-start, e-start c.DrawRunes(font, runes[s:e], offsets[s:e], t.ce.textColor) } }