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.

Reply via email to