C

Qt Quick Ultralite image_loading Example

// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial

#include <qul/singleton.h>
#include <qul/image.h>
#include <qul/imageprovider.h>
#include <qul/eventqueue.h>
#include <qul/timer.h>

#include <string>

struct MyImageLoadedEvent
{
    MyImageLoadedEvent(Qul::Image &image)
        : sharedImage(image)
    {}

    Qul::SharedImage sharedImage;
};

struct MyImageProvider : public Qul::ImageProvider, public Qul::EventQueue<MyImageLoadedEvent *>
{
    Qul::SharedImage requestImage(const char *imageName, size_t imageNameLength) QUL_DECL_OVERRIDE;

    void onEvent(MyImageLoadedEvent *const &event) QUL_DECL_OVERRIDE;
    void onEventDiscarded(MyImageLoadedEvent *const &event) QUL_DECL_OVERRIDE;

    struct Timeout
    {
        MyImageProvider *object;
        void operator()();
    };

private:
    Qul::Timer m_asyncLoadTimer;
    Qul::SharedImage sharedImage;
    int loadSteps;
    int currentLoadStep;
    int colors[3];
};