From e3eb9fe9f0ad559bfdbcc03f44d07235f124d2de Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sun, 22 Mar 2015 21:28:50 +0100 Subject: [PATCH] Create video_driver_viewport_info --- gfx/video_driver.c | 44 ++++++++++++++++++++++++++++++--- gfx/video_driver.h | 2 ++ input/drivers/x11_input.c | 9 ++++--- input/input_common.c | 8 +----- menu/menu_entries_cbs_iterate.c | 5 +--- menu/menu_entries_cbs_ok.c | 4 +-- record/record_driver.c | 6 ++--- screenshot.c | 3 +-- tools/retroarch-joyconfig.c | 5 ++++ 9 files changed, 59 insertions(+), 27 deletions(-) diff --git a/gfx/video_driver.c b/gfx/video_driver.c index f7054547e2..be83442d41 100644 --- a/gfx/video_driver.c +++ b/gfx/video_driver.c @@ -231,7 +231,7 @@ uintptr_t video_driver_get_current_framebuffer(void) { #ifdef HAVE_FBO driver_t *driver = driver_get_ptr(); - if (driver->video_poke && driver->video_poke->get_current_framebuffer) + if (driver && driver->video_poke && driver->video_poke->get_current_framebuffer) return driver->video_poke->get_current_framebuffer(driver->video_data); #endif return 0; @@ -240,7 +240,7 @@ uintptr_t video_driver_get_current_framebuffer(void) retro_proc_address_t video_driver_get_proc_address(const char *sym) { driver_t *driver = driver_get_ptr(); - if (driver && driver->video_poke && driver->video_poke->get_proc_address) + if (driver && driver && driver->video_poke && driver->video_poke->get_proc_address) return driver->video_poke->get_proc_address(driver->video_data, sym); return NULL; } @@ -540,7 +540,7 @@ void init_video(void) /* Force custom viewport to have sane parameters. */ custom_vp->width = width; custom_vp->height = height; - driver->video->viewport_info(driver->video_data, custom_vp); + video_driver_viewport_info(custom_vp); } video_driver_set_rotation( @@ -572,6 +572,8 @@ bool video_driver_has_windowed(void) { driver_t *driver = driver_get_ptr(); + if (!driver) + return false; if (!driver->video) return false; @@ -586,6 +588,8 @@ void video_driver_set_nonblock_state(bool toggle) { driver_t *driver = driver_get_ptr(); + if (!driver) + return; if (!driver->video) return; @@ -597,6 +601,8 @@ bool video_driver_set_rotation(unsigned rotation) { driver_t *driver = driver_get_ptr(); + if (!driver) + return false; if (!driver->video) return false; if (!driver->video->set_rotation) @@ -612,6 +618,8 @@ void video_driver_set_video_mode(unsigned width, { driver_t *driver = driver_get_ptr(); + if (!driver) + return; if (!driver->video_data) return; if (!driver->video_poke) @@ -627,6 +635,8 @@ bool video_driver_get_video_output_size(unsigned *width, unsigned *height) { driver_t *driver = driver_get_ptr(); + if (!driver) + return false; if (!driver->video_data) return false; if (!driver->video_poke) @@ -643,6 +653,8 @@ void video_driver_set_aspect_ratio(unsigned aspectratio_index) { driver_t *driver = driver_get_ptr(); + if (!driver) + return; if (!driver->video_data) return; if (!driver->video_poke) @@ -658,6 +670,8 @@ void video_driver_show_mouse(bool state) { driver_t *driver = driver_get_ptr(); + if (!driver) + return; if (!driver->video_data) return; if (!driver->video_poke) @@ -673,6 +687,8 @@ void video_driver_set_osd_msg(const char *msg, { driver_t *driver = driver_get_ptr(); + if (!driver) + return; if (!driver->video_data) return; if (!driver->video_poke) @@ -688,6 +704,8 @@ void video_driver_set_texture_enable(bool enable, bool fullscreen) #ifdef HAVE_MENU driver_t *driver = driver_get_ptr(); + if (!driver) + return; if (!driver->video_data) return; if (!driver->video_poke) @@ -705,6 +723,8 @@ void video_driver_set_texture_frame(const void *frame, bool rgb32, #ifdef HAVE_MENU driver_t *driver = driver_get_ptr(); + if (!driver) + return; if (!driver->video_data) return; if (!driver->video_poke) @@ -715,3 +735,21 @@ void video_driver_set_texture_frame(const void *frame, bool rgb32, driver->video_data, frame, rgb32, width, height, alpha); #endif } + +bool video_driver_viewport_info(struct video_viewport *vp) +{ + driver_t *driver = driver_get_ptr(); + + if (!driver) + return false; + if (!driver->video_data) + return false; + if (!driver->video) + return false; + if (!driver->video->viewport_info) + return false; + + driver->video->viewport_info(driver->video_data, vp); + + return true; +} diff --git a/gfx/video_driver.h b/gfx/video_driver.h index d65cf01e8f..ee6f9e88a4 100644 --- a/gfx/video_driver.h +++ b/gfx/video_driver.h @@ -296,6 +296,8 @@ void video_driver_set_texture_enable(bool enable, bool full_screen); void video_driver_set_texture_frame(const void *frame, bool rgb32, unsigned width, unsigned height, float alpha); +bool video_driver_viewport_info(struct video_viewport *vp); + #ifdef __cplusplus } #endif diff --git a/input/drivers/x11_input.c b/input/drivers/x11_input.c index a7bbea0e6a..8977c693b8 100644 --- a/input/drivers/x11_input.c +++ b/input/drivers/x11_input.c @@ -295,12 +295,13 @@ static void x_input_poll_mouse(x11_input_t *x11) /* Somewhat hacky, but seem to do the job. */ if (x11->grab_mouse && driver->video->focus(driver->video_data)) { + int mid_w, mid_h; struct video_viewport vp = {0}; - if (driver->video && driver->video->viewport_info) - driver->video->viewport_info(driver->video_data, &vp); - int mid_w = vp.full_width >> 1; - int mid_h = vp.full_height >> 1; + video_driver_viewport_info(&vp); + + mid_w = vp.full_width >> 1; + mid_h = vp.full_height >> 1; if (x11->mouse_x != mid_w || x11->mouse_y != mid_h) { diff --git a/input/input_common.c b/input/input_common.c index 4c9df8c504..e099ebbc1f 100644 --- a/input/input_common.c +++ b/input/input_common.c @@ -133,16 +133,10 @@ bool input_translate_coord_viewport(int mouse_x, int mouse_y, { int scaled_screen_x, scaled_screen_y, scaled_x, scaled_y; struct video_viewport vp = {0}; - bool have_viewport_info = false; - driver_t *driver = driver_get_ptr(); - - have_viewport_info = driver->video && driver->video->viewport_info; - if (!have_viewport_info) + if (!video_driver_viewport_info(&vp)) return false; - driver->video->viewport_info(driver->video_data, &vp); - scaled_screen_x = (2 * mouse_x * 0x7fff) / (int)vp.full_width - 0x7fff; scaled_screen_y = (2 * mouse_y * 0x7fff) / (int)vp.full_height - 0x7fff; if (scaled_screen_x < -0x7fff || scaled_screen_x > 0x7fff) diff --git a/menu/menu_entries_cbs_iterate.c b/menu/menu_entries_cbs_iterate.c index 75545cc9eb..6a233fb2e4 100644 --- a/menu/menu_entries_cbs_iterate.c +++ b/menu/menu_entries_cbs_iterate.c @@ -461,10 +461,7 @@ static int action_iterate_menu_viewport(const char *label, unsigned action) if (!settings->video.scale_integer) { video_viewport_t vp; - - if (driver->video_data && driver->video && - driver->video->viewport_info) - driver->video->viewport_info(driver->video_data, &vp); + video_driver_viewport_info(&vp); if (type == MENU_SETTINGS_CUSTOM_VIEWPORT) { diff --git a/menu/menu_entries_cbs_ok.c b/menu/menu_entries_cbs_ok.c index 1a05f3086b..24cf16ac2d 100644 --- a/menu/menu_entries_cbs_ok.c +++ b/menu/menu_entries_cbs_ok.c @@ -881,9 +881,7 @@ static int action_ok_custom_viewport(const char *path, MENU_SETTINGS_CUSTOM_VIEWPORT, idx); - if (driver->video_data && driver->video && - driver->video->viewport_info) - driver->video->viewport_info(driver->video_data, custom); + video_driver_viewport_info(custom); aspectratio_lut[ASPECT_RATIO_CUSTOM].value = (float)custom->width / custom->height; diff --git a/record/record_driver.c b/record/record_driver.c index 155853f158..0387f0e02c 100644 --- a/record/record_driver.c +++ b/record/record_driver.c @@ -107,8 +107,7 @@ void recording_dump_frame(const void *data, unsigned width, { struct video_viewport vp = {0}; - if (driver->video && driver->video->viewport_info) - driver->video->viewport_info(driver->video_data, &vp); + video_driver_viewport_info(&vp); if (!vp.width || !vp.height) { @@ -230,8 +229,7 @@ bool recording_init(void) { struct video_viewport vp = {0}; - if (driver->video && driver->video->viewport_info) - driver->video->viewport_info(driver->video_data, &vp); + video_driver_viewport_info(&vp); if (!vp.width || !vp.height) { diff --git a/screenshot.c b/screenshot.c index c975ca2e50..f713e39e40 100644 --- a/screenshot.c +++ b/screenshot.c @@ -183,8 +183,7 @@ static bool take_screenshot_viewport(void) settings_t *settings = config_get_ptr(); global_t *global = global_get_ptr(); - if (driver->video && driver->video->viewport_info) - driver->video->viewport_info(driver->video_data, &vp); + video_driver_viewport_info(&vp); if (!vp.width || !vp.height) return false; diff --git a/tools/retroarch-joyconfig.c b/tools/retroarch-joyconfig.c index fa5765e105..d2f64b79ca 100644 --- a/tools/retroarch-joyconfig.c +++ b/tools/retroarch-joyconfig.c @@ -511,3 +511,8 @@ void rarch_main_msg_queue_push(const char *msg, unsigned prio, unsigned duration bool flush) { } + +bool video_driver_viewport_info(struct video_viewport *vp) +{ + return false; +}