Skip to content

Commit

Permalink
Update termbox2
Browse files Browse the repository at this point in the history
Signed-off-by: AnErrupTion <anerruption@disroot.org>
  • Loading branch information
AnErrupTion committed Aug 4, 2024
1 parent 3706126 commit ef86ea1
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 15 deletions.
7 changes: 1 addition & 6 deletions build.zig
Original file line number Diff line number Diff line change
Expand Up @@ -69,20 +69,15 @@ pub fn build(b: *std.Build) !void {
if (enable_x11_support) exe.linkSystemLibrary("xcb");
exe.linkLibC();

// HACK: Only fails with ReleaseSafe, so we'll override it.
const translate_c = b.addTranslateC(.{
.root_source_file = b.path("include/termbox2.h"),
.target = target,
.optimize = if (optimize == .ReleaseSafe) .ReleaseFast else optimize,
.optimize = optimize,
});
translate_c.defineCMacroRaw("TB_IMPL");
const termbox2 = translate_c.addModule("termbox2");
exe.root_module.addImport("termbox2", termbox2);

if (optimize == .ReleaseSafe) {
std.debug.print("warn: termbox2 module is being built in ReleaseFast due to a bug.\n", .{});
}

b.installArtifact(exe);

const run_cmd = b.addRunArtifact(exe);
Expand Down
45 changes: 36 additions & 9 deletions include/termbox2.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/

#ifndef __TERMBOX_H
#define __TERMBOX_H
#ifndef TERMBOX_H_INCL
#define TERMBOX_H_INCL

#ifndef _XOPEN_SOURCE
#define _XOPEN_SOURCE
Expand Down Expand Up @@ -105,7 +105,7 @@ extern "C" {
#elif defined TB_OPT_ATTR_W && TB_OPT_ATTR_W == 64
#else
#undef TB_OPT_ATTR_W
#if defined TB_OPT_TRUECOLOR // Back-compat for old flag
#if defined TB_OPT_TRUECOLOR // Deprecated. Back-compat for old flag.
#define TB_OPT_ATTR_W 32
#else
#define TB_OPT_ATTR_W 16
Expand Down Expand Up @@ -347,7 +347,7 @@ extern "C" {
#define TB_ERR_SELECT TB_ERR_POLL
#define TB_ERR_RESIZE_SELECT TB_ERR_RESIZE_POLL

/* Function types to be used with tb_set_func() */
/* Deprecated. Function types to be used with tb_set_func(). */
#define TB_FUNC_EXTRACT_PRE 0
#define TB_FUNC_EXTRACT_POST 1

Expand Down Expand Up @@ -646,8 +646,8 @@ int tb_printf_ex(int x, int y, uintattr_t fg, uintattr_t bg, size_t *out_w,
int tb_send(const char *buf, size_t nbuf);
int tb_sendf(const char *fmt, ...);

/* Set custom functions. fn_type is one of TB_FUNC_* constants, fn is a
* compatible function pointer, or NULL to clear.
/* Deprecated. Set custom functions. fn_type is one of TB_FUNC_* constants, fn
* is a compatible function pointer, or NULL to clear.
*
* TB_FUNC_EXTRACT_PRE:
* If specified, invoke this function BEFORE termbox tries to extract any
Expand Down Expand Up @@ -683,17 +683,35 @@ int tb_utf8_unicode_to_char(char *out, uint32_t c);
/* Library utility functions */
int tb_last_errno(void);
const char *tb_strerror(int err);
struct tb_cell *tb_cell_buffer(void);
struct tb_cell *tb_cell_buffer(void); // Deprecated
int tb_has_truecolor(void);
int tb_has_egc(void);
int tb_attr_width(void);
const char *tb_version(void);

/* Deprecation notice!
*
* The following will be removed in version 3.x (ABI version 3):
*
* TB_256_BLACK (use TB_HI_BLACK)
* TB_OPT_TRUECOLOR (use TB_OPT_ATTR_W)
* TB_TRUECOLOR_BOLD (use TB_BOLD)
* TB_TRUECOLOR_UNDERLINE (use TB_UNDERLINE)
* TB_TRUECOLOR_REVERSE (use TB_REVERSE)
* TB_TRUECOLOR_ITALIC (use TB_ITALICe)
* TB_TRUECOLOR_BLINK (use TB_BLINK)
* TB_TRUECOLOR_BLACK (use TB_HI_BLACK)
* tb_cell_buffer
* tb_set_func
* TB_FUNC_EXTRACT_PRE
* TB_FUNC_EXTRACT_POST
*/

#ifdef __cplusplus
}
#endif

#endif /* __TERMBOX_H */
#endif /* TERMBOX_H_INCL */

#ifdef TB_IMPL

Expand Down Expand Up @@ -1648,6 +1666,7 @@ int tb_present(void) {

send_attr(back->fg, back->bg);
if (w > 1 && x >= global.front.width - (w - 1)) {
// Not enough room for wide char, send spaces
for (i = x; i < global.front.width; i++) {
send_char(i, y, ' ');
}
Expand All @@ -1660,12 +1679,20 @@ int tb_present(void) {
#endif
send_char(x, y, back->ch);
}

// When wcwidth>1, we need to advance the cursor by more
// than 1, thereby skipping some cells. Set these skipped
// cells to an invalid codepoint in the front buffer, so
// that if this cell is later replaced by a wcwidth==1 char,
// we'll get a cell_cmp diff for the skipped cells and
// properly re-render.
for (i = 1; i < w; i++) {
struct tb_cell *front_wide;
uint32_t invalid = -1;
if_err_return(rv,
cellbuf_get(&global.front, x + i, y, &front_wide));
if_err_return(rv,
cell_set(front_wide, 0, 1, back->fg, back->bg));
cell_set(front_wide, &invalid, 1, -1, -1));
}
}
}
Expand Down

0 comments on commit ef86ea1

Please sign in to comment.