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 24ba4be930ab4029b52cf4a59dcfa12952fb389e
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 | 101 +++++++++++++--------
1 file changed, 61 insertions(+), 40 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..866a24a4af 100644
--- a/src/modules/ecore_evas/engines/sdl/ecore_evas_sdl.c
+++ b/src/modules/ecore_evas/engines/sdl/ecore_evas_sdl.c
@@ -380,10 +380,65 @@ 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);
+ // 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_soft(Ecore_Evas *ee, const char *name, int rmethod, int w, int h)
{
Ecore_Evas_SDL_Data *edata;
+ ee->engine.data = "" = calloc(1, sizeof(Ecore_Evas_SDL_Data));
+ 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 error;
+ }
+ evas_output_method_set(ee->evas, rmethod);
+ ee->can_async_render = EINA_FALSE;
+
+ edata->w = _create_evas_sdl_window(ee, name, w, h);
+ if (!edata->w)
+ {
+ ERR("SDL_CreateWindow failed: %s", SDL_GetError());
+ 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:
+ //free(edata);
+ 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 *ee;
// XXX
@@ -403,10 +458,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,51 +477,20 @@ _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;
+ // TODO
}
- evas_output_method_set(ee->evas, rmethod);
- ee->can_async_render = gl ? EINA_FALSE : EINA_TRUE;
-
- edata->w = SDL_CreateWindow(name, w, h, SDL_WINDOW_RESIZABLE);
- if (!edata->w)
+ else
{
- ERR("SDL_CreateWindow failed: %s", SDL_GetError());
- goto on_error;
+ if (!_ecore_evas_internal_sdl_new_soft(ee, name, rmethod, w, h))
+ goto on_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 on_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;
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.