Changeset 8965860c in mainline for uspace/lib/ui/src/ui.c


Ignore:
Timestamp:
2022-03-23T18:35:16Z (2 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
7ca7215
Parents:
d4ea1f6
Message:

Clickmatic

A class that periodically generates when held, after initial delay.
This is quite similar to the typematic feature found in PC keyboards.
We use it to automatically scroll when scrollbar button or through
is held.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/ui/src/ui.c

    rd4ea1f6 r8965860c  
    11/*
    2  * Copyright (c) 2021 Jiri Svoboda
     2 * Copyright (c) 2022 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    3939#include <errno.h>
    4040#include <fibril.h>
     41#include <fibril_synch.h>
    4142#include <gfx/color.h>
    4243#include <gfx/cursor.h>
     
    4748#include <str.h>
    4849#include <task.h>
     50#include <ui/clickmatic.h>
    4951#include <ui/ui.h>
    5052#include <ui/wdecor.h>
     
    198200{
    199201        ui_t *ui;
     202        errno_t rc;
    200203
    201204        ui = calloc(1, sizeof(ui_t));
     
    203206                return ENOMEM;
    204207
     208        rc = ui_clickmatic_create(ui, &ui->clickmatic);
     209        if (rc != EOK) {
     210                free(ui);
     211                return rc;
     212        }
     213
    205214        ui->console = console;
    206215        list_initialize(&ui->windows);
     216        fibril_mutex_initialize(&ui->lock);
    207217        *rui = ui;
    208218        return EOK;
     
    218228{
    219229        ui_t *ui;
     230        errno_t rc;
    220231
    221232        ui = calloc(1, sizeof(ui_t));
     
    223234                return ENOMEM;
    224235
     236        rc = ui_clickmatic_create(ui, &ui->clickmatic);
     237        if (rc != EOK) {
     238                free(ui);
     239                return rc;
     240        }
     241
    225242        ui->display = disp;
    226243        list_initialize(&ui->windows);
     244        fibril_mutex_initialize(&ui->lock);
    227245        *rui = ui;
    228246        return EOK;
     
    443461}
    444462
     463/** Lock UI.
     464 *
     465 * Block UI from calling window callbacks. @c ui_lock() and @c ui_unlock()
     466 * must be used when accessing UI resources from a fibril (as opposed to
     467 * from a window callback).
     468 *
     469 * @param ui UI
     470 */
     471void ui_lock(ui_t *ui)
     472{
     473        fibril_mutex_lock(&ui->lock);
     474}
     475
     476/** Unlock UI.
     477 *
     478 * Allow UI to call window callbacks. @c ui_lock() and @c ui_unlock()
     479 * must be used when accessing window resources from a fibril (as opposed to
     480 * from a window callback).
     481 *
     482 * @param ui UI
     483 */
     484void ui_unlock(ui_t *ui)
     485{
     486        fibril_mutex_unlock(&ui->lock);
     487}
     488
    445489/** Terminate user interface.
    446490 *
     
    480524}
    481525
     526/** Get clickmatic from UI.
     527 *
     528 * @pararm ui UI
     529 * @return Clickmatic
     530 */
     531ui_clickmatic_t *ui_get_clickmatic(ui_t *ui)
     532{
     533        return ui->clickmatic;
     534}
     535
    482536/** @}
    483537 */
Note: See TracChangeset for help on using the changeset viewer.