/********************************************************************/
/* Copyright (c) 2019 System fugen G.K. and Yuzi Mizuno          */
/* All rights reserved.                                             */
/********************************************************************/
/**
 * @file RectDrawer.cpp
 * @brief RectDrawer.h の実装
 */
#ifndef _MGRectDRAWER_HH_
#define _MGRectDRAWER_HH_

#include "mgGL/Color.h"
#include "mgGL/VBOLeaf.h"
#include "mgGL/VBOByScreen.h"
#include "fugenView.h"
//
//Implements mgRectDrawer Class.
//mgRectDrawer is a class to draw a rectangle using MGOpenGLVIew's
//command drawer function.
class mgRectDrawer: public mgVBOByScreen{

public:

//////////Constructor//////////

mgRectDrawer(
	const MGColor& lineColor=MGColor::get_instance(MGColor::White),
	float lineWidth=1.f
);

~mgRectDrawer();

///pViewのwindowにこのmgRectDrawerをattachすると同時にmgVBOByScreenの
///set_viewport()を発信し、対象windowを確定する
void attatchToWindow(
	fugenView* pView
);

///pViewのwindowからこのmgRectDrawerをdetachする
bool detachFromWindow(
);

fugenView* getAttatchedWindow(){return m_targetWindow;};

///windowのbutton_down_point()とmousemove_new_point()により四角形の点をupdateする
void updateRectangle(
);

///左上を原点とするwindow座標系の2点を入力して四角形の点をupdateする
void updateRectangle(
	const CPoint& P1, const CPoint& P2
);

///左下を原点とするwindow座標系の2点を入力して四角形の点をupdateする
void updateRectangle(
	const int sxy1[2],	///<対象Windowの頂点のひとつを入力する
	const int sxy2[2]	///<対象Windowの頂点のふたつめを入力する
);

///NDC座標値で左下(x1,y1)と右上(x2,y2)のデータを与えて四角形描画データを作成する
void makeRectangle(float x1,float y1, float x2,float y2);

private:

	fugenView* m_targetWindow;///< window this is attached to.
	MGColor m_lineColor;///<Color to draw line.
	float m_lineWidth;///<Line width to draw line.

};

#endif
