aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2022-02-21 20:47:44 +0800
committercrupest <crupest@outlook.com>2022-02-21 20:47:44 +0800
commit6f398efaacd4cf733fcaedf29b648d17899071f0 (patch)
treef9bbd4102ce84c1714ba7dfd97c705ffce93f53e /src
parentced1a63686e6c64cb574d74a34d1bbd07d0a668e (diff)
downloadcru-6f398efaacd4cf733fcaedf29b648d17899071f0.tar.gz
cru-6f398efaacd4cf733fcaedf29b648d17899071f0.tar.bz2
cru-6f398efaacd4cf733fcaedf29b648d17899071f0.zip
...
Diffstat (limited to 'src')
-rw-r--r--src/common/CMakeLists.txt3
-rw-r--r--src/common/log/Logger.cpp8
-rw-r--r--src/common/log/StdioLogTarget.cpp5
-rw-r--r--src/common/platform/win/DebugLogTarget.cpp10
-rw-r--r--src/win/ForDllExport.cpp2
-rw-r--r--src/win/gui/Clipboard.cpp17
-rw-r--r--src/win/gui/UiApplication.cpp7
-rw-r--r--src/win/gui/Window.cpp10
8 files changed, 38 insertions, 24 deletions
diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt
index 330c7226..ae418f6b 100644
--- a/src/common/CMakeLists.txt
+++ b/src/common/CMakeLists.txt
@@ -37,8 +37,9 @@ if (WIN32)
target_sources(cru_base PRIVATE
platform/win/BridgeComStream.cpp
platform/win/ComAutoInit.cpp
- platform/win/StreamConvert.cpp
+ platform/win/DebugLogTarget.cpp
platform/win/Exception.cpp
+ platform/win/StreamConvert.cpp
platform/win/Win32FileStream.cpp
)
diff --git a/src/common/log/Logger.cpp b/src/common/log/Logger.cpp
index bcafde21..e13cb122 100644
--- a/src/common/log/Logger.cpp
+++ b/src/common/log/Logger.cpp
@@ -5,12 +5,20 @@
#include <cstdlib>
#include <ctime>
+#ifdef CRU_PLATFORM_WINDOWS
+#include "cru/common/platform/win/DebugLogTarget.h"
+#endif
+
namespace cru::log {
Logger *Logger::GetInstance() {
static Logger logger;
logger.AddLogTarget(std::make_unique<StdioLogTarget>());
+#ifdef CRU_PLATFORM_WINDOWS
+ logger.AddLogTarget(std::make_unique<platform::win::WinDebugLogTarget>());
+#endif
+
return &logger;
}
diff --git a/src/common/log/StdioLogTarget.cpp b/src/common/log/StdioLogTarget.cpp
index ad29a3ce..7f99dbd1 100644
--- a/src/common/log/StdioLogTarget.cpp
+++ b/src/common/log/StdioLogTarget.cpp
@@ -9,6 +9,11 @@ StdioLogTarget::~StdioLogTarget() {}
void StdioLogTarget::Write(log::LogLevel level, StringView s) {
#ifdef CRU_PLATFORM_WINDOWS
+ if (level == log::LogLevel::Error) {
+ std::wcerr.write(reinterpret_cast<const wchar_t*>(s.data()), s.size());
+ } else {
+ std::wcout.write(reinterpret_cast<const wchar_t*>(s.data()), s.size());
+ }
#else
std::string m = s.ToUtf8();
diff --git a/src/common/platform/win/DebugLogTarget.cpp b/src/common/platform/win/DebugLogTarget.cpp
new file mode 100644
index 00000000..92d26449
--- /dev/null
+++ b/src/common/platform/win/DebugLogTarget.cpp
@@ -0,0 +1,10 @@
+#include "cru/common/platform/win/DebugLogTarget.h"
+
+namespace cru::platform::win {
+void WinDebugLogTarget::Write(::cru::log::LogLevel level, StringView s) {
+ CRU_UNUSED(level)
+
+ String m = s.ToString();
+ ::OutputDebugStringW(reinterpret_cast<const wchar_t*>(m.c_str()));
+}
+} // namespace cru::platform::win
diff --git a/src/win/ForDllExport.cpp b/src/win/ForDllExport.cpp
index db1a7cad..e69de29b 100644
--- a/src/win/ForDllExport.cpp
+++ b/src/win/ForDllExport.cpp
@@ -1,2 +0,0 @@
-#include "cru/win/DebugLogger.h"
-#include "cru/win/StdOutLogger.h"
diff --git a/src/win/gui/Clipboard.cpp b/src/win/gui/Clipboard.cpp
index 7ecc9dea..6eab903c 100644
--- a/src/win/gui/Clipboard.cpp
+++ b/src/win/gui/Clipboard.cpp
@@ -1,5 +1,4 @@
#include "cru/win/gui/Clipboard.h"
-#include <winuser.h>
#include "cru/common/log/Logger.h"
#include "cru/win/gui/GodWindow.h"
#include "cru/win/gui/UiApplication.h"
@@ -14,25 +13,25 @@ String WinClipboard::GetText() {
auto god_window = application_->GetGodWindow();
if (!::OpenClipboard(god_window->GetHandle())) {
- log::Warn(u"Failed to open clipboard.");
+ CRU_LOG_WARN(u"Failed to open clipboard.");
return {};
}
if (!::IsClipboardFormatAvailable(CF_UNICODETEXT)) {
- log::Warn(u"Clipboard format for text is not available.");
+ CRU_LOG_WARN(u"Clipboard format for text is not available.");
return {};
}
auto handle = ::GetClipboardData(CF_UNICODETEXT);
if (handle == nullptr) {
- log::Warn(u"Failed to get clipboard data.");
+ CRU_LOG_WARN(u"Failed to get clipboard data.");
return {};
}
auto ptr = ::GlobalLock(handle);
if (ptr == nullptr) {
- log::Warn(u"Failed to lock clipboard data.");
+ CRU_LOG_WARN(u"Failed to lock clipboard data.");
::CloseClipboard();
return {};
}
@@ -49,21 +48,21 @@ void WinClipboard::SetText(String text) {
auto god_window = application_->GetGodWindow();
if (!::OpenClipboard(god_window->GetHandle())) {
- log::Warn(u"Failed to open clipboard.");
+ CRU_LOG_WARN(u"Failed to open clipboard.");
return;
}
auto handle = GlobalAlloc(GMEM_MOVEABLE, (text.size() + 1) * sizeof(wchar_t));
if (handle == nullptr) {
- log::Warn(u"Failed to allocate clipboard data.");
+ CRU_LOG_WARN(u"Failed to allocate clipboard data.");
::CloseClipboard();
return;
}
auto ptr = ::GlobalLock(handle);
if (ptr == nullptr) {
- log::Warn(u"Failed to lock clipboard data.");
+ CRU_LOG_WARN(u"Failed to lock clipboard data.");
::GlobalFree(handle);
::CloseClipboard();
return;
@@ -74,7 +73,7 @@ void WinClipboard::SetText(String text) {
::GlobalUnlock(handle);
if (::SetClipboardData(CF_UNICODETEXT, handle) == nullptr) {
- log::Warn(u"Failed to set clipboard data.");
+ CRU_LOG_WARN(u"Failed to set clipboard data.");
}
::CloseClipboard();
diff --git a/src/win/gui/UiApplication.cpp b/src/win/gui/UiApplication.cpp
index 8c2dfae7..1c9321b6 100644
--- a/src/win/gui/UiApplication.cpp
+++ b/src/win/gui/UiApplication.cpp
@@ -4,8 +4,6 @@
#include "WindowManager.h"
#include "cru/common/log/Logger.h"
#include "cru/platform/Check.h"
-#include "cru/win/DebugLogger.h"
-#include "cru/win/StdOutLogger.h"
#include "cru/win/graphics/direct/Factory.h"
#include "cru/win/gui/Base.h"
#include "cru/win/gui/Clipboard.h"
@@ -33,11 +31,6 @@ WinUiApplication::WinUiApplication() {
::SetThreadDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE);
- 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::graphics::win::direct::DirectGraphicsFactory>();
diff --git a/src/win/gui/Window.cpp b/src/win/gui/Window.cpp
index 9c86441e..cc2038ec 100644
--- a/src/win/gui/Window.cpp
+++ b/src/win/gui/Window.cpp
@@ -235,9 +235,9 @@ void WinNativeWindow::SetCursor(std::shared_ptr<ICursor> cursor) {
if (!::SetClassLongPtrW(hwnd_, GCLP_HCURSOR,
reinterpret_cast<LONG_PTR>(cursor_->GetHandle()))) {
CRU_LOG_WARN(
- u"Failed to set cursor because failed to set class long. Last "
- u"error code: {}.",
- ::GetLastError());
+ u"Failed to set cursor because failed to set class long. Last "
+ u"error code: {}.",
+ ::GetLastError());
return;
}
@@ -245,7 +245,7 @@ void WinNativeWindow::SetCursor(std::shared_ptr<ICursor> cursor) {
auto lg = [](StringView reason) {
CRU_LOG_WARN(
-
+
u"Failed to set cursor because {} when window is visible. (We need to "
u"update cursor if it is inside the window.) Last error code: {}.",
reason, ::GetLastError());
@@ -477,7 +477,7 @@ void WinNativeWindow::RecreateWindow() {
if (dpi == 0)
throw Win32Error(::GetLastError(), u"Failed to get dpi of window.");
dpi_ = static_cast<float>(dpi);
- log::Debug(u"Dpi of window is {}.", dpi_);
+ CRU_LOG_DEBUG(u"Dpi of window is {}.", dpi_);
window_manager->RegisterWindow(hwnd_, this);