diff options
26 files changed, 137 insertions, 106 deletions
diff --git a/include/cru/common/String.hpp b/include/cru/common/String.hpp index 8acb6a87..88dd06f0 100644 --- a/include/cru/common/String.hpp +++ b/include/cru/common/String.hpp @@ -328,16 +328,16 @@ std::enable_if_t<std::is_integral_v<T>, String> ToString(T value) { auto result = std::to_chars(buffer.data(), buffer.data() + buffer.size(), value); + if (result.ec == std::errc{}) { + } else { + throw std::invalid_argument("Failed to convert value to chars."); + } + auto size = result.ptr - buffer.data(); auto b = new char16_t[size + 1]; b[size] = 0; std::copy(buffer.data(), result.ptr, b); return String::FromBuffer(b, size, size); - - if (result.ec == std::errc{}) { - } else { - throw std::invalid_argument("Failed to convert value to chars."); - } } template <typename T> @@ -346,7 +346,7 @@ std::enable_if_t<std::is_floating_point_v<T>, String> ToString(T value) { return String(str.cbegin(), str.cend()); } -inline String ToString(String value) { return std::move(value); } +inline String ToString(String value) { return value; } namespace details { enum class FormatTokenType { PlaceHolder, Text }; @@ -366,7 +366,7 @@ template <typename TA, typename... T> void FormatAppendFromFormatTokenList( String& current, const std::vector<FormatToken>& format_token_list, Index index, TA&& args0, T&&... args) { - for (Index i = index; i < format_token_list.size(); i++) { + for (Index i = index; i < static_cast<Index>(format_token_list.size()); i++) { const auto& token = format_token_list[i]; if (token.type == FormatTokenType::PlaceHolder) { current += ToString(std::forward<TA>(args0)); diff --git a/include/cru/common/StringUtil.hpp b/include/cru/common/StringUtil.hpp index a0cb6b0b..27ad4b43 100644 --- a/include/cru/common/StringUtil.hpp +++ b/include/cru/common/StringUtil.hpp @@ -49,7 +49,7 @@ class CodePointIterator { struct past_end_tag_t {}; explicit CodePointIterator(const CharType* ptr, Index size, Index current = 0) - : ptr_(ptr), size_(size), position_(0) {} + : ptr_(ptr), size_(size), position_(current) {} explicit CodePointIterator(const CharType* ptr, Index size, past_end_tag_t) : ptr_(ptr), size_(size), position_(size) {} diff --git a/include/cru/platform/graphics/NullPainter.hpp b/include/cru/platform/graphics/NullPainter.hpp index cf790ccf..5586120b 100644 --- a/include/cru/platform/graphics/NullPainter.hpp +++ b/include/cru/platform/graphics/NullPainter.hpp @@ -1,5 +1,6 @@ #pragma once #include "Painter.hpp" +#include "cru/common/Base.hpp" namespace cru::platform::graphics { class NullPainter : public Object, public virtual IPainter { @@ -17,30 +18,56 @@ class NullPainter : public Object, public virtual IPainter { String GetDebugString() override { return u"NullPainter"; } Matrix GetTransform() override { return Matrix(); } - void SetTransform(const Matrix& matrix) override {} + void SetTransform(const Matrix& matrix) override { CRU_UNUSED(matrix) } - void ConcatTransform(const Matrix& matrix) override {} + void ConcatTransform(const Matrix& matrix) override { CRU_UNUSED(matrix) } - void Clear(const Color& color) override {} + void Clear(const Color& color) override { CRU_UNUSED(color) } void DrawLine(const Point& start, const Point& end, IBrush* brush, - float width) override{}; + float width) override { + CRU_UNUSED(start) CRU_UNUSED(end) CRU_UNUSED(brush) CRU_UNUSED(width) + } void StrokeRectangle(const Rect& rectangle, IBrush* brush, - float width) override {} - void FillRectangle(const Rect& rectangle, IBrush* brush) override {} + float width) override { + CRU_UNUSED(rectangle) CRU_UNUSED(brush) CRU_UNUSED(width) + } + void FillRectangle(const Rect& rectangle, IBrush* brush) override { + CRU_UNUSED(rectangle) + CRU_UNUSED(brush) + } void StrokeEllipse(const Rect& outline_rect, IBrush* brush, - float width) override {} + float width) override { + CRU_UNUSED(outline_rect) + CRU_UNUSED(brush) + CRU_UNUSED(width) + } void FillEllipse(const Rect& outline_rect, IBrush* brush, - float width) override {} + float width) override { + CRU_UNUSED(outline_rect) + CRU_UNUSED(brush) + CRU_UNUSED(width) + } void StrokeGeometry(IGeometry* geometry, IBrush* brush, - float width) override {} - void FillGeometry(IGeometry* geometry, IBrush* brush) override {} + float width) override { + CRU_UNUSED(geometry) + CRU_UNUSED(brush) + CRU_UNUSED(width) + } + void FillGeometry(IGeometry* geometry, IBrush* brush) override { + CRU_UNUSED(geometry) + CRU_UNUSED(brush) + } void DrawText(const Point& offset, ITextLayout* text_layout, - IBrush* brush) override {} + IBrush* brush) override { + CRU_UNUSED(offset) + CRU_UNUSED(text_layout) + CRU_UNUSED(brush) + } - void PushLayer(const Rect& bounds) override{}; + void PushLayer(const Rect& bounds) override { CRU_UNUSED(bounds) } void PopLayer() override {} diff --git a/include/cru/win/graphics/direct/Brush.hpp b/include/cru/win/graphics/direct/Brush.hpp index fbff83b5..9d8e5384 100644 --- a/include/cru/win/graphics/direct/Brush.hpp +++ b/include/cru/win/graphics/direct/Brush.hpp @@ -9,12 +9,12 @@ struct ID2DBrush : virtual IBrush { virtual ID2D1Brush* GetD2DBrushInterface() const = 0; }; -class D2DSolidColorBrush : public DirectGraphResource, +class D2DSolidColorBrush : public DirectGraphicsResource, public virtual ISolidColorBrush, public virtual ID2DBrush, public virtual IComResource<ID2D1SolidColorBrush> { public: - explicit D2DSolidColorBrush(DirectGraphFactory* factory); + explicit D2DSolidColorBrush(DirectGraphicsFactory* factory); CRU_DELETE_COPY(D2DSolidColorBrush) CRU_DELETE_MOVE(D2DSolidColorBrush) diff --git a/include/cru/win/graphics/direct/Factory.hpp b/include/cru/win/graphics/direct/Factory.hpp index 70f3ede1..efcebba7 100644 --- a/include/cru/win/graphics/direct/Factory.hpp +++ b/include/cru/win/graphics/direct/Factory.hpp @@ -4,14 +4,15 @@ #include "cru/platform/graphics/Factory.hpp" namespace cru::platform::graphics::win::direct { -class DirectGraphFactory : public DirectResource, public virtual IGraphFactory { +class DirectGraphicsFactory : public DirectResource, + public virtual IGraphicsFactory { public: - DirectGraphFactory(); + DirectGraphicsFactory(); - CRU_DELETE_COPY(DirectGraphFactory) - CRU_DELETE_MOVE(DirectGraphFactory) + CRU_DELETE_COPY(DirectGraphicsFactory) + CRU_DELETE_MOVE(DirectGraphicsFactory) - ~DirectGraphFactory() override; + ~DirectGraphicsFactory() override; public: ID3D11Device* GetD3D11Device() const { return d3d11_device_.Get(); } @@ -38,11 +39,11 @@ class DirectGraphFactory : public DirectResource, public virtual IGraphFactory { std::unique_ptr<IGeometryBuilder> CreateGeometryBuilder() override; - std::unique_ptr<IFont> CreateFont(std::u16string font_family, + std::unique_ptr<IFont> CreateFont(String font_family, float font_size) override; std::unique_ptr<ITextLayout> CreateTextLayout(std::shared_ptr<IFont> font, - std::u16string text) override; + String text) override; private: Microsoft::WRL::ComPtr<ID3D11Device> d3d11_device_; diff --git a/include/cru/win/graphics/direct/Font.hpp b/include/cru/win/graphics/direct/Font.hpp index fd3921a3..3cd94f82 100644 --- a/include/cru/win/graphics/direct/Font.hpp +++ b/include/cru/win/graphics/direct/Font.hpp @@ -7,11 +7,11 @@ #include <string_view> namespace cru::platform::graphics::win::direct { -class DWriteFont : public DirectGraphResource, +class DWriteFont : public DirectGraphicsResource, public virtual IFont, public virtual IComResource<IDWriteTextFormat> { public: - DWriteFont(DirectGraphFactory* factory, std::u16string font_family, + DWriteFont(DirectGraphicsFactory* factory, String font_family, float font_size); CRU_DELETE_COPY(DWriteFont) @@ -27,7 +27,7 @@ class DWriteFont : public DirectGraphResource, float GetFontSize() override; private: - std::u16string font_family_; + String font_family_; Microsoft::WRL::ComPtr<IDWriteTextFormat> text_format_; }; } // namespace cru::platform::graphics::win::direct diff --git a/include/cru/win/graphics/direct/Geometry.hpp b/include/cru/win/graphics/direct/Geometry.hpp index edfec590..b3b82f9c 100644 --- a/include/cru/win/graphics/direct/Geometry.hpp +++ b/include/cru/win/graphics/direct/Geometry.hpp @@ -5,10 +5,10 @@ #include "cru/platform/graphics/Geometry.hpp" namespace cru::platform::graphics::win::direct { -class D2DGeometryBuilder : public DirectGraphResource, +class D2DGeometryBuilder : public DirectGraphicsResource, public virtual IGeometryBuilder { public: - explicit D2DGeometryBuilder(DirectGraphFactory* factory); + explicit D2DGeometryBuilder(DirectGraphicsFactory* factory); CRU_DELETE_COPY(D2DGeometryBuilder) CRU_DELETE_MOVE(D2DGeometryBuilder) @@ -33,11 +33,11 @@ class D2DGeometryBuilder : public DirectGraphResource, Microsoft::WRL::ComPtr<ID2D1GeometrySink> geometry_sink_; }; -class D2DGeometry : public DirectGraphResource, +class D2DGeometry : public DirectGraphicsResource, public virtual IGeometry, public IComResource<ID2D1Geometry> { public: - D2DGeometry(DirectGraphFactory* factory, + D2DGeometry(DirectGraphicsFactory* factory, Microsoft::WRL::ComPtr<ID2D1PathGeometry> geometry); CRU_DELETE_COPY(D2DGeometry) diff --git a/include/cru/win/graphics/direct/Resource.hpp b/include/cru/win/graphics/direct/Resource.hpp index e6ffb203..c376628d 100644 --- a/include/cru/win/graphics/direct/Resource.hpp +++ b/include/cru/win/graphics/direct/Resource.hpp @@ -6,7 +6,7 @@ #include <string_view> namespace cru::platform::graphics::win::direct { -class DirectGraphFactory; +class DirectGraphicsFactory; class DirectResource : public Object, public virtual IPlatformResource { public: @@ -25,25 +25,25 @@ class DirectResource : public Object, public virtual IPlatformResource { String GetPlatformId() const final { return kPlatformId; } }; -class DirectGraphResource : public DirectResource, - public virtual IGraphResource { +class DirectGraphicsResource : public DirectResource, + public virtual IGraphicsResource { protected: // Param factory can't be null. - explicit DirectGraphResource(DirectGraphFactory* factory); + explicit DirectGraphicsResource(DirectGraphicsFactory* factory); public: - CRU_DELETE_COPY(DirectGraphResource) - CRU_DELETE_MOVE(DirectGraphResource) + CRU_DELETE_COPY(DirectGraphicsResource) + CRU_DELETE_MOVE(DirectGraphicsResource) - ~DirectGraphResource() override = default; + ~DirectGraphicsResource() override = default; public: - IGraphFactory* GetGraphFactory() final; + IGraphicsFactory* GetGraphicsFactory() final; public: - DirectGraphFactory* GetDirectFactory() const { return factory_; } + DirectGraphicsFactory* GetDirectFactory() const { return factory_; } private: - DirectGraphFactory* factory_; + DirectGraphicsFactory* factory_; }; } // namespace cru::platform::graphics::win::direct diff --git a/include/cru/win/graphics/direct/TextLayout.hpp b/include/cru/win/graphics/direct/TextLayout.hpp index aa040278..1ac56a9d 100644 --- a/include/cru/win/graphics/direct/TextLayout.hpp +++ b/include/cru/win/graphics/direct/TextLayout.hpp @@ -10,12 +10,12 @@ namespace cru::platform::graphics::win::direct { class DWriteFont; -class DWriteTextLayout : public DirectGraphResource, +class DWriteTextLayout : public DirectGraphicsResource, public virtual ITextLayout, public virtual IComResource<IDWriteTextLayout> { public: - DWriteTextLayout(DirectGraphFactory* factory, std::shared_ptr<IFont> font, - std::u16string text); + DWriteTextLayout(DirectGraphicsFactory* factory, std::shared_ptr<IFont> font, + String text); CRU_DELETE_COPY(DWriteTextLayout) CRU_DELETE_MOVE(DWriteTextLayout) @@ -28,9 +28,8 @@ class DWriteTextLayout : public DirectGraphResource, } public: - std::u16string GetText() override; - std::u16string_view GetTextView() override; - void SetText(std::u16string new_text) override; + String GetText() override; + void SetText(String new_text) override; std::shared_ptr<IFont> GetFont() override; void SetFont(std::shared_ptr<IFont> font) override; @@ -38,15 +37,22 @@ class DWriteTextLayout : public DirectGraphResource, void SetMaxWidth(float max_width) override; void SetMaxHeight(float max_height) override; + bool IsEditMode() override; + void SetEditMode(bool enable) override; + + Index GetLineIndexFromCharIndex(Index char_index) override; + float GetLineHeight(Index line_index) override; + Index GetLineCount() override; + Rect GetTextBounds(bool includingTrailingSpace = false) override; // Return empty vector if text_range.count is 0. Text range could be in // reverse direction, it should be normalized first in implementation. std::vector<Rect> TextRangeRect(const TextRange& text_range) override; - Point TextSinglePoint(Index position, bool trailing) override; + Rect TextSinglePoint(Index position, bool trailing) override; TextHitTestResult HitTest(const Point& point) override; private: - std::u16string text_; + String text_; std::shared_ptr<DWriteFont> font_; float max_width_ = std::numeric_limits<float>::max(); float max_height_ = std::numeric_limits<float>::max(); diff --git a/include/cru/win/graphics/direct/WindowRenderTarget.hpp b/include/cru/win/graphics/direct/WindowRenderTarget.hpp index 75b1bf20..c197841d 100644 --- a/include/cru/win/graphics/direct/WindowRenderTarget.hpp +++ b/include/cru/win/graphics/direct/WindowRenderTarget.hpp @@ -5,7 +5,7 @@ namespace cru::platform::graphics::win::direct { // Represents a window render target. class D2DWindowRenderTarget : public Object { public: - D2DWindowRenderTarget(gsl::not_null<DirectGraphFactory*> factory, HWND hwnd); + D2DWindowRenderTarget(gsl::not_null<DirectGraphicsFactory*> factory, HWND hwnd); CRU_DELETE_COPY(D2DWindowRenderTarget) CRU_DELETE_MOVE(D2DWindowRenderTarget) @@ -13,7 +13,7 @@ class D2DWindowRenderTarget : public Object { ~D2DWindowRenderTarget() override = default; public: - graphics::win::direct::DirectGraphFactory* GetDirectFactory() const { + graphics::win::direct::DirectGraphicsFactory* GetDirectFactory() const { return factory_; } @@ -33,7 +33,7 @@ class D2DWindowRenderTarget : public Object { void CreateTargetBitmap(); private: - DirectGraphFactory* factory_; + DirectGraphicsFactory* factory_; HWND hwnd_; Microsoft::WRL::ComPtr<ID2D1DeviceContext> d2d1_device_context_; Microsoft::WRL::ComPtr<IDXGISwapChain1> dxgi_swap_chain_; diff --git a/include/cru/win/gui/GodWindow.hpp b/include/cru/win/gui/GodWindow.hpp index 0343b159..d9a128e6 100644 --- a/include/cru/win/gui/GodWindow.hpp +++ b/include/cru/win/gui/GodWindow.hpp @@ -3,6 +3,7 @@ #include "WindowNativeMessageEventArgs.hpp" #include "cru/common/Event.hpp" +#include "cru/common/String.hpp" #include <memory> diff --git a/include/cru/win/gui/InputMethod.hpp b/include/cru/win/gui/InputMethod.hpp index 51a007d8..df687617 100644 --- a/include/cru/win/gui/InputMethod.hpp +++ b/include/cru/win/gui/InputMethod.hpp @@ -65,7 +65,7 @@ class WinInputMethodContext : public WinNativeResource, IEvent<std::nullptr_t>* CompositionEvent() override; - IEvent<std::u16string_view>* TextEvent() override; + IEvent<StringView>* TextEvent() override; private: void OnWindowNativeMessage(WindowNativeMessageEventArgs& args); diff --git a/include/cru/win/gui/UiApplication.hpp b/include/cru/win/gui/UiApplication.hpp index 4cf46858..daf72795 100644 --- a/include/cru/win/gui/UiApplication.hpp +++ b/include/cru/win/gui/UiApplication.hpp @@ -7,7 +7,7 @@ #include <memory> namespace cru::platform::graphics::win::direct { -class DirectGraphFactory; +class DirectGraphicsFactory; } namespace cru::platform::gui::win { @@ -41,11 +41,11 @@ class WinUiApplication : public WinNativeResource, void CancelTimer(long long id) override; std::vector<INativeWindow*> GetAllWindow() override; - INativeWindow* CreateWindow(INativeWindow* parent, CreateWindowFlag flag) override; + INativeWindow* CreateWindow() override; - cru::platform::graphics::IGraphFactory* GetGraphFactory() override; + cru::platform::graphics::IGraphicsFactory* GetGraphicsFactory() override; - cru::platform::graphics::win::direct::DirectGraphFactory* GetDirectFactory() { + cru::platform::graphics::win::direct::DirectGraphicsFactory* GetDirectFactory() { return graph_factory_.get(); } @@ -60,7 +60,7 @@ class WinUiApplication : public WinNativeResource, private: HINSTANCE instance_handle_; - std::unique_ptr<cru::platform::graphics::win::direct::DirectGraphFactory> + std::unique_ptr<cru::platform::graphics::win::direct::DirectGraphicsFactory> graph_factory_; std::unique_ptr<GodWindow> god_window_; diff --git a/include/cru/win/gui/Window.hpp b/include/cru/win/gui/Window.hpp index 97a74fa7..9f241b0a 100644 --- a/include/cru/win/gui/Window.hpp +++ b/include/cru/win/gui/Window.hpp @@ -2,7 +2,6 @@ #include "Resource.hpp" #include "WindowNativeMessageEventArgs.hpp" -#include "cru/platform/GraphBase.hpp" #include "cru/platform/gui/Base.hpp" #include "cru/platform/gui/Window.hpp" #include "cru/win/graphics/direct/WindowRenderTarget.hpp" @@ -27,8 +26,6 @@ class WinNativeWindow : public WinNativeResource, public virtual INativeWindow { WinNativeWindow* GetParent() override { return parent_window_; } - bool IsVisible() override; - void SetVisible(bool is_visible) override; Size GetClientSize() override; void SetClientSize(const Size& size) override; diff --git a/src/common/String.cpp b/src/common/String.cpp index 1c2ff022..ca16cee7 100644 --- a/src/common/String.cpp +++ b/src/common/String.cpp @@ -45,7 +45,7 @@ String::String(std::initializer_list<char16_t> l) #ifdef CRU_PLATFORM_WINDOWS String::String(const wchar_t* str) : String(str, GetStrSize(str)) {} String::String(const wchar_t* str, Index size) - : String(reinterpret_cast<const std::uint16_t*>(str), size) {} + : String(reinterpret_cast<const char16_t*>(str), size) {} #endif String::String(const String& other) { @@ -426,7 +426,7 @@ std::vector<FormatToken> ParseToFormatTokenList(const String& str) { void FormatAppendFromFormatTokenList( String& current, const std::vector<FormatToken>& format_token_list, Index index) { - for (Index i = index; i < format_token_list.size(); i++) { + for (Index i = index; i < static_cast<Index>(format_token_list.size()); i++) { const auto& token = format_token_list[i]; if (token.type == FormatTokenType::PlaceHolder) { current += u"{}"; diff --git a/src/common/StringUtil.cpp b/src/common/StringUtil.cpp index 440db8c4..6e478033 100644 --- a/src/common/StringUtil.cpp +++ b/src/common/StringUtil.cpp @@ -113,6 +113,8 @@ CodePoint Utf16NextCodePoint(const char16_t* ptr, Index size, Index current, CodePoint Utf16PreviousCodePoint(const char16_t* ptr, Index size, Index current, Index* previous_position) { + CRU_UNUSED(size) + CodePoint result; if (current <= 0) { result = k_invalid_code_point; diff --git a/src/win/Exception.cpp b/src/win/Exception.cpp index df2103fd..a7b0927a 100644 --- a/src/win/Exception.cpp +++ b/src/win/Exception.cpp @@ -1,6 +1,5 @@ #include "cru/win/Exception.hpp" -#include <fmt/format.h> #include <optional> namespace cru::platform::win { diff --git a/src/win/HeapDebug.cpp b/src/win/HeapDebug.cpp index 6ec1ffcc..b1b9fe1a 100644 --- a/src/win/HeapDebug.cpp +++ b/src/win/HeapDebug.cpp @@ -1,11 +1,9 @@ #include "cru/win/WinPreConfig.hpp" -#include "cru/platform/HeapDebug.hpp" - #include <crtdbg.h> namespace cru::platform { void SetupHeapDebug() { _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); } -} +} // namespace cru::platform diff --git a/src/win/graphics/direct/Brush.cpp b/src/win/graphics/direct/Brush.cpp index b7842b97..eb6ea973 100644 --- a/src/win/graphics/direct/Brush.cpp +++ b/src/win/graphics/direct/Brush.cpp @@ -5,8 +5,8 @@ #include "cru/win/graphics/direct/Factory.hpp" namespace cru::platform::graphics::win::direct { -D2DSolidColorBrush::D2DSolidColorBrush(DirectGraphFactory* factory) - : DirectGraphResource(factory) { +D2DSolidColorBrush::D2DSolidColorBrush(DirectGraphicsFactory* factory) + : DirectGraphicsResource(factory) { ThrowIfFailed(factory->GetDefaultD2D1DeviceContext()->CreateSolidColorBrush( Convert(color_), &brush_)); } diff --git a/src/win/graphics/direct/Factory.cpp b/src/win/graphics/direct/Factory.cpp index 6694801f..4c4f1a9a 100644 --- a/src/win/graphics/direct/Factory.cpp +++ b/src/win/graphics/direct/Factory.cpp @@ -27,7 +27,7 @@ void InitializeCom() { void UninitializeCom() { ::CoUninitialize(); } } // namespace -DirectGraphFactory::DirectGraphFactory() { +DirectGraphicsFactory::DirectGraphicsFactory() { // TODO! Detect repeated creation. Because I don't think we can create two d2d // and dwrite factory so we need to prevent the "probably dangerous" behavior. @@ -76,31 +76,33 @@ DirectGraphFactory::DirectGraphFactory() { &dwrite_system_font_collection_)); } -DirectGraphFactory::~DirectGraphFactory() { UninitializeCom(); } +DirectGraphicsFactory::~DirectGraphicsFactory() { UninitializeCom(); } Microsoft::WRL::ComPtr<ID2D1DeviceContext> -DirectGraphFactory::CreateD2D1DeviceContext() { +DirectGraphicsFactory::CreateD2D1DeviceContext() { Microsoft::WRL::ComPtr<ID2D1DeviceContext> d2d1_device_context; ThrowIfFailed(d2d1_device_->CreateDeviceContext( D2D1_DEVICE_CONTEXT_OPTIONS_NONE, &d2d1_device_context)); return d2d1_device_context; } -std::unique_ptr<ISolidColorBrush> DirectGraphFactory::CreateSolidColorBrush() { +std::unique_ptr<ISolidColorBrush> +DirectGraphicsFactory::CreateSolidColorBrush() { return std::make_unique<D2DSolidColorBrush>(this); } -std::unique_ptr<IGeometryBuilder> DirectGraphFactory::CreateGeometryBuilder() { +std::unique_ptr<IGeometryBuilder> +DirectGraphicsFactory::CreateGeometryBuilder() { return std::make_unique<D2DGeometryBuilder>(this); } -std::unique_ptr<IFont> DirectGraphFactory::CreateFont( - std::u16string font_family, float font_size) { +std::unique_ptr<IFont> DirectGraphicsFactory::CreateFont(String font_family, + float font_size) { return std::make_unique<DWriteFont>(this, std::move(font_family), font_size); } -std::unique_ptr<ITextLayout> DirectGraphFactory::CreateTextLayout( - std::shared_ptr<IFont> font, std::u16string text) { +std::unique_ptr<ITextLayout> DirectGraphicsFactory::CreateTextLayout( + std::shared_ptr<IFont> font, String text) { return std::make_unique<DWriteTextLayout>(this, std::move(font), std::move(text)); } diff --git a/src/win/graphics/direct/Font.cpp b/src/win/graphics/direct/Font.cpp index 1d6a5c88..413c998b 100644 --- a/src/win/graphics/direct/Font.cpp +++ b/src/win/graphics/direct/Font.cpp @@ -7,9 +7,9 @@ #include <utility> namespace cru::platform::graphics::win::direct { -DWriteFont::DWriteFont(DirectGraphFactory* factory, std::u16string font_family, +DWriteFont::DWriteFont(DirectGraphicsFactory* factory, String font_family, float font_size) - : DirectGraphResource(factory), font_family_(std::move(font_family)) { + : DirectGraphicsResource(factory), font_family_(std::move(font_family)) { // Get locale std::array<wchar_t, LOCALE_NAME_MAX_LENGTH> buffer; if (!::GetUserDefaultLocaleName(buffer.data(), diff --git a/src/win/graphics/direct/Geometry.cpp b/src/win/graphics/direct/Geometry.cpp index d07a819f..2a544859 100644 --- a/src/win/graphics/direct/Geometry.cpp +++ b/src/win/graphics/direct/Geometry.cpp @@ -5,8 +5,8 @@ #include "cru/win/graphics/direct/Factory.hpp" namespace cru::platform::graphics::win::direct { -D2DGeometryBuilder::D2DGeometryBuilder(DirectGraphFactory* factory) - : DirectGraphResource(factory) { +D2DGeometryBuilder::D2DGeometryBuilder(DirectGraphicsFactory* factory) + : DirectGraphicsResource(factory) { ThrowIfFailed(factory->GetD2D1Factory()->CreatePathGeometry(&geometry_)); ThrowIfFailed(geometry_->Open(&geometry_sink_)); } @@ -49,9 +49,9 @@ std::unique_ptr<IGeometry> D2DGeometryBuilder::Build() { return geometry; } -D2DGeometry::D2DGeometry(DirectGraphFactory* factory, +D2DGeometry::D2DGeometry(DirectGraphicsFactory* factory, Microsoft::WRL::ComPtr<ID2D1PathGeometry> geometry) - : DirectGraphResource(factory), geometry_(std::move(geometry)) {} + : DirectGraphicsResource(factory), geometry_(std::move(geometry)) {} bool D2DGeometry::FillContains(const Point& point) { BOOL result; diff --git a/src/win/graphics/direct/Resource.cpp b/src/win/graphics/direct/Resource.cpp index 6ae74e64..0e9719f4 100644 --- a/src/win/graphics/direct/Resource.cpp +++ b/src/win/graphics/direct/Resource.cpp @@ -5,10 +5,12 @@ namespace cru::platform::graphics::win::direct { String DirectResource::kPlatformId = u"Windows Direct"; -DirectGraphResource::DirectGraphResource(DirectGraphFactory* factory) +DirectGraphicsResource::DirectGraphicsResource(DirectGraphicsFactory* factory) : factory_(factory) { Expects(factory); } -IGraphFactory* DirectGraphResource::GetGraphFactory() { return factory_; } +IGraphicsFactory* DirectGraphicsResource::GetGraphicsFactory() { + return factory_; +} } // namespace cru::platform::graphics::win::direct diff --git a/src/win/graphics/direct/TextLayout.cpp b/src/win/graphics/direct/TextLayout.cpp index 0b3c68ca..6ece8ed1 100644 --- a/src/win/graphics/direct/TextLayout.cpp +++ b/src/win/graphics/direct/TextLayout.cpp @@ -9,10 +9,9 @@ #include <utility> namespace cru::platform::graphics::win::direct { -DWriteTextLayout::DWriteTextLayout(DirectGraphFactory* factory, - std::shared_ptr<IFont> font, - std::u16string text) - : DirectGraphResource(factory), text_(std::move(text)) { +DWriteTextLayout::DWriteTextLayout(DirectGraphicsFactory* factory, + std::shared_ptr<IFont> font, String text) + : DirectGraphicsResource(factory), text_(std::move(text)) { Expects(font); font_ = CheckPlatform<DWriteFont>(font, GetPlatformId()); @@ -24,12 +23,10 @@ DWriteTextLayout::DWriteTextLayout(DirectGraphFactory* factory, DWriteTextLayout::~DWriteTextLayout() = default; -std::u16string DWriteTextLayout::GetText() { return text_; } +String DWriteTextLayout::GetText() { return text_; } -std::u16string_view DWriteTextLayout::GetTextView() { return text_; } - -void DWriteTextLayout::SetText(std::u16string new_text) { - text_.swap(new_text); +void DWriteTextLayout::SetText(String new_text) { + text_ = std::move(new_text); ThrowIfFailed(GetDirectFactory()->GetDWriteFactory()->CreateTextLayout( reinterpret_cast<const wchar_t*>(text_.c_str()), static_cast<UINT32>(text_.size()), font_->GetComInterface(), max_width_, @@ -100,14 +97,14 @@ std::vector<Rect> DWriteTextLayout::TextRangeRect( return result; } -Point DWriteTextLayout::TextSinglePoint(Index position, bool trailing) { +Rect DWriteTextLayout::TextSinglePoint(Index position, bool trailing) { DWRITE_HIT_TEST_METRICS metrics; FLOAT left; FLOAT top; ThrowIfFailed(text_layout_->HitTestTextPosition(static_cast<UINT32>(position), static_cast<BOOL>(trailing), &left, &top, &metrics)); - return Point{left, top}; + return Rect{left, top, 0, GetFont()->GetFontSize()}; } TextHitTestResult DWriteTextLayout::HitTest(const Point& point) { @@ -121,7 +118,6 @@ TextHitTestResult DWriteTextLayout::HitTest(const Point& point) { TextHitTestResult result; result.position = metrics.textPosition; result.trailing = trailing != 0; - result.insideText = inside != 0; return result; } } // namespace cru::platform::graphics::win::direct diff --git a/src/win/graphics/direct/WindowRenderTarget.cpp b/src/win/graphics/direct/WindowRenderTarget.cpp index 7479ae24..020ce4b4 100644 --- a/src/win/graphics/direct/WindowRenderTarget.cpp +++ b/src/win/graphics/direct/WindowRenderTarget.cpp @@ -5,7 +5,7 @@ namespace cru::platform::graphics::win::direct { D2DWindowRenderTarget::D2DWindowRenderTarget( - gsl::not_null<DirectGraphFactory*> factory, HWND hwnd) + gsl::not_null<DirectGraphicsFactory*> factory, HWND hwnd) : factory_(factory), hwnd_(hwnd) { const auto d3d11_device = factory->GetD3D11Device(); const auto dxgi_factory = factory->GetDxgiFactory(); diff --git a/src/win/gui/UiApplication.cpp b/src/win/gui/UiApplication.cpp index f4541dd0..12480417 100644 --- a/src/win/gui/UiApplication.cpp +++ b/src/win/gui/UiApplication.cpp @@ -37,7 +37,7 @@ WinUiApplication::WinUiApplication() { std::make_unique<::cru::platform::win::WinStdOutLoggerSource>()); graph_factory_ = std::make_unique< - cru::platform::graphics::win::direct::DirectGraphFactory>(); + cru::platform::graphics::win::direct::DirectGraphicsFactory>(); god_window_ = std::make_unique<GodWindow>(this); timer_manager_ = std::make_unique<TimerManager>(god_window_.get()); @@ -112,7 +112,7 @@ INativeWindow* WinUiApplication::CreateWindow(INativeWindow* parent, p); } -cru::platform::graphics::IGraphFactory* WinUiApplication::GetGraphFactory() { +cru::platform::graphics::IGraphicsFactory* WinUiApplication::GetGraphicsFactory() { return graph_factory_.get(); } |