diff options
-rw-r--r-- | include/cru/common/String.hpp | 1 | ||||
-rw-r--r-- | include/cru/osx/graphics/quartz/Convert.hpp | 3 | ||||
-rw-r--r-- | include/cru/osx/graphics/quartz/Font.hpp | 20 | ||||
-rw-r--r-- | src/osx/graphics/quartz/Convert.cpp | 21 |
4 files changed, 43 insertions, 2 deletions
diff --git a/include/cru/common/String.hpp b/include/cru/common/String.hpp index 79885aba..563e1606 100644 --- a/include/cru/common/String.hpp +++ b/include/cru/common/String.hpp @@ -73,6 +73,7 @@ class CRU_BASE_API String { Index length() const { return this->size(); } Index capacity() const { return this->capacity_; } std::uint16_t* data() { return this->buffer_; } + const std::uint16_t* data() const { return this->buffer_; } void reserve(Index new_capacity); diff --git a/include/cru/osx/graphics/quartz/Convert.hpp b/include/cru/osx/graphics/quartz/Convert.hpp index 89ade584..f217e549 100644 --- a/include/cru/osx/graphics/quartz/Convert.hpp +++ b/include/cru/osx/graphics/quartz/Convert.hpp @@ -4,6 +4,9 @@ #include <CoreGraphics/CoreGraphics.h> namespace cru::platform::graphics::osx::quartz { +CFStringRef Convert(const String& string); +String Convert(CFStringRef string); + CGAffineTransform Convert(const Matrix& matrix); Matrix Convert(const CGAffineTransform& matrix); diff --git a/include/cru/osx/graphics/quartz/Font.hpp b/include/cru/osx/graphics/quartz/Font.hpp index d3c50818..618c4c48 100644 --- a/include/cru/osx/graphics/quartz/Font.hpp +++ b/include/cru/osx/graphics/quartz/Font.hpp @@ -1,7 +1,23 @@ #pragma once #include "Resource.hpp" +#include "cru/common/Base.hpp" #include "cru/platform/graphics/Font.hpp" +#include <CoreText/CoreText.h> + namespace cru::platform::graphics::osx::quartz { - -} +class OsxCTFont : public OsxQuartzResource, public virtual IFont { + public: + OsxCTFont(IGraphFactory* graphics_factory, const String& name, float size); + + CRU_DELETE_COPY(OsxCTFont) + CRU_DELETE_MOVE(OsxCTFont) + + ~OsxCTFont() override; + + CTFontRef GetCTFont() const { return ct_font_; } + + private: + CTFontRef ct_font_; +}; +} // namespace cru::platform::graphics::osx::quartz diff --git a/src/osx/graphics/quartz/Convert.cpp b/src/osx/graphics/quartz/Convert.cpp index c1177a41..087de56b 100644 --- a/src/osx/graphics/quartz/Convert.cpp +++ b/src/osx/graphics/quartz/Convert.cpp @@ -1,6 +1,27 @@ #include "cru/osx/graphics/quartz/Convert.hpp" +#include <cstdint> namespace cru::platform::graphics::osx::quartz { +CFStringRef Convert(const String& string) { + return CFStringCreateWithBytes( + nullptr, reinterpret_cast<const UInt8*>(string.data()), + string.size() * sizeof(std::uint16_t), kCFStringEncodingUTF16, false); +} + +String Convert(CFStringRef string) { + auto d = CFStringCreateExternalRepresentation(nullptr, string, + kCFStringEncodingUTF16, 0); + auto l = CFDataGetLength(d); + + auto s = String::FromUtf16( + reinterpret_cast<const std::uint16_t*>(CFDataGetBytePtr(d)), + CFDataGetLength(d) / 2); + + CFRelease(d); + + return s; +} + CGAffineTransform Convert(const Matrix& matrix) { return CGAffineTransformMake(matrix.m11, matrix.m12, matrix.m21, matrix.m22, matrix.m31, matrix.m32); |