From 4525afc3160664f59c17034444032c91edfd35b1 Mon Sep 17 00:00:00 2001 From: Nameless Date: Fri, 26 Feb 2016 22:10:08 +0900 Subject: [PATCH] =?UTF-8?q?#26=20=E5=BA=A7=E6=A8=99=E7=B3=BB=E3=81=AE?= =?UTF-8?q?=E7=9B=B8=E4=BA=92=E5=A4=89=E6=8F=9B=E3=82=92=E3=82=B3=E3=83=B3?= =?UTF-8?q?=E3=82=B9=E3=83=88=E3=83=A9=E3=82=AF=E3=82=BF=E3=81=A7=E8=A1=8C?= =?UTF-8?q?=E3=81=86=E3=82=88=E3=81=86=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit point_c<->size_cの相互変換をコンストラクタで行うように変更 point_c<->size_cの相互変換が同じ型のときに暗黙に行えるよう変更 #4 LoadDivGraphのFlagのバグを修正 --- dxlibex/Graph2D.h | 33 +++++++++++++++-------------- dxlibex/basic_types/point2d.hpp | 37 ++++++++++++++++++++++----------- dxlibex/basic_types/size.hpp | 32 ++++++++++++++++++++++------ tests/WithDxLib/GraphTest.hpp | 1 + 4 files changed, 69 insertions(+), 34 deletions(-) diff --git a/dxlibex/Graph2D.h b/dxlibex/Graph2D.h index 77b0e28..8b6e71a 100644 --- a/dxlibex/Graph2D.h +++ b/dxlibex/Graph2D.h @@ -82,7 +82,8 @@ namespace dxle //!\~japanese 指定サイズのグラフィックを作成する //!\~english Create an image with a specific size - inline texture_2d(int SizeX, int SizeY, bool NotUse3DFlag = false)DXLE_NOEXCEPT_OR_NOTHROW : texture_2d(DxLib::MakeGraph(SizeX, SizeY, NotUse3DFlag), NotUse3DFlag){} + //inline texture_2d(int SizeX, int SizeY, bool NotUse3DFlag = false)DXLE_NOEXCEPT_OR_NOTHROW : texture_2d(DxLib::MakeGraph(SizeX, SizeY, NotUse3DFlag), NotUse3DFlag){} + //!\~japanese 画像ファイルからグラフィックを作成する //!\~english Create an image form an image file inline texture_2d(const TCHAR *FileName, int TextureFlag, int ReverseFlag, int SurfaceMode = DX_MOVIESURFACE_NORMAL)DXLE_NOEXCEPT_OR_NOTHROW : texture_2d(DxLib::LoadBmpToGraph(FileName, TextureFlag, ReverseFlag, SurfaceMode), false){} @@ -128,35 +129,35 @@ namespace dxle template, enable_if_t::value/* && dxle::ignore_type().emplace_back())>::value*/, nullptr_t> = nullptr> //! 画像ファイルを分割してグラフィックハンドルを作成する(DxLib互換) - static inline Cont LoadDivGraph(const TCHAR *FileName, int AllNum, int XNum, int YNum, int XSize, int YSize, int NotUse3DFlag = FALSE){ return texture_2d::LoadDivGraph(FileName, AllNum, { XNum, YNum }, { XSize, YSize }, NotUse3DFlag); } + static inline Cont LoadDivGraph(const TCHAR *FileName, int AllNum, int XNum, int YNum, int XSize, int YSize, bool NotUse3DFlag = FALSE){ return texture_2d::LoadDivGraph(FileName, AllNum, { XNum, YNum }, { XSize, YSize }, NotUse3DFlag); } template, enable_if_t::value/* && dxle::ignore_type().emplace_back())>::value*/, nullptr_t> = nullptr> //! 画像ファイルを分割してグラフィックハンドルを作成する(char[], dxle::sizei指定) - static inline Cont LoadDivGraph(const TCHAR *FileName, int AllNum, const dxle::sizei& Num, const dxle::sizei& Size, int NotUse3DFlag = FALSE); + static inline Cont LoadDivGraph(const TCHAR *FileName, int AllNum, const dxle::sizei& Num, const dxle::sizei& Size, bool NotUse3DFlag = FALSE); template, enable_if_t::value/* && dxle::ignore_type().emplace_back())>::value*/, nullptr_t> = nullptr> //! 画像ファイルを分割してグラフィックハンドルを作成する(string, dxle::sizei指定) - static inline Cont LoadDivGraph(const dxle::tstring& FileName, int AllNum, const dxle::sizei& Num, const dxle::sizei& Size, int NotUse3DFlag = FALSE){ return texture_2d::LoadDivGraph(FileName.c_str(), AllNum, Num, Size, NotUse3DFlag); } + static inline Cont LoadDivGraph(const dxle::tstring& FileName, int AllNum, const dxle::sizei& Num, const dxle::sizei& Size, bool NotUse3DFlag = FALSE){ return texture_2d::LoadDivGraph(FileName.c_str(), AllNum, Num, Size, NotUse3DFlag); } template, enable_if_t::value/* && dxle::ignore_type().emplace_back())>::value*/, nullptr_t> = nullptr> //! 画像ファイルを分割してグラフィックハンドルを作成する(char[], dxle::sizei指定, AllNumがテンプレート引数) - static inline Cont LoadDivGraph(const TCHAR *FileName, const dxle::sizei& Num, const dxle::sizei& Size, int NotUse3DFlag = FALSE); + static inline Cont LoadDivGraph(const TCHAR *FileName, const dxle::sizei& Num, const dxle::sizei& Size, bool NotUse3DFlag = FALSE); template, enable_if_t::value/* && dxle::ignore_type().emplace_back())>::value*/, nullptr_t> = nullptr> //! 画像ファイルを分割してグラフィックハンドルを作成する(string, dxle::sizei指定, AllNumがテンプレート引数) - static inline Cont LoadDivGraph(const dxle::tstring& FileName, const dxle::sizei& Num, const dxle::sizei& Size, int NotUse3DFlag = FALSE){ return texture_2d::LoadDivGraph(FileName.c_str(), Num, Size, NotUse3DFlag); } + static inline Cont LoadDivGraph(const dxle::tstring& FileName, const dxle::sizei& Num, const dxle::sizei& Size, bool NotUse3DFlag = FALSE){ return texture_2d::LoadDivGraph(FileName.c_str(), Num, Size, NotUse3DFlag); } template //! 画像ファイルを分割してグラフィックハンドルを作成する(char[], dxle::sizei指定, 出力先指定(std::array)) - static inline void LoadDivGraph(std::array& out, const TCHAR *FileName, const dxle::sizei& Num, const dxle::sizei& Size, int NotUse3DFlag = FALSE); + static inline void LoadDivGraph(std::array& out, const TCHAR *FileName, const dxle::sizei& Num, const dxle::sizei& Size, bool NotUse3DFlag = FALSE); template //! 画像ファイルを分割してグラフィックハンドルを作成する(char[], dxle::sizei指定, 出力先指定(texture_2d[])) - static inline void LoadDivGraph(texture_2d(&out)[AllNum], const TCHAR *FileName, const dxle::sizei& Num, const dxle::sizei& Size, int NotUse3DFlag = FALSE); + static inline void LoadDivGraph(texture_2d(&out)[AllNum], const TCHAR *FileName, const dxle::sizei& Num, const dxle::sizei& Size, bool NotUse3DFlag = FALSE); template //! 画像ファイルを分割してグラフィックハンドルを作成する(string, dxle::sizei指定, 出力先指定(std::array)) - static inline void LoadDivGraph(std::array& out, const dxle::tstring& FileName, const dxle::sizei& Num, const dxle::sizei& Size, int NotUse3DFlag = FALSE){ return texture_2d::LoadDivGraph(out, FileName.c_str(), Num, Size, NotUse3DFlag); } + static inline void LoadDivGraph(std::array& out, const dxle::tstring& FileName, const dxle::sizei& Num, const dxle::sizei& Size, bool NotUse3DFlag = FALSE){ return texture_2d::LoadDivGraph(out, FileName.c_str(), Num, Size, NotUse3DFlag); } template //! 画像ファイルを分割してグラフィックハンドルを作成する(string, dxle::sizei指定, 出力先指定(texture_2d[])) - static inline void LoadDivGraph(texture_2d(&out)[AllNum], const dxle::tstring& FileName, const dxle::sizei& Num, const dxle::sizei& Size, int NotUse3DFlag = FALSE){ return texture_2d::LoadDivGraph(out, FileName.c_str(), Num, Size, NotUse3DFlag); } + static inline void LoadDivGraph(texture_2d(&out)[AllNum], const dxle::tstring& FileName, const dxle::sizei& Num, const dxle::sizei& Size, bool NotUse3DFlag = FALSE){ return texture_2d::LoadDivGraph(out, FileName.c_str(), Num, Size, NotUse3DFlag); } @@ -355,7 +356,7 @@ namespace dxle //画像ファイルを分割してグラフィックハンドルを作成する template - static void LoadDivGraph_impl(OutFunc&& out_func, BuffT* HandleBuf, const TCHAR *FileName, int AllNum, const dxle::sizei& Num, const dxle::sizei& Size, int NotUse3DFlag); + static void LoadDivGraph_impl(OutFunc&& out_func, BuffT* HandleBuf, const TCHAR *FileName, int AllNum, const dxle::sizei& Num, const dxle::sizei& Size, bool NotUse3DFlag); friend class screen; }; @@ -554,7 +555,7 @@ namespace dxle template //! 画像ファイルを分割してグラフィックハンドルを作成する - inline void texture_2d::LoadDivGraph_impl(OutFunc&& out_func, BuffT* HandleBuf, const TCHAR *FileName, int AllNum, const dxle::sizei& Num, const dxle::sizei& Size, int NotUse3DFlag) + inline void texture_2d::LoadDivGraph_impl(OutFunc&& out_func, BuffT* HandleBuf, const TCHAR *FileName, int AllNum, const dxle::sizei& Num, const dxle::sizei& Size, bool NotUse3DFlag) { DxLib::LoadDivGraph(FileName, AllNum, Num.width, Num.height, Size.width, Size.height, HandleBuf, NotUse3DFlag); try{ @@ -574,7 +575,7 @@ namespace dxle } template::value/* && dxle::ignore_type().emplace_back())>::value*/, nullptr_t>> //! 画像ファイルを分割してグラフィックハンドルを作成する - inline Cont texture_2d::LoadDivGraph(const TCHAR *FileName, const dxle::sizei& Num, const dxle::sizei& Size, int NotUse3DFlag) + inline Cont texture_2d::LoadDivGraph(const TCHAR *FileName, const dxle::sizei& Num, const dxle::sizei& Size, bool NotUse3DFlag) { int HandleBuf[AllNum]; typename std::remove_all_extents::type cont; @@ -583,7 +584,7 @@ namespace dxle } template::value/* && dxle::ignore_type().emplace_back())>::value*/, nullptr_t>> //! 画像ファイルを分割してグラフィックハンドルを作成する - inline Cont texture_2d::LoadDivGraph(const TCHAR *FileName, int AllNum, const dxle::sizei& Num, const dxle::sizei& Size, int NotUse3DFlag) + inline Cont texture_2d::LoadDivGraph(const TCHAR *FileName, int AllNum, const dxle::sizei& Num, const dxle::sizei& Size, bool NotUse3DFlag) { auto HandleBuf = std::make_unique(AllNum); typename std::remove_all_extents::type cont; @@ -592,7 +593,7 @@ namespace dxle } template //! 画像ファイルを分割してグラフィックハンドルを作成する - inline void texture_2d::LoadDivGraph(std::array& out, const TCHAR *FileName, const dxle::sizei& Num, const dxle::sizei& Size, int NotUse3DFlag) + inline void texture_2d::LoadDivGraph(std::array& out, const TCHAR *FileName, const dxle::sizei& Num, const dxle::sizei& Size, bool NotUse3DFlag) { int HandleBuf[AllNum]; int i = 0; @@ -601,7 +602,7 @@ namespace dxle } template //! 画像ファイルを分割してグラフィックハンドルを作成する - inline void texture_2d::LoadDivGraph(texture_2d(&out)[AllNum], const TCHAR *FileName, const dxle::sizei& Num, const dxle::sizei& Size, int NotUse3DFlag) + inline void texture_2d::LoadDivGraph(texture_2d(&out)[AllNum], const TCHAR *FileName, const dxle::sizei& Num, const dxle::sizei& Size, bool NotUse3DFlag) { int HandleBuf[AllNum]; int i = 0; diff --git a/dxlibex/basic_types/point2d.hpp b/dxlibex/basic_types/point2d.hpp index e83d8a0..433d017 100644 --- a/dxlibex/basic_types/point2d.hpp +++ b/dxlibex/basic_types/point2d.hpp @@ -111,11 +111,36 @@ namespace dxle { DXLE_CONSTEXPR_CLASS point_c(const value_type& x_, const value_type& y_) DXLE_NOEXCEPT_IF((std::is_nothrow_copy_constructible::value)) : x(x_), y(y_) {} DXLE_CONSTEXPR_CLASS point_c(value_type&& x_, value_type&& y_) DXLE_NOEXCEPT_OR_NOTHROW : x(std::move(x_)), y(std::move(y_)) {} + //!\~english conversion from another data type + //!\~japanese 内部型の異なるpoint_cクラス同士の変換 + template DXLE_CONSTEXPR_CLASS explicit point_c(const point_c& other) DXLE_NOEXCEPT_IF((dxle::is_nothrow_convertable::value)) : x(static_cast(other.x)), y(static_cast(other.y)){} + //!\~english conversion from another data type + //!\~japanese 内部型の異なるpoint_cクラス同士の変換 + template DXLE_CONSTEXPR_CLASS explicit point_c(point_c&& other) DXLE_NOEXCEPT_IF((dxle::is_nothrow_convertable::value)) : x(static_cast(std::move(other.x))), y(static_cast(std::move(other.y))) {} + //copy constructor DXLE_CONSTEXPR_CLASS point_c(const point_c& o) DXLE_NOEXCEPT_IF((std::is_nothrow_copy_constructible::value)) : x(o.x), y(o.y) {} //move constructor DXLE_CONSTEXPR_CLASS point_c(point_c&& o) DXLE_NOEXCEPT_OR_NOTHROW : x(std::move(o.x)), y(std::move(o.y)) {} + + //!\~english conversion from size_c + //!\~japanese size_cクラスからの変換 + template DXLE_CONSTEXPR_CLASS explicit point_c(const size_c& other) DXLE_NOEXCEPT_IF((dxle::is_nothrow_convertable::value)) + : x(static_cast(other.width)), y(static_cast(other.height)) {} + //!\~english conversion from size_c + //!\~japanese size_cクラスからの変換 + template DXLE_CONSTEXPR_CLASS explicit point_c(size_c&& other) DXLE_NOEXCEPT_IF((dxle::is_nothrow_convertable::value)) + : x(static_cast(std::move(other.width))), y(static_cast(std::move(other.height))) {} + //!\~english conversion from size_c + //!\~japanese size_cクラスからの変換 + DXLE_CONSTEXPR_CLASS point_c(const size_c& other) DXLE_NOEXCEPT_IF((dxle::is_nothrow_convertable::value)) + : x(other.width), y(other.height) {} + //!\~english conversion from size_c + //!\~japanese size_cクラスからの変換 + DXLE_CONSTEXPR_CLASS point_c(size_c&& other) DXLE_NOEXCEPT_IF((dxle::is_nothrow_convertable::value)) + : x(std::move(other.width)), y(std::move(other.height)) {} + //copy assignment operator point_c& operator=(const point_c& r) DXLE_NOEXCEPT_IF((std::is_nothrow_copy_assignable::value)) { @@ -137,18 +162,6 @@ namespace dxle { DXLE_CONSTEXPR_CLASS explicit operator bool() const DXLE_NOEXCEPT_IF_EXPR((dxle::detail::operator_bool_helper(this->x, this->y))){ return dxle::detail::operator_bool_helper(this->x, this->y); } - //!\~english conversion to another data type - //!\~japanese 内部型の異なるpoint_cクラス同士の変換 - template DXLE_CONSTEXPR_CLASS explicit operator point_c() const DXLE_NOEXCEPT_IF((dxle::is_nothrow_convertable::value)) - { - return{ static_cast(this->x), static_cast(this->y) }; - } - //!\~english conversion to size_c - //!\~japanese size_cクラスへの変換 - template DXLE_CONSTEXPR_CLASS explicit operator size_c() const DXLE_NOEXCEPT_IF((dxle::is_nothrow_convertable::value)) - { - return{ static_cast(this->x), static_cast(this->y) }; - } //!\~english conversion to std::pair //!\~japanese std::pairへの変換 template explicit operator std::pair() const DXLE_NOEXCEPT_IF((dxle::is_nothrow_convertable::value)) diff --git a/dxlibex/basic_types/size.hpp b/dxlibex/basic_types/size.hpp index 8751fa9..2bb88f9 100644 --- a/dxlibex/basic_types/size.hpp +++ b/dxlibex/basic_types/size.hpp @@ -105,10 +105,36 @@ namespace dxle { DXLE_CONSTEXPR_CLASS size_c(const value_type& width_, const value_type& height_) DXLE_NOEXCEPT_IF((std::is_nothrow_copy_constructible::value)) : width(width_), height(height_) {} DXLE_CONSTEXPR_CLASS size_c(value_type&& width_, value_type&& height_) DXLE_NOEXCEPT_OR_NOTHROW : width(std::move(width_)), height(std::move(height_)) {} + //!\~english conversion from another data type + //!\~japanese 内部型の異なるsize_cクラス同士の変換 + template DXLE_CONSTEXPR_CLASS explicit size_c(const size_c& other) DXLE_NOEXCEPT_IF((dxle::is_nothrow_convertable::value)) + : width(static_cast(other.width)), height(static_cast(other.height)) {} + //!\~english conversion from another data type + //!\~japanese 内部型の異なるsize_cクラス同士の変換 + template DXLE_CONSTEXPR_CLASS explicit size_c(size_c&& other) DXLE_NOEXCEPT_IF((dxle::is_nothrow_convertable::value)) + : width(static_cast(std::move(other.width))), y(static_cast(std::move(other.height))) {} //copy constructor DXLE_CONSTEXPR_CLASS size_c(const size_c& o) DXLE_NOEXCEPT_IF((std::is_nothrow_copy_constructible::value)) : width(o.width), height(o.height) {} //move constructor DXLE_CONSTEXPR_CLASS size_c(size_c&& o) DXLE_NOEXCEPT_OR_NOTHROW : width(std::move(o.width)), height(std::move(o.height)) {} + + //!\~english conversion from point_c + //!\~japanese point_cクラスからの変換 + template DXLE_CONSTEXPR_CLASS explicit size_c(const point_c& other) DXLE_NOEXCEPT_IF((dxle::is_nothrow_convertable::value)) + : width(static_cast(other.x)), height(static_cast(other.y)) {} + //!\~english conversion from point_c + //!\~japanese point_cクラスからの変換 + template DXLE_CONSTEXPR_CLASS explicit size_c(point_c&& other) DXLE_NOEXCEPT_IF((dxle::is_nothrow_convertable::value)) + : width(static_cast(std::move(other.x))), height(static_cast(std::move(other.y))) {} + //!\~english conversion from point_c + //!\~japanese point_cクラスからの変換 + DXLE_CONSTEXPR_CLASS size_c(const point_c& other) DXLE_NOEXCEPT_IF((dxle::is_nothrow_convertable::value)) + : width(other.x), height(other.y) {} + //!\~english conversion from point_c + //!\~japanese point_cクラスからの変換 + DXLE_CONSTEXPR_CLASS size_c(point_c&& other) DXLE_NOEXCEPT_IF((dxle::is_nothrow_convertable::value)) + : width(std::move(other.x)), height(std::move(other.y)) {} + //copy assignment operator size_c& operator=(const size_c& r) DXLE_NOEXCEPT_IF((std::is_nothrow_copy_assignable::value)) { @@ -137,12 +163,6 @@ namespace dxle { { return{ static_cast(this->width), static_cast(this->height) }; } - //!\~english conversion to point_c - //!\~japanese point_cクラスへの変換 - template DXLE_CONSTEXPR_CLASS explicit operator point_c() const DXLE_NOEXCEPT_IF((dxle::is_nothrow_convertable::value)) - { - return{ static_cast(this->width), static_cast(this->height) }; - } //!\~english conversion to std::pair //!\~japanese std::pairへの変換 template explicit operator std::pair() const DXLE_NOEXCEPT_IF((dxle::is_nothrow_convertable::value)) diff --git a/tests/WithDxLib/GraphTest.hpp b/tests/WithDxLib/GraphTest.hpp index 26c0f70..d19e4d7 100644 --- a/tests/WithDxLib/GraphTest.hpp +++ b/tests/WithDxLib/GraphTest.hpp @@ -31,6 +31,7 @@ int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) // 読みこんだグラフィックを画面中央に描画 DrawGraph(dxle::pointi(sizei{640, 480} - GHandle.size()) / 2, GHandle, true); + GHandle.DrawGraph({0.1,0.1}, true); DxLib::WaitKey(); DxLib::ClearDrawScreen();