update intrusive_ptr

This commit is contained in:
Nomango 2019-12-11 13:44:40 +08:00
parent 7b39d4bd98
commit 03edd40ecd
20 changed files with 148 additions and 161 deletions

View File

@ -118,7 +118,7 @@ namespace kiwano
void SoundPlayer::SetVolume(float volume)
{
volume_ = std::min(std::max(volume, -224.f), 224.f);
for (const auto& pair : sound_cache_)
for (auto& pair : sound_cache_)
{
pair.second->SetVolume(volume_);
}
@ -126,7 +126,7 @@ namespace kiwano
void SoundPlayer::PauseAll()
{
for (const auto& pair : sound_cache_)
for (auto& pair : sound_cache_)
{
pair.second->Pause();
}
@ -134,7 +134,7 @@ namespace kiwano
void SoundPlayer::ResumeAll()
{
for (const auto& pair : sound_cache_)
for (auto& pair : sound_cache_)
{
pair.second->Resume();
}
@ -142,7 +142,7 @@ namespace kiwano
void SoundPlayer::StopAll()
{
for (const auto& pair : sound_cache_)
for (auto& pair : sound_cache_)
{
pair.second->Stop();
}

View File

@ -207,7 +207,7 @@ namespace kiwano
{
}
GearJoint::GearJoint(World* world, GearJoint::Param const& param)
GearJoint::GearJoint(World* world, GearJoint::Param param)
: Joint()
, raw_joint_(nullptr)
{

View File

@ -237,7 +237,7 @@ namespace kiwano
GearJoint();
GearJoint(World* world, b2GearJointDef* def);
GearJoint(World* world, Param const& param);
GearJoint(World* world, Param param);
// 设定齿轮传动比
void SetRatio(float ratio);

View File

@ -272,7 +272,7 @@ namespace kiwano
}
// update children's transform
for (Actor* child = children_.first_item().get(); child; child = child->next_item().get())
for (auto child = children_.first_item().get(); child; child = child->next_item().get())
child->dirty_transform_ = true;
}
@ -527,11 +527,11 @@ namespace kiwano
Vector<ActorPtr> children;
size_t hash_code = std::hash<String>{}(name);
for (Actor* child = children_.first_item().get(); child; child = child->next_item().get())
for (auto child = children_.first_item().get(); child; child = child->next_item().get())
{
if (child->hash_name_ == hash_code && child->IsName(name))
{
children.push_back(child);
children.push_back(const_cast<Actor*>(child));
}
}
return children;
@ -541,11 +541,11 @@ namespace kiwano
{
size_t hash_code = std::hash<String>{}(name);
for (Actor* child = children_.first_item().get(); child; child = child->next_item().get())
for (auto child = children_.first_item().get(); child; child = child->next_item().get())
{
if (child->hash_name_ == hash_code && child->IsName(name))
{
return child;
return const_cast<Actor*>(child);
}
}
return nullptr;

View File

@ -247,9 +247,9 @@ namespace kiwano
TextStyle text_style_;
StrokeStyle stroke_style_;
GeometrySink geo_sink_;
TextureRenderTarget rt_;
mutable bool cache_expired_;
mutable Texture texture_cached_;
mutable TextureRenderTarget rt_;
};
}

View File

@ -43,8 +43,8 @@ class intrusive_list_item
{
public:
using value_type = _Ty;
using reference = value_type&;
using const_reference = const value_type&;
using reference = _Ty&;
using const_reference = const _Ty&;
intrusive_list_item() : prev_(), next_() {}
intrusive_list_item(_Ty const& rhs) : prev_(rhs->prev_), next_(rhs->next_) {}
@ -80,7 +80,7 @@ public:
reference last_item() { return last_; }
bool empty() const { return !first_; }
void push_back(const_reference child)
void push_back(value_type child)
{
if (child->prev_)
child->prev_->next_ = child->next_;
@ -104,7 +104,7 @@ public:
KGE_DEBUG_CHECK_LIST(this);
}
void push_front(const_reference child)
void push_front(value_type child)
{
if (child->prev_)
child->prev_->next_ = child->next_;
@ -128,7 +128,7 @@ public:
KGE_DEBUG_CHECK_LIST(this);
}
void insert_before(const_reference child, const_reference before)
void insert_before(value_type child, value_type before)
{
if (child->prev_)
child->prev_->next_ = child->next_;
@ -147,7 +147,7 @@ public:
KGE_DEBUG_CHECK_LIST(this);
}
void insert_after(const_reference child, const_reference after)
void insert_after(value_type child, value_type after)
{
if (child->prev_)
child->prev_->next_ = child->next_;
@ -166,7 +166,7 @@ public:
KGE_DEBUG_CHECK_LIST(this);
}
void remove(const_reference child)
void remove(value_type child)
{
#ifdef KGE_DEBUG_ENABLE_LIST_CHECK
_Ty tmp = first_;

View File

@ -36,35 +36,40 @@ public:
using value_type = _Ty;
using pointer_type = _Ty*;
using const_pointer_type = const _Ty*;
using reference_type = _Ty&;
using const_reference_type = const _Ty&;
using manager_type = _ManagerTy;
intrusive_ptr() noexcept {}
intrusive_ptr(std::nullptr_t) noexcept {}
intrusive_ptr(pointer_type p) : ptr_(p) { typename manager_type::AddRef(ptr_); }
intrusive_ptr(const intrusive_ptr& other) : ptr_(other.ptr_) { typename manager_type::AddRef(ptr_); }
intrusive_ptr(intrusive_ptr&& other) noexcept { ptr_ = other.ptr_; other.ptr_ = nullptr; }
~intrusive_ptr() { typename manager_type::Release(ptr_); }
intrusive_ptr() noexcept : ptr_(nullptr) {}
intrusive_ptr(std::nullptr_t) noexcept : ptr_(nullptr) {}
intrusive_ptr(pointer_type p) : ptr_(p) { typename manager_type::AddRef(ptr_); }
intrusive_ptr(const intrusive_ptr& other) : ptr_(other.ptr_) { typename manager_type::AddRef(ptr_); }
intrusive_ptr(intrusive_ptr&& other) noexcept : ptr_(nullptr) { swap(other); }
~intrusive_ptr() { reset(); }
template <typename _UTy>
intrusive_ptr(const intrusive_ptr<_UTy, manager_type>& other) : ptr_(other.get()) { typename manager_type::AddRef(ptr_); }
intrusive_ptr(const intrusive_ptr<_UTy, manager_type>& other) { ptr_ = const_cast<pointer_type>(dynamic_cast<const_pointer_type>(other.get())); typename manager_type::AddRef(ptr_); }
inline pointer_type get() const noexcept { return ptr_; }
inline void reset(pointer_type ptr = nullptr) { intrusive_ptr{ ptr }.swap(*this); }
inline void swap(intrusive_ptr& other) noexcept { std::swap(ptr_, other.ptr_); }
inline pointer_type get() noexcept { return ptr_; }
inline const_pointer_type get() const noexcept { return ptr_; }
inline void reset(pointer_type ptr = nullptr) { typename manager_type::Release(ptr_); ptr_ = nullptr; }
inline void swap(intrusive_ptr& other) noexcept { std::swap(ptr_, other.ptr_); }
inline pointer_type operator ->() const { KGE_ASSERT(ptr_ != nullptr && "Invalid pointer"); return ptr_; }
inline value_type& operator *() const { KGE_ASSERT(ptr_ != nullptr && "Invalid pointer"); return *ptr_; }
inline pointer_type* operator &() { KGE_ASSERT(ptr_ == nullptr && "Memory leak"); return &ptr_; }
inline operator bool() const noexcept { return ptr_ != nullptr; }
inline bool operator !() const noexcept { return ptr_ == 0; }
inline pointer_type operator ->() { KGE_ASSERT(ptr_ != nullptr && "Invalid pointer"); return ptr_; }
inline const_pointer_type operator ->() const { KGE_ASSERT(ptr_ != nullptr && "Invalid pointer"); return ptr_; }
inline reference_type operator *() { KGE_ASSERT(ptr_ != nullptr && "Invalid pointer"); return *ptr_; }
inline const_reference_type operator *() const { KGE_ASSERT(ptr_ != nullptr && "Invalid pointer"); return *ptr_; }
inline pointer_type* operator &() { KGE_ASSERT(ptr_ == nullptr && "Memory leak"); return &ptr_; }
inline operator bool() const noexcept { return ptr_ != nullptr; }
inline bool operator !() const noexcept { return ptr_ == 0; }
inline const intrusive_ptr& operator=(const intrusive_ptr& other) const { if (other.ptr_ != ptr_) intrusive_ptr(other).swap(*const_cast<intrusive_ptr*>(this)); return *this; }
inline const intrusive_ptr& operator=(intrusive_ptr&& other) const noexcept { if (other.ptr_ != ptr_) other.swap(*const_cast<intrusive_ptr*>(this)); return *this; }
inline const intrusive_ptr& operator=(pointer_type p) const { if (p != ptr_) intrusive_ptr(p).swap(*const_cast<intrusive_ptr*>(this)); return *this; }
inline const intrusive_ptr& operator=(std::nullptr_t) const noexcept { if (nullptr != ptr_) intrusive_ptr{}.swap(*const_cast<intrusive_ptr*>(this)); return *this; }
inline intrusive_ptr& operator=(const intrusive_ptr& other) { if (other.ptr_ != ptr_) intrusive_ptr(other).swap(*this); return (*this); }
inline intrusive_ptr& operator=(intrusive_ptr&& other) noexcept { if (other.ptr_ != ptr_) other.swap(*this); return (*this); }
inline intrusive_ptr& operator=(pointer_type p) { if (p != ptr_) intrusive_ptr(p).swap(*this); return (*this); }
inline intrusive_ptr& operator=(std::nullptr_t) { reset(); return *this; }
private:
pointer_type ptr_{ nullptr };
pointer_type ptr_;
};
template <class _Ty, class _UTy, class manager_type>

View File

@ -21,7 +21,7 @@
#pragma once
#include <memory>
#include <type_traits>
#include <exception>
#include <stdexcept>
namespace kiwano
{

View File

@ -92,14 +92,10 @@ namespace kiwano
return false;
}
Geometry Geometry::CombineWith(Geometry input, CombineMode mode, Matrix3x2 const& input_matrix) const
void Geometry::CombineWith(GeometrySink& sink, Geometry input, CombineMode mode, Matrix3x2 const& input_matrix) const
{
if (geo_ && input.geo_)
{
GeometrySink sink;
sink.Init();
sink.OpenSink();
ThrowIfFailed(
geo_->CombineWithGeometry(
input.geo_.get(),
@ -108,41 +104,18 @@ namespace kiwano
sink.GetGeometrySink().get()
)
);
sink.CloseSink();
return sink.GetGeometry();
}
return Geometry();
}
Geometry Geometry::Combine(Vector<Geometry> const& geos, Vector<CombineMode> const& modes, Vector<Matrix3x2> const& matrixs)
Geometry Geometry::CombineWith(Geometry input, CombineMode mode, Matrix3x2 const& input_matrix) const
{
if ((geos.size() == (modes.size() + 1) || modes.size() == 1)
&& (geos.size() == (matrixs.size() + 1) || matrixs.size() == 1))
{
GeometrySink sink;
sink.Init();
sink.OpenSink();
GeometrySink sink;
sink.Open();
for (size_t i = 0; i < geos.size() - 1; i++)
{
CombineMode mode = (modes.size() == 1) ? modes[0] : modes[i];
const Matrix3x2& matrix = (matrixs.size() == 1) ? matrixs[0] : matrixs[i];
CombineWith(sink, input, mode, input_matrix);
ThrowIfFailed(
geos[i].geo_->CombineWithGeometry(
geos[i + 1].geo_.get(),
D2D1_COMBINE_MODE(mode),
DX::ConvertToMatrix3x2F(matrix),
sink.GetGeometrySink().get()
)
);
}
sink.CloseSink();
return sink.GetGeometry();
}
return Geometry();
sink.Close();
return sink.GetGeometry();
}
float Geometry::ComputeArea() const
@ -214,13 +187,16 @@ namespace kiwano
{
}
GeometrySink::~GeometrySink()
{
Close();
}
GeometrySink& GeometrySink::BeginPath(Point const& begin_pos)
{
Init();
if (!sink_)
{
OpenSink();
Open();
}
sink_->BeginFigure(DX::ConvertToPoint2F(begin_pos), D2D1_FIGURE_BEGIN_FILLED);
@ -233,7 +209,7 @@ namespace kiwano
{
sink_->EndFigure(closed ? D2D1_FIGURE_END_CLOSED : D2D1_FIGURE_END_OPEN);
CloseSink();
Close();
}
return (*this);
}
@ -312,15 +288,17 @@ namespace kiwano
}
}
void GeometrySink::OpenSink()
void GeometrySink::Open()
{
Init();
if (!sink_)
{
ThrowIfFailed(path_geo_->Open(&sink_));
}
}
void GeometrySink::CloseSink()
void GeometrySink::Close()
{
if (sink_)
{

View File

@ -23,6 +23,7 @@
namespace kiwano
{
class GeometrySink;
// 섯부竟
class KGE_API Geometry
@ -72,19 +73,19 @@ namespace kiwano
) const;
// 莉북섯부竟
Geometry CombineWith(
void CombineWith(
GeometrySink& sink,
Geometry input,
CombineMode mode,
Matrix3x2 const& input_matrix = Matrix3x2()
) const;
// 组合多个几何体
// 参数 modes 和 matrixs 的数量应为 1 或 geos 的数量减一
static Geometry Combine(
Vector<Geometry> const& geos,
Vector<CombineMode> const& modes,
Vector<Matrix3x2> const& matrixs = { Matrix3x2() }
);
// 组合几何体
Geometry CombineWith(
Geometry input,
CombineMode mode,
Matrix3x2 const& input_matrix = Matrix3x2()
) const;
// 눼쉔殮窟
static Geometry CreateLine(
@ -133,6 +134,7 @@ namespace kiwano
{
public:
GeometrySink();
~GeometrySink();
// 역迦警속쨌쓺
GeometrySink& BeginPath(
@ -179,6 +181,12 @@ namespace kiwano
// 삿혤<EC82BF>냥쨌쓺섯부竟
Geometry GetGeometry();
// 打开流
void Open();
// 关闭流
void Close();
public:
inline ComPtr<ID2D1PathGeometry> GetPathGeometry() const { return path_geo_; }
@ -190,10 +198,6 @@ namespace kiwano
void Init();
void OpenSink();
void CloseSink();
protected:
ComPtr<ID2D1PathGeometry> path_geo_;
ComPtr<ID2D1GeometrySink> sink_;

View File

@ -113,7 +113,7 @@ namespace kiwano
}
}
void RenderTarget::DrawGeometry(Geometry const& geometry, float stroke_width, StrokeStyle stroke) const
void RenderTarget::DrawGeometry(Geometry const& geometry, float stroke_width, StrokeStyle stroke)
{
HRESULT hr = S_OK;
if (!render_target_ || !current_brush_)
@ -136,7 +136,7 @@ namespace kiwano
ThrowIfFailed(hr);
}
void RenderTarget::FillGeometry(Geometry const& geometry) const
void RenderTarget::FillGeometry(Geometry const& geometry)
{
HRESULT hr = S_OK;
if (!render_target_ || !current_brush_)
@ -157,7 +157,7 @@ namespace kiwano
ThrowIfFailed(hr);
}
void RenderTarget::DrawLine(Point const& point1, Point const& point2, float stroke_width, StrokeStyle stroke) const
void RenderTarget::DrawLine(Point const& point1, Point const& point2, float stroke_width, StrokeStyle stroke)
{
HRESULT hr = S_OK;
if (!render_target_ || !current_brush_)
@ -181,7 +181,7 @@ namespace kiwano
ThrowIfFailed(hr);
}
void RenderTarget::DrawRectangle(Rect const& rect, float stroke_width, StrokeStyle stroke) const
void RenderTarget::DrawRectangle(Rect const& rect, float stroke_width, StrokeStyle stroke)
{
HRESULT hr = S_OK;
@ -205,7 +205,7 @@ namespace kiwano
ThrowIfFailed(hr);
}
void RenderTarget::FillRectangle(Rect const& rect) const
void RenderTarget::FillRectangle(Rect const& rect)
{
HRESULT hr = S_OK;
if (!render_target_ || !current_brush_)
@ -226,7 +226,7 @@ namespace kiwano
ThrowIfFailed(hr);
}
void RenderTarget::DrawRoundedRectangle(Rect const& rect, Vec2 const& radius, float stroke_width, StrokeStyle stroke) const
void RenderTarget::DrawRoundedRectangle(Rect const& rect, Vec2 const& radius, float stroke_width, StrokeStyle stroke)
{
HRESULT hr = S_OK;
if (!render_target_ || !current_brush_)
@ -253,7 +253,7 @@ namespace kiwano
ThrowIfFailed(hr);
}
void RenderTarget::FillRoundedRectangle(Rect const& rect, Vec2 const& radius) const
void RenderTarget::FillRoundedRectangle(Rect const& rect, Vec2 const& radius)
{
HRESULT hr = S_OK;
if (!render_target_ || !current_brush_)
@ -278,7 +278,7 @@ namespace kiwano
ThrowIfFailed(hr);
}
void RenderTarget::DrawEllipse(Point const& center, Vec2 const& radius, float stroke_width, StrokeStyle stroke) const
void RenderTarget::DrawEllipse(Point const& center, Vec2 const& radius, float stroke_width, StrokeStyle stroke)
{
HRESULT hr = S_OK;
if (!render_target_ || !current_brush_)
@ -305,7 +305,7 @@ namespace kiwano
ThrowIfFailed(hr);
}
void RenderTarget::FillEllipse(Point const& center, Vec2 const& radius) const
void RenderTarget::FillEllipse(Point const& center, Vec2 const& radius)
{
HRESULT hr = S_OK;
if (!render_target_ || !current_brush_)
@ -330,12 +330,12 @@ namespace kiwano
ThrowIfFailed(hr);
}
void RenderTarget::DrawTexture(Texture const& texture, Rect const& src_rect, Rect const& dest_rect) const
void RenderTarget::DrawTexture(Texture const& texture, Rect const& src_rect, Rect const& dest_rect)
{
DrawTexture(texture, &src_rect, &dest_rect);
}
void RenderTarget::DrawTexture(Texture const& texture, const Rect* src_rect, const Rect* dest_rect) const
void RenderTarget::DrawTexture(Texture const& texture, const Rect* src_rect, const Rect* dest_rect)
{
HRESULT hr = S_OK;
if (!render_target_)
@ -363,7 +363,7 @@ namespace kiwano
ThrowIfFailed(hr);
}
void RenderTarget::DrawTextLayout(TextLayout const& layout, Point const& offset) const
void RenderTarget::DrawTextLayout(TextLayout const& layout, Point const& offset)
{
HRESULT hr = S_OK;
if (!text_renderer_)
@ -393,7 +393,7 @@ namespace kiwano
ThrowIfFailed(hr);
}
void RenderTarget::CreateLayer(LayerArea& layer) const
void RenderTarget::CreateLayer(LayerArea& layer)
{
HRESULT hr = S_OK;
@ -540,7 +540,7 @@ namespace kiwano
return global_transform_;
}
ComPtr<ID2D1StrokeStyle> RenderTarget::GetStrokeStyle(StrokeStyle style) const
ComPtr<ID2D1StrokeStyle> RenderTarget::GetStrokeStyle(StrokeStyle style)
{
switch (style)
{
@ -710,7 +710,7 @@ namespace kiwano
{
}
Texture TextureRenderTarget::GetOutput() const
Texture TextureRenderTarget::GetOutput()
{
HRESULT hr = E_FAIL;

View File

@ -52,75 +52,75 @@ namespace kiwano
void CreateLayer(
LayerArea& layer
) const;
);
void DrawGeometry(
Geometry const& geometry,
float stroke_width,
StrokeStyle stroke = StrokeStyle::Miter
) const;
);
void FillGeometry(
Geometry const& geometry
) const;
);
void DrawLine(
Point const& point1,
Point const& point2,
float stroke_width,
StrokeStyle stroke = StrokeStyle::Miter
) const;
);
void DrawRectangle(
Rect const& rect,
float stroke_width,
StrokeStyle stroke = StrokeStyle::Miter
) const;
);
void FillRectangle(
Rect const& rect
) const;
);
void DrawRoundedRectangle(
Rect const& rect,
Vec2 const& radius,
float stroke_width,
StrokeStyle stroke = StrokeStyle::Miter
) const;
);
void FillRoundedRectangle(
Rect const& rect,
Vec2 const& radius
) const;
);
void DrawEllipse(
Point const& center,
Vec2 const& radius,
float stroke_width,
StrokeStyle stroke = StrokeStyle::Miter
) const;
);
void FillEllipse(
Point const& center,
Vec2 const& radius
) const;
);
void DrawTexture(
Texture const& texture,
Rect const& src_rect,
Rect const& dest_rect
) const;
);
void DrawTexture(
Texture const& texture,
const Rect* src_rect = nullptr,
const Rect* dest_rect = nullptr
) const;
);
void DrawTextLayout(
TextLayout const& layout,
Point const& offset = Point{}
) const;
);
void PushClipRect(
Rect const& clip_rect
@ -206,7 +206,7 @@ namespace kiwano
inline ComPtr<ITextRenderer> GetTextRenderer() const { KGE_ASSERT(text_renderer_); return text_renderer_; }
ComPtr<ID2D1StrokeStyle> GetStrokeStyle(StrokeStyle style) const;
ComPtr<ID2D1StrokeStyle> GetStrokeStyle(StrokeStyle style);
public:
RenderTarget();
@ -241,6 +241,6 @@ namespace kiwano
public:
TextureRenderTarget();
Texture GetOutput() const;
Texture GetOutput();
};
}

View File

@ -192,9 +192,9 @@ namespace kiwano
inline Color const& GetClearColor() const { return clear_color_; }
inline ID2DDeviceResources* GetD2DDeviceResources() const { KGE_ASSERT(d2d_res_); return d2d_res_.get(); }
inline ID2DDeviceResources* GetD2DDeviceResources() { KGE_ASSERT(d2d_res_); return d2d_res_.get(); }
inline ID3DDeviceResources* GetD3DDeviceResources() const { KGE_ASSERT(d3d_res_); return d3d_res_.get(); }
inline ID3DDeviceResources* GetD3DDeviceResources() { KGE_ASSERT(d3d_res_); return d3d_res_.get(); }
private:
Renderer();

View File

@ -76,6 +76,6 @@ namespace kiwano
protected:
TextStyle style_;
TextFormat text_format_;
ComPtr<IDWriteTextLayout> text_layout_;
mutable ComPtr<IDWriteTextLayout> text_layout_;
};
}

View File

@ -66,20 +66,20 @@ namespace kiwano
HRESULT CreateTextFormat(
_Out_ ComPtr<IDWriteTextFormat>& text_format,
_In_ Font const& font
) const override;
) override;
HRESULT CreateTextLayout(
_Out_ ComPtr<IDWriteTextLayout>& text_layout,
_In_ String const& text,
_In_ ComPtr<IDWriteTextFormat> const& text_format
) const override;
_In_ ComPtr<IDWriteTextFormat> text_format
) override;
HRESULT SetD2DDevice(
_In_ ComPtr<ID2D1Device> const& device
_In_ ComPtr<ID2D1Device> device
) override;
void SetTargetBitmap(
_In_ ComPtr<ID2D1Bitmap1> const& target
_In_ ComPtr<ID2D1Bitmap1> target
) override;
void DiscardResources() override;
@ -298,7 +298,7 @@ namespace kiwano
return hr;
}
HRESULT D2DDeviceResources::SetD2DDevice(_In_ ComPtr<ID2D1Device> const& device)
HRESULT D2DDeviceResources::SetD2DDevice(_In_ ComPtr<ID2D1Device> device)
{
ComPtr<ID2D1DeviceContext> device_ctx;
@ -317,7 +317,7 @@ namespace kiwano
return hr;
}
void D2DDeviceResources::SetTargetBitmap(_In_ ComPtr<ID2D1Bitmap1> const& target)
void D2DDeviceResources::SetTargetBitmap(_In_ ComPtr<ID2D1Bitmap1> target)
{
target_bitmap_ = target;
if (device_context_)
@ -435,7 +435,7 @@ namespace kiwano
return hr;
}
HRESULT D2DDeviceResources::CreateTextFormat(_Out_ ComPtr<IDWriteTextFormat> & text_format, _In_ Font const & font) const
HRESULT D2DDeviceResources::CreateTextFormat(_Out_ ComPtr<IDWriteTextFormat> & text_format, _In_ Font const & font)
{
if (!dwrite_factory_)
return E_UNEXPECTED;
@ -460,7 +460,7 @@ namespace kiwano
}
HRESULT D2DDeviceResources::CreateTextLayout(_Out_ ComPtr<IDWriteTextLayout>& text_layout, _In_ String const& text,
_In_ ComPtr<IDWriteTextFormat> const& text_format) const
_In_ ComPtr<IDWriteTextFormat> text_format)
{
if (!dwrite_factory_)
return E_UNEXPECTED;

View File

@ -217,34 +217,34 @@ namespace kiwano
virtual HRESULT CreateTextFormat(
_Out_ ComPtr<IDWriteTextFormat>& text_format,
_In_ Font const& font
) const = 0;
) = 0;
virtual HRESULT CreateTextLayout(
_Out_ ComPtr<IDWriteTextLayout>& text_layout,
_In_ String const& text,
_In_ ComPtr<IDWriteTextFormat> const& text_format
) const = 0;
_In_ ComPtr<IDWriteTextFormat> text_format
) = 0;
virtual HRESULT SetD2DDevice(
_In_ ComPtr<ID2D1Device> const& device
_In_ ComPtr<ID2D1Device> device
) = 0;
virtual void SetTargetBitmap(
_In_ ComPtr<ID2D1Bitmap1> const& target
_In_ ComPtr<ID2D1Bitmap1> target
) = 0;
virtual void DiscardResources() = 0;
inline ID2D1Factory1* GetFactory() const { KGE_ASSERT(factory_); return factory_.get(); }
inline IWICImagingFactory* GetWICImagingFactory() const { KGE_ASSERT(imaging_factory_); return imaging_factory_.get(); }
inline IDWriteFactory* GetDWriteFactory() const { KGE_ASSERT(dwrite_factory_); return dwrite_factory_.get(); }
inline ID2D1Device* GetDevice() const { KGE_ASSERT(device_); return device_.get(); }
inline ID2D1DeviceContext* GetDeviceContext() const { KGE_ASSERT(device_context_); return device_context_.get(); }
inline ID2D1Bitmap1* GetTargetBitmap() const { KGE_ASSERT(target_bitmap_); return target_bitmap_.get(); }
inline ID2D1Factory1* GetFactory() { KGE_ASSERT(factory_); return factory_.get(); }
inline IWICImagingFactory* GetWICImagingFactory() { KGE_ASSERT(imaging_factory_); return imaging_factory_.get(); }
inline IDWriteFactory* GetDWriteFactory() { KGE_ASSERT(dwrite_factory_); return dwrite_factory_.get(); }
inline ID2D1Device* GetDevice() { KGE_ASSERT(device_); return device_.get(); }
inline ID2D1DeviceContext* GetDeviceContext() { KGE_ASSERT(device_context_); return device_context_.get(); }
inline ID2D1Bitmap1* GetTargetBitmap() { KGE_ASSERT(target_bitmap_); return target_bitmap_.get(); }
inline ID2D1StrokeStyle* GetMiterStrokeStyle() const { KGE_ASSERT(miter_stroke_style_); return miter_stroke_style_.get(); }
inline ID2D1StrokeStyle* GetBevelStrokeStyle() const { KGE_ASSERT(bevel_stroke_style_); return bevel_stroke_style_.get(); }
inline ID2D1StrokeStyle* GetRoundStrokeStyle() const { KGE_ASSERT(round_stroke_style_); return round_stroke_style_.get(); }
inline ID2D1StrokeStyle* GetMiterStrokeStyle() { KGE_ASSERT(miter_stroke_style_); return miter_stroke_style_.get(); }
inline ID2D1StrokeStyle* GetBevelStrokeStyle() { KGE_ASSERT(bevel_stroke_style_); return bevel_stroke_style_.get(); }
inline ID2D1StrokeStyle* GetRoundStrokeStyle() { KGE_ASSERT(round_stroke_style_); return round_stroke_style_.get(); }
protected:
ComPtr<ID2D1Factory1> factory_;

View File

@ -35,11 +35,11 @@ namespace kiwano
public:
static HRESULT Create(ID3D10DeviceResources** device_resources, ID2DDeviceResources* d2d_device_res, HWND hwnd);
inline ID3D10Device* GetDevice() const { KGE_ASSERT(device_); return device_.get(); }
inline ID3D10RenderTargetView* GetRenderTargetView() const { KGE_ASSERT(rt_view_); return rt_view_.get(); }
inline ID3D10DepthStencilView* GetDepthStencilView() const { KGE_ASSERT(ds_view_); return ds_view_.get(); }
inline IDXGIFactory* GetDXGIFactory() const { KGE_ASSERT(dxgi_factory_); return dxgi_factory_.get(); }
inline IDXGISwapChain* GetDXGISwapChain() const { KGE_ASSERT(dxgi_swap_chain_); return dxgi_swap_chain_.get(); }
inline ID3D10Device* GetDevice() { KGE_ASSERT(device_); return device_.get(); }
inline ID3D10RenderTargetView* GetRenderTargetView() { KGE_ASSERT(rt_view_); return rt_view_.get(); }
inline ID3D10DepthStencilView* GetDepthStencilView() { KGE_ASSERT(ds_view_); return ds_view_.get(); }
inline IDXGIFactory* GetDXGIFactory() { KGE_ASSERT(dxgi_factory_); return dxgi_factory_.get(); }
inline IDXGISwapChain* GetDXGISwapChain() { KGE_ASSERT(dxgi_swap_chain_); return dxgi_swap_chain_.get(); }
protected:
ComPtr<ID3D10Device> device_;

View File

@ -35,12 +35,12 @@ namespace kiwano
public:
static HRESULT Create(ID3D11DeviceResources** device_resources, ID2DDeviceResources* d2d_device_res, HWND hwnd);
inline ID3D11Device* GetDevice() const { KGE_ASSERT(device_); return device_.get(); }
inline ID3D11DeviceContext* GetDeviceContext() const { KGE_ASSERT(device_context_); return device_context_.get(); }
inline ID3D11RenderTargetView* GetRenderTargetView() const { KGE_ASSERT(rt_view_); return rt_view_.get(); }
inline ID3D11DepthStencilView* GetDepthStencilView() const { KGE_ASSERT(ds_view_); return ds_view_.get(); }
inline IDXGIFactory* GetDXGIFactory() const { KGE_ASSERT(dxgi_factory_); return dxgi_factory_.get(); }
inline IDXGISwapChain* GetDXGISwapChain() const { KGE_ASSERT(dxgi_swap_chain_); return dxgi_swap_chain_.get(); }
inline ID3D11Device* GetDevice() { KGE_ASSERT(device_); return device_.get(); }
inline ID3D11DeviceContext* GetDeviceContext() { KGE_ASSERT(device_context_); return device_context_.get(); }
inline ID3D11RenderTargetView* GetRenderTargetView() { KGE_ASSERT(rt_view_); return rt_view_.get(); }
inline ID3D11DepthStencilView* GetDepthStencilView() { KGE_ASSERT(ds_view_); return ds_view_.get(); }
inline IDXGIFactory* GetDXGIFactory() { KGE_ASSERT(dxgi_factory_); return dxgi_factory_.get(); }
inline IDXGISwapChain* GetDXGISwapChain() { KGE_ASSERT(dxgi_swap_chain_); return dxgi_swap_chain_.get(); }
protected:
ComPtr<ID3D11Device> device_;

View File

@ -52,7 +52,7 @@ namespace kiwano
{
enabled_ = enabled;
for (const auto& button : buttons_)
for (auto& button : buttons_)
{
button->SetEnabled(enabled);
}

View File

@ -97,7 +97,7 @@ namespace kiwano
auto iter = object_cache_.find(id);
if (iter == object_cache_.end())
return nullptr;
return dynamic_cast<_Ty*>((*iter).second.get());
return const_cast<_Ty*>(dynamic_cast<const _Ty*>((*iter).second.get()));
}
protected: