diff options
Diffstat (limited to 'include/cru')
| -rw-r--r-- | include/cru/platform/native_window.hpp | 2 | ||||
| -rw-r--r-- | include/cru/platform/painter.hpp | 4 | ||||
| -rw-r--r-- | include/cru/platform/win/win_brush.hpp | 10 | ||||
| -rw-r--r-- | include/cru/platform/win/win_native_window.hpp | 2 | ||||
| -rw-r--r-- | include/cru/platform/win/win_painter.hpp | 34 | 
5 files changed, 49 insertions, 3 deletions
| diff --git a/include/cru/platform/native_window.hpp b/include/cru/platform/native_window.hpp index 3a8e27ad..2daf4870 100644 --- a/include/cru/platform/native_window.hpp +++ b/include/cru/platform/native_window.hpp @@ -32,7 +32,7 @@ struct NativeWindow : public virtual Interface {    // The lefttop of the rect is relative to screen lefttop.    virtual void SetWindowRect(const ui::Rect& rect) = 0; -  virtual Painter* BeginDraw() = 0; +  virtual Painter* BeginPaint() = 0;    virtual Event<>* DestroyEvent() = 0;    virtual Event<ui::Size>* ResizeEvent() = 0; diff --git a/include/cru/platform/painter.hpp b/include/cru/platform/painter.hpp index 4ad09247..77ca5098 100644 --- a/include/cru/platform/painter.hpp +++ b/include/cru/platform/painter.hpp @@ -8,8 +8,10 @@ struct Brush;  struct Geometry;  struct Painter : virtual Interface { -  virtual void StrokeGeometry(Geometry* geometry, Brush* brush, float width) = 0; +  virtual void StrokeGeometry(Geometry* geometry, Brush* brush, +                              float width) = 0;    virtual void FillGeometry(Geometry* geometry, Brush* brush) = 0;    virtual void EndDraw() = 0; +  virtual bool IsDisposed() = 0;  };  }  // namespace cru::platform diff --git a/include/cru/platform/win/win_brush.hpp b/include/cru/platform/win/win_brush.hpp index 2668215d..d32f6bbc 100644 --- a/include/cru/platform/win/win_brush.hpp +++ b/include/cru/platform/win/win_brush.hpp @@ -4,7 +4,13 @@  #include "../brush.hpp"  namespace cru::platform::win { -class WinSolidColorBrush : public Object, public virtual SolidColorBrush { +struct WinBrush : virtual Brush { +  virtual ID2D1Brush* GetD2DBrush() = 0; +}; + +class WinSolidColorBrush : public Object, +                           public virtual SolidColorBrush, +                           public virtual WinBrush {   public:    explicit WinSolidColorBrush(        Microsoft::WRL::ComPtr<ID2D1SolidColorBrush> brush); @@ -17,6 +23,8 @@ class WinSolidColorBrush : public Object, public virtual SolidColorBrush {    ui::Color GetColor() override;    void SetColor(const ui::Color& color) override; +  ID2D1Brush* GetD2DBrush() override { return brush_.Get(); } +   private:    Microsoft::WRL::ComPtr<ID2D1SolidColorBrush> brush_;  }; diff --git a/include/cru/platform/win/win_native_window.hpp b/include/cru/platform/win/win_native_window.hpp index 8b787485..ae19c9f3 100644 --- a/include/cru/platform/win/win_native_window.hpp +++ b/include/cru/platform/win/win_native_window.hpp @@ -44,6 +44,8 @@ class WinNativeWindow : public Object, public virtual NativeWindow {    // The lefttop of the rect is relative to screen lefttop.    void SetWindowRect(const ui::Rect& rect) override; +  Painter* BeginPaint() override; +    Event<>* DestroyEvent() override { return &destroy_event_; }    Event<ui::Size>* ResizeEvent() override { return &resize_event_; }    Event<>* PaintEvent() override { return &paint_event_; } diff --git a/include/cru/platform/win/win_painter.hpp b/include/cru/platform/win/win_painter.hpp new file mode 100644 index 00000000..7b71ccbd --- /dev/null +++ b/include/cru/platform/win/win_painter.hpp @@ -0,0 +1,34 @@ +#pragma once +#include "win_pre_config.hpp" + +#include "../painter.hpp" + +namespace cru::platform::win { +class WinNativeWindow; + +class WinPainter : public Object, public virtual Painter { + public: +  explicit WinPainter(WinNativeWindow* window); +  WinPainter(const WinPainter& other) = delete; +  WinPainter(WinPainter&& other) = delete; +  WinPainter& operator=(const WinPainter& other) = delete; +  WinPainter& operator=(WinPainter&& other) = delete; +  ~WinPainter() override; + +  void StrokeGeometry(Geometry* geometry, Brush* brush, float width) override; +  void FillGeometry(Geometry* geometry, Brush* brush) override; +  void EndDraw() override; +  bool IsDisposed() override { return is_disposed; } + +  void EndDrawAndDeleteThis() { +    EndDraw(); +    delete this; +  } + + private: +  WinNativeWindow* window_; +  ID2D1RenderTarget* render_target_; + +  bool is_disposed = false; +}; +}  // namespace cru::platform::win | 
