aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/cru/win/Base.hpp13
-rw-r--r--include/cru/win/DebugLogger.hpp (renamed from src/win/DebugLogger.hpp)5
-rw-r--r--include/cru/win/StdOutLogger.hpp (renamed from src/win/StdOutLogger.hpp)8
-rw-r--r--include/cru/win/graphics/direct/Base.hpp12
-rw-r--r--include/cru/win/graphics/direct/Brush.hpp11
-rw-r--r--include/cru/win/graphics/direct/ComResource.hpp4
-rw-r--r--include/cru/win/graphics/direct/ConvertUtil.hpp2
-rw-r--r--include/cru/win/graphics/direct/Factory.hpp5
-rw-r--r--include/cru/win/graphics/direct/Font.hpp7
-rw-r--r--include/cru/win/graphics/direct/Geometry.hpp12
-rw-r--r--include/cru/win/graphics/direct/Painter.hpp7
-rw-r--r--include/cru/win/graphics/direct/Resource.hpp11
-rw-r--r--include/cru/win/graphics/direct/TextLayout.hpp7
-rw-r--r--include/cru/win/graphics/direct/WindowPainter.hpp3
-rw-r--r--include/cru/win/graphics/direct/WindowRenderTarget.hpp5
-rw-r--r--include/cru/win/gui/Base.hpp10
-rw-r--r--include/cru/win/gui/Cursor.hpp3
-rw-r--r--include/cru/win/gui/GodWindow.hpp2
-rw-r--r--include/cru/win/gui/InputMethod.hpp7
-rw-r--r--include/cru/win/gui/Keyboard.hpp4
-rw-r--r--include/cru/win/gui/Resource.hpp3
-rw-r--r--include/cru/win/gui/UiApplication.hpp4
-rw-r--r--include/cru/win/gui/Window.hpp3
-rw-r--r--include/cru/win/gui/WindowClass.hpp2
-rw-r--r--include/cru/win/gui/WindowNativeMessageEventArgs.hpp6
-rw-r--r--src/win/CMakeLists.txt6
-rw-r--r--src/win/ForDllExport.cpp2
-rw-r--r--src/win/graphics/direct/CMakeLists.txt3
-rw-r--r--src/win/graphics/direct/Font.cpp2
-rw-r--r--src/win/gui/CMakeLists.txt3
-rw-r--r--src/win/gui/Cursor.cpp2
-rw-r--r--src/win/gui/TimerManager.cpp2
-rw-r--r--src/win/gui/UiApplication.cpp6
-rw-r--r--src/win/gui/Window.cpp26
-rw-r--r--src/win/gui/WindowClass.cpp2
35 files changed, 132 insertions, 78 deletions
diff --git a/include/cru/win/Base.hpp b/include/cru/win/Base.hpp
new file mode 100644
index 00000000..d78f2538
--- /dev/null
+++ b/include/cru/win/Base.hpp
@@ -0,0 +1,13 @@
+#pragma once
+
+#include "WinPreConfig.hpp"
+
+#ifdef CRU_PLATFORM_WINDOWS
+#ifdef CRU_WIN_EXPORT_API
+#define CRU_WIN_API __declspec(dllexport)
+#else
+#define CRU_WIN_API __declspec(dllimport)
+#endif
+#else
+#define CRU_WIN_API
+#endif
diff --git a/src/win/DebugLogger.hpp b/include/cru/win/DebugLogger.hpp
index 5e78af22..05793607 100644
--- a/src/win/DebugLogger.hpp
+++ b/include/cru/win/DebugLogger.hpp
@@ -1,10 +1,11 @@
-#include "cru/win/WinPreConfig.hpp"
+#pragma once
+#include "Base.hpp"
#include "cru/common/Logger.hpp"
namespace cru::platform::win {
-class WinDebugLoggerSource : public ::cru::log::ILogSource {
+class CRU_WIN_API WinDebugLoggerSource : public ::cru::log::ILogSource {
public:
WinDebugLoggerSource() = default;
diff --git a/src/win/StdOutLogger.hpp b/include/cru/win/StdOutLogger.hpp
index b3a22dd5..cfda0a85 100644
--- a/src/win/StdOutLogger.hpp
+++ b/include/cru/win/StdOutLogger.hpp
@@ -1,12 +1,10 @@
-#include "cru/common/Base.hpp"
-#include "cru/win/WinPreConfig.hpp"
+#pragma once
+#include "Base.hpp"
#include "cru/common/Logger.hpp"
-#include <cwchar>
-
namespace cru::platform::win {
-class WinStdOutLoggerSource : public ::cru::log::ILogSource {
+class CRU_WIN_API WinStdOutLoggerSource : public ::cru::log::ILogSource {
public:
WinStdOutLoggerSource() = default;
diff --git a/include/cru/win/graphics/direct/Base.hpp b/include/cru/win/graphics/direct/Base.hpp
new file mode 100644
index 00000000..b25a1c14
--- /dev/null
+++ b/include/cru/win/graphics/direct/Base.hpp
@@ -0,0 +1,12 @@
+#pragma once
+#include "../../WinPreConfig.hpp"
+
+#ifdef CRU_PLATFORM_WINDOWS
+#ifdef CRU_WIN_GRAPHICS_DIRECT_EXPORT_API
+#define CRU_WIN_GRAPHICS_DIRECT_API __declspec(dllexport)
+#else
+#define CRU_WIN_GRAPHICS_DIRECT_API __declspec(dllimport)
+#endif
+#else
+#define CRU_WIN_GRAPHICS_DIRECT_API
+#endif
diff --git a/include/cru/win/graphics/direct/Brush.hpp b/include/cru/win/graphics/direct/Brush.hpp
index 9d8e5384..22b0a8af 100644
--- a/include/cru/win/graphics/direct/Brush.hpp
+++ b/include/cru/win/graphics/direct/Brush.hpp
@@ -5,14 +5,15 @@
#include "cru/platform/graphics/Brush.hpp"
namespace cru::platform::graphics::win::direct {
-struct ID2DBrush : virtual IBrush {
+struct CRU_WIN_GRAPHICS_DIRECT_API ID2DBrush : virtual IBrush {
virtual ID2D1Brush* GetD2DBrushInterface() const = 0;
};
-class D2DSolidColorBrush : public DirectGraphicsResource,
- public virtual ISolidColorBrush,
- public virtual ID2DBrush,
- public virtual IComResource<ID2D1SolidColorBrush> {
+class CRU_WIN_GRAPHICS_DIRECT_API D2DSolidColorBrush
+ : public DirectGraphicsResource,
+ public virtual ISolidColorBrush,
+ public virtual ID2DBrush,
+ public virtual IComResource<ID2D1SolidColorBrush> {
public:
explicit D2DSolidColorBrush(DirectGraphicsFactory* factory);
diff --git a/include/cru/win/graphics/direct/ComResource.hpp b/include/cru/win/graphics/direct/ComResource.hpp
index 34ea39ed..f8738f6e 100644
--- a/include/cru/win/graphics/direct/ComResource.hpp
+++ b/include/cru/win/graphics/direct/ComResource.hpp
@@ -1,11 +1,11 @@
#pragma once
-#include "../../WinPreConfig.hpp"
+#include "Base.hpp"
#include "cru/common/Base.hpp"
namespace cru::platform::graphics::win::direct {
template <typename TInterface>
-struct IComResource : virtual Interface {
+struct CRU_WIN_GRAPHICS_DIRECT_API IComResource : virtual Interface {
virtual TInterface* GetComInterface() const = 0;
};
} // namespace cru::platform::graphics::win::direct
diff --git a/include/cru/win/graphics/direct/ConvertUtil.hpp b/include/cru/win/graphics/direct/ConvertUtil.hpp
index 0d8da8a1..963b22f3 100644
--- a/include/cru/win/graphics/direct/ConvertUtil.hpp
+++ b/include/cru/win/graphics/direct/ConvertUtil.hpp
@@ -1,5 +1,5 @@
#pragma once
-#include "../../WinPreConfig.hpp"
+#include "Base.hpp"
#include "cru/platform/graphics/Base.hpp"
diff --git a/include/cru/win/graphics/direct/Factory.hpp b/include/cru/win/graphics/direct/Factory.hpp
index efcebba7..932d302b 100644
--- a/include/cru/win/graphics/direct/Factory.hpp
+++ b/include/cru/win/graphics/direct/Factory.hpp
@@ -4,8 +4,9 @@
#include "cru/platform/graphics/Factory.hpp"
namespace cru::platform::graphics::win::direct {
-class DirectGraphicsFactory : public DirectResource,
- public virtual IGraphicsFactory {
+class CRU_WIN_GRAPHICS_DIRECT_API DirectGraphicsFactory
+ : public DirectResource,
+ public virtual IGraphicsFactory {
public:
DirectGraphicsFactory();
diff --git a/include/cru/win/graphics/direct/Font.hpp b/include/cru/win/graphics/direct/Font.hpp
index 3cd94f82..3bf423a0 100644
--- a/include/cru/win/graphics/direct/Font.hpp
+++ b/include/cru/win/graphics/direct/Font.hpp
@@ -7,9 +7,10 @@
#include <string_view>
namespace cru::platform::graphics::win::direct {
-class DWriteFont : public DirectGraphicsResource,
- public virtual IFont,
- public virtual IComResource<IDWriteTextFormat> {
+class CRU_WIN_GRAPHICS_DIRECT_API DWriteFont
+ : public DirectGraphicsResource,
+ public virtual IFont,
+ public virtual IComResource<IDWriteTextFormat> {
public:
DWriteFont(DirectGraphicsFactory* factory, String font_family,
float font_size);
diff --git a/include/cru/win/graphics/direct/Geometry.hpp b/include/cru/win/graphics/direct/Geometry.hpp
index b3b82f9c..3849045e 100644
--- a/include/cru/win/graphics/direct/Geometry.hpp
+++ b/include/cru/win/graphics/direct/Geometry.hpp
@@ -5,8 +5,9 @@
#include "cru/platform/graphics/Geometry.hpp"
namespace cru::platform::graphics::win::direct {
-class D2DGeometryBuilder : public DirectGraphicsResource,
- public virtual IGeometryBuilder {
+class CRU_WIN_GRAPHICS_DIRECT_API D2DGeometryBuilder
+ : public DirectGraphicsResource,
+ public virtual IGeometryBuilder {
public:
explicit D2DGeometryBuilder(DirectGraphicsFactory* factory);
@@ -33,9 +34,10 @@ class D2DGeometryBuilder : public DirectGraphicsResource,
Microsoft::WRL::ComPtr<ID2D1GeometrySink> geometry_sink_;
};
-class D2DGeometry : public DirectGraphicsResource,
- public virtual IGeometry,
- public IComResource<ID2D1Geometry> {
+class CRU_WIN_GRAPHICS_DIRECT_API D2DGeometry
+ : public DirectGraphicsResource,
+ public virtual IGeometry,
+ public IComResource<ID2D1Geometry> {
public:
D2DGeometry(DirectGraphicsFactory* factory,
Microsoft::WRL::ComPtr<ID2D1PathGeometry> geometry);
diff --git a/include/cru/win/graphics/direct/Painter.hpp b/include/cru/win/graphics/direct/Painter.hpp
index d7b90d19..81d102f1 100644
--- a/include/cru/win/graphics/direct/Painter.hpp
+++ b/include/cru/win/graphics/direct/Painter.hpp
@@ -7,9 +7,10 @@
#include <vector>
namespace cru::platform::graphics::win::direct {
-class D2DPainter : public DirectResource,
- public virtual IPainter,
- public virtual IComResource<ID2D1RenderTarget> {
+class CRU_WIN_GRAPHICS_DIRECT_API D2DPainter
+ : public DirectResource,
+ public virtual IPainter,
+ public virtual IComResource<ID2D1RenderTarget> {
public:
explicit D2DPainter(ID2D1RenderTarget* render_target);
diff --git a/include/cru/win/graphics/direct/Resource.hpp b/include/cru/win/graphics/direct/Resource.hpp
index c376628d..112af26f 100644
--- a/include/cru/win/graphics/direct/Resource.hpp
+++ b/include/cru/win/graphics/direct/Resource.hpp
@@ -1,5 +1,5 @@
#pragma once
-#include "../../WinPreConfig.hpp"
+#include "Base.hpp"
#include "cru/platform/graphics/Resource.hpp"
@@ -8,7 +8,9 @@
namespace cru::platform::graphics::win::direct {
class DirectGraphicsFactory;
-class DirectResource : public Object, public virtual IPlatformResource {
+class CRU_WIN_GRAPHICS_DIRECT_API DirectResource
+ : public Object,
+ public virtual IPlatformResource {
public:
static String kPlatformId;
@@ -25,8 +27,9 @@ class DirectResource : public Object, public virtual IPlatformResource {
String GetPlatformId() const final { return kPlatformId; }
};
-class DirectGraphicsResource : public DirectResource,
- public virtual IGraphicsResource {
+class CRU_WIN_GRAPHICS_DIRECT_API DirectGraphicsResource
+ : public DirectResource,
+ public virtual IGraphicsResource {
protected:
// Param factory can't be null.
explicit DirectGraphicsResource(DirectGraphicsFactory* factory);
diff --git a/include/cru/win/graphics/direct/TextLayout.hpp b/include/cru/win/graphics/direct/TextLayout.hpp
index b1843dd7..41698862 100644
--- a/include/cru/win/graphics/direct/TextLayout.hpp
+++ b/include/cru/win/graphics/direct/TextLayout.hpp
@@ -10,9 +10,10 @@
namespace cru::platform::graphics::win::direct {
class DWriteFont;
-class DWriteTextLayout : public DirectGraphicsResource,
- public virtual ITextLayout,
- public virtual IComResource<IDWriteTextLayout> {
+class CRU_WIN_GRAPHICS_DIRECT_API DWriteTextLayout
+ : public DirectGraphicsResource,
+ public virtual ITextLayout,
+ public virtual IComResource<IDWriteTextLayout> {
public:
DWriteTextLayout(DirectGraphicsFactory* factory, std::shared_ptr<IFont> font,
String text);
diff --git a/include/cru/win/graphics/direct/WindowPainter.hpp b/include/cru/win/graphics/direct/WindowPainter.hpp
index b5faf7b5..a39bc2b7 100644
--- a/include/cru/win/graphics/direct/WindowPainter.hpp
+++ b/include/cru/win/graphics/direct/WindowPainter.hpp
@@ -3,7 +3,8 @@
#include "WindowRenderTarget.hpp"
namespace cru::platform::graphics::win::direct {
-class D2DWindowPainter : public graphics::win::direct::D2DPainter {
+class CRU_WIN_GRAPHICS_DIRECT_API D2DWindowPainter
+ : public graphics::win::direct::D2DPainter {
public:
explicit D2DWindowPainter(D2DWindowRenderTarget* window);
diff --git a/include/cru/win/graphics/direct/WindowRenderTarget.hpp b/include/cru/win/graphics/direct/WindowRenderTarget.hpp
index c197841d..4774a1d3 100644
--- a/include/cru/win/graphics/direct/WindowRenderTarget.hpp
+++ b/include/cru/win/graphics/direct/WindowRenderTarget.hpp
@@ -3,9 +3,10 @@
namespace cru::platform::graphics::win::direct {
// Represents a window render target.
-class D2DWindowRenderTarget : public Object {
+class CRU_WIN_GRAPHICS_DIRECT_API D2DWindowRenderTarget : public Object {
public:
- D2DWindowRenderTarget(gsl::not_null<DirectGraphicsFactory*> factory, HWND hwnd);
+ D2DWindowRenderTarget(gsl::not_null<DirectGraphicsFactory*> factory,
+ HWND hwnd);
CRU_DELETE_COPY(D2DWindowRenderTarget)
CRU_DELETE_MOVE(D2DWindowRenderTarget)
diff --git a/include/cru/win/gui/Base.hpp b/include/cru/win/gui/Base.hpp
index 00782663..e6807710 100644
--- a/include/cru/win/gui/Base.hpp
+++ b/include/cru/win/gui/Base.hpp
@@ -3,6 +3,16 @@
#include "cru/common/Base.hpp"
+#ifdef CRU_PLATFORM_WINDOWS
+#ifdef CRU_WIN_GUI_EXPORT_API
+#define CRU_WIN_GUI_API __declspec(dllexport)
+#else
+#define CRU_WIN_GUI_API __declspec(dllimport)
+#endif
+#else
+#define CRU_WIN_GUI_API
+#endif
+
namespace cru::platform::gui::win {
class GodWindow;
class TimerManager;
diff --git a/include/cru/win/gui/Cursor.hpp b/include/cru/win/gui/Cursor.hpp
index e7c76879..89f61db9 100644
--- a/include/cru/win/gui/Cursor.hpp
+++ b/include/cru/win/gui/Cursor.hpp
@@ -6,7 +6,8 @@
#include <memory>
namespace cru::platform::gui::win {
-class WinCursor : public WinNativeResource, public virtual ICursor {
+class CRU_WIN_GUI_API WinCursor : public WinNativeResource,
+ public virtual ICursor {
CRU_DEFINE_CLASS_LOG_TAG(u"cru::platform::gui::win::WinCursor")
public:
diff --git a/include/cru/win/gui/GodWindow.hpp b/include/cru/win/gui/GodWindow.hpp
index d9a128e6..fa69cb84 100644
--- a/include/cru/win/gui/GodWindow.hpp
+++ b/include/cru/win/gui/GodWindow.hpp
@@ -8,7 +8,7 @@
#include <memory>
namespace cru::platform::gui::win {
-class GodWindow : public Object {
+class CRU_WIN_GUI_API GodWindow : public Object {
CRU_DEFINE_CLASS_LOG_TAG(u"cru::platform::gui::win::GodWindow")
public:
diff --git a/include/cru/win/gui/InputMethod.hpp b/include/cru/win/gui/InputMethod.hpp
index 3784dcda..0f50c0aa 100644
--- a/include/cru/win/gui/InputMethod.hpp
+++ b/include/cru/win/gui/InputMethod.hpp
@@ -11,7 +11,7 @@
#include <imm.h>
namespace cru::platform::gui::win {
-class AutoHIMC : public Object {
+class CRU_WIN_GUI_API AutoHIMC : public Object {
CRU_DEFINE_CLASS_LOG_TAG(u"cru::platform::gui::win::AutoHIMC")
public:
@@ -33,8 +33,9 @@ class AutoHIMC : public Object {
HIMC handle_;
};
-class WinInputMethodContext : public WinNativeResource,
- public virtual IInputMethodContext {
+class CRU_WIN_GUI_API WinInputMethodContext
+ : public WinNativeResource,
+ public virtual IInputMethodContext {
CRU_DEFINE_CLASS_LOG_TAG(u"cru::platform::gui::win::WinInputMethodContext")
public:
diff --git a/include/cru/win/gui/Keyboard.hpp b/include/cru/win/gui/Keyboard.hpp
index 5b98833c..d736966a 100644
--- a/include/cru/win/gui/Keyboard.hpp
+++ b/include/cru/win/gui/Keyboard.hpp
@@ -4,6 +4,6 @@
#include "cru/platform/gui/Keyboard.hpp"
namespace cru::platform::gui::win {
-KeyCode VirtualKeyToKeyCode(int virtual_key);
-KeyModifier RetrieveKeyMofifier();
+KeyCode CRU_WIN_GUI_API VirtualKeyToKeyCode(int virtual_key);
+KeyModifier CRU_WIN_GUI_API RetrieveKeyMofifier();
} // namespace cru::platform::gui::win
diff --git a/include/cru/win/gui/Resource.hpp b/include/cru/win/gui/Resource.hpp
index 4215de69..34c4fc1b 100644
--- a/include/cru/win/gui/Resource.hpp
+++ b/include/cru/win/gui/Resource.hpp
@@ -4,7 +4,8 @@
#include "cru/platform/Resource.hpp"
namespace cru::platform::gui::win {
-class WinNativeResource : public Object, public virtual IPlatformResource {
+class CRU_WIN_GUI_API WinNativeResource : public Object,
+ public virtual IPlatformResource {
public:
static String kPlatformId;
diff --git a/include/cru/win/gui/UiApplication.hpp b/include/cru/win/gui/UiApplication.hpp
index 4b972fee..a13dc932 100644
--- a/include/cru/win/gui/UiApplication.hpp
+++ b/include/cru/win/gui/UiApplication.hpp
@@ -11,8 +11,8 @@ class DirectGraphicsFactory;
}
namespace cru::platform::gui::win {
-class WinUiApplication : public WinNativeResource,
- public virtual IUiApplication {
+class CRU_WIN_GUI_API WinUiApplication : public WinNativeResource,
+ public virtual IUiApplication {
public:
static WinUiApplication* GetInstance() { return instance; }
diff --git a/include/cru/win/gui/Window.hpp b/include/cru/win/gui/Window.hpp
index 41eac5fa..baca8f00 100644
--- a/include/cru/win/gui/Window.hpp
+++ b/include/cru/win/gui/Window.hpp
@@ -9,7 +9,8 @@
#include <memory>
namespace cru::platform::gui::win {
-class WinNativeWindow : public WinNativeResource, public virtual INativeWindow {
+class CRU_WIN_GUI_API WinNativeWindow : public WinNativeResource,
+ public virtual INativeWindow {
CRU_DEFINE_CLASS_LOG_TAG(u"cru::platform::gui::win::WinNativeWindow")
public:
diff --git a/include/cru/win/gui/WindowClass.hpp b/include/cru/win/gui/WindowClass.hpp
index 2c07b68f..ab55b214 100644
--- a/include/cru/win/gui/WindowClass.hpp
+++ b/include/cru/win/gui/WindowClass.hpp
@@ -4,7 +4,7 @@
#include <string>
namespace cru::platform::gui::win {
-class WindowClass : public Object {
+class CRU_WIN_GUI_API WindowClass : public Object {
public:
WindowClass(std::wstring name, WNDPROC window_proc, HINSTANCE h_instance);
diff --git a/include/cru/win/gui/WindowNativeMessageEventArgs.hpp b/include/cru/win/gui/WindowNativeMessageEventArgs.hpp
index 834ba3c2..7e62c19d 100644
--- a/include/cru/win/gui/WindowNativeMessageEventArgs.hpp
+++ b/include/cru/win/gui/WindowNativeMessageEventArgs.hpp
@@ -1,17 +1,17 @@
#pragma once
-#include "../WinPreConfig.hpp"
+#include "Base.hpp"
#include "cru/common/Base.hpp"
namespace cru::platform::gui::win {
-struct WindowNativeMessage {
+struct CRU_WIN_GUI_API WindowNativeMessage {
HWND hwnd;
UINT msg;
WPARAM w_param;
LPARAM l_param;
};
-class WindowNativeMessageEventArgs : public Object {
+class CRU_WIN_GUI_API WindowNativeMessageEventArgs : public Object {
public:
WindowNativeMessageEventArgs(const WindowNativeMessage& message)
: message_(message) {}
diff --git a/src/win/CMakeLists.txt b/src/win/CMakeLists.txt
index e190e9a0..ff3d6f96 100644
--- a/src/win/CMakeLists.txt
+++ b/src/win/CMakeLists.txt
@@ -1,8 +1,8 @@
-add_library(cru_win_base STATIC
- DebugLogger.hpp
- StdOutLogger.hpp
+add_library(cru_win_base SHARED
+ ForDllExport.cpp
)
target_compile_definitions(cru_win_base PUBLIC UNICODE _UNICODE) # use unicode
+target_compile_definitions(cru_win_base PRIVATE CRU_WIN_EXPORT_API)
target_link_libraries(cru_win_base PUBLIC cru_base)
add_subdirectory(graphics)
diff --git a/src/win/ForDllExport.cpp b/src/win/ForDllExport.cpp
new file mode 100644
index 00000000..4662461b
--- /dev/null
+++ b/src/win/ForDllExport.cpp
@@ -0,0 +1,2 @@
+#include "cru/win/DebugLogger.hpp"
+#include "cru/win/StdOutLogger.hpp"
diff --git a/src/win/graphics/direct/CMakeLists.txt b/src/win/graphics/direct/CMakeLists.txt
index ecd72b13..84c2af61 100644
--- a/src/win/graphics/direct/CMakeLists.txt
+++ b/src/win/graphics/direct/CMakeLists.txt
@@ -1,4 +1,4 @@
-add_library(cru_win_graphics_direct STATIC
+add_library(cru_win_graphics_direct SHARED
Brush.cpp
Font.cpp
Geometry.cpp
@@ -11,3 +11,4 @@ add_library(cru_win_graphics_direct STATIC
)
target_link_libraries(cru_win_graphics_direct PUBLIC D3D11 D2d1 DWrite)
target_link_libraries(cru_win_graphics_direct PUBLIC cru_win_base cru_platform_graphics)
+target_compile_definitions(cru_win_graphics_direct PRIVATE CRU_WIN_GRAPHICS_DIRECT_EXPORT_API)
diff --git a/src/win/graphics/direct/Font.cpp b/src/win/graphics/direct/Font.cpp
index ffc16214..39ba2d8b 100644
--- a/src/win/graphics/direct/Font.cpp
+++ b/src/win/graphics/direct/Font.cpp
@@ -16,7 +16,7 @@ DWriteFont::DWriteFont(DirectGraphicsFactory* factory, String font_family,
if (!::GetUserDefaultLocaleName(buffer.data(),
static_cast<int>(buffer.size())))
throw platform::win::Win32Error(
- ::GetLastError(), "Failed to get locale when create dwrite font.");
+ ::GetLastError(), u"Failed to get locale when create dwrite font.");
ThrowIfFailed(factory->GetDWriteFactory()->CreateTextFormat(
reinterpret_cast<const wchar_t*>(font_family_.c_str()), nullptr,
diff --git a/src/win/gui/CMakeLists.txt b/src/win/gui/CMakeLists.txt
index 2c8d1aab..b9d2862f 100644
--- a/src/win/gui/CMakeLists.txt
+++ b/src/win/gui/CMakeLists.txt
@@ -1,4 +1,4 @@
-add_library(cru_win_gui STATIC
+add_library(cru_win_gui SHARED
TimerManager.hpp
WindowManager.hpp
@@ -15,3 +15,4 @@ add_library(cru_win_gui STATIC
)
target_link_libraries(cru_win_gui PUBLIC imm32)
target_link_libraries(cru_win_gui PUBLIC cru_win_graphics_direct cru_platform_gui)
+target_compile_definitions(cru_win_gui PRIVATE CRU_WIN_GUI_EXPORT_API)
diff --git a/src/win/gui/Cursor.cpp b/src/win/gui/Cursor.cpp
index 80e8a749..a3a7f824 100644
--- a/src/win/gui/Cursor.cpp
+++ b/src/win/gui/Cursor.cpp
@@ -27,7 +27,7 @@ WinCursor* LoadWinCursor(const wchar_t* name) {
const auto handle = static_cast<HCURSOR>(::LoadImageW(
NULL, name, IMAGE_CURSOR, SM_CYCURSOR, SM_CYCURSOR, LR_SHARED));
if (handle == NULL) {
- throw Win32Error(::GetLastError(), "Failed to load system cursor.");
+ throw Win32Error(::GetLastError(), u"Failed to load system cursor.");
}
return new WinCursor(handle, false);
}
diff --git a/src/win/gui/TimerManager.cpp b/src/win/gui/TimerManager.cpp
index fc26b6c4..f3da1f09 100644
--- a/src/win/gui/TimerManager.cpp
+++ b/src/win/gui/TimerManager.cpp
@@ -26,7 +26,7 @@ long long TimerManager::SetTimer(TimerType type, int period,
gsl::narrow<UINT_PTR>(id), 0)) {
throw Win32Error(
::GetLastError(),
- "Failed to post window message to god window for set immediate.");
+ u"Failed to post window message to god window for set immediate.");
}
} else {
CreateNativeTimer(&timer_info);
diff --git a/src/win/gui/UiApplication.cpp b/src/win/gui/UiApplication.cpp
index cb0f0a4c..dadcfc75 100644
--- a/src/win/gui/UiApplication.cpp
+++ b/src/win/gui/UiApplication.cpp
@@ -1,11 +1,11 @@
#include "cru/win/gui/UiApplication.hpp"
-#include "../DebugLogger.hpp"
-#include "../StdOutLogger.hpp"
#include "TimerManager.hpp"
#include "WindowManager.hpp"
#include "cru/common/Logger.hpp"
#include "cru/platform/Check.hpp"
+#include "cru/win/DebugLogger.hpp"
+#include "cru/win/StdOutLogger.hpp"
#include "cru/win/graphics/direct/Factory.hpp"
#include "cru/win/gui/Cursor.hpp"
#include "cru/win/gui/Exception.hpp"
@@ -27,7 +27,7 @@ WinUiApplication::WinUiApplication() {
instance_handle_ = ::GetModuleHandleW(nullptr);
if (!instance_handle_)
- throw Win32Error("Failed to get module(instance) handle.");
+ throw Win32Error(u"Failed to get module(instance) handle.");
::SetThreadDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE);
diff --git a/src/win/gui/Window.cpp b/src/win/gui/Window.cpp
index 7ee2fb71..b3cf7065 100644
--- a/src/win/gui/Window.cpp
+++ b/src/win/gui/Window.cpp
@@ -42,7 +42,7 @@ Rect CalcWindowRectFromClient(const Rect& rect, WindowStyleFlag style_flag,
r.right = DipToPixel(rect.GetRight(), dpi);
r.bottom = DipToPixel(rect.GetBottom(), dpi);
if (!AdjustWindowRectEx(&r, CalcWindowStyle(style_flag), FALSE, 0))
- throw Win32Error(::GetLastError(), "Failed to invoke AdjustWindowRectEx.");
+ throw Win32Error(::GetLastError(), u"Failed to invoke AdjustWindowRectEx.");
Rect result =
Rect::FromVertices(PixelToDip(r.left, dpi), PixelToDip(r.top, dpi),
@@ -55,7 +55,7 @@ Rect CalcClientRectFromWindow(const Rect& rect, WindowStyleFlag style_flag,
RECT o{100, 100, 500, 500};
RECT s = o;
if (!AdjustWindowRectEx(&s, CalcWindowStyle(style_flag), FALSE, 0))
- throw Win32Error(::GetLastError(), "Failed to invoke AdjustWindowRectEx.");
+ throw Win32Error(::GetLastError(), u"Failed to invoke AdjustWindowRectEx.");
Rect result = rect;
result.Shrink(Thickness(PixelToDip(s.left - o.left, dpi),
@@ -125,7 +125,7 @@ void WinNativeWindow::SetClientSize(const Size& size) {
if (!SetWindowPos(hwnd_, nullptr, 0, 0, rect.right - rect.left,
rect.bottom - rect.top, SWP_NOZORDER | SWP_NOMOVE))
- throw Win32Error(::GetLastError(), "Failed to invoke SetWindowPos.");
+ throw Win32Error(::GetLastError(), u"Failed to invoke SetWindowPos.");
}
}
@@ -140,7 +140,7 @@ void WinNativeWindow::SetClientRect(const Rect& rect) {
if (!SetWindowPos(hwnd_, nullptr, 0, 0, r.right - r.left, r.bottom - r.top,
SWP_NOZORDER | SWP_NOMOVE))
- throw Win32Error(::GetLastError(), "Failed to invoke SetWindowPos.");
+ throw Win32Error(::GetLastError(), u"Failed to invoke SetWindowPos.");
}
}
@@ -148,7 +148,7 @@ Rect WinNativeWindow::GetWindowRect() {
if (hwnd_) {
RECT rect;
if (!::GetWindowRect(hwnd_, &rect))
- throw Win32Error(::GetLastError(), "Failed to invoke GetWindowRect.");
+ throw Win32Error(::GetLastError(), u"Failed to invoke GetWindowRect.");
return Rect::FromVertices(PixelToDip(rect.left), PixelToDip(rect.top),
PixelToDip(rect.right), PixelToDip(rect.bottom));
@@ -164,7 +164,7 @@ void WinNativeWindow::SetWindowRect(const Rect& rect) {
if (!SetWindowPos(hwnd_, nullptr, DipToPixel(rect.left),
DipToPixel(rect.top), DipToPixel(rect.GetRight()),
DipToPixel(rect.GetBottom()), SWP_NOZORDER))
- throw Win32Error(::GetLastError(), "Failed to invoke SetWindowPos.");
+ throw Win32Error(::GetLastError(), u"Failed to invoke SetWindowPos.");
}
}
@@ -179,9 +179,9 @@ bool WinNativeWindow::RequestFocus() {
Point WinNativeWindow::GetMousePosition() {
POINT p;
if (!::GetCursorPos(&p))
- throw Win32Error(::GetLastError(), "Failed to get cursor position.");
+ throw Win32Error(::GetLastError(), u"Failed to get cursor position.");
if (!::ScreenToClient(hwnd_, &p))
- throw Win32Error(::GetLastError(), "Failed to call ScreenToClient.");
+ throw Win32Error(::GetLastError(), u"Failed to call ScreenToClient.");
return PixelToDip(p);
}
@@ -200,9 +200,9 @@ void WinNativeWindow::RequestRepaint() {
log::TagDebug(log_tag, u"A repaint is requested.");
}
if (!::InvalidateRect(hwnd_, nullptr, FALSE))
- throw Win32Error(::GetLastError(), "Failed to invalidate window.");
+ throw Win32Error(::GetLastError(), u"Failed to invalidate window.");
if (!::UpdateWindow(hwnd_))
- throw Win32Error(::GetLastError(), "Failed to update window.");
+ throw Win32Error(::GetLastError(), u"Failed to update window.");
}
std::unique_ptr<graphics::IPainter> WinNativeWindow::BeginPaint() {
@@ -438,7 +438,7 @@ bool WinNativeWindow::HandleNativeWindowMessage(HWND hwnd, UINT msg,
RECT WinNativeWindow::GetClientRectPixel() {
RECT rect;
if (!::GetClientRect(hwnd_, &rect))
- throw Win32Error(::GetLastError(), "Failed to invoke GetClientRect.");
+ throw Win32Error(::GetLastError(), u"Failed to invoke GetClientRect.");
return rect;
}
@@ -453,11 +453,11 @@ void WinNativeWindow::RecreateWindow() {
nullptr, application_->GetInstanceHandle(), nullptr);
if (hwnd_ == nullptr)
- throw Win32Error(::GetLastError(), "Failed to create window.");
+ throw Win32Error(::GetLastError(), u"Failed to create window.");
auto dpi = ::GetDpiForWindow(hwnd_);
if (dpi == 0)
- throw Win32Error(::GetLastError(), "Failed to get dpi of window.");
+ throw Win32Error(::GetLastError(), u"Failed to get dpi of window.");
dpi_ = static_cast<float>(dpi);
log::Debug(u"Dpi of window is {}.", dpi_);
diff --git a/src/win/gui/WindowClass.cpp b/src/win/gui/WindowClass.cpp
index a033d091..9d86d791 100644
--- a/src/win/gui/WindowClass.cpp
+++ b/src/win/gui/WindowClass.cpp
@@ -23,6 +23,6 @@ WindowClass::WindowClass(std::wstring name, WNDPROC window_proc,
atom_ = ::RegisterClassExW(&window_class);
if (atom_ == 0)
- throw Win32Error(::GetLastError(), "Failed to create window class.");
+ throw Win32Error(::GetLastError(), u"Failed to create window class.");
}
} // namespace cru::platform::gui::win