aboutsummaryrefslogtreecommitdiff
path: root/CruUI/ui/controls/text_block.cpp
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2018-09-10 23:58:34 +0800
committercrupest <crupest@outlook.com>2018-09-10 23:58:34 +0800
commit9250f4d919bc800fe66a50a0874183458e6ebbbe (patch)
tree1d25285801a6d92cfa8bde6dd0d13433e05d4c04 /CruUI/ui/controls/text_block.cpp
parentaa8ba64f4f580552ba14325dd3e04f38a3c9a1de (diff)
downloadcru-9250f4d919bc800fe66a50a0874183458e6ebbbe.tar.gz
cru-9250f4d919bc800fe66a50a0874183458e6ebbbe.tar.bz2
cru-9250f4d919bc800fe66a50a0874183458e6ebbbe.zip
...
Diffstat (limited to 'CruUI/ui/controls/text_block.cpp')
-rw-r--r--CruUI/ui/controls/text_block.cpp23
1 files changed, 8 insertions, 15 deletions
diff --git a/CruUI/ui/controls/text_block.cpp b/CruUI/ui/controls/text_block.cpp
index d15bd681..1201fac6 100644
--- a/CruUI/ui/controls/text_block.cpp
+++ b/CruUI/ui/controls/text_block.cpp
@@ -5,6 +5,7 @@
#include "ui/window.h"
#include "graph/graph.h"
#include "exception.h"
+#include "debug_base.h"
namespace cru
{
@@ -52,12 +53,10 @@ namespace cru
void TextBlock::OnSizeChangedCore(events::SizeChangedEventArgs& args)
{
- auto before = std::chrono::steady_clock::now();
- RecreateTextLayout();
+ text_layout_->SetMaxWidth(args.GetNewSize().width);
+ text_layout_->SetMaxHeight(args.GetNewSize().height);
Repaint();
- auto after = std::chrono::steady_clock::now();
- OutputDebugStringW((L"TextBlock OnSizeChangedCore time duration:" + std::to_wstring(std::chrono::duration_cast<std::chrono::milliseconds>(after - before).count()) + L"\n").c_str());
-
+ Control::OnSizeChangedCore(args);
}
void TextBlock::OnDraw(ID2D1DeviceContext* device_context)
@@ -73,7 +72,6 @@ namespace cru
const auto layout_params = GetLayoutParams();
-
if (layout_params->width.mode == MeasureMode::Stretch && layout_params->height.mode == MeasureMode::Stretch)
return available_size;
@@ -100,17 +98,12 @@ namespace cru
measure_size.width = get_measure_length(layout_params->width, available_size.width);
measure_size.height = get_measure_length(layout_params->height, available_size.height);
-
- Microsoft::WRL::ComPtr<IDWriteTextLayout> measure_text_layout;
-
- const auto dwrite_factory = GetDWriteFactory();
-
- ThrowIfFailed(dwrite_factory->CreateTextLayout(text_.c_str(), text_.size(),
- text_format_.Get(), measure_size.width, measure_size.height, &measure_text_layout)
- );
+ ThrowIfFailed(text_layout_->SetMaxWidth(measure_size.width));
+ ThrowIfFailed(text_layout_->SetMaxHeight(measure_size.height));
DWRITE_TEXT_METRICS metrics{};
- measure_text_layout->GetMetrics(&metrics);
+
+ ThrowIfFailed(text_layout_->GetMetrics(&metrics));
const Size measure_result(metrics.width, metrics.height);