ref: 24b0ed8ccf3ea37334d4fc2d4c60d40c30d2c7a1
parent: 477f328c5b67cee80cb3ed43b3d5f58dc4b128f8
author: Sigrid Solveig Haflínudóttir <[email protected]>
date: Tue Aug 24 10:13:22 EDT 2021
Squashed 'microui/' changes from 3cb9c8f..5826f4c 5826f4c mu_draw_rect: set draw position when clipping, fixes images not clipped correctly 4fd28b3 add "force redraw" to mu_render (redrawing when window is (un)hidden) ea55c03 update copyright years and name 86a529f fix a warning on 386 git-subtree-dir: microui git-subtree-split: 5826f4cbc4057ebba3d1b6d5004d0079c715d489
--- a/LICENSE
+++ b/LICENSE
@@ -1,5 +1,5 @@
Copyright (c) 2018-2019 rxi
-Copyright (c) 2020 ftrvxmtrx
+Copyright (c) 2020-2021 Sigrid Solveig Haflínudóttir
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
--- a/demo/plan9.c
+++ b/demo/plan9.c
@@ -16,6 +16,7 @@
char *s;
Biobuf *snarf;
Keyboardctl *kctl;
+ int redraw;
Rune key;
Mouse m;
Alt a[] = {
@@ -50,11 +51,13 @@
process_frame();
oldbuttons = 0;
+ redraw = 0;
for (;;) {
process_frame();
- if (mu_render())
+ if (mu_render(redraw))
flushimage(display, 1);
+ redraw = 0;
gotevent = 1;
switch (alt(a)) {
case 0: /* mouse */
@@ -79,6 +82,7 @@
case 1: /* resize */
getwindow(display, Refnone);
+ redraw = 1;
break;
case 2: /* keyboard */
--- a/microui.c
+++ b/microui.c
@@ -278,7 +278,7 @@
}
/* 32bit fnv-1a hash */
-#define HASH_INITIAL 2166136261
+#define HASH_INITIAL 2166136261U
static void
hash(mu_Id *hash, const void *data, int size)
@@ -516,10 +516,12 @@
mu_draw_rect(mu_Rect rect, Image *color)
{
mu_Command *cmd;
- rect = clip_rect(rect, mu_get_clip_rect());
+ mu_Rect clipped;
+ clipped = clip_rect(rect, mu_get_clip_rect());
if (rect.w > 0 && rect.h > 0) {
cmd = mu_push_command(MU_COMMAND_RECT);
- cmd->rect.rect = rect;
+ cmd->rect.rect = clipped;
+ cmd->rect.position = subpt(Pt(clipped.x, clipped.y), Pt(rect.x, rect.y));
cmd->rect.color = color;
}
}
@@ -1436,12 +1438,12 @@
}
int
-mu_render(void)
+mu_render(int force)
{
mu_Command *cmd;
mu_Rect r, iconr;
- if (memcmp(&mu_ctx.screen, &screen->r, sizeof(mu_ctx.screen)) != 0)
+ if (force || !eqrect(mu_ctx.screen, screen->r) != 0)
mu_ctx.screen = screen->r;
else if (mu_ctx.oldcmdsnum == mu_ctx.cmdsnum && memcmp(mu_ctx.oldcmds, mu_ctx.cmds, mu_ctx.cmdsnum*sizeof(mu_Command)) == 0)
if (mu_ctx.oldstrnum == mu_ctx.strnum && memcmp(mu_ctx.oldstr, mu_ctx.str, mu_ctx.strnum) == 0)
@@ -1470,7 +1472,7 @@
case MU_COMMAND_RECT:
if (cmd->rect.color != nil)
- draw(screen, screenrect(cmd->rect.rect), cmd->rect.color, nil, ZP);
+ draw(screen, screenrect(cmd->rect.rect), cmd->rect.color, nil, cmd->rect.position);
break;
case MU_COMMAND_ICON:
--- a/microui.h
+++ b/microui.h
@@ -1,6 +1,6 @@
#pragma lib "libmicroui.a"
-typedef unsigned mu_Id;
+typedef u32int mu_Id;
typedef struct mu_Command mu_Command;
typedef struct mu_Container mu_Container;
@@ -133,6 +133,7 @@
struct
{
Image *color;
+ Point position;
mu_Rect rect;
}rect;
@@ -253,7 +254,7 @@
Image *mu_color(u8int r, u8int g, u8int b, u8int a);
void mu_init(void);
-int mu_render(void);
+int mu_render(int force);
void mu_begin(void);
void mu_end(void);
void mu_set_focus(mu_Id id);
@@ -278,8 +279,8 @@
mu_Command *mu_push_command(int type);
void mu_set_clip(mu_Rect rect);
-void mu_draw_rect(mu_Rect rect, Image *color);
-void mu_draw_box(mu_Rect rect, Image *color);
+void mu_draw_rect(mu_Rect rect, Image *image);
+void mu_draw_box(mu_Rect rect, Image *image);
void mu_draw_text(Font *font, const char *str, int len, Point pos, Image *color);
void mu_draw_icon(int id, mu_Rect rect);