Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/ipcgfx/src/server.c

    rcdd6fc9 rfc4abca  
    11/*
    2  * Copyright (c) 2023 Jiri Svoboda
     2 * Copyright (c) 2019 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    4141#include <gfx/color.h>
    4242#include <gfx/render.h>
     43#include <ipc/bd.h>
    4344#include <ipcgfx/ipc/gc.h>
    4445#include <ipcgfx/server.h>
     
    5152static ipc_gc_srv_bitmap_t *gc_bitmap_lookup(ipc_gc_srv_t *, sysarg_t);
    5253
    53 static void gc_set_clip_rect_srv(ipc_gc_srv_t *srvgc, ipc_call_t *call)
     54static void gc_set_rgb_color_srv(ipc_gc_srv_t *srvgc, ipc_call_t *call)
     55{
     56        uint16_t r, g, b;
     57        gfx_color_t *color;
     58        errno_t rc;
     59
     60        r = ipc_get_arg1(call);
     61        g = ipc_get_arg2(call);
     62        b = ipc_get_arg3(call);
     63
     64        rc = gfx_color_new_rgb_i16(r, g, b, &color);
     65        if (rc != EOK) {
     66                async_answer_0(call, ENOMEM);
     67                return;
     68        }
     69
     70        rc = gfx_set_color(srvgc->gc, color);
     71        async_answer_0(call, rc);
     72}
     73
     74static void gc_fill_rect_srv(ipc_gc_srv_t *srvgc, ipc_call_t *call)
    5475{
    5576        gfx_rect_t rect;
     
    6182        rect.p1.y = ipc_get_arg4(call);
    6283
    63         rc = gfx_set_clip_rect(srvgc->gc, &rect);
    64         async_answer_0(call, rc);
    65 }
    66 
    67 static void gc_set_clip_rect_null_srv(ipc_gc_srv_t *srvgc, ipc_call_t *call)
    68 {
    69         errno_t rc;
    70 
    71         rc = gfx_set_clip_rect(srvgc->gc, NULL);
    72         async_answer_0(call, rc);
    73 }
    74 
    75 static void gc_set_rgb_color_srv(ipc_gc_srv_t *srvgc, ipc_call_t *call)
    76 {
    77         uint16_t r, g, b;
    78         gfx_color_t *color;
    79         errno_t rc;
    80 
    81         r = ipc_get_arg1(call);
    82         g = ipc_get_arg2(call);
    83         b = ipc_get_arg3(call);
    84 
    85         rc = gfx_color_new_rgb_i16(r, g, b, &color);
    86         if (rc != EOK) {
    87                 async_answer_0(call, ENOMEM);
    88                 return;
    89         }
    90 
    91         rc = gfx_set_color(srvgc->gc, color);
    92         async_answer_0(call, rc);
    93 }
    94 
    95 static void gc_fill_rect_srv(ipc_gc_srv_t *srvgc, ipc_call_t *call)
    96 {
    97         gfx_rect_t rect;
    98         errno_t rc;
    99 
    100         rect.p0.x = ipc_get_arg1(call);
    101         rect.p0.y = ipc_get_arg2(call);
    102         rect.p1.x = ipc_get_arg3(call);
    103         rect.p1.y = ipc_get_arg4(call);
    104 
    10584        rc = gfx_fill_rect(srvgc->gc, &rect);
    106         async_answer_0(call, rc);
    107 }
    108 
    109 static void gc_update_srv(ipc_gc_srv_t *srvgc, ipc_call_t *call)
    110 {
    111         errno_t rc;
    112 
    113         rc = gfx_update(srvgc->gc);
    11485        async_answer_0(call, rc);
    11586}
     
    151122
    152123        if (!async_share_out_receive(&call, &size, &flags)) {
    153                 async_answer_0(&call, EINVAL);
    154124                async_answer_0(icall, EINVAL);
    155125                return;
     
    158128        /* Check size */
    159129        if (size != PAGES2SIZE(SIZE2PAGES(dim.x * dim.y * sizeof(uint32_t)))) {
    160                 async_answer_0(&call, EINVAL);
    161130                async_answer_0(icall, EINVAL);
    162131                return;
     
    165134        rc = async_share_out_finalize(&call, &pixels);
    166135        if (rc != EOK || pixels == AS_MAP_FAILED) {
    167                 async_answer_0(&call, ENOMEM);
    168136                async_answer_0(icall, ENOMEM);
    169137                return;
     
    385353
    386354                switch (method) {
    387                 case GC_SET_CLIP_RECT:
    388                         gc_set_clip_rect_srv(&srvgc, &call);
    389                         break;
    390                 case GC_SET_CLIP_RECT_NULL:
    391                         gc_set_clip_rect_null_srv(&srvgc, &call);
    392                         break;
    393355                case GC_SET_RGB_COLOR:
    394356                        gc_set_rgb_color_srv(&srvgc, &call);
     
    396358                case GC_FILL_RECT:
    397359                        gc_fill_rect_srv(&srvgc, &call);
    398                         break;
    399                 case GC_UPDATE:
    400                         gc_update_srv(&srvgc, &call);
    401360                        break;
    402361                case GC_BITMAP_CREATE:
Note: See TracChangeset for help on using the changeset viewer.