void resize_callback(window_t * window) { win_width = window->width - decor_width(); win_height = window->height - decor_height(); reinit_graphics_window(ctx, wina); draw_fill(ctx, rgb(0,0,0)); redraw_borders(); flip(ctx); }
void resize_finish(int w, int h) { yutani_window_resize_accept(yctx, wina, w, h); reinit_graphics_yutani(ctx, wina); win_width = w - decor_width(); win_height = h - decor_height(); yutani_window_resize_done(yctx, wina); }
void ttk_resize_callback(ttk_window_t * window_ttk, int width, int height) { if (!window_ttk) { fprintf(stderr, "[ttk] received window callback for a window not registered with TTK, ignoring.\n"); return; } yutani_window_resize_accept(yctx, window_ttk->core_window, width, height); /* Update window size */ window_ttk->width = width - decor_width(); window_ttk->height = height - decor_height(); /* Reinitialize graphics context */ reinit_graphics_yutani(window_ttk->core_context, window_ttk->core_window); ttk_window_draw(window_ttk); yutani_window_resize_done(yctx, window_ttk->core_window); yutani_flip(yctx, window_ttk->core_window); }
int main(int argc, char * argv[]) { static struct option long_opts[] = { {"no-repeat", no_argument, 0, 'n'}, {"initer", required_argument, 0, 'i'}, {"minx", required_argument, 0, 'x'}, {"maxx", required_argument, 0, 'X'}, {"conx", required_argument, 0, 'c'}, {"cony", required_argument, 0, 'C'}, {"width", required_argument, 0, 'W'}, {"height", required_argument, 0, 'H'}, {"help", no_argument, 0, 'h'}, {0,0,0,0} }; if (argc > 1) { /* Read some arguments */ int index, c; while ((c = getopt_long(argc, argv, "ni:x:X:c:C:W:H:h", long_opts, &index)) != -1) { if (!c) { if (long_opts[index].flag == 0) { c = long_opts[index].val; } } switch (c) { case 'n': no_repeat = 1; break; case 'i': initer = atof(optarg); break; case 'x': Minx = atof(optarg); break; case 'X': Maxx = atof(optarg); break; case 'c': conx = atof(optarg); break; case 'C': cony = atof(optarg); break; case 'W': width = atoi(optarg); break; case 'H': height = atoi(optarg); break; case 'h': usage(argv); exit(0); break; default: break; } } } yctx = yutani_init(); init_decorations(); window = yutani_window_create(yctx, width + decor_width(), height + decor_height()); yutani_window_move(yctx, window, left, top); yutani_window_advertise_icon(yctx, window, "Julia Fractals", "julia"); ctx = init_graphics_yutani(window); redraw(); yutani_flip(yctx, window); int playing = 1; while (playing) { yutani_msg_t * m = yutani_poll(yctx); if (m) { switch (m->type) { case YUTANI_MSG_KEY_EVENT: { struct yutani_msg_key_event * ke = (void*)m->data; if (ke->event.action == KEY_ACTION_DOWN && ke->event.keycode == 'q') { playing = 0; } } break; case YUTANI_MSG_WINDOW_FOCUS_CHANGE: { struct yutani_msg_window_focus_change * wf = (void*)m->data; yutani_window_t * win = hashmap_get(yctx->windows, (void*)wf->wid); if (win) { win->focused = wf->focused; decors(); yutani_flip(yctx, window); } } break; case YUTANI_MSG_RESIZE_OFFER: { struct yutani_msg_window_resize * wr = (void*)m->data; resize_finish(wr->width, wr->height); } break; case YUTANI_MSG_WINDOW_MOUSE_EVENT: { int result = decor_handle_event(yctx, m); switch (result) { case DECOR_CLOSE: playing = 0; break; default: /* Other actions */ break; } } break; case YUTANI_MSG_SESSION_END: playing = 0; break; default: break; } } free(m); } yutani_close(yctx, window); return 0; }
int main(int argc, char **argv) { fz_document *doc = NULL; int c; fz_context *ctx; fz_var(doc); yctx = yutani_init(); char * _width = getenv("WIDTH"); char * _height = getenv("HEIGHT"); width = _width ? atoi(_width) : 512; height = _height ? atoi(_height) : 512; init_decorations(); window = yutani_window_create(yctx, width + decor_width(), height + decor_height()); yutani_window_move(yctx, window, 50, 50); yutani_window_advertise_icon(yctx, window, "PDF Viewer", "pdfviewer"); gfx_ctx = init_graphics_yutani(window); draw_fill(gfx_ctx,rgb(0,0,0)); render_decorations(window, gfx_ctx, "PDFViewer - Loading..."); while ((c = fz_getopt(argc, argv, "wf")) != -1) { switch (c) { case 'f': fit = 1; break; } } ctx = fz_new_context(NULL, NULL, FZ_STORE_DEFAULT); if (!ctx) { fprintf(stderr, "Could not initialize fitz context.\n"); exit(1); } fz_set_aa_level(ctx, alphabits); colorspace = fz_device_rgb; fz_try(ctx) { while (fz_optind < argc) { fz_try(ctx) { filename = argv[fz_optind++]; files++; fz_try(ctx) { doc = fz_open_document(ctx, filename); } fz_catch(ctx) { fz_throw(ctx, "cannot open document: %s", filename); } if (fz_optind == argc || !isrange(argv[fz_optind])) drawrange(ctx, doc, "1-"); if (fz_optind < argc && isrange(argv[fz_optind])) drawrange(ctx, doc, argv[fz_optind++]); fz_close_document(doc); doc = NULL; } fz_catch(ctx) { if (!ignore_errors) fz_rethrow(ctx); fz_close_document(doc); doc = NULL; fz_warn(ctx, "ignoring error in '%s'", filename); } } } fz_catch(ctx) { fz_close_document(doc); fprintf(stderr, "error: cannot draw '%s'\n", filename); errored = 1; } fz_free_context(ctx); return (errored != 0); }
ttk_window_t * ttk_window_new(char * title, uint16_t width, uint16_t height) { ttk_window_t * new_win = malloc(sizeof(ttk_window_t)); new_win->title = strdup(title); new_win->width = width; new_win->height = height; new_win->off_x = decor_left_width; new_win->off_y = decor_top_height; new_win->core_window = yutani_window_create(yctx, new_win->width + decor_width(), new_win->height + decor_height()); yutani_window_move(yctx, new_win->core_window, TTK_DEFAULT_X, TTK_DEFAULT_Y); assert(new_win->core_window && "Oh dear, I've failed to allocate a new window from the server. This is terrible."); /* XXX icon; also need to do this if we change the title later */ yutani_window_advertise(yctx, new_win->core_window, new_win->title); new_win->core_context = init_graphics_yutani_double_buffer(new_win->core_window); draw_fill(new_win->core_context, rgb(TTK_BACKGROUND_DEFAULT)); ttk_window_draw(new_win); hashmap_set(ttk_wids_to_windows, (void*)new_win->core_window->wid, new_win); }
int main (int argc, char ** argv) { char * _windowed = getenv("DISPLAY"); if (_windowed) { setup_windowing(); resize_window_callback = resize_callback; win_width = 500; win_height = 500; init_decorations(); off_x = decor_left_width; off_y = decor_top_height; /* Do something with a window */ wina = window_create(300, 300, win_width + decor_width(), win_height + decor_height()); assert(wina); ctx = init_graphics_window_double_buffer(wina); } else { ctx = init_graphics_fullscreen_double_buffer(); win_width = ctx->width; win_height = ctx->height; off_x = 0; off_y = 0; } draw_fill(ctx, rgb(0,0,0)); redraw_borders(); flip(ctx); double time; /* Generate a palette */ uint32_t palette[256]; for (int x = 0; x < 256; ++x) { palette[x] = hsv_to_rgb(x,1.0,1.0); } while (1) { if (_windowed) { w_keyboard_t * kbd = poll_keyboard_async(); if (kbd) { char ch = kbd->key; free(kbd); if (ch == 'q') { goto done; break; } } } time += 1.0; int w = win_width; int h = win_height; for (int x = 0; x < win_width; ++x) { for (int y = 0; y < win_height; ++y) { double value = sin(dist(x + time, y, 128.0, 128.0) / 8.0) + sin(dist(x, y, 64.0, 64.0) / 8.0) + sin(dist(x, y + time / 7, 192.0, 64) / 7.0) + sin(dist(x, y, 192.0, 100.0) / 8.0); GFX(ctx, x + off_x, y + off_y) = palette[(int)((value + 4) * 32)]; } } redraw_borders(); flip(ctx); } done: if (_windowed) { teardown_windowing(); } return 0; }
int main(int argc, char * argv[]) { if (argc < 2) { fprintf(stderr, "Usage: %s image_file\n", argv[0]); return 1; } file_name = argv[1]; load_sprite_png(&image, argv[1]); yctx = yutani_init(); init_decorations(); win = yutani_window_create(yctx, image.width + decor_width(), image.height + decor_height()); yutani_window_move(yctx, win, center_x(image.width + decor_width()), center_y(image.height + decor_height())); ctx = init_graphics_yutani_double_buffer(win); int stride; stride = cairo_format_stride_for_width(CAIRO_FORMAT_ARGB32, win->width); surface_win = cairo_image_surface_create_for_data(ctx->backbuffer, CAIRO_FORMAT_ARGB32, win->width, win->height, stride); cr_win = cairo_create(surface_win); yutani_window_advertise_icon(yctx, win, "Image Viewer", "image-viewer"); redraw(); yutani_focus_window(yctx, win->wid); while (!should_exit) { yutani_msg_t * m = yutani_poll(yctx); if (m) { switch (m->type) { case YUTANI_MSG_KEY_EVENT: { struct yutani_msg_key_event * ke = (void*)m->data; if (ke->event.key == 'q' && ke->event.action == KEY_ACTION_DOWN) { should_exit = 1; } } break; case YUTANI_MSG_WINDOW_FOCUS_CHANGE: { struct yutani_msg_window_focus_change * wf = (void*)m->data; if (wf->wid == win->wid) { win->focused = wf->focused; redraw(); } } break; case YUTANI_MSG_WINDOW_MOUSE_EVENT: { struct yutani_msg_window_mouse_event * me = (void*)m->data; if (me->wid != win->wid) break; int result = decor_handle_event(yctx, m); switch (result) { case DECOR_CLOSE: should_exit = 1; break; default: /* Other actions */ break; } } break; case YUTANI_MSG_SESSION_END: should_exit = 1; break; default: break; } free(m); } } return 0; }
int main (int argc, char ** argv) { yctx = yutani_init(); win_width = 100; win_height = 100; init_decorations(); off_x = decor_left_width; off_y = decor_top_height; /* Do something with a window */ wina = yutani_window_create(yctx, win_width + decor_width(), win_height + decor_height()); yutani_window_move(yctx, wina, 300, 300); ctx = init_graphics_yutani_double_buffer(wina); draw_fill(ctx, rgb(0,0,0)); redraw_borders(); flip(ctx); yutani_flip(yctx, wina); yutani_window_advertise(yctx, wina, "Graphics Test"); pthread_t thread; pthread_create(&thread, NULL, draw_thread, NULL); while (!should_exit) { yutani_msg_t * m = yutani_poll(yctx); if (m) { switch (m->type) { case YUTANI_MSG_KEY_EVENT: { struct yutani_msg_key_event * ke = (void*)m->data; if (ke->event.action == KEY_ACTION_DOWN && ke->event.keycode == 'q') { should_exit = 1; } } break; case YUTANI_MSG_WINDOW_FOCUS_CHANGE: { struct yutani_msg_window_focus_change * wf = (void*)m->data; yutani_window_t * win = hashmap_get(yctx->windows, (void*)wf->wid); if (win) { win->focused = wf->focused; } } break; case YUTANI_MSG_SESSION_END: should_exit = 1; break; case YUTANI_MSG_RESIZE_OFFER: { struct yutani_msg_window_resize * wr = (void*)m->data; spin_lock(&draw_lock); resize_finish(wr->width, wr->height); spin_unlock(&draw_lock); } break; case YUTANI_MSG_WINDOW_MOUSE_EVENT: if (decor_handle_event(yctx, m) == DECOR_CLOSE) { should_exit = 1; } break; default: break; } free(m); } } yutani_close(yctx, wina); return 0; }