diff options
-rw-r--r-- | include/cru/platform/font.hpp | 8 | ||||
-rw-r--r-- | include/cru/platform/text_layout.hpp | 15 | ||||
-rw-r--r-- | include/cru/platform/win/win_font.hpp | 26 | ||||
-rw-r--r-- | include/cru/platform/win/win_text_layout.hpp | 24 | ||||
-rw-r--r-- | src/platform_win/CMakeLists.txt | 2 | ||||
-rw-r--r-- | src/platform_win/win_font.cpp | 6 | ||||
-rw-r--r-- | src/platform_win/win_text_layout.cpp | 5 |
7 files changed, 86 insertions, 0 deletions
diff --git a/include/cru/platform/font.hpp b/include/cru/platform/font.hpp new file mode 100644 index 00000000..750aaae1 --- /dev/null +++ b/include/cru/platform/font.hpp @@ -0,0 +1,8 @@ +#pragma once +#include "cru/common/base.hpp" + +namespace cru::platform { +struct FontDescriptor : virtual Interface { + +}; +} diff --git a/include/cru/platform/text_layout.hpp b/include/cru/platform/text_layout.hpp new file mode 100644 index 00000000..fce6ce5f --- /dev/null +++ b/include/cru/platform/text_layout.hpp @@ -0,0 +1,15 @@ +#pragma once +#include "cru/common/base.hpp" + +#include "cru/common/ui_base.hpp" + +#include <vector> + +namespace cru::platform { +struct TextLayout : virtual Interface { + virtual void SetMaxWidth(float max_width) = 0; + virtual void SetMaxHeight(float max_height) = 0; + virtual ui::Rect GetTextBounds() = 0; + virtual std::vector<ui::Rect> TextRangeRect(const ui::TextRange& text_range) = 0; +}; +} // namespace cru::platform diff --git a/include/cru/platform/win/win_font.hpp b/include/cru/platform/win/win_font.hpp new file mode 100644 index 00000000..69eebdfb --- /dev/null +++ b/include/cru/platform/win/win_font.hpp @@ -0,0 +1,26 @@ +#pragma once +#include "win_pre_config.hpp" + +#include "../font.hpp" + +#include <string_view> + +namespace cru::platform::win { +class GraphManager; + +class WinFontDescriptor : public Object, public virtual FontDescriptor { + public: + explicit WinFontDescriptor(GraphManager* graph_manager, + const std::wstring_view& font_family); + WinFontDescriptor(const WinFontDescriptor& other) = delete; + WinFontDescriptor(WinFontDescriptor&& other) = delete; + WinFontDescriptor& operator=(const WinFontDescriptor& other) = delete; + WinFontDescriptor& operator=(WinFontDescriptor&& other) = delete; + ~WinFontDescriptor() override = default; + + IDWriteTextFormat* GetDWriteTextFormat() const { return text_format_.Get(); } + + private: + Microsoft::WRL::ComPtr<IDWriteTextFormat> text_format_; +}; +} // namespace cru::platform::win diff --git a/include/cru/platform/win/win_text_layout.hpp b/include/cru/platform/win/win_text_layout.hpp new file mode 100644 index 00000000..68961dd7 --- /dev/null +++ b/include/cru/platform/win/win_text_layout.hpp @@ -0,0 +1,24 @@ +#pragma once +#include "win_pre_config.hpp" + +#include "../text_layout.hpp" +#include "win_font.hpp" + +#include <memory> + +namespace cru::platform::win { +class WinTextLayout : public Object, public virtual TextLayout { + public: + explicit WinTextLayout(std::shared_ptr<WinFontDescriptor> font); + WinTextLayout(const WinTextLayout& other) = delete; + WinTextLayout(WinTextLayout&& other) = delete; + WinTextLayout& operator=(const WinTextLayout& other) = delete; + WinTextLayout& operator=(WinTextLayout&& other) = delete; + ~WinTextLayout() override; + + IDWriteTextLayout* GetDWriteTextLayout() const { return text_layout_.Get(); } + + private: + Microsoft::WRL::ComPtr<IDWriteTextLayout> text_layout_; +}; +} // namespace cru::platform::win diff --git a/src/platform_win/CMakeLists.txt b/src/platform_win/CMakeLists.txt index 8edf646e..27e93091 100644 --- a/src/platform_win/CMakeLists.txt +++ b/src/platform_win/CMakeLists.txt @@ -7,10 +7,12 @@ add_library(cru_platform_win STATIC timer.cpp win_application.cpp win_brush.cpp + win_font.cpp win_geometry.cpp win_graph_factory.cpp win_native_window.cpp win_painter.cpp + win_text_layout.cpp window_class.cpp window_manager.cpp window_render_target.cpp) diff --git a/src/platform_win/win_font.cpp b/src/platform_win/win_font.cpp new file mode 100644 index 00000000..ddc42556 --- /dev/null +++ b/src/platform_win/win_font.cpp @@ -0,0 +1,6 @@ +#include "cru/platform/win/win_font.hpp" + +#include <utility> + +namespace cru::platform::win { +} // namespace cru::platform::win diff --git a/src/platform_win/win_text_layout.cpp b/src/platform_win/win_text_layout.cpp new file mode 100644 index 00000000..9ab70d2a --- /dev/null +++ b/src/platform_win/win_text_layout.cpp @@ -0,0 +1,5 @@ +#include "cru/platform/win/win_text_layout.hpp" + +namespace cru::platform::win { + +} |