struct geo_facts geo_facts_of(struct vnc *vnc, caca_display_t * disp, caca_canvas_t * view) { struct geo_facts ret; ret.px_width = caca_get_display_width(disp); ret.px_height = caca_get_display_height(disp); ret.ch_width = caca_get_canvas_width(view); ret.ch_height = caca_get_canvas_height(view); ret.vnc_width = vnc->conn->width; ret.vnc_height = vnc->conn->height; return ret; }
/** * Refresh the display and send resize event */ static void Refresh(vout_display_t *vd) { vout_display_sys_t *sys = vd->sys; /* */ caca_refresh_display(sys->dp); /* */ const unsigned width = caca_get_display_width(sys->dp); const unsigned height = caca_get_display_height(sys->dp); if (width != vd->cfg->display.width || height != vd->cfg->display.height) vout_display_SendEventDisplaySize(vd, width, height); }
/** * Compute the place in canvas unit. */ static void Place(vout_display_t *vd, vout_display_place_t *place) { vout_display_sys_t *sys = vd->sys; vout_display_PlacePicture(place, &vd->source, vd->cfg, false); const int canvas_width = cucul_get_canvas_width(sys->cv); const int canvas_height = cucul_get_canvas_height(sys->cv); const int display_width = caca_get_display_width(sys->dp); const int display_height = caca_get_display_height(sys->dp); if (display_width > 0 && display_height > 0) { place->x = place->x * canvas_width / display_width; place->y = place->y * canvas_height / display_height; place->width = (place->width * canvas_width + display_width/2) / display_width; place->height = (place->height * canvas_height + display_height/2) / display_height; } else { place->x = 0; place->y = 0; place->width = canvas_width; place->height = display_height; } }
/** * Control for vout display */ static int Control(vout_display_t *vd, int query, va_list args) { vout_display_sys_t *sys = vd->sys; switch (query) { case VOUT_DISPLAY_HIDE_MOUSE: caca_set_mouse(sys->dp, 0); return VLC_SUCCESS; case VOUT_DISPLAY_CHANGE_DISPLAY_SIZE: { const vout_display_cfg_t *cfg = va_arg(args, const vout_display_cfg_t *); caca_refresh_display(sys->dp); /* Not quite good but not sure how to resize it */ if (cfg->display.width != caca_get_display_width(sys->dp) || cfg->display.height != caca_get_display_height(sys->dp)) return VLC_EGENERIC; return VLC_SUCCESS; } case VOUT_DISPLAY_CHANGE_ZOOM: case VOUT_DISPLAY_CHANGE_DISPLAY_FILLED: case VOUT_DISPLAY_CHANGE_SOURCE_ASPECT: return VLC_SUCCESS; case VOUT_DISPLAY_CHANGE_SOURCE_CROP: if (sys->dither) cucul_free_dither(sys->dither); sys->dither = NULL; return VLC_SUCCESS; default: msg_Err(vd, "Unsupported query in vout display caca"); return VLC_EGENERIC; } }
static VALUE get_width(VALUE self) { return NUM2UINT(caca_get_display_width(_SELF)); }