small performance increase

This commit is contained in:
2024-10-03 19:29:18 +02:00
parent 7e714abddf
commit f2f7e51750
2 changed files with 27 additions and 58 deletions
+17 -49
View File
@@ -2,61 +2,29 @@ package main
import (
"github.com/orus-dev/osui"
"github.com/orus-dev/osui/colors"
"github.com/orus-dev/osui/ui"
)
var students []string = []string{}
func main() {
screen := osui.NewScreen(App())
screen.Run()
}
func App() *ui.PaginatorComponent {
w, h := osui.GetTerminalSize()
var keybindings ui.Class[*ui.TextComponent]
keybindings.SetProperties(func(tc *ui.TextComponent) *ui.TextComponent {
tc.Text = colors.Blue + tc.Text
tc.Data.Y = h - 2
return tc
})
return ui.Paginator(
// Page 1
ui.Div(
ui.Text("Welcome to the example! The blue text on the bottom show the keybindings"),
keybindings.Class(ui.Text("Next Page: Tab. Previous Page: shift + tab")),
),
// Page 2
ui.Div(
ui.WithPosition(0, 0, ui.Text("This blue square is a div. A div stores multiple components into one")),
ui.WithPosition((w-30)/2, (h-4)/2,
ui.WithSize(30, 5,
ui.Div(ui.WithPosition(4, 1, ui.Button("Hello, World!").Params(ui.ButtonParams{Width: 19}))).Params(ui.DivParams{Style: ui.DivStyle{Outline: colors.Blue}}),
)),
keybindings.Class(ui.Text("Navigate: Ctrl+(W/A/S/D)")),
),
// Page 3
ui.Div(
ui.WithPosition(0, 0, ui.Text("This is a InputBox. It takes user input just like a GUI. "+colors.Red+colors.Bold+"NOTE: This InputBox is inside a div")),
ui.WithPosition((w-32)/2, (h-3)/2, ui.InputBox(30)),
keybindings.Class(ui.Text("Navigate: Ctrl+(W/A/S/D). Finish: Enter.")),
),
// Page 4
ui.Div(
ui.WithPosition(0, 0, ui.Text("This is a Button. To click it press Enter. "+colors.Red+colors.Bold+"NOTE: This Button is inside a div")),
ui.WithPosition((w-20)/2, (h-3)/2, ui.Button("This is a button")),
keybindings.Class(ui.Text("Navigate: Ctrl+(W/A/S/D). Click Button: Enter")),
),
// Page 5
ui.Div(
ui.WithPosition(0, 0, ui.Text("This is a Menu. It prompts you to select an item. "+colors.Red+colors.Bold+"NOTE: This Menu is inside a div")),
ui.WithPosition(0, 2, ui.Menu("Item 1", "Item 2", "Item 3", "Item 4", "Item 5").Params(ui.MenuParams{OnSelected: func(mc *ui.MenuComponent, b bool) {}})),
keybindings.Class(ui.Text("Navigate: Ctrl+(W/A/S/D). Navigate Menu: W/S. Select: Enter. Exit Menu: Q. ")),
),
)
func App() *ui.DivComponent {
return renderRoot()
}
func renderRoot() *ui.DivComponent {
var root ui.Id[*ui.DivComponent]
return root.Id(ui.Div(
ui.WithPosition(0, 0, ui.Text("student managment system (terminal edition permium) made by fefek")),
ui.WithPosition(0, 2, ui.Button("add student")),
ui.WithPosition(25, 2, ui.Button("delete student")),
ui.WithPosition(50, 2, ui.Button("info")),
ui.WithPosition(0, 5, ui.Text("students")),
ui.WithPosition(0, 7, ui.Menu(students...)),
))
}
+6 -5
View File
@@ -14,13 +14,16 @@ import (
"golang.org/x/term"
)
func RenderLine(frame_, line_ string, x int, fm map[int]string, lm map[int]string) string {
var re = regexp.MustCompile(`(\x1b\[([0-9;]*)[a-zA-Z])+`)
func RenderLine(frame_, line_ string, x int, fm, lm map[int]string) string {
var res strings.Builder
frame := []rune(frame_)
line := []rune(line_)
for i := range frame {
if i >= x && i-x < len(line) {
flen, llen := len(frame), len(line)
for i := 0; i < flen; i++ {
if i >= x && i-x < llen {
if v, ok := lm[i-x]; ok {
res.WriteString(v)
}
@@ -36,8 +39,6 @@ func RenderLine(frame_, line_ string, x int, fm map[int]string, lm map[int]strin
}
func CompressString(input string) (string, map[int]string) {
pattern := `(\x1b\[([0-9;]*)[a-zA-Z])+`
re := regexp.MustCompile(pattern)
matchesMap := make(map[int]string)
res := []rune{}