OpenSiv3D icon indicating copy to clipboard operation
OpenSiv3D copied to clipboard

Rect::draw(const ColorF[4]) の引数の扱い改善

Open sashi0034 opened this issue 6 months ago • 1 comments

内容

Rect::draw(const ColorF[4])Array<ColorF>, std::array<ColorF, 4>, std::span<const ColorF> を渡せないのは不便です。

背景

実用上、動的に用意した配列や定数配列などを使って四隅の色を指定したい場面があります。 しかし、現在は固定長配列 [4] を直接渡す必要があり、柔軟性に欠けています。

提案

Rect::draw の多重定義または内部での変換を追加し、std::span<const ColorF> や std::array<ColorF, 4> にも対応することで、より直感的で扱いやすくなると思います。

sashi0034 avatar Jun 21 '25 23:06 sashi0034

ご提案ありがとうございます。 開発中の v0.8 で次の 2 つとし、

const Rect& draw(const std::array<ColorF, 4>& colors) const;
const Rect& draw(std::span<const ColorF, 4> colors) const;

次のように様々なパターンで呼べるようにしました。

# include <Siv3D.hpp>

void Main()
{
	while (System::Update())
	{
		{
			const ColorF colors[4]{ Palette::Red, Palette::Green, Palette::Blue, Palette::Yellow };
			Rect{ 0, 100, 100 }.draw(colors);
		}

		{
			const std::array<ColorF, 4> colors{ Palette::Red, Palette::Green, Palette::Blue, Palette::Yellow };
			Rect{ 150, 100, 100 }.draw(colors);
		}

		{
			const Array<ColorF> colors{ Palette::Red, Palette::Green, Palette::Blue, Palette::Yellow };
			Rect{ 300, 100, 100 }.draw(std::span<const ColorF, 4>{ colors });
		}

		{
			Rect{ 450, 100, 100 }.draw({ Palette::Red, Palette::Green, Palette::Blue, Palette::Yellow });
		}
	}
}

Reputeless avatar Oct 20 '25 14:10 Reputeless