diff --git a/include/hyprgraphics/image/Image.hpp b/include/hyprgraphics/image/Image.hpp index 1d5df90..b336b92 100644 --- a/include/hyprgraphics/image/Image.hpp +++ b/include/hyprgraphics/image/Image.hpp @@ -15,7 +15,7 @@ namespace Hyprgraphics { class CImage { public: CImage(const std::string& path, const Hyprutils::Math::Vector2D& size = {} /* for SVG */); - CImage(const std::span&, eImageFormat); + CImage(const std::span, eImageFormat); ~CImage(); CImage(const CImage&) = delete; diff --git a/include/hyprgraphics/resource/resources/ImageResource.hpp b/include/hyprgraphics/resource/resources/ImageResource.hpp index 0ac1d06..cbfdd19 100644 --- a/include/hyprgraphics/resource/resources/ImageResource.hpp +++ b/include/hyprgraphics/resource/resources/ImageResource.hpp @@ -1,12 +1,12 @@ #pragma once -#include "AsyncResource.hpp" +#include +#include +#include "./AsyncResource.hpp" #include "../../color/Color.hpp" #include -#include - namespace Hyprgraphics { class CImageResource : public IAsyncResource { public: diff --git a/include/hyprgraphics/resource/resources/StaticImageResource.hpp b/include/hyprgraphics/resource/resources/StaticImageResource.hpp new file mode 100644 index 0000000..e013554 --- /dev/null +++ b/include/hyprgraphics/resource/resources/StaticImageResource.hpp @@ -0,0 +1,29 @@ +#pragma once + +#include "./AsyncResource.hpp" +#include "../../color/Color.hpp" +#include "hyprgraphics/image/Image.hpp" + +#include + +#include + +namespace Hyprgraphics { + class CStaticImageResource : public IAsyncResource { + public: + enum eTextAlignmentMode : uint8_t { + TEXT_ALIGN_LEFT = 0, + TEXT_ALIGN_CENTER, + TEXT_ALIGN_RIGHT, + }; + + CStaticImageResource(const std::span data, eImageFormat format); + virtual ~CStaticImageResource() = default; + + virtual void render(); + + private: + const std::span m_data; + const eImageFormat m_format = eImageFormat::IMAGE_FORMAT_PNG; + }; +}; diff --git a/src/image/Image.cpp b/src/image/Image.cpp index 58c2098..00d13d1 100644 --- a/src/image/Image.cpp +++ b/src/image/Image.cpp @@ -17,7 +17,7 @@ using namespace Hyprgraphics; using namespace Hyprutils::Memory; using namespace Hyprutils::Math; -Hyprgraphics::CImage::CImage(const std::span& data, eImageFormat format) { +Hyprgraphics::CImage::CImage(const std::span data, eImageFormat format) { std::expected CAIROSURFACE; if (format == eImageFormat::IMAGE_FORMAT_PNG) { CAIROSURFACE = PNG::createSurfaceFromPNG(data); diff --git a/src/image/formats/Avif.cpp b/src/image/formats/Avif.cpp index 188c951..f7be95e 100644 --- a/src/image/formats/Avif.cpp +++ b/src/image/formats/Avif.cpp @@ -78,7 +78,7 @@ std::expected AVIF::createSurfaceFromAvif(const s return result; } -std::expected AVIF::createSurfaceFromAvif(const std::span& buf) { +std::expected AVIF::createSurfaceFromAvif(const std::span buf) { heif_context* ctx = heif_context_alloc(); struct heif_error err = heif_context_read_from_memory(ctx, buf.data(), buf.size(), nullptr); diff --git a/src/image/formats/Avif.hpp b/src/image/formats/Avif.hpp index 0caab56..ad32790 100644 --- a/src/image/formats/Avif.hpp +++ b/src/image/formats/Avif.hpp @@ -8,5 +8,5 @@ namespace AVIF { std::expected createSurfaceFromAvif(const std::string&); - std::expected createSurfaceFromAvif(const std::span&); + std::expected createSurfaceFromAvif(const std::span); }; diff --git a/src/image/formats/Png.cpp b/src/image/formats/Png.cpp index 86a8afd..c75da29 100644 --- a/src/image/formats/Png.cpp +++ b/src/image/formats/Png.cpp @@ -38,8 +38,8 @@ std::expected PNG::createSurfaceFromPNG(co } struct SReadState { - const std::span& data; - size_t offset; + const std::span data; + size_t offset; }; static void customReadFunction(png_structp png, png_bytep data, png_size_t length) { @@ -53,7 +53,7 @@ static void customReadFunction(png_structp png, png_bytep data, png_size_t lengt state->offset += length; } -std::expected PNG::createSurfaceFromPNG(const std::span& data) { +std::expected PNG::createSurfaceFromPNG(const std::span data) { png_structp png = png_create_read_struct(PNG_LIBPNG_VER_STRING, nullptr, nullptr, nullptr); png_infop info = png_create_info_struct(png); if (!png || !info) diff --git a/src/image/formats/Png.hpp b/src/image/formats/Png.hpp index 1c85770..dc4a7e1 100644 --- a/src/image/formats/Png.hpp +++ b/src/image/formats/Png.hpp @@ -9,5 +9,5 @@ namespace PNG { std::expected createSurfaceFromPNG(const std::string&); - std::expected createSurfaceFromPNG(const std::span&); + std::expected createSurfaceFromPNG(const std::span); }; diff --git a/src/resource/resources/ImageResource.cpp b/src/resource/resources/ImageResource.cpp index 65dca11..b5a42cb 100644 --- a/src/resource/resources/ImageResource.cpp +++ b/src/resource/resources/ImageResource.cpp @@ -1,5 +1,5 @@ -#include #include +#include #include #include @@ -22,4 +22,4 @@ void CImageResource::render() { m_asset.cairoSurface = image.cairoSurface(); m_asset.pixelSize = m_asset.cairoSurface && m_asset.cairoSurface->cairo() ? m_asset.cairoSurface->size() : Hyprutils::Math::Vector2D{}; -} \ No newline at end of file +} diff --git a/src/resource/resources/StaticImageResource.cpp b/src/resource/resources/StaticImageResource.cpp new file mode 100644 index 0000000..e35c2f4 --- /dev/null +++ b/src/resource/resources/StaticImageResource.cpp @@ -0,0 +1,20 @@ +#include +#include +#include + +#include +#include + +using namespace Hyprgraphics; +using namespace Hyprutils::Memory; + +CStaticImageResource::CStaticImageResource(const std::span data, eImageFormat format) : m_data(data), m_format(format) { + ; +} + +void CStaticImageResource::render() { + auto image = CImage(m_data, m_format); + + m_asset.cairoSurface = image.cairoSurface(); + m_asset.pixelSize = m_asset.cairoSurface && m_asset.cairoSurface->cairo() ? m_asset.cairoSurface->size() : Hyprutils::Math::Vector2D{}; +}