Changes in uspace/lib/ui/src/slider.c [2ab8ab3:0eca788] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/ui/src/slider.c
r2ab8ab3 r0eca788 1 1 /* 2 * Copyright (c) 202 1Jiri Svoboda2 * Copyright (c) 2022 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 38 38 #include <gfx/context.h> 39 39 #include <gfx/render.h> 40 #include <gfx/text.h> 40 41 #include <io/pos_event.h> 41 42 #include <stdlib.h> … … 57 58 /** Slider button height */ 58 59 ui_slider_btn_h = 23, 60 /** Slider button width in text mode */ 61 ui_slider_btn_w_text = 3, 62 /** Slider button height in text mode */ 63 ui_slider_btn_h_text = 1, 59 64 /** Slider button frame thickness */ 60 65 ui_slider_btn_frame_thickness = 1, … … 83 88 * 84 89 * @param resource UI resource 85 * @param caption Caption86 90 * @param rslider Place to store pointer to new slider 87 91 * @return EOK on success, ENOMEM if out of memory 88 92 */ 89 errno_t ui_slider_create(ui_resource_t *resource, const char *caption, 90 ui_slider_t **rslider) 93 errno_t ui_slider_create(ui_resource_t *resource, ui_slider_t **rslider) 91 94 { 92 95 ui_slider_t *slider; … … 239 242 rect->p0.x = pos.x; 240 243 rect->p0.y = pos.y; 241 rect->p1.x = pos.x + ui_slider_btn_w; 242 rect->p1.y = pos.y + ui_slider_btn_h; 244 245 if (slider->res->textmode) { 246 rect->p1.x = pos.x + ui_slider_btn_w_text; 247 rect->p1.y = pos.y + ui_slider_btn_h_text; 248 } else { 249 rect->p1.x = pos.x + ui_slider_btn_w; 250 rect->p1.y = pos.y + ui_slider_btn_h; 251 } 243 252 } 244 253 … … 251 260 { 252 261 gfx_coord2_t dims; 262 gfx_coord_t w; 253 263 254 264 gfx_rect_dims(&slider->rect, &dims); 255 return dims.x - ui_slider_btn_w; 256 } 257 258 /** Paint slider. 259 * 260 * @param slider Slider 261 * @return EOK on success or an error code 262 */ 263 errno_t ui_slider_paint(ui_slider_t *slider) 265 w = slider->res->textmode ? ui_slider_btn_w_text : 266 ui_slider_btn_w; 267 return dims.x - w; 268 } 269 270 /** Paint slider in graphics mode. 271 * 272 * @param slider Slider 273 * @return EOK on success or an error code 274 */ 275 errno_t ui_slider_paint_gfx(ui_slider_t *slider) 264 276 { 265 277 gfx_coord2_t pos; … … 315 327 } 316 328 329 /** Paint slider in text mode. 330 * 331 * @param slider Slider 332 * @return EOK on success or an error code 333 */ 334 errno_t ui_slider_paint_text(ui_slider_t *slider) 335 { 336 gfx_coord2_t pos; 337 gfx_text_fmt_t fmt; 338 gfx_coord_t w, i; 339 char *buf; 340 const char *gchar; 341 size_t gcharsz; 342 errno_t rc; 343 344 /* Paint slider groove */ 345 346 pos = slider->rect.p0; 347 348 gfx_text_fmt_init(&fmt); 349 fmt.font = slider->res->font; 350 fmt.color = slider->res->wnd_text_color; 351 fmt.halign = gfx_halign_left; 352 fmt.valign = gfx_valign_top; 353 354 w = slider->rect.p1.x - slider->rect.p0.x; 355 gchar = "\u2550"; 356 gcharsz = str_size(gchar); 357 358 buf = malloc(w * gcharsz + 1); 359 if (buf == NULL) 360 return ENOMEM; 361 362 for (i = 0; i < w; i++) 363 str_cpy(buf + i * gcharsz, (w - i) * gcharsz + 1, gchar); 364 buf[w * gcharsz] = '\0'; 365 366 rc = gfx_puttext(&pos, &fmt, buf); 367 free(buf); 368 if (rc != EOK) 369 goto error; 370 371 /* Paint slider button */ 372 373 pos.x += slider->pos; 374 375 rc = gfx_puttext(&pos, &fmt, "[O]"); 376 if (rc != EOK) 377 goto error; 378 379 rc = gfx_update(slider->res->gc); 380 if (rc != EOK) 381 goto error; 382 383 return EOK; 384 error: 385 return rc; 386 } 387 388 /** Paint slider. 389 * 390 * @param slider Slider 391 * @return EOK on success or an error code 392 */ 393 errno_t ui_slider_paint(ui_slider_t *slider) 394 { 395 if (slider->res->textmode) 396 return ui_slider_paint_text(slider); 397 else 398 return ui_slider_paint_gfx(slider); 399 } 400 317 401 /** Clear slider button. 318 402 * … … 324 408 gfx_rect_t rect; 325 409 errno_t rc; 410 411 /* No need to clear button in text mode */ 412 if (slider->res->textmode) 413 return EOK; 326 414 327 415 ui_slider_btn_rect(slider, &rect); … … 440 528 ui_slider_update(slider, &pos); 441 529 break; 530 case POS_DCLICK: 531 break; 442 532 } 443 533
Note:
See TracChangeset
for help on using the changeset viewer.