--- nono/lib/textscreen.h 2026/04/29 17:05:26 1.1.1.14 +++ nono/lib/textscreen.h 2026/04/29 17:05:30 1.1.1.15 @@ -104,46 +104,30 @@ class TextScreen final Y = y; OutOfScreen = (X < 0 || X >= col || Y < 0 || Y >= row); } + void SetX(int x) { + X = x; + OutOfScreen = (X < 0 || X >= col); + } + void SetY(int y) { + Y = y; + OutOfScreen = (Y < 0 || Y >= row); + } // 文字出力後の右移動 - void Ascend() { - X++; - if (X >= col) { - switch (Mode) { - case Fixed: - OutOfScreen = true; - break; - case Console: - case Ring: - CRLF(); - break; - } - } + void Ascend(); + + // 復帰 + void CR() noexcept { + X = 0; } + // 改行 + void LF(); + // 復帰改行 - void CRLF() - { - X = 0; - Y++; - switch (Mode) { - case Fixed: - break; - case Console: - if (Y >= row) { - ScrollUp(); - Y = row - 1; - } - break; - case Ring: - if (Y >= row) { - Y = 0; - } - break; - } - // どのモードであっても OutOfScreen を更新 - // (Y=-1 から CRLF したら表示可能になるべき) - OutOfScreen = (Y < 0 || Y >= row); + void CRLF() { + CR(); + LF(); } // 1行の上スクロール @@ -198,9 +182,17 @@ class TextScreen final __printflike(5, 6); // 現在のカーソル位置の文字を取得 - // カーソルは移動する。 + // カーソルは移動しない。 uint16 Getc(); + // 現在のカーソル位置に文字を出力。 + // カーソルは移動しない。ch がカーソル移動を伴う制御文字なら動作不定。 + void Setc(uint16 ch); + + // 指定のカーソル位置に文字を出力。 + // カーソルは移動しない。ch がカーソル移動を伴う制御文字なら動作不定。 + void Setc(int x, int y, uint16 ch); + // 現在位置の属性を取得 TA GetAttr() const; @@ -212,15 +204,15 @@ class TextScreen final const std::vector& GetBuf() const { return textbuf; } // 現在の X 座標を取得 - int GetX() const { return X; } + int GetX() const noexcept { return X; } // 現在の Y 座標を取得 - int GetY() const { return Y; } + int GetY() const noexcept { return Y; } // 桁数を取得 - int GetCol() const { return col; } + int GetCol() const noexcept { return col; } // 行数を取得 - int GetRow() const { return row; } + int GetRow() const noexcept { return row; } // 行単位のコピー void CopyRowsFrom(int dst_y, int row, const TextScreen& src, int src_y); @@ -231,7 +223,7 @@ class TextScreen final // ような用途。 uint64 userdata {}; - protected: + private: // バッファ (幅x高さちょうどの長さ、ゼロ終端文字列ではない) // 上位8ビットは属性、下位8ビットが文字コード。 std::vector textbuf {};