aboutsummaryrefslogtreecommitdiff
path: root/src/win/graph/win_text_layout.cpp
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2019-06-27 00:18:48 +0800
committercrupest <crupest@outlook.com>2019-06-27 00:18:48 +0800
commitbaa7cf141b8121473edceae16c1a20a6d47bd202 (patch)
tree9349633a9d0bc286fe29f480bd70e4c2ad1f3075 /src/win/graph/win_text_layout.cpp
parentf404a3b2eb7bb9865d0c6f938538899996a53d8c (diff)
downloadcru-baa7cf141b8121473edceae16c1a20a6d47bd202.tar.gz
cru-baa7cf141b8121473edceae16c1a20a6d47bd202.tar.bz2
cru-baa7cf141b8121473edceae16c1a20a6d47bd202.zip
......
Diffstat (limited to 'src/win/graph/win_text_layout.cpp')
-rw-r--r--src/win/graph/win_text_layout.cpp94
1 files changed, 0 insertions, 94 deletions
diff --git a/src/win/graph/win_text_layout.cpp b/src/win/graph/win_text_layout.cpp
deleted file mode 100644
index 997309ad..00000000
--- a/src/win/graph/win_text_layout.cpp
+++ /dev/null
@@ -1,94 +0,0 @@
-#include "cru/win/graph/win_text_layout.hpp"
-
-#include "cru/win/exception.hpp"
-#include "cru/win/graph/win_font.hpp"
-#include "cru/win/graph/win_native_factory.hpp"
-
-#include <cassert>
-#include <utility>
-
-namespace cru::win::graph {
-WinTextLayout::WinTextLayout(IWinNativeFactory* factory,
- std::shared_ptr<WinFontDescriptor> font,
- std::wstring text) {
- assert(factory);
- assert(font);
- factory_ = factory;
- text_.swap(text);
- font_descriptor_.swap(font);
-
- ThrowIfFailed(factory->GetDWriteFactory()->CreateTextLayout(
- text_.c_str(), static_cast<UINT32>(text_.size()),
- font_descriptor_->GetDWriteTextFormat(), max_width_, max_height_,
- &text_layout_));
-}
-
-std::wstring WinTextLayout::GetText() { return text_; }
-
-void WinTextLayout::SetText(std::wstring new_text) {
- text_.swap(new_text);
- ThrowIfFailed(factory_->GetDWriteFactory()->CreateTextLayout(
- text_.c_str(), static_cast<UINT32>(text_.size()),
- font_descriptor_->GetDWriteTextFormat(), max_width_, max_height_,
- &text_layout_));
-}
-
-std::shared_ptr<platform::graph::IFontDescriptor> WinTextLayout::GetFont() {
- return font_descriptor_;
-}
-
-void WinTextLayout::SetFont(
- std::shared_ptr<platform::graph::IFontDescriptor> font) {
- auto f = std::dynamic_pointer_cast<WinFontDescriptor>(font);
- assert(f);
- f.swap(font_descriptor_);
- ThrowIfFailed(factory_->GetDWriteFactory()->CreateTextLayout(
- text_.c_str(), static_cast<UINT32>(text_.size()),
- font_descriptor_->GetDWriteTextFormat(), max_width_, max_height_,
- &text_layout_));
-}
-
-void WinTextLayout::SetMaxWidth(float max_width) {
- max_width_ = max_width;
- ThrowIfFailed(text_layout_->SetMaxWidth(max_width_));
-}
-
-void WinTextLayout::SetMaxHeight(float max_height) {
- max_height_ = max_height;
- ThrowIfFailed(text_layout_->SetMaxHeight(max_height_));
-}
-
-ui::Rect WinTextLayout::GetTextBounds() {
- DWRITE_TEXT_METRICS metrics;
- ThrowIfFailed(text_layout_->GetMetrics(&metrics));
- return ui::Rect{metrics.left, metrics.top, metrics.width, metrics.height};
-}
-
-std::vector<ui::Rect> WinTextLayout::TextRangeRect(
- const ui::TextRange& text_range) {
- DWRITE_TEXT_METRICS text_metrics;
- ThrowIfFailed(text_layout_->GetMetrics(&text_metrics));
- const auto metrics_count =
- text_metrics.lineCount * text_metrics.maxBidiReorderingDepth;
-
- std::vector<DWRITE_HIT_TEST_METRICS> hit_test_metrics(metrics_count);
- UINT32 actual_count;
- text_layout_->HitTestTextRange(text_range.position, text_range.count, 0, 0,
- hit_test_metrics.data(), metrics_count,
- &actual_count);
-
- hit_test_metrics.erase(hit_test_metrics.cbegin() + actual_count,
- hit_test_metrics.cend());
-
- std::vector<ui::Rect> result;
- result.reserve(actual_count);
-
- for (const auto& metrics : hit_test_metrics) {
- result.push_back(ui::Rect{metrics.left, metrics.top,
- metrics.left + metrics.width,
- metrics.top + metrics.height});
- }
-
- return result;
-}
-} // namespace cru::win::graph