/*	
 *	nuklear_piece.h
 *
 *	NuklearのP/ECE用レンダリングバックエンド
 *
 *	CLiP - Common Library for P/ECE
 *	Copyright (C) 2016 Naoyuki Sawa
 *
 *	* Sat Nov 12 09:40:37 JST 2016 Naoyuki Sawa
 *	- 1st リリース。
 *	  まだオリジナル版のNuklearの変化が早くて、当モジュールも頻繁に変更すると思うので、まだ当モジュールはライブラリに含めない事にしました。		⇒{{2016/11/15コメント追記:当モジュールもライブラリに含めました。}}
 *	  いずれ、オリジナル版のNuklearが安定した頃に、当モジュールもライブラリに含める予定です。
 *	  それまでの間は、Nuklearを利用するアプリケーションのフォルダに当ファイルをコピーして、直接、アプリケーションと一緒にビルドして下さい。
 *	* Sun Nov 13 21:39:44 JST 2016 Naoyuki Sawa
 *	- nk_piece_new()の中でカーソルをロードする処理を追加したので、カーソルが表示されるようになりました。
 *	- デフォルトスタイルを、P/ECEの解像度に合わせて調整しました。
 *	* Tue Nov 15 09:07:00 JST 2016 Naoyuki Sawa
 *	- P/ECE開発環境のgcc33.exeで警告が出るのを抑制するために、'/clip/nuklear/nuklear.h'を新たに二か所直接修正しました。(移動元一か所＋移動先一か所です)
 *	  修正箇所は、'/clip/nuklear/nuklear.h'内の「{{2016/11/15移動:〜」のコメント(二か所)を参照して下さい。
 *	  修正後の内容で、パッチ('/clip/nuklear/nuklear.h.patch')を更新しました。
 *	  パッチの適用方法については、'/clip/nuklear/nuklear_dxlib.cpp'の、'Fri Oct 21 22:24:40 JST 2016 Naoyuki Sawa'のコメントを参照して下さい。
 *	  今回の修正は、P/ECE開発環境のgcc33.exeのために行った修正ですが、Windows環境でVC++でコンパイルする場合にも害は有りません。
 *	  引き続き、'/clip/nuklear/nuklear.h'は、P/ECE用とWindows用で共通としておきます。
 *	- 当モジュールもライブラリに含めました。
 *	  ただし、ライブラリ本体(clip1.lib,clip2.lib,fram.lib)に直接含めるのではなく、既存のliblua/liblua.lib等と同様に、独立したライブラリ(nuklear/nuklear_piece.lib)としてビルドしました。
 *	  そうした理由は、Nuklearのコードはまだ完全に理解出来ていない部分が多いので、もしCLiPライブラリに直接含めてしまうと、管理し切れなくなる恐れが有ると思ったからです。
 *	  また、もし今後のNuklearの変化によって、P/ECEでは使用出来なくなった場合に、ライブラリから外し易いようにしておくためにも、独立したライブラリとしました。
 *	* Thu Nov 17 21:56:29 JST 2016 Naoyuki Sawa
 *	- nk_piece_new()に、ポップアップの枠が表示されない問題を暫定的に回避する処理を追加しました。
 *	  2016/11/17時点のNuklear(リビジョン8e60328)では、nk_style_from_table()にて、win->popup_border_colorとwin->popup_borderの初期化が欠けている問題が有ります。
 *	  2016/11/16にプルリクエスト(https://github.com/vurtun/nuklear/pull/286)を提出しましたが、まだ採用されていないので、それまでここで明示的に初期化しておく事にします。
 *	  プルリクエストが採用されたら、この処理は不要になるので、削除して下さい。	⇒{{2016/11/21コメント追記:オリジナル版のNuklearでもポップアップの枠が表示されない問題が修正されたので、当モジュール内で行っていた暫定的に回避する処理はもう不要になったので削除しました。}}
 */
#ifndef __NUKLEAR_PIECE_H__
#define __NUKLEAR_PIECE_H__
/****************************************************************************
 *	
 ****************************************************************************/
//<!> If used needs to be defined for implementation and header <!>			以下のシンボルは、実装部と宣言部の両方で有効になる位置で、定義する必要が有ります。
#define NK_INCLUDE_FIXED_TYPES
#define NK_INCLUDE_DEFAULT_ALLOCATOR
#define NK_INCLUDE_STANDARD_IO
#define NK_INCLUDE_STANDARD_VARARGS
/*--------------------------------------------------------------------------*/
//<!> If used it is only required to be defined for the implementation part <!>		以下のシンボルは、実装部だけで定義しても構わないのですが、あえて分ける必要も無いので、ここで定義しておく事にしました。
#define NK_MEMSET	memset
#define NK_MEMCPY	memcpy
#define NK_SQRT		sqrt
#define NK_SIN		sin
#define NK_COS		cos
#define NK_STRTOD	strtod
//#define NK_DTOA	dtoa
#define NK_VSNPRINTF	vsnprintf
/*--------------------------------------------------------------------------*/
#include "nuklear.h"
/****************************************************************************
 *	
 ****************************************************************************/
#ifdef  __cplusplus
extern "C" {
#endif//__cplusplus
/****************************************************************************
 *	グローバル定数
 ****************************************************************************/
extern const struct nk_user_font nk_piece_font[4];	//[0]=半角5x10/全角10x10,[1]=半角8x16,[2]=半角4x6,[3]=半角4x5
/****************************************************************************
 *	グローバル関数
 ****************************************************************************/
NK_API struct nk_context* nk_piece_new();
NK_API void nk_piece_free(struct nk_context* ctx);
NK_API void nk_piece_handle_event(struct nk_context* ctx, int joy);
struct _RENDER;	//{{2016/11/15追加:当モジュールもライブラリに含めました。当ファイルはcliprend.hよりも先にclipstd.hにてインクルードされるので、警告「warning: `struct _RENDER' declared inside parameter list」を回避するために、この宣言が必要です。}}
NK_API void nk_piece_render(struct nk_context* ctx, struct _RENDER* render);
#ifdef  __cplusplus
}//extern "C"
#endif//__cplusplus
#endif//__NUKLEAR_PIECE_H__
