Skip to content

Commit

Permalink
Merge branch 'master' into sound_c_dev
Browse files Browse the repository at this point in the history
  • Loading branch information
yumetodo committed Feb 27, 2016
2 parents 8d14f03 + 4525afc commit 58a1635
Show file tree
Hide file tree
Showing 4 changed files with 69 additions and 34 deletions.
33 changes: 17 additions & 16 deletions dxlibex/Graph2D.h
Original file line number Diff line number Diff line change
Expand Up @@ -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){}
Expand Down Expand Up @@ -128,35 +129,35 @@ namespace dxle

template<typename Cont = std::vector<texture_2d>, enable_if_t<std::is_same<typename Cont::value_type, texture_2d>::value/* && dxle::ignore_type<decltype(std::declval<Cont>().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<Cont>(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<Cont>(FileName, AllNum, { XNum, YNum }, { XSize, YSize }, NotUse3DFlag); }

template<typename Cont = std::vector<texture_2d>, enable_if_t<std::is_same<typename Cont::value_type, texture_2d>::value/* && dxle::ignore_type<decltype(std::declval<Cont>().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<typename Cont = std::vector<texture_2d>, enable_if_t<std::is_same<typename Cont::value_type, texture_2d>::value/* && dxle::ignore_type<decltype(std::declval<Cont>().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<Cont>(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<Cont>(FileName.c_str(), AllNum, Num, Size, NotUse3DFlag); }

template<size_t AllNum, typename Cont = std::vector<texture_2d>, enable_if_t<std::is_same<typename Cont::value_type, texture_2d>::value/* && dxle::ignore_type<decltype(std::declval<Cont>().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<size_t AllNum, typename Cont = std::vector<texture_2d>, enable_if_t<std::is_same<typename Cont::value_type, texture_2d>::value/* && dxle::ignore_type<decltype(std::declval<Cont>().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<AllNum, Cont>(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<AllNum, Cont>(FileName.c_str(), Num, Size, NotUse3DFlag); }

template<size_t AllNum>
//! 画像ファイルを分割してグラフィックハンドルを作成する(char[], dxle::sizei指定, 出力先指定(std::array))
static inline void LoadDivGraph(std::array<texture_2d, AllNum>& out, const TCHAR *FileName, const dxle::sizei& Num, const dxle::sizei& Size, int NotUse3DFlag = FALSE);
static inline void LoadDivGraph(std::array<texture_2d, AllNum>& out, const TCHAR *FileName, const dxle::sizei& Num, const dxle::sizei& Size, bool NotUse3DFlag = FALSE);
template<size_t AllNum>
//! 画像ファイルを分割してグラフィックハンドルを作成する(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<size_t AllNum>
//! 画像ファイルを分割してグラフィックハンドルを作成する(string, dxle::sizei指定, 出力先指定(std::array))
static inline void LoadDivGraph(std::array<texture_2d, AllNum>& 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<texture_2d, AllNum>& 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<size_t AllNum>
//! 画像ファイルを分割してグラフィックハンドルを作成する(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); }



Expand Down Expand Up @@ -355,7 +356,7 @@ namespace dxle

//画像ファイルを分割してグラフィックハンドルを作成する
template<typename BuffT, typename OutFunc>
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;
};
Expand Down Expand Up @@ -554,7 +555,7 @@ namespace dxle

template<typename BuffT, typename OutFunc>
//! 画像ファイルを分割してグラフィックハンドルを作成する
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{
Expand All @@ -574,7 +575,7 @@ namespace dxle
}
template<size_t AllNum, typename Cont, enable_if_t<std::is_same<typename Cont::value_type, texture_2d>::value/* && dxle::ignore_type<decltype(std::declval<Cont>().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<Cont>::type cont;
Expand All @@ -583,7 +584,7 @@ namespace dxle
}
template<typename Cont, enable_if_t<std::is_same<typename Cont::value_type, texture_2d>::value/* && dxle::ignore_type<decltype(std::declval<Cont>().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<int[]>(AllNum);
typename std::remove_all_extents<Cont>::type cont;
Expand All @@ -592,7 +593,7 @@ namespace dxle
}
template<size_t AllNum>
//! 画像ファイルを分割してグラフィックハンドルを作成する
inline void texture_2d::LoadDivGraph(std::array<texture_2d, AllNum>& out, const TCHAR *FileName, const dxle::sizei& Num, const dxle::sizei& Size, int NotUse3DFlag)
inline void texture_2d::LoadDivGraph(std::array<texture_2d, AllNum>& out, const TCHAR *FileName, const dxle::sizei& Num, const dxle::sizei& Size, bool NotUse3DFlag)
{
int HandleBuf[AllNum];
int i = 0;
Expand All @@ -601,7 +602,7 @@ namespace dxle
}
template<size_t AllNum>
//! 画像ファイルを分割してグラフィックハンドルを作成する
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;
Expand Down
37 changes: 25 additions & 12 deletions dxlibex/basic_types/point2d.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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_type>::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<typename Tp2_> DXLE_CONSTEXPR_CLASS explicit point_c(const point_c<Tp2_>& other) DXLE_NOEXCEPT_IF((dxle::is_nothrow_convertable<Tp2_, value_type>::value)) : x(static_cast<value_type>(other.x)), y(static_cast<value_type>(other.y)){}
//!\~english conversion from another data type
//!\~japanese 内部型の異なるpoint_cクラス同士の変換
template<typename Tp2_> DXLE_CONSTEXPR_CLASS explicit point_c(point_c<Tp2_>&& other) DXLE_NOEXCEPT_IF((dxle::is_nothrow_convertable<Tp2_&&, value_type>::value)) : x(static_cast<value_type>(std::move(other.x))), y(static_cast<value_type>(std::move(other.y))) {}

//copy constructor
DXLE_CONSTEXPR_CLASS point_c(const point_c<value_type>& o) DXLE_NOEXCEPT_IF((std::is_nothrow_copy_constructible<value_type>::value)) : x(o.x), y(o.y) {}
//move constructor
DXLE_CONSTEXPR_CLASS point_c(point_c<value_type>&& o) DXLE_NOEXCEPT_OR_NOTHROW
: x(std::move(o.x)), y(std::move(o.y)) {}

//!\~english conversion from size_c
//!\~japanese size_cクラスからの変換
template<typename Tp2_> DXLE_CONSTEXPR_CLASS explicit point_c(const size_c<Tp2_, nullptr>& other) DXLE_NOEXCEPT_IF((dxle::is_nothrow_convertable<Tp2_, value_type>::value))
: x(static_cast<value_type>(other.width)), y(static_cast<value_type>(other.height)) {}
//!\~english conversion from size_c
//!\~japanese size_cクラスからの変換
template<typename Tp2_> DXLE_CONSTEXPR_CLASS explicit point_c(size_c<Tp2_, nullptr>&& other) DXLE_NOEXCEPT_IF((dxle::is_nothrow_convertable<Tp2_&&, value_type>::value))
: x(static_cast<value_type>(std::move(other.width))), y(static_cast<value_type>(std::move(other.height))) {}
//!\~english conversion from size_c
//!\~japanese size_cクラスからの変換
DXLE_CONSTEXPR_CLASS point_c(const size_c<value_type, nullptr>& other) DXLE_NOEXCEPT_IF((dxle::is_nothrow_convertable<value_type, value_type>::value))
: x(other.width), y(other.height) {}
//!\~english conversion from size_c
//!\~japanese size_cクラスからの変換
DXLE_CONSTEXPR_CLASS point_c(size_c<value_type, nullptr>&& other) DXLE_NOEXCEPT_IF((dxle::is_nothrow_convertable<value_type&&, value_type>::value))
: x(std::move(other.width)), y(std::move(other.height)) {}

//copy assignment operator
point_c& operator=(const point_c<value_type>& r) DXLE_NOEXCEPT_IF((std::is_nothrow_copy_assignable<value_type>::value))
{
Expand All @@ -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<typename Tp2_> DXLE_CONSTEXPR_CLASS explicit operator point_c<Tp2_>() const DXLE_NOEXCEPT_IF((dxle::is_nothrow_convertable<value_type, Tp2_>::value))
{
return{ static_cast<Tp2_>(this->x), static_cast<Tp2_>(this->y) };
}
//!\~english conversion to size_c
//!\~japanese size_cクラスへの変換
template<typename Tp2_> DXLE_CONSTEXPR_CLASS explicit operator size_c<Tp2_, nullptr>() const DXLE_NOEXCEPT_IF((dxle::is_nothrow_convertable<value_type, Tp2_>::value))
{
return{ static_cast<Tp2_>(this->x), static_cast<Tp2_>(this->y) };
}
//!\~english conversion to std::pair
//!\~japanese std::pairへの変換
template<typename Tp2_> explicit operator std::pair<Tp2_, Tp2_>() const DXLE_NOEXCEPT_IF((dxle::is_nothrow_convertable<value_type, Tp2_>::value))
Expand Down
32 changes: 26 additions & 6 deletions dxlibex/basic_types/size.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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_type>::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<typename Tp2_> DXLE_CONSTEXPR_CLASS explicit size_c(const size_c<Tp2_>& other) DXLE_NOEXCEPT_IF((dxle::is_nothrow_convertable<Tp2_, value_type>::value))
: width(static_cast<value_type>(other.width)), height(static_cast<value_type>(other.height)) {}
//!\~english conversion from another data type
//!\~japanese 内部型の異なるsize_cクラス同士の変換
template<typename Tp2_> DXLE_CONSTEXPR_CLASS explicit size_c(size_c<Tp2_>&& other) DXLE_NOEXCEPT_IF((dxle::is_nothrow_convertable<Tp2_&&, value_type>::value))
: width(static_cast<value_type>(std::move(other.width))), y(static_cast<value_type>(std::move(other.height))) {}
//copy constructor
DXLE_CONSTEXPR_CLASS size_c(const size_c<value_type>& o) DXLE_NOEXCEPT_IF((std::is_nothrow_copy_constructible<value_type>::value)) : width(o.width), height(o.height) {}
//move constructor
DXLE_CONSTEXPR_CLASS size_c(size_c<value_type>&& o) DXLE_NOEXCEPT_OR_NOTHROW : width(std::move(o.width)), height(std::move(o.height)) {}

//!\~english conversion from point_c
//!\~japanese point_cクラスからの変換
template<typename Tp2_> DXLE_CONSTEXPR_CLASS explicit size_c(const point_c<Tp2_, nullptr>& other) DXLE_NOEXCEPT_IF((dxle::is_nothrow_convertable<Tp2_, value_type>::value))
: width(static_cast<value_type>(other.x)), height(static_cast<value_type>(other.y)) {}
//!\~english conversion from point_c
//!\~japanese point_cクラスからの変換
template<typename Tp2_> DXLE_CONSTEXPR_CLASS explicit size_c(point_c<Tp2_, nullptr>&& other) DXLE_NOEXCEPT_IF((dxle::is_nothrow_convertable<Tp2_&&, value_type>::value))
: width(static_cast<value_type>(std::move(other.x))), height(static_cast<value_type>(std::move(other.y))) {}
//!\~english conversion from point_c
//!\~japanese point_cクラスからの変換
DXLE_CONSTEXPR_CLASS size_c(const point_c<value_type, nullptr>& other) DXLE_NOEXCEPT_IF((dxle::is_nothrow_convertable<value_type, value_type>::value))
: width(other.x), height(other.y) {}
//!\~english conversion from point_c
//!\~japanese point_cクラスからの変換
DXLE_CONSTEXPR_CLASS size_c(point_c<value_type, nullptr>&& other) DXLE_NOEXCEPT_IF((dxle::is_nothrow_convertable<value_type&&, value_type>::value))
: width(std::move(other.x)), height(std::move(other.y)) {}

//copy assignment operator
size_c& operator=(const size_c<value_type>& r) DXLE_NOEXCEPT_IF((std::is_nothrow_copy_assignable<value_type>::value))
{
Expand Down Expand Up @@ -137,12 +163,6 @@ namespace dxle {
{
return{ static_cast<Tp2_>(this->width), static_cast<Tp2_>(this->height) };
}
//!\~english conversion to point_c
//!\~japanese point_cクラスへの変換
template<typename Tp2_> DXLE_CONSTEXPR_CLASS explicit operator point_c<Tp2_, nullptr>() const DXLE_NOEXCEPT_IF((dxle::is_nothrow_convertable<value_type, Tp2_>::value))
{
return{ static_cast<Tp2_>(this->width), static_cast<Tp2_>(this->height) };
}
//!\~english conversion to std::pair
//!\~japanese std::pairへの変換
template<typename Tp2_> explicit operator std::pair<Tp2_, Tp2_>() const DXLE_NOEXCEPT_IF((dxle::is_nothrow_convertable<value_type, Tp2_>::value))
Expand Down
1 change: 1 addition & 0 deletions tests/WithDxLib/GraphTest.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down

0 comments on commit 58a1635

Please sign in to comment.