Changeset 7470d97 in mainline for uspace/lib/ipcgfx
- Timestamp:
- 2021-04-30T15:05:06Z (4 years ago)
- Branches:
- master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 051349b
- Parents:
- 252d03c
- Location:
- uspace/lib/ipcgfx
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/ipcgfx/include/ipcgfx/ipc/gc.h
r252d03c r7470d97 39 39 40 40 typedef enum { 41 GC_SET_RGB_COLOR = IPC_FIRST_USER_METHOD, 41 GC_SET_CLIP_RECT = IPC_FIRST_USER_METHOD, 42 GC_SET_CLIP_RECT_NULL, 43 GC_SET_RGB_COLOR, 42 44 GC_FILL_RECT, 43 45 GC_UPDATE, -
uspace/lib/ipcgfx/src/client.c
r252d03c r7470d97 45 45 #include "../private/client.h" 46 46 47 static errno_t ipc_gc_set_clip_rect(void *, gfx_rect_t *); 47 48 static errno_t ipc_gc_set_color(void *, gfx_color_t *); 48 49 static errno_t ipc_gc_fill_rect(void *, gfx_rect_t *); … … 55 56 56 57 gfx_context_ops_t ipc_gc_ops = { 58 .set_clip_rect = ipc_gc_set_clip_rect, 57 59 .set_color = ipc_gc_set_color, 58 60 .fill_rect = ipc_gc_fill_rect, … … 63 65 .bitmap_get_alloc = ipc_gc_bitmap_get_alloc 64 66 }; 67 68 /** Set clipping rectangle on IPC GC. 69 * 70 * @param arg IPC GC 71 * @param rect Rectangle 72 * 73 * @return EOK on success or an error code 74 */ 75 static errno_t ipc_gc_set_clip_rect(void *arg, gfx_rect_t *rect) 76 { 77 ipc_gc_t *ipcgc = (ipc_gc_t *) arg; 78 async_exch_t *exch; 79 errno_t rc; 80 81 exch = async_exchange_begin(ipcgc->sess); 82 if (rect != NULL) { 83 rc = async_req_4_0(exch, GC_SET_CLIP_RECT, rect->p0.x, rect->p0.y, 84 rect->p1.x, rect->p1.y); 85 } else { 86 rc = async_req_0_0(exch, GC_SET_CLIP_RECT_NULL); 87 } 88 89 async_exchange_end(exch); 90 91 return rc; 92 } 65 93 66 94 /** Set color on IPC GC. -
uspace/lib/ipcgfx/src/server.c
r252d03c r7470d97 52 52 static ipc_gc_srv_bitmap_t *gc_bitmap_lookup(ipc_gc_srv_t *, sysarg_t); 53 53 54 static void gc_set_clip_rect_srv(ipc_gc_srv_t *srvgc, ipc_call_t *call) 55 { 56 gfx_rect_t rect; 57 errno_t rc; 58 59 rect.p0.x = ipc_get_arg1(call); 60 rect.p0.y = ipc_get_arg2(call); 61 rect.p1.x = ipc_get_arg3(call); 62 rect.p1.y = ipc_get_arg4(call); 63 64 rc = gfx_set_clip_rect(srvgc->gc, &rect); 65 async_answer_0(call, rc); 66 } 67 68 static void gc_set_clip_rect_null_srv(ipc_gc_srv_t *srvgc, ipc_call_t *call) 69 { 70 errno_t rc; 71 72 rc = gfx_set_clip_rect(srvgc->gc, NULL); 73 async_answer_0(call, rc); 74 } 75 54 76 static void gc_set_rgb_color_srv(ipc_gc_srv_t *srvgc, ipc_call_t *call) 55 77 { … … 361 383 362 384 switch (method) { 385 case GC_SET_CLIP_RECT: 386 gc_set_clip_rect_srv(&srvgc, &call); 387 break; 388 case GC_SET_CLIP_RECT_NULL: 389 gc_set_clip_rect_null_srv(&srvgc, &call); 390 break; 363 391 case GC_SET_RGB_COLOR: 364 392 gc_set_rgb_color_srv(&srvgc, &call); -
uspace/lib/ipcgfx/test/ipcgfx.c
r252d03c r7470d97 50 50 static void test_ipcgc_conn(ipc_call_t *, void *); 51 51 52 static errno_t test_gc_set_clip_rect(void *, gfx_rect_t *); 52 53 static errno_t test_gc_set_color(void *, gfx_color_t *); 53 54 static errno_t test_gc_fill_rect(void *, gfx_rect_t *); … … 60 61 61 62 static gfx_context_ops_t test_gc_ops = { 63 .set_clip_rect = test_gc_set_clip_rect, 62 64 .set_color = test_gc_set_color, 63 65 .fill_rect = test_gc_fill_rect, … … 75 77 errno_t rc; 76 78 79 bool set_clip_rect_called; 80 bool do_clip; 81 gfx_rect_t set_clip_rect_rect; 82 77 83 bool set_color_called; 78 84 uint16_t set_color_r; … … 103 109 gfx_bitmap_alloc_t alloc; 104 110 } test_bitmap_t; 111 112 /** gfx_set_clip_rect with server returning failure */ 113 PCUT_TEST(set_clip_rect_failure) 114 { 115 errno_t rc; 116 service_id_t sid; 117 test_response_t resp; 118 gfx_context_t *gc; 119 gfx_rect_t rect; 120 async_sess_t *sess; 121 ipc_gc_t *ipcgc; 122 123 async_set_fallback_port_handler(test_ipcgc_conn, &resp); 124 125 // FIXME This causes this test to be non-reentrant! 126 rc = loc_server_register(test_ipcgfx_server); 127 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 128 129 rc = loc_service_register(test_ipcgfx_svc, &sid); 130 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 131 132 sess = loc_service_connect(sid, INTERFACE_GC, 0); 133 PCUT_ASSERT_NOT_NULL(sess); 134 135 rc = ipc_gc_create(sess, &ipcgc); 136 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 137 138 gc = ipc_gc_get_ctx(ipcgc); 139 PCUT_ASSERT_NOT_NULL(gc); 140 141 resp.rc = ENOMEM; 142 resp.set_clip_rect_called = false; 143 rect.p0.x = 1; 144 rect.p0.y = 2; 145 rect.p1.x = 3; 146 rect.p1.y = 4; 147 rc = gfx_set_clip_rect(gc, &rect); 148 PCUT_ASSERT_ERRNO_VAL(resp.rc, rc); 149 PCUT_ASSERT_TRUE(resp.set_clip_rect_called); 150 PCUT_ASSERT_EQUALS(rect.p0.x, resp.set_clip_rect_rect.p0.x); 151 PCUT_ASSERT_EQUALS(rect.p0.y, resp.set_clip_rect_rect.p0.y); 152 PCUT_ASSERT_EQUALS(rect.p1.x, resp.set_clip_rect_rect.p1.x); 153 PCUT_ASSERT_EQUALS(rect.p1.y, resp.set_clip_rect_rect.p1.y); 154 155 ipc_gc_delete(ipcgc); 156 async_hangup(sess); 157 158 rc = loc_service_unregister(sid); 159 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 160 } 161 162 /** gfx_set_clip_rect with server returning success */ 163 PCUT_TEST(set_clip_rect_success) 164 { 165 errno_t rc; 166 service_id_t sid; 167 test_response_t resp; 168 gfx_context_t *gc; 169 gfx_rect_t rect; 170 async_sess_t *sess; 171 ipc_gc_t *ipcgc; 172 173 async_set_fallback_port_handler(test_ipcgc_conn, &resp); 174 175 // FIXME This causes this test to be non-reentrant! 176 rc = loc_server_register(test_ipcgfx_server); 177 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 178 179 rc = loc_service_register(test_ipcgfx_svc, &sid); 180 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 181 182 sess = loc_service_connect(sid, INTERFACE_GC, 0); 183 PCUT_ASSERT_NOT_NULL(sess); 184 185 rc = ipc_gc_create(sess, &ipcgc); 186 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 187 188 gc = ipc_gc_get_ctx(ipcgc); 189 PCUT_ASSERT_NOT_NULL(gc); 190 191 resp.rc = EOK; 192 resp.set_clip_rect_called = false; 193 rect.p0.x = 1; 194 rect.p0.y = 2; 195 rect.p1.x = 3; 196 rect.p1.y = 4; 197 rc = gfx_set_clip_rect(gc, &rect); 198 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 199 PCUT_ASSERT_TRUE(resp.set_clip_rect_called); 200 PCUT_ASSERT_TRUE(resp.do_clip); 201 PCUT_ASSERT_EQUALS(rect.p0.x, resp.set_clip_rect_rect.p0.x); 202 PCUT_ASSERT_EQUALS(rect.p0.y, resp.set_clip_rect_rect.p0.y); 203 PCUT_ASSERT_EQUALS(rect.p1.x, resp.set_clip_rect_rect.p1.x); 204 PCUT_ASSERT_EQUALS(rect.p1.y, resp.set_clip_rect_rect.p1.y); 205 206 ipc_gc_delete(ipcgc); 207 async_hangup(sess); 208 209 rc = loc_service_unregister(sid); 210 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 211 } 212 213 /** gfx_set_clip_rect with null rectangle, server returning success */ 214 PCUT_TEST(set_clip_rect_null_success) 215 { 216 errno_t rc; 217 service_id_t sid; 218 test_response_t resp; 219 gfx_context_t *gc; 220 async_sess_t *sess; 221 ipc_gc_t *ipcgc; 222 223 async_set_fallback_port_handler(test_ipcgc_conn, &resp); 224 225 // FIXME This causes this test to be non-reentrant! 226 rc = loc_server_register(test_ipcgfx_server); 227 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 228 229 rc = loc_service_register(test_ipcgfx_svc, &sid); 230 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 231 232 sess = loc_service_connect(sid, INTERFACE_GC, 0); 233 PCUT_ASSERT_NOT_NULL(sess); 234 235 rc = ipc_gc_create(sess, &ipcgc); 236 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 237 238 gc = ipc_gc_get_ctx(ipcgc); 239 PCUT_ASSERT_NOT_NULL(gc); 240 241 resp.rc = EOK; 242 resp.set_clip_rect_called = false; 243 244 rc = gfx_set_clip_rect(gc, NULL); 245 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 246 PCUT_ASSERT_TRUE(resp.set_clip_rect_called); 247 PCUT_ASSERT_FALSE(resp.do_clip); 248 249 ipc_gc_delete(ipcgc); 250 async_hangup(sess); 251 252 rc = loc_service_unregister(sid); 253 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 254 } 105 255 106 256 /** gfx_set_color with server returning failure */ … … 234 384 235 385 resp.rc = ENOMEM; 236 resp. set_color_called = false;386 resp.fill_rect_called = false; 237 387 rect.p0.x = 1; 238 388 rect.p0.y = 2; … … 284 434 285 435 resp.rc = EOK; 286 resp. set_color_called = false;436 resp.fill_rect_called = false; 287 437 rect.p0.x = 1; 288 438 rect.p0.y = 2; … … 898 1048 } 899 1049 1050 /** Set clipping rectangle in test GC. 1051 * 1052 * @param arg Test GC 1053 * @param rect Rectangle 1054 * 1055 * @return EOK on success or an error code 1056 */ 1057 static errno_t test_gc_set_clip_rect(void *arg, gfx_rect_t *rect) 1058 { 1059 test_response_t *resp = (test_response_t *) arg; 1060 1061 resp->set_clip_rect_called = true; 1062 if (rect != NULL) { 1063 resp->do_clip = true; 1064 resp->set_clip_rect_rect = *rect; 1065 } else { 1066 resp->do_clip = false; 1067 } 1068 1069 return resp->rc; 1070 } 1071 900 1072 /** Set color in test GC. 901 1073 *
Note:
See TracChangeset
for help on using the changeset viewer.