aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/cru/platform/win/win_font.hpp2
-rw-r--r--src/platform_win/win_font.cpp16
2 files changed, 17 insertions, 1 deletions
diff --git a/include/cru/platform/win/win_font.hpp b/include/cru/platform/win/win_font.hpp
index 69eebdfb..f03ff3c8 100644
--- a/include/cru/platform/win/win_font.hpp
+++ b/include/cru/platform/win/win_font.hpp
@@ -11,7 +11,7 @@ class GraphManager;
class WinFontDescriptor : public Object, public virtual FontDescriptor {
public:
explicit WinFontDescriptor(GraphManager* graph_manager,
- const std::wstring_view& font_family);
+ const std::wstring_view& font_family, float font_size);
WinFontDescriptor(const WinFontDescriptor& other) = delete;
WinFontDescriptor(WinFontDescriptor&& other) = delete;
WinFontDescriptor& operator=(const WinFontDescriptor& other) = delete;
diff --git a/src/platform_win/win_font.cpp b/src/platform_win/win_font.cpp
index ddc42556..e0a309cc 100644
--- a/src/platform_win/win_font.cpp
+++ b/src/platform_win/win_font.cpp
@@ -1,6 +1,22 @@
#include "cru/platform/win/win_font.hpp"
+#include "cru/platform/win/exception.hpp"
+#include "cru/platform/win/graph_manager.hpp"
+
+#include <array>
#include <utility>
namespace cru::platform::win {
+WinFontDescriptor::WinFontDescriptor(GraphManager* graph_manager,
+ const std::wstring_view& font_family,
+ float font_size) {
+ std::array<wchar_t, LOCALE_NAME_MAX_LENGTH> buffer;
+ if (!::GetUserDefaultLocaleName(buffer.data(), buffer.size()))
+ throw Win32Error(::GetLastError(), "Failed to get locale.");
+
+ ThrowIfFailed(graph_manager->GetDWriteFactory()->CreateTextFormat(
+ font_family.data(), nullptr, DWRITE_FONT_WEIGHT_NORMAL,
+ DWRITE_FONT_STYLE_NORMAL, DWRITE_FONT_STRETCH_NORMAL, font_size,
+ buffer.data(), &text_format_));
+}
} // namespace cru::platform::win