imgviewer: small improvements

This commit is contained in:
K. Lange 2021-09-13 19:56:56 +09:00
parent f676ff4295
commit 49da6af715

View File

@ -44,6 +44,8 @@ int top = 40;
int width = 300;
int height = 300;
int current_scale = 100;
sprite_t img = {0};
#define APPLICATION_TITLE "Image Viewer"
@ -60,22 +62,43 @@ void usage(char * argv[]) {
}
static void decors() {
render_decorations(window, ctx, window_title);
if (current_scale != 100) {
char tmp[1100];
snprintf(tmp, 1100, "%s [%d%%]", window_title, current_scale);
render_decorations(window, ctx, tmp);
} else {
render_decorations(window, ctx, window_title);
}
}
void redraw() {
static double r = 0.0;
uint32_t dark = rgb(107,107,107);
uint32_t light = rgb(147,147,147);
uint32_t black = rgb(0,0,0);
int calc_width = img.width * (current_scale / 100.0);
int calc_height = img.height * (current_scale / 100.0);
int image_left = width / 2 - calc_width / 2;
int image_right = image_left + calc_width; /* TODO scaling */
int image_top = height / 2 - calc_height / 2;
int image_bot = image_top + calc_height;
for (int y = 0; y < height; ++y) {
for (int x = 0; x < width; ++x) {
GFX(ctx,x+decor_left_width,y+decor_top_height) = (((y / 10) % 2 == 0) ^ ((x / 10) % 2 == 0)) ? rgb(107,107,107) : rgb(147,147,147);
uint32_t color = (x < image_left || x >= image_right || y < image_top || y >= image_bot) ? black :
((((y / 10) % 2 == 0) ^ ((x / 10) % 2 == 0)) ? dark : light);
GFX(ctx,x+decor_left_width,y+decor_top_height) = color;
}
}
draw_sprite(ctx, &img, decor_left_width + width/2 - img.width/2, decor_top_height + height/2 - img.height/2);
if (current_scale != 100) {
draw_sprite_scaled(ctx, &img, decor_left_width + image_left, decor_top_height + image_top, calc_width, calc_height);
} else {
draw_sprite(ctx, &img, decor_left_width + image_left, decor_top_height + image_top);
}
decors();
flip(ctx);
r += 0.02;
}
void resize_finish(int w, int h) {
@ -101,6 +124,11 @@ void resize_finish(int w, int h) {
yutani_flip(yctx, window);
}
static int one_fifth(int scale) {
int out = scale * 0.05;
if (out) return out;
return 1;
}
int main(int argc, char * argv[]) {
@ -157,8 +185,8 @@ int main(int argc, char * argv[]) {
return 1;
}
width = img.width;
height = img.height;
width = img.width < 300 ? 300 : img.width;
height = img.height < 300 ? 300 : img.height;
window = yutani_window_create(yctx, width + decor_width, height + decor_height);
yutani_window_move(yctx, window, left, top);
@ -225,6 +253,17 @@ int main(int argc, char * argv[]) {
/* Other actions */
break;
}
if (me->wid == window->wid) {
if (me->buttons & YUTANI_MOUSE_SCROLL_UP) {
current_scale = current_scale + one_fifth(current_scale);
redraw();
yutani_flip(yctx, window);
} else if (me->buttons & YUTANI_MOUSE_SCROLL_DOWN) {
current_scale = current_scale - one_fifth(current_scale);
redraw();
yutani_flip(yctx, window);
}
}
}
break;
case YUTANI_MSG_WINDOW_CLOSE: