跳转至

lib/graphic/fast_test/demos/demo_progressbar/demo_progressbar.c

Progress bar widget demonstration. More...

Functions

Name
void demo_progressbar(CFBD_GraphicDevice * dev)

Detailed Description

Progress bar widget demonstration.

Author: CharlieChen

Demonstrates:

  • Linear progress bar rendering
  • Smooth incremental animation
  • No visual artifacts (no flowing light)

This demo automatically completes and returns.

Functions Documentation

function demo_progressbar

void demo_progressbar(
    CFBD_GraphicDevice * dev
)

Source code

#include "sys_clock/system_clock.h"
#include "widget/progressbar/progressbar.h"
#include "widget/text.h"

void demo_progressbar(CFBD_GraphicDevice* dev)
{
    /* =======================
     * Title
     * ======================= */
    CFBDGraphic_Text title;
    CFBDGraphic_Point tp = {.x = 12, .y = 2};
    CFBDGraphicSize ts = {.width = 104, .height = 10};
    CFBDGraphic_InitText(&title, tp, ts, ASCII_6x8);
    CFBDGraphic_SetText(&title, "System Booting...");

    /* =======================
     * Main ProgressBar
     * ======================= */
    CFBD_ProgressBar main_pb;
    CFBDGraphic_Point p = {6, 18};
    CFBDGraphicSize sz = {116, 12};
    CFBD_ProgressBar_Init(&main_pb, dev, &p, &sz, 0, 100);
    uint8_t boarder_and_padding = 1;
    CFBD_BaseAnimation animation = {.anim_frame_delay_ms = 25, .anim_frames = 10};
    main_pb.ops->set_property(&main_pb, "border", &boarder_and_padding);
    main_pb.ops->set_property(&main_pb, "padding", &boarder_and_padding);
    main_pb.ops->set_property(&main_pb, "animation", &animation);

    /* =======================
     * Stage ProgressBar
     * ======================= */
    CFBD_ProgressBar stage_pb;
    CFBDGraphic_Point p2 = {20, 38};
    CFBDGraphicSize sz2 = {88, 8};
    CFBD_ProgressBar_Init(&stage_pb, dev, &p2, &sz2, 0, 100);
    stage_pb.ops->set_property(&stage_pb, "border", &boarder_and_padding);
    stage_pb.ops->set_property(&stage_pb, "padding", &boarder_and_padding);
    stage_pb.ops->set_property(&stage_pb, "animation", &animation);
    /* =======================
     * First frame draw
     * ======================= */
    dev->ops->clear(dev);

    CFBDGraphic_DrawText(dev, &title, CCGraphic_AsciiTextItem_RequestOldPoint);

    main_pb.ops->immediate_draw(&main_pb);
    main_pb.ops->immediate_draw(&stage_pb);

    dev->ops->update(dev);

    /* =======================
     * Demo animation
     * ======================= */
    const int stages[] = {0, 20, 45, 70, 100};

    for (int s = 0; s < 5; ++s) {
        /* main progress moves forward */
        main_pb.ops->set_value(&main_pb, stages[s]);
        system_delay_ms(100);

        /* stage progress busy animation */
        stage_pb.ops->set_value(&stage_pb, 25);
        system_delay_ms(100);

        stage_pb.ops->set_value(&stage_pb, 50);
        system_delay_ms(100);

        stage_pb.ops->set_value(&stage_pb, 75);
        system_delay_ms(500);

        stage_pb.ops->set_value(&stage_pb, 100);
        system_delay_ms(100);
        stage_pb.ops->set_value(&stage_pb, 0);
    }
}

Updated on 2026-02-03 at 13:21:55 +0000