mirror of
https://github.com/felixangell/phi.git
synced 2024-09-11 15:55:25 +03:00
added line numbers
This commit is contained in:
parent
cd35acd8cb
commit
b9ed186212
@ -1,6 +1,7 @@
|
|||||||
package gui
|
package gui
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
@ -747,6 +748,9 @@ type syntaxRuneInfo struct {
|
|||||||
// dimensions of the last character we rendered
|
// dimensions of the last character we rendered
|
||||||
var last_w, last_h int
|
var last_w, last_h int
|
||||||
|
|
||||||
|
// editor x and y offsets
|
||||||
|
var ex, ey = 0, 0
|
||||||
|
|
||||||
func (b *Buffer) renderAt(ctx *strife.Renderer, rx int, ry int) {
|
func (b *Buffer) renderAt(ctx *strife.Renderer, rx int, ry int) {
|
||||||
// BACKGROUND
|
// BACKGROUND
|
||||||
ctx.SetColor(strife.HexRGB(b.cfg.Theme.Background))
|
ctx.SetColor(strife.HexRGB(b.cfg.Theme.Background))
|
||||||
@ -754,7 +758,7 @@ func (b *Buffer) renderAt(ctx *strife.Renderer, rx int, ry int) {
|
|||||||
|
|
||||||
if b.cfg.Editor.Highlight_Line && b.HasFocus {
|
if b.cfg.Editor.Highlight_Line && b.HasFocus {
|
||||||
ctx.SetColor(strife.Black) // highlight_line_col?
|
ctx.SetColor(strife.Black) // highlight_line_col?
|
||||||
ctx.Rect(rx, (ry+b.curs.ry*last_h)-(b.cam.y*last_h), b.w, last_h, strife.Fill)
|
ctx.Rect(ex+rx, ey+(ry+b.curs.ry*last_h)-(b.cam.y*last_h), b.w, last_h, strife.Fill)
|
||||||
}
|
}
|
||||||
|
|
||||||
// render the ol' cursor
|
// render the ol' cursor
|
||||||
@ -765,7 +769,7 @@ func (b *Buffer) renderAt(ctx *strife.Renderer, rx int, ry int) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ctx.SetColor(strife.HexRGB(b.cfg.Theme.Cursor)) // caret colour
|
ctx.SetColor(strife.HexRGB(b.cfg.Theme.Cursor)) // caret colour
|
||||||
ctx.Rect((rx+b.curs.rx*last_w)-(b.cam.x*last_w), (ry+b.curs.ry*last_h)-(b.cam.y*last_h), cursorWidth, last_h, strife.Fill)
|
ctx.Rect(ex+(rx+b.curs.rx*last_w)-(b.cam.x*last_w), (ry+b.curs.ry*last_h)-(b.cam.y*last_h), cursorWidth, last_h, strife.Fill)
|
||||||
}
|
}
|
||||||
|
|
||||||
var visibleLines int = 50
|
var visibleLines int = 50
|
||||||
@ -785,24 +789,10 @@ func (b *Buffer) renderAt(ctx *strife.Renderer, rx int, ry int) {
|
|||||||
upper = len(b.contents)
|
upper = len(b.contents)
|
||||||
}
|
}
|
||||||
|
|
||||||
var y_col int
|
numLines := len(b.contents)
|
||||||
for _, rope := range b.contents[start:upper] {
|
|
||||||
// this is because if we had the following
|
|
||||||
// text input:
|
|
||||||
//
|
|
||||||
// Foo
|
|
||||||
// _ <-- underscore is a space!
|
|
||||||
// Blah
|
|
||||||
// and we delete that underscore... it causes
|
|
||||||
// a panic because there are no characters in
|
|
||||||
// the empty string!
|
|
||||||
if rope.Len() == 0 {
|
|
||||||
// even though the string is empty
|
|
||||||
// we still need to offset it by a line
|
|
||||||
y_col += 1
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
|
var y_col int
|
||||||
|
for lineNum, rope := range b.contents[start:upper] {
|
||||||
currLine := []rune(rope.String())
|
currLine := []rune(rope.String())
|
||||||
|
|
||||||
// char index => colour
|
// char index => colour
|
||||||
@ -897,7 +887,22 @@ func (b *Buffer) renderAt(ctx *strife.Renderer, rx int, ry int) {
|
|||||||
a, colorStack = int32(colorStack[len(colorStack)-1]), colorStack[:len(colorStack)-1]
|
a, colorStack = int32(colorStack[len(colorStack)-1]), colorStack[:len(colorStack)-1]
|
||||||
ctx.SetColor(strife.HexRGB(a))
|
ctx.SetColor(strife.HexRGB(a))
|
||||||
}
|
}
|
||||||
last_w, last_h = ctx.String(string(char), (rx + ((x_col - 1) * last_w)), (ry + (y_col * last_h)))
|
last_w, last_h = ctx.String(string(char), ex+(rx+((x_col-1)*last_w)), (ry + (y_col * last_h)))
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
gutterPadPx := 10
|
||||||
|
numLinesWidth := len(string(numLines)) + 1
|
||||||
|
gutterWidth := last_w*numLinesWidth + (gutterPadPx * 2)
|
||||||
|
|
||||||
|
// render the line numbers
|
||||||
|
ctx.SetColor(strife.HexRGB(b.cfg.Theme.Background))
|
||||||
|
ctx.Rect(rx, (ry + (y_col * last_h)), gutterWidth, b.h, strife.Fill)
|
||||||
|
|
||||||
|
ctx.SetColor(strife.HexRGB(b.cfg.Theme.Foreground))
|
||||||
|
ctx.String(fmt.Sprintf("%*d", numLinesWidth, start+lineNum), rx+gutterPadPx, (ry + (y_col * last_h)))
|
||||||
|
|
||||||
|
ex = gutterWidth
|
||||||
}
|
}
|
||||||
|
|
||||||
y_col += 1
|
y_col += 1
|
||||||
|
Loading…
Reference in New Issue
Block a user