diff options
-rw-r--r-- | src/uterm.h | 9 | ||||
-rw-r--r-- | src/uterm_video.c | 35 | ||||
-rw-r--r-- | src/uterm_video.h | 3 | ||||
-rw-r--r-- | src/uterm_video_drm.c | 8 | ||||
-rw-r--r-- | src/uterm_video_dumb.c | 8 | ||||
-rw-r--r-- | src/uterm_video_fbdev.c | 8 |
6 files changed, 62 insertions, 9 deletions
diff --git a/src/uterm.h b/src/uterm.h index 2cb5fd9..da09a24 100644 --- a/src/uterm.h +++ b/src/uterm.h @@ -217,6 +217,15 @@ int uterm_display_get_dpms(const struct uterm_display *disp); int uterm_display_use(struct uterm_display *disp); int uterm_display_swap(struct uterm_display *disp); +int uterm_display_fake_blend(struct uterm_display *disp, + const struct uterm_video_buffer *buf, + unsigned int x, unsigned int y, + uint8_t fr, uint8_t fg, uint8_t fb, + uint8_t br, uint8_t bg, uint8_t bb); +int uterm_display_fake_blendv(struct uterm_display *disp, + const struct uterm_video_blend_req *req, + size_t num); + /* video interface */ int uterm_video_new(struct uterm_video **out, diff --git a/src/uterm_video.c b/src/uterm_video.c index 5b09465..24c5b4f 100644 --- a/src/uterm_video.c +++ b/src/uterm_video.c @@ -412,6 +412,41 @@ int uterm_display_swap(struct uterm_display *disp) return VIDEO_CALL(disp->ops->swap, 0, disp); } +int uterm_display_fake_blend(struct uterm_display *disp, + const struct uterm_video_buffer *buf, + unsigned int x, unsigned int y, + uint8_t fr, uint8_t fg, uint8_t fb, + uint8_t br, uint8_t bg, uint8_t bb) +{ + struct uterm_video_blend_req req; + + if (!disp) + return -EINVAL; + + memset(&req, 0, sizeof(req)); + req.buf = buf; + req.x = x; + req.y = y; + req.fr = fr; + req.fg = fg; + req.fb = fb; + req.br = br; + req.bg = bg; + req.bb = bb; + + return VIDEO_CALL(disp->ops->fake_blendv, -EOPNOTSUPP, disp, &req, 1); +} + +int uterm_display_fake_blendv(struct uterm_display *disp, + const struct uterm_video_blend_req *req, + size_t num) +{ + if (!disp) + return -EINVAL; + + return VIDEO_CALL(disp->ops->fake_blendv, -EOPNOTSUPP, disp, req, num); +} + int uterm_video_new(struct uterm_video **out, struct ev_eloop *eloop, unsigned int type, diff --git a/src/uterm_video.h b/src/uterm_video.h index 57f8669..16a89df 100644 --- a/src/uterm_video.h +++ b/src/uterm_video.h @@ -64,6 +64,9 @@ struct display_ops { uint8_t br, uint8_t bg, uint8_t bb); int (*blendv) (struct uterm_display *disp, const struct uterm_video_blend_req *req, size_t num); + int (*fake_blendv) (struct uterm_display *disp, + const struct uterm_video_blend_req *req, + size_t num); int (*fill) (struct uterm_display *disp, uint8_t r, uint8_t g, uint8_t b, unsigned int x, unsigned int y, unsigned int width, unsigned int height); diff --git a/src/uterm_video_drm.c b/src/uterm_video_drm.c index 1e7f492..eb367ab 100644 --- a/src/uterm_video_drm.c +++ b/src/uterm_video_drm.c @@ -756,8 +756,9 @@ static int display_blend(struct uterm_display *disp, return 0; } -static int display_blendv(struct uterm_display *disp, - const struct uterm_video_blend_req *req, size_t num) +static int display_fake_blendv(struct uterm_display *disp, + const struct uterm_video_blend_req *req, + size_t num) { int ret; unsigned int i; @@ -1265,7 +1266,8 @@ const struct display_ops drm_display_ops = { .swap = display_swap, .blit = display_blit, .blend = display_blend, - .blendv = display_blendv, + .blendv = display_fake_blendv, + .fake_blendv = display_fake_blendv, .fill = display_fill, }; diff --git a/src/uterm_video_dumb.c b/src/uterm_video_dumb.c index 8bd48e6..f60db13 100644 --- a/src/uterm_video_dumb.c +++ b/src/uterm_video_dumb.c @@ -498,8 +498,9 @@ static int display_blend(struct uterm_display *disp, return 0; } -static int display_blendv(struct uterm_display *disp, - const struct uterm_video_blend_req *req, size_t num) +static int display_fake_blendv(struct uterm_display *disp, + const struct uterm_video_blend_req *req, + size_t num) { unsigned int tmp; uint8_t *dst, *src; @@ -937,7 +938,8 @@ const struct display_ops dumb_display_ops = { .swap = display_swap, .blit = display_blit, .blend = display_blend, - .blendv = display_blendv, + .blendv = display_fake_blendv, + .fake_blendv = display_fake_blendv, .fill = display_fill, }; diff --git a/src/uterm_video_fbdev.c b/src/uterm_video_fbdev.c index e9f5c1d..864a787 100644 --- a/src/uterm_video_fbdev.c +++ b/src/uterm_video_fbdev.c @@ -632,8 +632,9 @@ static int display_blend(struct uterm_display *disp, return 0; } -static int display_blendv(struct uterm_display *disp, - const struct uterm_video_blend_req *req, size_t num) +static int display_fake_blendv(struct uterm_display *disp, + const struct uterm_video_blend_req *req, + size_t num) { unsigned int tmp; uint8_t *dst, *src; @@ -933,7 +934,8 @@ const struct display_ops fbdev_display_ops = { .swap = display_swap, .blit = display_blit, .blend = display_blend, - .blendv = display_blendv, + .blendv = display_fake_blendv, + .fake_blendv = display_fake_blendv, .fill = display_fill, }; |