summaryrefslogtreecommitdiff
path: root/src/common/backend.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/common/backend.c')
-rw-r--r--src/common/backend.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/src/common/backend.c b/src/common/backend.c
index c8d2caf..cab1dce 100644
--- a/src/common/backend.c
+++ b/src/common/backend.c
@@ -184,16 +184,17 @@ void yasl_surface_destroy(struct yasl_surface *s)
struct yasl_display *yasl_surface_display(const struct yasl_surface *s)
{
- if (!s || !s->display->ops->surface_display)
- return 0;
- return s->display->ops->surface_display(s);
+ return s ? s->display : NULL;
}
void yasl_surface_set_callbacks(struct yasl_surface *s, const struct yasl_surface_cbs *cbs, void *ud)
{
- if (!s || !s->display->ops->surface_set_callbacks)
+ if (!s)
return;
- s->display->ops->surface_set_callbacks(s, cbs, ud);
+ s->callbacks = cbs ? *cbs : (struct yasl_surface_cbs){0};
+ s->ud = ud;
+ if (s->display && s->display->ops && s->display->ops->surface_set_callbacks)
+ s->display->ops->surface_set_callbacks(s, cbs, ud);
}
void yasl_surface_set_title(struct yasl_surface *s, const char *title)
@@ -250,9 +251,13 @@ bool yasl_surface_input_poll(struct yasl_surface *s, struct yasl_input_event *ev
struct yasl_geometry yasl_surface_geometry(const struct yasl_surface *s)
{
- if (!s || !s->display->ops->surface_geometry)
+ if (!s)
return (struct yasl_geometry){.scale_120 = YASL_SCALE_UNIT};
- return s->display->ops->surface_geometry(s);
+ if (s->scale_120)
+ return (struct yasl_geometry){s->size, s->scale_120};
+ if (s->display && s->display->ops && s->display->ops->surface_geometry)
+ return s->display->ops->surface_geometry(s);
+ return (struct yasl_geometry){s->size, YASL_SCALE_UNIT};
}
uint32_t yasl_surface_state(const struct yasl_surface *s)