Changeset 587b4cb in mainline


Ignore:
Timestamp:
2019-10-29T02:01:45Z (5 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
22faaf2
Parents:
0008c0f
Message:

Clear screen between demos, add second bitmap demo

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/gfxdemo/gfxdemo.c

    r0008c0f r587b4cb  
    4848#include <window.h>
    4949
     50/** Clear screen.
     51 *
     52 * @param gc Graphic context
     53 * @param w Screen width
     54 * @param h Screen height
     55 */
     56static errno_t clear_scr(gfx_context_t *gc, gfx_coord_t w, gfx_coord_t h)
     57{
     58        gfx_color_t *color = NULL;
     59        gfx_rect_t rect;
     60        errno_t rc;
     61
     62        rc = gfx_color_new_rgb_i16(0, 0, 0, &color);
     63        if (rc != EOK)
     64                goto error;
     65
     66        rc = gfx_set_color(gc, color);
     67        if (rc != EOK)
     68                goto error;
     69
     70        rect.p0.x = 0;
     71        rect.p0.y = 0;
     72        rect.p1.x = w;
     73        rect.p1.y = h;
     74
     75        rc = gfx_fill_rect(gc, &rect);
     76        if (rc != EOK)
     77                goto error;
     78
     79        gfx_color_delete(color);
     80        return EOK;
     81error:
     82        if (color != NULL)
     83                gfx_color_delete(color);
     84        return rc;
     85}
     86
    5087/** Run rectangle demo on a graphic context.
    5188 *
     
    6097        int i, j;
    6198        errno_t rc;
     99
     100        rc = clear_scr(gc, w, h);
     101        if (rc != EOK)
     102                return rc;
    62103
    63104        for (j = 0; j < 10; j++) {
     
    90131}
    91132
    92 /** Run bitmap demo on a graphic context.
    93  *
    94  * @param gc Graphic context
    95  * @param w Width
    96  * @param h Height
    97  */
    98 static errno_t demo_bitmap(gfx_context_t *gc, gfx_coord_t w, gfx_coord_t h)
    99 {
    100         gfx_bitmap_t *bitmap;
    101         gfx_bitmap_params_t params;
     133/** Fill bitmap with tartan pattern.
     134 *
     135 * @param bitmap Bitmap
     136 * @param w Bitmap width
     137 * @param h Bitmap height
     138 * @return EOK on success or an error code
     139 */
     140static errno_t bitmap_tartan(gfx_bitmap_t *bitmap, gfx_coord_t w, gfx_coord_t h)
     141{
     142        int i, j;
     143        pixelmap_t pixelmap;
    102144        gfx_bitmap_alloc_t alloc;
    103         int i, j;
    104         gfx_coord2_t offs;
    105         gfx_rect_t srect;
    106         errno_t rc;
    107         pixelmap_t pixelmap;
    108 
    109         params.rect.p0.x = 0;
    110         params.rect.p0.y = 0;
    111         params.rect.p1.x = w;
    112         params.rect.p1.y = h;
    113 
    114         rc = gfx_bitmap_create(gc, &params, NULL, &bitmap);
    115         if (rc != EOK)
    116                 return rc;
     145        errno_t rc;
    117146
    118147        rc = gfx_bitmap_get_alloc(bitmap, &alloc);
     
    120149                return rc;
    121150
    122         /* Fill bitmap with something. In absence of anything else, use pixelmap */
     151        /* In absence of anything else, use pixelmap */
    123152        pixelmap.width = w;
    124153        pixelmap.height = h;
     
    133162        }
    134163
     164        return EOK;
     165}
     166
     167/** Fill bitmap with moire pattern.
     168 *
     169 * @param bitmap Bitmap
     170 * @param w Bitmap width
     171 * @param h Bitmap height
     172 * @return EOK on success or an error code
     173 */
     174static errno_t bitmap_moire(gfx_bitmap_t *bitmap, gfx_coord_t w, gfx_coord_t h)
     175{
     176        int i, j;
     177        int k;
     178        pixelmap_t pixelmap;
     179        gfx_bitmap_alloc_t alloc;
     180        errno_t rc;
     181
     182        rc = gfx_bitmap_get_alloc(bitmap, &alloc);
     183        if (rc != EOK)
     184                return rc;
     185
     186        /* In absence of anything else, use pixelmap */
     187        pixelmap.width = w;
     188        pixelmap.height = h;
     189        pixelmap.data = alloc.pixels;
     190
     191        for (i = 0; i < w; i++) {
     192                for (j = 0; j < h; j++) {
     193                        k = i * i + j * j;
     194                        pixelmap_put_pixel(&pixelmap, i, j,
     195                            PIXEL(255, k, k, k));
     196                }
     197        }
     198
     199        return EOK;
     200}
     201
     202/** Run bitmap demo on a graphic context.
     203 *
     204 * @param gc Graphic context
     205 * @param w Width
     206 * @param h Height
     207 */
     208static errno_t demo_bitmap(gfx_context_t *gc, gfx_coord_t w, gfx_coord_t h)
     209{
     210        gfx_bitmap_t *bitmap;
     211        gfx_bitmap_params_t params;
     212        int i, j;
     213        gfx_coord2_t offs;
     214        gfx_rect_t srect;
     215        errno_t rc;
     216
     217        rc = clear_scr(gc, w, h);
     218        if (rc != EOK)
     219                return rc;
     220
     221        params.rect.p0.x = 0;
     222        params.rect.p0.y = 0;
     223        params.rect.p1.x = w;
     224        params.rect.p1.y = h;
     225
     226        rc = gfx_bitmap_create(gc, &params, NULL, &bitmap);
     227        if (rc != EOK)
     228                return rc;
     229
     230        rc = bitmap_tartan(bitmap, w, h);
     231        if (rc != EOK)
     232                goto error;
     233
    135234        for (j = 0; j < 10; j++) {
    136235                for (i = 0; i < 5; i++) {
     
    139238                        srect.p1.x = srect.p0.x + rand() % (w - srect.p0.x);
    140239                        srect.p1.y = srect.p0.y + rand() % (h - srect.p0.y);
    141                         offs.x = rand() % (w - srect.p1.x);
    142                         offs.y = rand() % (h - srect.p1.y);
    143240                        offs.x = 0;
    144241                        offs.y = 0;
     
    147244                        if (rc != EOK)
    148245                                goto error;
    149                         fibril_usleep(500 * 1000);
     246                        fibril_usleep(250 * 1000);
    150247                }
    151248        }
     
    159256}
    160257
    161 /** Run demo loop on a graphic context.
     258/** Run second bitmap demo on a graphic context.
    162259 *
    163260 * @param gc Graphic context
     
    165262 * @param h Height
    166263 */
     264static errno_t demo_bitmap2(gfx_context_t *gc, gfx_coord_t w, gfx_coord_t h)
     265{
     266        gfx_bitmap_t *bitmap;
     267        gfx_bitmap_params_t params;
     268        int i, j;
     269        gfx_coord2_t offs;
     270        errno_t rc;
     271
     272        rc = clear_scr(gc, w, h);
     273        if (rc != EOK)
     274                return rc;
     275
     276        params.rect.p0.x = 0;
     277        params.rect.p0.y = 0;
     278        params.rect.p1.x = 40;
     279        params.rect.p1.y = 20;
     280
     281        rc = gfx_bitmap_create(gc, &params, NULL, &bitmap);
     282        if (rc != EOK)
     283                return rc;
     284
     285        rc = bitmap_moire(bitmap, 40, 20);
     286        if (rc != EOK)
     287                goto error;
     288
     289        for (j = 0; j < 10; j++) {
     290                for (i = 0; i < 10; i++) {
     291                        offs.x = rand() % (w - 40);
     292                        offs.y = rand() % (h - 20);
     293
     294                        rc = gfx_bitmap_render(bitmap, NULL, &offs);
     295                        if (rc != EOK)
     296                                goto error;
     297                }
     298
     299                fibril_usleep(500 * 1000);
     300        }
     301
     302        gfx_bitmap_destroy(bitmap);
     303
     304        return EOK;
     305error:
     306        gfx_bitmap_destroy(bitmap);
     307        return rc;
     308}
     309
     310/** Run demo loop on a graphic context.
     311 *
     312 * @param gc Graphic context
     313 * @param w Width
     314 * @param h Height
     315 */
    167316static errno_t demo_loop(gfx_context_t *gc, gfx_coord_t w, gfx_coord_t h)
    168317{
     
    175324
    176325                rc = demo_bitmap(gc, w, h);
     326                if (rc != EOK)
     327                        return rc;
     328
     329                rc = demo_bitmap2(gc, w, h);
    177330                if (rc != EOK)
    178331                        return rc;
Note: See TracChangeset for help on using the changeset viewer.