Program Listing for File slint_image_internal.h

Return to documentation for file (cppdocs/generated_include/slint_image_internal.h)

#pragma once

/* Generated with cbindgen:0.23.0 */

#include <cstdarg>
#include <cstdint>
#include <cstdlib>
#include <ostream>
#include <new>
#include "slint_enums_internal.h"

namespace slint {
namespace cbindgen_private {
namespace types {

enum class PixelFormat : uint8_t {
    Rgb,
    Rgba,
    AlphaMap,
};

using IntSize = Size2D<uint32_t>;

struct Rgb8Pixel {
    uint8_t r;
    uint8_t g;
    uint8_t b;

    bool operator==(const Rgb8Pixel& other) const {
        return r == other.r &&
               g == other.g &&
               b == other.b;
    }
    bool operator!=(const Rgb8Pixel& other) const {
        return r != other.r ||
               g != other.g ||
               b != other.b;
    }
};

template<typename Pixel>
struct SharedPixelBuffer {
    uint32_t width;
    uint32_t height;
    uint32_t stride;
    SharedVector<Pixel> data;

    bool operator==(const SharedPixelBuffer& other) const {
        return width == other.width &&
               height == other.height &&
               stride == other.stride &&
               data == other.data;
    }
    bool operator!=(const SharedPixelBuffer& other) const {
        return width != other.width ||
               height != other.height ||
               stride != other.stride ||
               data != other.data;
    }
};

struct Rgba8Pixel {
    uint8_t r;
    uint8_t g;
    uint8_t b;

    bool operator==(const Rgba8Pixel& other) const {
        return r == other.r &&
               g == other.g &&
               b == other.b;
    }
    bool operator!=(const Rgba8Pixel& other) const {
        return r != other.r ||
               g != other.g ||
               b != other.b;
    }
};

struct SharedImageBuffer {
    enum class Tag {
        RGB8,
        RGBA8,
        RGBA8Premultiplied,
    };

    struct RGB8_Body {
        SharedPixelBuffer<Rgb8Pixel> _0;

        bool operator==(const RGB8_Body& other) const {
            return _0 == other._0;
        }
        bool operator!=(const RGB8_Body& other) const {
            return _0 != other._0;
        }
    };

    struct RGBA8_Body {
        SharedPixelBuffer<Rgba8Pixel> _0;

        bool operator==(const RGBA8_Body& other) const {
            return _0 == other._0;
        }
        bool operator!=(const RGBA8_Body& other) const {
            return _0 != other._0;
        }
    };

    struct RGBA8Premultiplied_Body {
        SharedPixelBuffer<Rgba8Pixel> _0;

        bool operator==(const RGBA8Premultiplied_Body& other) const {
            return _0 == other._0;
        }
        bool operator!=(const RGBA8Premultiplied_Body& other) const {
            return _0 != other._0;
        }
    };

    Tag tag;
    union {
        RGB8_Body rgb8;
        RGBA8_Body rgba8;
        RGBA8Premultiplied_Body rgba8_premultiplied;
    };

    static SharedImageBuffer RGB8(const SharedPixelBuffer<Rgb8Pixel> &_0) {
        SharedImageBuffer result;
        ::new (&result.rgb8._0) (SharedPixelBuffer<Rgb8Pixel>)(_0);
        result.tag = Tag::RGB8;
        return result;
    }

    bool IsRGB8() const {
        return tag == Tag::RGB8;
    }

    static SharedImageBuffer RGBA8(const SharedPixelBuffer<Rgba8Pixel> &_0) {
        SharedImageBuffer result;
        ::new (&result.rgba8._0) (SharedPixelBuffer<Rgba8Pixel>)(_0);
        result.tag = Tag::RGBA8;
        return result;
    }

    bool IsRGBA8() const {
        return tag == Tag::RGBA8;
    }

    static SharedImageBuffer RGBA8Premultiplied(const SharedPixelBuffer<Rgba8Pixel> &_0) {
        SharedImageBuffer result;
        ::new (&result.rgba8_premultiplied._0) (SharedPixelBuffer<Rgba8Pixel>)(_0);
        result.tag = Tag::RGBA8Premultiplied;
        return result;
    }

    bool IsRGBA8Premultiplied() const {
        return tag == Tag::RGBA8Premultiplied;
    }

    bool operator==(const SharedImageBuffer& other) const {
        if (tag != other.tag) {
            return false;
        }
        switch (tag) {
            case Tag::RGB8: return rgb8 == other.rgb8;
            case Tag::RGBA8: return rgba8 == other.rgba8;
            case Tag::RGBA8Premultiplied: return rgba8_premultiplied == other.rgba8_premultiplied;

        }
        return true;
    }

    bool operator!=(const SharedImageBuffer& other) const {
        return !(*this == other);
    }

    private:
    SharedImageBuffer() {

    }
    public:


    ~SharedImageBuffer() {
        switch (tag) {
            case Tag::RGB8: rgb8.~RGB8_Body(); break;
            case Tag::RGBA8: rgba8.~RGBA8_Body(); break;
            case Tag::RGBA8Premultiplied: rgba8_premultiplied.~RGBA8Premultiplied_Body(); break;

        }
    }

    SharedImageBuffer(const SharedImageBuffer& other)
     : tag(other.tag) {
        switch (tag) {
            case Tag::RGB8: ::new (&rgb8) (RGB8_Body)(other.rgb8); break;
            case Tag::RGBA8: ::new (&rgba8) (RGBA8_Body)(other.rgba8); break;
            case Tag::RGBA8Premultiplied: ::new (&rgba8_premultiplied) (RGBA8Premultiplied_Body)(other.rgba8_premultiplied); break;

        }
    }
    SharedImageBuffer& operator=(const SharedImageBuffer& other) {
        if (this != &other) {
            this->~SharedImageBuffer();
            new (this) SharedImageBuffer(other);
        }
        return *this;
    }
};

struct IntRect {
    int32_t x;
    int32_t y;
    int32_t width;
    int32_t height;

    bool operator==(const IntRect& other) const {
        return x == other.x &&
               y == other.y &&
               width == other.width &&
               height == other.height;
    }
    bool operator!=(const IntRect& other) const {
        return x != other.x ||
               y != other.y ||
               width != other.width ||
               height != other.height;
    }
};

struct StaticTexture {
    IntRect rect;
    PixelFormat format;
    Color color;
    uintptr_t index;

    bool operator==(const StaticTexture& other) const {
        return rect == other.rect &&
               format == other.format &&
               color == other.color &&
               index == other.index;
    }
    bool operator!=(const StaticTexture& other) const {
        return rect != other.rect ||
               format != other.format ||
               color != other.color ||
               index != other.index;
    }
};

struct StaticTextures {
    IntSize size;
    IntSize original_size;
    Slice<uint8_t> data;
    Slice<StaticTexture> textures;

    bool operator==(const StaticTextures& other) const {
        return size == other.size &&
               original_size == other.original_size &&
               data == other.data &&
               textures == other.textures;
    }
    bool operator!=(const StaticTextures& other) const {
        return size != other.size ||
               original_size != other.original_size ||
               data != other.data ||
               textures != other.textures;
    }
};

union ImageInner {
    enum class Tag : uint8_t {
        ImageInner_None,
        ImageInner_AbsoluteFilePath,
        ImageInner_EmbeddedData,
        ImageInner_EmbeddedImage,
        ImageInner_StaticTextures,
    };

    struct ImageInner_AbsoluteFilePath_Body {
        Tag tag;
        SharedString _0;

        bool operator==(const ImageInner_AbsoluteFilePath_Body& other) const {
            return _0 == other._0;
        }
        bool operator!=(const ImageInner_AbsoluteFilePath_Body& other) const {
            return _0 != other._0;
        }
    };

    struct ImageInner_EmbeddedData_Body {
        Tag tag;
        Slice<uint8_t> data;
        Slice<uint8_t> format;

        bool operator==(const ImageInner_EmbeddedData_Body& other) const {
            return data == other.data &&
                   format == other.format;
        }
        bool operator!=(const ImageInner_EmbeddedData_Body& other) const {
            return data != other.data ||
                   format != other.format;
        }
    };

    struct ImageInner_EmbeddedImage_Body {
        Tag tag;
        SharedImageBuffer _0;

        bool operator==(const ImageInner_EmbeddedImage_Body& other) const {
            return _0 == other._0;
        }
        bool operator!=(const ImageInner_EmbeddedImage_Body& other) const {
            return _0 != other._0;
        }
    };

    struct ImageInner_StaticTextures_Body {
        Tag tag;
        const StaticTextures *_0;

        bool operator==(const ImageInner_StaticTextures_Body& other) const {
            return _0 == other._0;
        }
        bool operator!=(const ImageInner_StaticTextures_Body& other) const {
            return _0 != other._0;
        }
    };

    struct {
        Tag tag;
    };
    ImageInner_AbsoluteFilePath_Body absolute_file_path;
    ImageInner_EmbeddedData_Body embedded_data;
    ImageInner_EmbeddedImage_Body embedded_image;
    ImageInner_StaticTextures_Body static_textures;

    static ImageInner ImageInner_None() {
        ImageInner result;
        result.tag = Tag::ImageInner_None;
        return result;
    }

    bool IsImageInner_None() const {
        return tag == Tag::ImageInner_None;
    }

    static ImageInner ImageInner_AbsoluteFilePath(const SharedString &_0) {
        ImageInner result;
        ::new (&result.absolute_file_path._0) (SharedString)(_0);
        result.tag = Tag::ImageInner_AbsoluteFilePath;
        return result;
    }

    bool IsImageInner_AbsoluteFilePath() const {
        return tag == Tag::ImageInner_AbsoluteFilePath;
    }

    static ImageInner ImageInner_EmbeddedData(const Slice<uint8_t> &data,
                                              const Slice<uint8_t> &format) {
        ImageInner result;
        ::new (&result.embedded_data.data) (Slice<uint8_t>)(data);
        ::new (&result.embedded_data.format) (Slice<uint8_t>)(format);
        result.tag = Tag::ImageInner_EmbeddedData;
        return result;
    }

    bool IsImageInner_EmbeddedData() const {
        return tag == Tag::ImageInner_EmbeddedData;
    }

    static ImageInner ImageInner_EmbeddedImage(const SharedImageBuffer &_0) {
        ImageInner result;
        ::new (&result.embedded_image._0) (SharedImageBuffer)(_0);
        result.tag = Tag::ImageInner_EmbeddedImage;
        return result;
    }

    bool IsImageInner_EmbeddedImage() const {
        return tag == Tag::ImageInner_EmbeddedImage;
    }

    static ImageInner ImageInner_StaticTextures(const StaticTextures *const &_0) {
        ImageInner result;
        ::new (&result.static_textures._0) (const StaticTextures*)(_0);
        result.tag = Tag::ImageInner_StaticTextures;
        return result;
    }

    bool IsImageInner_StaticTextures() const {
        return tag == Tag::ImageInner_StaticTextures;
    }

    bool operator==(const ImageInner& other) const {
        if (tag != other.tag) {
            return false;
        }
        switch (tag) {
            case Tag::ImageInner_AbsoluteFilePath: return absolute_file_path == other.absolute_file_path;
            case Tag::ImageInner_EmbeddedData: return embedded_data == other.embedded_data;
            case Tag::ImageInner_EmbeddedImage: return embedded_image == other.embedded_image;
            case Tag::ImageInner_StaticTextures: return static_textures == other.static_textures;
            default: break;
        }
        return true;
    }

    bool operator!=(const ImageInner& other) const {
        return !(*this == other);
    }

    private:
    ImageInner() {

    }
    public:


    ~ImageInner() {
        switch (tag) {
            case Tag::ImageInner_AbsoluteFilePath: absolute_file_path.~ImageInner_AbsoluteFilePath_Body(); break;
            case Tag::ImageInner_EmbeddedData: embedded_data.~ImageInner_EmbeddedData_Body(); break;
            case Tag::ImageInner_EmbeddedImage: embedded_image.~ImageInner_EmbeddedImage_Body(); break;
            case Tag::ImageInner_StaticTextures: static_textures.~ImageInner_StaticTextures_Body(); break;
            default: break;
        }
    }

    ImageInner(const ImageInner& other)
     : tag(other.tag) {
        switch (tag) {
            case Tag::ImageInner_AbsoluteFilePath: ::new (&absolute_file_path) (ImageInner_AbsoluteFilePath_Body)(other.absolute_file_path); break;
            case Tag::ImageInner_EmbeddedData: ::new (&embedded_data) (ImageInner_EmbeddedData_Body)(other.embedded_data); break;
            case Tag::ImageInner_EmbeddedImage: ::new (&embedded_image) (ImageInner_EmbeddedImage_Body)(other.embedded_image); break;
            case Tag::ImageInner_StaticTextures: ::new (&static_textures) (ImageInner_StaticTextures_Body)(other.static_textures); break;
            default: break;
        }
    }
    ImageInner& operator=(const ImageInner& other) {
        if (this != &other) {
            this->~ImageInner();
            new (this) ImageInner(other);
        }
        return *this;
    }
};

using Image = ImageInner;

using Size = Size2D<float>;

extern "C" {

IntSize slint_image_size(const Image *image);

const SharedString *slint_image_path(const Image *image);

} // extern "C"

} // namespace types
} // namespace cbindgen_private
} // namespace slint