diff options
author | June McEnroe <programble@gmail.com> | 2018-02-04 18:17:37 -0500 |
---|---|---|
committer | June McEnroe <programble@gmail.com> | 2018-02-04 18:17:37 -0500 |
commit | bc7ae68f58ddf49bfcb0aafd3b05579becc666e2 (patch) | |
tree | d4c094d12632a80fee0b17fd90c3893f56c8e4a9 /bin | |
parent | Handle window resizing in gfcocoa (diff) | |
download | src-bc7ae68f58ddf49bfcb0aafd3b05579becc666e2.tar.gz src-bc7ae68f58ddf49bfcb0aafd3b05579becc666e2.zip |
Avoid doing excessive work in gfxx
By stopping when the next column would be off the edge of the buffer.
Diffstat (limited to 'bin')
-rw-r--r-- | bin/gfxx.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/bin/gfxx.c b/bin/gfxx.c index 31f97ea1..1477a8c7 100644 --- a/bin/gfxx.c +++ b/bin/gfxx.c @@ -142,7 +142,7 @@ struct Pos { size_t y; }; -static void next(struct Pos *pos) { +static bool next(struct Pos *pos) { if (mirror) { if (pos->x == pos->left) { pos->y++; @@ -152,6 +152,7 @@ static void next(struct Pos *pos) { pos->left += width; pos->x = pos->left + width; pos->y = 0; + if (pos->x > pos->xres) return false; } pos->x--; } else { @@ -164,8 +165,10 @@ static void next(struct Pos *pos) { pos->left += width; pos->x = pos->left; pos->y = 0; + if (pos->x > pos->xres) return false; } } + return true; } static void put(const struct Pos *pos, uint32_t p) { @@ -191,7 +194,7 @@ static void drawBits(struct Pos *pos) { } else { put(pos, GRAY(SCALE(bits, n))); } - next(pos); + if (!next(pos)) return; } } } @@ -208,7 +211,7 @@ static void draw8(struct Pos *pos) { uint32_t b = (endian ? get(i) >> 0 : get(i) >> 6) & MASK(2); put(pos, RGB(SCALE(3, r), SCALE(3, g), SCALE(2, b))); } - next(pos); + if (!next(pos)) break; } } @@ -221,7 +224,7 @@ static void draw16(struct Pos *pos) { uint32_t g = n >> 5 & MASK(6); uint32_t b = n >> 0 & MASK(5); put(pos, RGB(SCALE(5, r), SCALE(6, g), SCALE(5, b))); - next(pos); + if (!next(pos)) break; } } @@ -232,7 +235,7 @@ static void draw24(struct Pos *pos) { } else { put(pos, RGB(get(i + 2), get(i + 1), get(i + 0))); } - next(pos); + if (!next(pos)) break; } } @@ -243,7 +246,7 @@ static void draw32(struct Pos *pos) { } else { put(pos, RGB(get(i + 2), get(i + 1), get(i + 0))); } - next(pos); + if (!next(pos)) break; } } @@ -299,4 +302,5 @@ extern void input(char in) { break; case '+': scale++; break; case '-': if (scale > 1) scale--; } + printOpts(); } |