This is an automated email from the git hooks/post-receive script.
git pushed a commit to branch evas-sdl3-rewrite
in repository efl.
View the commit online.
commit e1f537dfcf359364350c90ad5713d0a124dbd63a
Author: Swagtoy <[email protected]>
AuthorDate: Sun May 17 23:07:09 2026 -0400
ecore_evas_sdl: split sw renderer creation into separate functions
Signed-off-by: Swagtoy <[email protected]>
---
.../ecore_evas/engines/sdl/ecore_evas_sdl.c | 113 ++++++++++++++-------
1 file changed, 76 insertions(+), 37 deletions(-)
diff --git a/src/modules/ecore_evas/engines/sdl/ecore_evas_sdl.c b/src/modules/ecore_evas/engines/sdl/ecore_evas_sdl.c
index 42c30f4caa..4c08b4069f 100644
--- a/src/modules/ecore_evas/engines/sdl/ecore_evas_sdl.c
+++ b/src/modules/ecore_evas/engines/sdl/ecore_evas_sdl.c
@@ -380,11 +380,73 @@ static Ecore_Evas_Engine_Func _ecore_sdl_engine_func =
.fn_selection_request = NULL,
};
-static Ecore_Evas*
-_ecore_evas_internal_sdl_new(int rmethod, const char* name, int w, int h, Eina_Bool gl)
+static SDL_Window*
+_create_evas_sdl_window(Ecore_Evas *ee, const char *name, int w, int h)
+{
+ SDL_Window *win = SDL_CreateWindow(name, w, h, SDL_WINDOW_RESIZABLE);
+ if (!win)
+ {
+ ERR("SDL_CreateWindow failed: %s", SDL_GetError());
+ return NULL;
+ }
+ // so we later can retrieve this from the window pointer alone
+ SDL_SetPointerProperty(SDL_GetWindowProperties(win), "_Ecore_Evas", ee);
+ ee->prop.window = SDL_GetWindowID(win);
+ return win;
+}
+
+static Eina_Bool
+_ecore_evas_internal_sdl_new_gl(Ecore_Evas_SDL_Data *edata, Ecore_Evas *ee, const char *name, int rmethod, int w, int h)
+{
+ ee->can_async_render = EINA_TRUE;
+
+ return EINA_TRUE;
+
+ error:
+ return EINA_FALSE;
+}
+
+static Eina_Bool
+_ecore_evas_internal_sdl_new_soft(Ecore_Evas_SDL_Data *edata, Ecore_Evas *ee, const char *name, int rmethod, int w, int h)
+{
+ evas_output_method_set(ee->evas, rmethod);
+ ee->func.fn_post_render = _ecore_evas_sdl_post_render;
+ ee->can_async_render = EINA_FALSE;
+
+ edata->w = _create_evas_sdl_window(ee, name, w, h);
+ if (!edata->w)
+ {
+ goto error;
+ }
+
+ // XXX: error
+ SDL_Surface *surface = SDL_GetWindowSurface(edata->w);
+
+ Evas_Engine_Info_Software_SDL *einfo = (Evas_Engine_Info_Software_SDL *) evas_engine_info_get(ee->evas);
+ if (!einfo)
+ {
+ ERR("evas_engine_info_get failed.");
+ goto error;
+ }
+
+ einfo->info.format = surface->format;
+ if (!evas_engine_info_set(ee->evas, (Evas_Engine_Info *) einfo))
+ {
+ ERR("evas_engine_info_set() for engine '%s' failed.", ee->driver);
+ goto error;
+ }
+
+ return EINA_TRUE;
+
+ error:
+ return EINA_FALSE;
+}
+
+static Ecore_Evas*
+_ecore_evas_internal_sdl_new(int rmethod, const char *name, int w, int h, Eina_Bool gl)
{
- Ecore_Evas_SDL_Data *edata;
Ecore_Evas *ee;
+ Ecore_Evas_SDL_Data *edata;
// XXX
if (!name)
@@ -403,10 +465,7 @@ _ecore_evas_internal_sdl_new(int rmethod, const char* name, int w, int h, Eina_B
return NULL;
ECORE_MAGIC_SET(ee, ECORE_MAGIC_EVAS);
- ee->engine.data = "" = calloc(1, sizeof(Ecore_Evas_SDL_Data));
-
ee->engine.func = (Ecore_Evas_Engine_Func *)&_ecore_sdl_engine_func;
-
ee->driver = "sdl";
if (name) ee->name = strdup(name);
@@ -425,55 +484,35 @@ _ecore_evas_internal_sdl_new(int rmethod, const char* name, int w, int h, Eina_B
ee->prop.withdrawn = EINA_TRUE;
ee->prop.sticky = EINA_FALSE;
ee->prop.window = 0;
- // TODO: probably make this only occur for the sw renderer, when GL
- // is later implemented
- if (gl)
- ee->func.fn_post_render = _ecore_evas_sdl_post_render;
+
/* init evas here */
if (!ecore_evas_evas_new(ee, w, h))
{
ERR("Can not create Canvas.");
- goto on_error;
+ goto error;
}
- evas_output_method_set(ee->evas, rmethod);
- ee->can_async_render = gl ? EINA_FALSE : EINA_TRUE;
+ ee->engine.data = "" = calloc(1, sizeof(Ecore_Evas_SDL_Data));
- edata->w = SDL_CreateWindow(name, w, h, SDL_WINDOW_RESIZABLE);
- if (!edata->w)
+ if (gl)
{
- ERR("SDL_CreateWindow failed: %s", SDL_GetError());
- goto on_error;
+ // TODO
+ if (!_ecore_evas_internal_sdl_new_gl(edata, ee, name, rmethod, w, h))
+ goto error;
}
- // XXX error
- SDL_Surface *surface = SDL_GetWindowSurface(edata->w);
-
- Evas_Engine_Info_Software_SDL *einfo = (Evas_Engine_Info_Software_SDL *) evas_engine_info_get(ee->evas);
- if (!einfo)
+ else
{
- ERR("evas_engine_info_get failed.");
- goto on_error;
+ if (!_ecore_evas_internal_sdl_new_soft(edata, ee, name, rmethod, w, h))
+ goto error;
}
- einfo->info.format = surface->format;
- if (!evas_engine_info_set(ee->evas, (Evas_Engine_Info *) einfo))
- {
- ERR("evas_engine_info_set() for engine '%s' failed.", ee->driver);
- ecore_evas_free(ee);
- return NULL;
- }
- // XXX move to new function, split out from gl
-
_ecore_evas_sdl_init(ee, w, h);
- ee->prop.window = SDL_GetWindowID(edata->w);
ecore_evas_done(ee, EINA_FALSE);
- SDL_SetPointerProperty(SDL_GetWindowProperties(edata->w), "_Ecore_Evas", ee);
-
_ecore_evas_focus_device_set(ee, NULL, EINA_TRUE);
return ee;
- on_error:
+ error:
ecore_evas_free(ee);
return NULL;
}
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.