tcellで四角を描写する



tcellで上のキャプチャにように四角を描写してみます。


先に上のキャプチャのように実行されるコードを見てみます。

package main

import (
	"github.com/gdamore/tcell/v2"
)

func main() {
	screen, err := tcell.NewScreen()
	if err != nil {
		panic(err)
	}
	if err := screen.Init(); err != nil {
		panic(err)
	}
	defer screen.Fini()

	// ┌
	screen.SetContent(0, 0, tcell.RuneULCorner, nil, tcell.StyleDefault)
	// └
	screen.SetContent(0, 2, tcell.RuneLLCorner, nil, tcell.StyleDefault)

	// ─
	for col := 1; col < 6; col++ {
		screen.SetContent(col, 0, tcell.RuneHLine, nil, tcell.StyleDefault)
	}
	// │
	screen.SetContent(0, 1, tcell.RuneVLine, nil, tcell.StyleDefault)
	screen.SetContent(6, 1, tcell.RuneVLine, nil, tcell.StyleDefault)

	// ─
	for col := 1; col < 6; col++ {
		screen.SetContent(col, 2, tcell.RuneHLine, nil, tcell.StyleDefault)
	}

	// ┐
	screen.SetContent(6, 0, tcell.RuneURCorner, nil, tcell.StyleDefault)

	// ┘
	screen.SetContent(6, 2, tcell.RuneLRCorner, nil, tcell.StyleDefault)

	screen.Show()

	// Escでプログラムを終了できるようにする
	for {
		ev := screen.PollEvent() // イベントを取得する
		switch ev := ev.(type) {
		case *tcell.EventKey:
			switch ev.Key() { // 何のキーが押されたか?を調べる
			case tcell.KeyEscape: // ESCキーが押されたら終了する
				return
			}
		default:
			//
		}
	}
}

上記コードで太字で書かれているところが四角の描写に関するコードになります。




tcellで四角を描写するのも、文字の出力と同様、文字(Rune)を指定します。

文字の出力はtcellでTUIアプリを作成するで触れた時と同様、

func (b *baseScreen) SetContent(x, y int, mainc rune, combc []rune, st Style)

https://github.com/gdamore/tcell/blob/main/screen.go#L404

のメソッドを用いますが、mainc に指定する値は定数を用いています。


今回使用している定数は、tcell/runes.go at main · gdamore/tcellに記載されている内容を参考にしています。

同じカテゴリーの記事
マインクラフト用ビジュアルエディタを開発しています。
詳しくはinunosinsi/mcws_blockly - githubをご覧ください。