mirror of
https://github.com/felixangell/phi.git
synced 2024-09-11 15:55:25 +03:00
only render visible characters (i.e. horizontal line culling)
This commit is contained in:
parent
e6fa391b06
commit
d44801de76
@ -763,6 +763,13 @@ var (
|
|||||||
CAPS_LOCK = false
|
CAPS_LOCK = false
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func min(a, b int) int {
|
||||||
|
if a < b {
|
||||||
|
return a
|
||||||
|
}
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
// TODO(Felix) this is really stupid
|
// TODO(Felix) this is really stupid
|
||||||
func (b *Buffer) makeTab() string {
|
func (b *Buffer) makeTab() string {
|
||||||
blah := []rune{}
|
blah := []rune{}
|
||||||
@ -929,7 +936,7 @@ func (b *Buffer) renderAt(ctx *strife.Renderer, rx int, ry int) {
|
|||||||
ctx.Rect(highlightLinePosX, highlightLinePosY, b.w-ex, last_h, strife.Fill)
|
ctx.Rect(highlightLinePosX, highlightLinePosY, b.w-ex, last_h, strife.Fill)
|
||||||
}
|
}
|
||||||
|
|
||||||
var visibleLines int = 50
|
var visibleLines, visibleChars int = 50, -1
|
||||||
|
|
||||||
// HACK
|
// HACK
|
||||||
// force a render off screen
|
// force a render off screen
|
||||||
@ -949,6 +956,12 @@ func (b *Buffer) renderAt(ctx *strife.Renderer, rx int, ry int) {
|
|||||||
visibleLines = (int(b.h) / int(last_h)) + 3
|
visibleLines = (int(b.h) / int(last_h)) + 3
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// calculate how many chars we can fit
|
||||||
|
// on the screen.
|
||||||
|
if int(last_w) > 0 && int(b.w) != 0 {
|
||||||
|
visibleChars = (int(b.w-ex) / int(last_w)) - 3
|
||||||
|
}
|
||||||
|
|
||||||
start := b.cam.y
|
start := b.cam.y
|
||||||
upper := b.cam.y + visibleLines
|
upper := b.cam.y + visibleLines
|
||||||
if start > len(b.contents) {
|
if start > len(b.contents) {
|
||||||
@ -969,6 +982,9 @@ func (b *Buffer) renderAt(ctx *strife.Renderer, rx int, ry int) {
|
|||||||
for lineNum, rope := range b.contents[start:upper] {
|
for lineNum, rope := range b.contents[start:upper] {
|
||||||
currLine := []rune(rope.String())
|
currLine := []rune(rope.String())
|
||||||
|
|
||||||
|
// slice the visible characters only.
|
||||||
|
currLine = currLine[:min(visibleChars, len(currLine))]
|
||||||
|
|
||||||
// char index => colour
|
// char index => colour
|
||||||
var matches map[int]syntaxRuneInfo
|
var matches map[int]syntaxRuneInfo
|
||||||
if b.languageInfo != nil && len(currLine) > 0 {
|
if b.languageInfo != nil && len(currLine) > 0 {
|
||||||
|
Loading…
Reference in New Issue
Block a user