aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2020-10-18 21:09:21 +0800
committercrupest <crupest@outlook.com>2020-10-18 21:09:21 +0800
commit5729a5aa1b443e3e25f3e14dee29636d3b31a6f8 (patch)
tree264efb8b0abdbbe1bcff813d9f10288f78cab905 /src
parent58af3c346e7dd72be077bf5231bb7bf193591288 (diff)
downloadcru-5729a5aa1b443e3e25f3e14dee29636d3b31a6f8.tar.gz
cru-5729a5aa1b443e3e25f3e14dee29636d3b31a6f8.tar.bz2
cru-5729a5aa1b443e3e25f3e14dee29636d3b31a6f8.zip
...
Diffstat (limited to 'src')
-rw-r--r--src/common/CMakeLists.txt1
-rw-r--r--src/common/Logger.cpp1
-rw-r--r--src/ui/UiManager.cpp5
-rw-r--r--src/ui/render/FlexLayoutRenderObject.cpp6
-rw-r--r--src/ui/render/RenderObject.cpp36
-rw-r--r--src/ui/render/WindowRenderObject.cpp4
-rw-r--r--src/win/CMakeLists.txt1
-rw-r--r--src/win/StdOutLogger.hpp24
-rw-r--r--src/win/native/UiApplication.cpp3
9 files changed, 78 insertions, 3 deletions
diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt
index 6a18ef2b..73ad9456 100644
--- a/src/common/CMakeLists.txt
+++ b/src/common/CMakeLists.txt
@@ -7,6 +7,7 @@ target_sources(cru_base PUBLIC
${CRU_BASE_INCLUDE_DIR}/Base.hpp
${CRU_BASE_INCLUDE_DIR}/Bitmask.hpp
${CRU_BASE_INCLUDE_DIR}/Event.hpp
+ ${CRU_BASE_INCLUDE_DIR}/Format.hpp
${CRU_BASE_INCLUDE_DIR}/Logger.hpp
${CRU_BASE_INCLUDE_DIR}/PreConfig.hpp
${CRU_BASE_INCLUDE_DIR}/SelfResolvable.hpp
diff --git a/src/common/Logger.cpp b/src/common/Logger.cpp
index dfa25347..af1dd692 100644
--- a/src/common/Logger.cpp
+++ b/src/common/Logger.cpp
@@ -73,7 +73,6 @@ void Logger::Log(LogLevel level, std::u16string_view tag,
}
#endif
for (const auto &source : sources_) {
- auto now = std::time(nullptr);
source->Write(level, fmt::format(u"[{}] {} {}: {}\n", GetLogTime(),
LogLevelToString(level), tag, s));
}
diff --git a/src/ui/UiManager.cpp b/src/ui/UiManager.cpp
index 4cd38efa..8a2029b9 100644
--- a/src/ui/UiManager.cpp
+++ b/src/ui/UiManager.cpp
@@ -30,7 +30,10 @@ UiManager* UiManager::GetInstance() {
UiManager::UiManager() {
const auto factory = GetGraphFactory();
- theme_resource_.default_font = factory->CreateFont(u"等线", 24.0f);
+ theme_resource_.default_font_family = u"等线";
+
+ theme_resource_.default_font =
+ factory->CreateFont(theme_resource_.default_font_family, 24.0f);
const auto black_brush = std::shared_ptr<platform::graph::ISolidColorBrush>(
CreateSolidColorBrush(factory, colors::black));
diff --git a/src/ui/render/FlexLayoutRenderObject.cpp b/src/ui/render/FlexLayoutRenderObject.cpp
index ade230b5..1c39cc8f 100644
--- a/src/ui/render/FlexLayoutRenderObject.cpp
+++ b/src/ui/render/FlexLayoutRenderObject.cpp
@@ -10,6 +10,10 @@
namespace cru::ui::render {
+std::u16string_view FlexLayoutRenderObject::GetName() const {
+ return u"FlexLayoutRenderObject";
+}
+
struct tag_horizontal_t {};
struct tag_vertical_t {};
@@ -64,7 +68,7 @@ template <typename TSize>
constexpr TSize CreateTSize(decltype(std::declval<TSize>().width) main,
decltype(std::declval<TSize>().height) cross,
tag_vertical_t) {
- return TSize{main, cross};
+ return TSize{cross, main};
}
enum class FlexLayoutAdjustType { None, Expand, Shrink };
diff --git a/src/ui/render/RenderObject.cpp b/src/ui/render/RenderObject.cpp
index 30433868..bc2228d3 100644
--- a/src/ui/render/RenderObject.cpp
+++ b/src/ui/render/RenderObject.cpp
@@ -5,6 +5,9 @@
#include "cru/ui/UiHost.hpp"
#include <algorithm>
+#include <string>
+#include <string_view>
+#include <vector>
namespace cru::ui::render {
void RenderObject::AddChild(RenderObject* render_object, const Index position) {
@@ -66,7 +69,19 @@ void RenderObject::Measure(const MeasureRequirement& requirement,
MeasureSize merged_preferred_size =
preferred_size.OverrideBy(preferred_size_);
+#if CRUUI_DEBUG_LAYOUT
+ log::Debug(u"{} Measure begins :\nrequirement: {}\npreferred size: {}",
+ this->GetDebugPathInTree(), requirement.ToDebugString(),
+ preferred_size.ToDebugString());
+#endif
+
size_ = OnMeasureCore(merged_requirement, merged_preferred_size);
+
+#if CRUUI_DEBUG_LAYOUT
+ log::Debug(u"{} Measure ends :\nresult size: {}", this->GetDebugPathInTree(),
+ size_.ToDebugString());
+#endif
+
Ensures(size_.width >= 0);
Ensures(size_.height >= 0);
Ensures(requirement.Satisfy(size_));
@@ -256,6 +271,27 @@ void RenderObject::InvalidatePaint() {
if (ui_host_ != nullptr) ui_host_->InvalidatePaint();
}
+constexpr std::u16string_view kUnamedName(u"UNNAMED");
+
+std::u16string_view RenderObject::GetName() const { return kUnamedName; }
+
+std::u16string RenderObject::GetDebugPathInTree() const {
+ std::vector<std::u16string_view> chain;
+ const RenderObject* parent = this;
+ while (parent != nullptr) {
+ chain.push_back(parent->GetName());
+ parent = parent->GetParent();
+ }
+
+ std::u16string result(chain.back());
+ for (auto iter = chain.crbegin() + 1; iter != chain.crend(); ++iter) {
+ result += u" -> ";
+ result += *iter;
+ }
+
+ return result;
+}
+
void RenderObject::NotifyAfterLayoutRecursive(RenderObject* render_object) {
render_object->OnAfterLayout();
for (const auto o : render_object->GetChildren()) {
diff --git a/src/ui/render/WindowRenderObject.cpp b/src/ui/render/WindowRenderObject.cpp
index 4adf559e..a136c1e9 100644
--- a/src/ui/render/WindowRenderObject.cpp
+++ b/src/ui/render/WindowRenderObject.cpp
@@ -24,6 +24,10 @@ RenderObject* WindowRenderObject::HitTest(const Point& point) {
return Rect{Point{}, GetSize()}.IsPointInside(point) ? this : nullptr;
}
+std::u16string_view WindowRenderObject::GetName() const {
+ return u"WindowRenderObject";
+}
+
Size WindowRenderObject::OnMeasureContent(const MeasureRequirement& requirement,
const MeasureSize& preferred_size) {
if (const auto child = GetChild()) {
diff --git a/src/win/CMakeLists.txt b/src/win/CMakeLists.txt
index 75b0a7ca..06f947a1 100644
--- a/src/win/CMakeLists.txt
+++ b/src/win/CMakeLists.txt
@@ -2,6 +2,7 @@ set(CRU_WIN_BASE_INCLUDE_DIR ${CRU_INCLUDE_DIR}/cru/win/)
add_library(cru_win_base STATIC
DebugLogger.hpp
+ StdOutLogger.hpp
Exception.cpp
HeapDebug.cpp
diff --git a/src/win/StdOutLogger.hpp b/src/win/StdOutLogger.hpp
new file mode 100644
index 00000000..bff8b30e
--- /dev/null
+++ b/src/win/StdOutLogger.hpp
@@ -0,0 +1,24 @@
+#include "cru/common/Base.hpp"
+#include "cru/win/WinPreConfig.hpp"
+
+#include "cru/common/Logger.hpp"
+
+#include <cwchar>
+
+namespace cru::platform::win {
+class WinStdOutLoggerSource : public ::cru::log::ILogSource {
+ public:
+ WinStdOutLoggerSource() = default;
+
+ CRU_DELETE_COPY(WinStdOutLoggerSource)
+ CRU_DELETE_MOVE(WinStdOutLoggerSource)
+
+ ~WinStdOutLoggerSource() = default;
+
+ void Write(::cru::log::LogLevel level, const std::u16string& s) override {
+ CRU_UNUSED(level)
+
+ std::fputws(reinterpret_cast<const wchar_t*>(s.c_str()), stdout);
+ }
+};
+} // namespace cru::platform::win
diff --git a/src/win/native/UiApplication.cpp b/src/win/native/UiApplication.cpp
index a806db88..198f03f2 100644
--- a/src/win/native/UiApplication.cpp
+++ b/src/win/native/UiApplication.cpp
@@ -1,6 +1,7 @@
#include "cru/win/native/UiApplication.hpp"
#include "../DebugLogger.hpp"
+#include "../StdOutLogger.hpp"
#include "TimerManager.hpp"
#include "WindowManager.hpp"
#include "cru/common/Logger.hpp"
@@ -30,6 +31,8 @@ WinUiApplication::WinUiApplication() {
log::Logger::GetInstance()->AddSource(
std::make_unique<::cru::platform::win::WinDebugLoggerSource>());
+ log::Logger::GetInstance()->AddSource(
+ std::make_unique<::cru::platform::win::WinStdOutLoggerSource>());
graph_factory_ =
std::make_unique<cru::platform::graph::win::direct::DirectGraphFactory>();