aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2021-09-04 23:23:32 +0800
committercrupest <crupest@outlook.com>2021-09-04 23:23:32 +0800
commitc504aef3835f71ea22c9e938066f01e69e1c2db3 (patch)
tree4d456079e08e64923e84ca37b862c82a0b184167
parent9e3d8fbd19ac93382a231a5eb8e7f8b389e6f6c2 (diff)
downloadcru-c504aef3835f71ea22c9e938066f01e69e1c2db3.tar.gz
cru-c504aef3835f71ea22c9e938066f01e69e1c2db3.tar.bz2
cru-c504aef3835f71ea22c9e938066f01e69e1c2db3.zip
...
-rw-r--r--include/cru/common/String.hpp1
-rw-r--r--include/cru/osx/graphics/quartz/Convert.hpp3
-rw-r--r--include/cru/osx/graphics/quartz/Font.hpp20
-rw-r--r--src/osx/graphics/quartz/Convert.cpp21
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);