/*	
 *	nuklear_dxlib.cpp
 *
 *	NuklearのDxLib用レンダリングバックエンド
 *
 *	CLiP - Common Library for P/ECE
 *	Copyright (C) 2016 Naoyuki Sawa
 *
 *	* Fri Oct 21 22:24:40 JST 2016 Naoyuki Sawa
 *	- 1st リリース。
 *	  '/clip/nuklear/nuklear.h'は、オリジナル版の'nuklear-master/nuklear.h'を少しだけ変更したものです。
 *	  '/clip/nuklear/nuklear_dxlib.h'と'/clip/nuklear/nuklear_dxlib.cpp'は、オリジナル版の'nuklear-master/demo/gdi/nuklear_gdi.h'を参考にして作成しました。
 *	- □使用した'nuklear.h'のリビジョン
 *	  │https://github.com/vurtun/nuklear
 *	  │Latest commit 867b335 3 days ago
 *	  オリジナル版のNuklearの上記のリビジョンを「keep/nuklear-master.7z」に保存しておきました。
 *	* Sat Oct 22 10:03:01 JST 2016 Naoyuki Sawa
 *	- 'nuklear.h'を更新しました。
 *	  下記のリビジョンをダウンロードし、前回と同じ変更を適用しました。
 *	- □使用した'nuklear.h'のリビジョン
 *	  │https://github.com/vurtun/nuklear
 *	  │Latest commit 4020b1b 9 hours ago
 *	  オリジナル版のNuklearの上記のリビジョンを「keep/nuklear-master.7z」に保存しておきました。
 *	* Sun Oct 23 10:04:30 JST 2016 Naoyuki Sawa
 *	- 'nuklear.h'を更新しました。
 *	  下記のリビジョンをダウンロードし、前回と同じ変更を適用しました。
 *	- □使用した'nuklear.h'のリビジョン
 *	  │https://github.com/vurtun/nuklear
 *	  │Latest commit 01eb4f8 3 hours ago
 *	  オリジナル版のNuklearの上記のリビジョンを「keep/nuklear-master.7z」に保存しておきました。
 *	* Sat Oct 29 01:47:50 JST 2016 Naoyuki Sawa
 *	- nk_dxlib_set_font()を削除しました。
 *	  アプリケーション側で「nk_style_set_font(ctx,font);」又は「nk_style_push_font(ctx,font)～nk_style_pop_font(ctx)」とすれば良いだけなので、
 *	  ヘルパ関数を用意しておく必要が無かったので、nk_dxlib_set_font()は削除する事にしました。
 *	* Sun Oct 30 21:21:13 JST 2016 Naoyuki Sawa
 *	- nk_dxlibfont_create()とnk_dxlibfont_del()を削除し、nk_dxlib_init_font()を追加しました。
 *	  変更した理由は、以下の通りです。
 *	- これまでは、nk_dxlibfont_create()内でDxLibのフォントハンドルを作成し、nk_dxlibfont_del()内で削除していました。
 *	  しかし、DxLibのフォントハンドルはコストの高いリソースであり、GUIだけのために専用のフォントハンドルを作成するのは無駄が多いと思いました。
 *	- そこで、DxLibのフォントハンドルを作成,及び,削除するのはアプリケーション側に任せて、nk_dxlib_init_font()にはフォントハンドルを指定するように変更しました。
 *	  こうする事で、アプリケーション側の処理とGUIの処理とでフォントハンドルを共用出来て、無駄が減らせるからです。
 *	- 上記の通り、無駄は減ったのですが、アプリケーション側で行うべき処理(フォントハンドルの作成)が増えた分、コーディングの手間はこれまでよりも少し増えました。
 *	  まあ、一般的なアプリケーションでは、最初にフォントハンドルを全て作成しておくので、それを指定すれば良く、さほど手間は増えないと思います。
 *	* Mon Oct 31 10:46:38 JST 2016 Naoyuki Sawa
 *	- 'nuklear.h'を更新しました。
 *	  下記のリビジョンをダウンロードし、前回と同じ変更を適用しました。
 *	- □使用した'nuklear.h'のリビジョン
 *	  │https://github.com/vurtun/nuklear
 *	  │Latest commit 69b13a0 11 hours ago
 *	  オリジナル版のNuklearの上記のリビジョンを「keep/nuklear-master.7z」に保存しておきました。
 *	- 今回の目玉は、多くのAPIの引数に、struct nk_panel型の変数を指定しなくて良くなった事です。
 *	  これまでは、レイアウトを管理するための一時変数を、呼び出し側のスタックフレーム上などに用意して、それをAPIに引き渡す必要が有ったのですが、もう不要になりました。
 *	  アプリケーション側の記述が簡略化されて、とても使い易くなったと思います。
 *	- オリジナル版のNuklearリビジョン69b13a0では、下記の箇所がエンバグしているようです。(前回までは問題有りませんでした。)
 *	  'nuklear.h'の315行目:
 *	  ＞#ifdef FIFO_INCLUDE_FIXED_TYPES	…正しくはNK_INCLUDE_FIXED_TYPESであるはず。
 *	  GitHubのIssues(https://github.com/vurtun/nuklear/issues/268)に報告しておきました。
 *	  多分、オリジナル版のNuklearが修正してくれると思うので、手元で'nuklear.h'を直接修正するのではなく、一時的に'FIFO_INCLUDE_FIXED_TYPES'も定義して回避する事にしました。
 *	  オリジナル版のNuklearが修正されたら、'FIFO_INCLUDE_FIXED_TYPES'の定義は削除して下さい。	⇒{{2016/10/31コメント追記:オリジナル版のNuklearリビジョンb280370にて修正されたので、'FIFO_INCLUDE_FIXED_TYPES'の定義は削除しました。}}
 *	* Mon Oct 31 21:38:12 JST 2016 Naoyuki Sawa
 *	- NK_WINDOW_SCROLL_AUTO_HIDEに対応しました。
 *	  詳細は、以下の通りです。
 *	- これまでは、nk_begin()等にNK_WINDOW_SCROLL_AUTO_HIDEを指定しても、スクロールバーが消えていませんでした。
 *	  原因は、コンテキストのdelta_time_secondsフィールドに、経過時間を設定していなかった事でした。
 *	  コンテキストのdelta_time_secondsフィールドには、アプリケーション側で、経過時間を格納する必要が有りました。
 *	  今回、nk_dxlib_render()をそのように修正したので、NK_WINDOW_SCROLL_AUTO_HIDEを指定すると、一定時間後にスクロールバーが消えるようになりました。
 *	- 尚、2016/10/31時点のNuklear(リビジョン69b13a0)では、delta_time_secondsフィールドは、NK_WINDOW_SCROLL_AUTO_HIDEの用途にしか使用されていません。
 *	  従って、もしNK_WINDOW_SCROLL_AUTO_HIDEに対応する必要が無ければ、アプリケーションがdelta_time_secondsフィールドに値を格納しなくても構いません。
 *	* Mon Oct 31 22:01:20 JST 2016 Naoyuki Sawa
 *	- nk_dxlib_draw_image()を、仮実装から、本実装に変更しました。
 *	  これまでは、仮実装として、矩形を描いてしました。
 *	  今回、本実装として、画像を描くように変更しました。
 *	  詳細は、nk_dxlib_draw_image()の実装を参照して下さい。
 *	- アプリケーション側では、nk_image構造体のhandle.idフィールドに、スプライト番号を格納して下さい。
 *	  尚、スプライト自体がサブイメージを管理出来ますので、Nuklearのサブイメージ管理(nk_subimage_id()等)は利用しません。	⇒{{2016/11/03コメント追記:nk_dxlib_draw_image()を、サブイメージの描画に対応しました。}}
 *	* Mon Oct 31 22:15:07 JST 2016 Naoyuki Sawa
 *	- 'nuklear.h'を更新しました。
 *	  下記のリビジョンをダウンロードし、前回と同じ変更を適用しました。
 *	- □使用した'nuklear.h'のリビジョン
 *	  │https://github.com/vurtun/nuklear
 *	  │Latest commit b280370 2 hours ago
 *	  オリジナル版のNuklearの上記のリビジョンを「keep/nuklear-master.7z」に保存しておきました。
 *	- FIFO_INCLUDE_FIXED_TYPESのバグが修正されていました。(詳細は'Mon Oct 31 10:46:38 JST 2016'のコメントを参照して下さい。)
 *	  もう、バグ回避のためのコードは不要になりました。
 *	* Tue Nov 01 21:19:19 JST 2016 Naoyuki Sawa
 *	- 'nuklear.h'を更新しました。
 *	  下記のリビジョンをダウンロードし、前回と同じ変更を適用しました。
 *	- □使用した'nuklear.h'のリビジョン
 *	  │https://github.com/vurtun/nuklear
 *	  │Latest commit dea4a71 41 minutes ago
 *	  オリジナル版のNuklearの上記のリビジョンを「keep/nuklear-master.7z」に保存しておきました。
 *	- 今回のリビジョンに、僕のプルリクエストが取り込まれました(^^)y
 *	  修正した点は、nk_combo_separator(),及び,それを呼び出しているnk_combo_string()が、正しく動作するように修正した事です。
 *	* Tue Nov 01 21:32:40 JST 2016 Naoyuki Sawa
 *	- nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
 *	  pCbkQue,priは、nk_dxlib_render()の実行中だけに必要な情報なので、nk_dxlib_init()の引数に指定してnk_dxlib構造体に格納するよりも、nk_dxlib_render()の引数にする方が自然だと思ったからです。
 *	  この変更により、nk_dxlib_render()を呼び出す度に、pCbkQue,priを変更する事も可能になりました。
 *	- 尚、これまでnk_dxlib_init()の引数に指定していたwidth,heightは、元々必要無かった事に気付いたので、nk_dxlib_render()の引数には追加しませんでした。
 *	  Nuklearは描画領域のサイズについて関知しないので、width,heightを指定する必要が無いからです。
 *	* Wed Nov 02 21:33:27 JST 2016 Naoyuki Sawa
 *	- NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
 *	  詳細は、以下の通りです。
 *	- これまでは、NuklearのDxLib用レンダリングバックエンドのインスタンスは、nuklear_dxlib.cpp内のローカル変数'dxlib'に保持しており、一つのインスタンスしか作成出来ませんでした。
 *	  つまり、アプリケーション起動時に一度だけnk_dxlib_init()を呼び出してコンテキストを受け取り、アプリケーション終了時に一度だけnk_dxlib_free()を呼び出してコンテキストを破棄するという、使い方しか出来ませんでした。
 *	  実用上はそれでも十分なのですが、Nuklear自体はコンテキストの複数インスタンスに対応しているのに、当モジュール側の制約で一つのインスタンスしか作成出来ないのは良くないと思ったので、修正する事にしました。
 *	- 複数インスタンスに対応するために、以下の変更を行いました。
 *	  ・nuklear_dxlib.cpp内のローカル変数'dxlib'を削除し、初期化時に動的に構造体のメモリを確保して、その中に個々のインスタンスの情報を格納するようにしました。
 *	    それに伴い、初期化関数の名前を、nk_dxlib_init()⇒nk_dxlib_new()に変更しました。
 *	    一つのインスタンスを初期化する関数ではなく、新しいインスタンスを作成して返す関数である事を強調するためです。
 *	  ・nk_dxlib_free()に、引数ctxを追加しました。
 *	    nk_dxlib_free()が、nk_dxlib_new()が割り当てた個々のインスタンスのリソースを解放します。
 *	  ・nk_dxlib_handle_event()に、引数ctxを追加しました。
 *	    入力を処理するコンテキストを渡して下さい。
 *	    複数インスタンスを作成した場合は、全てのインスタンスに対して、同じイベントを処理させても構いません。
 *	  ・nk_dxlib_render()に、引数ctxを追加しました。
 *	    描画を行うコンテキストを渡して下さい。
 *	    複数インスタンスを作成した場合は、個々のインスタンスに対して、nk_dxlib_render()を呼び出して下さい。
 *	- 複数インスタンスの使用例は以下の通りです(※未検証):
 *	  │--- メインループ ---
 *	  │int cpp_main(int argc, char* argv[]) {
 *	  │  struct nk_context* ctx1 = nk_dxlib_new();
 *	  │  struct nk_context* ctx2 = nk_dxlib_new();
 *	  │  ～
 *	  │  for(;;) {
 *	  │    ～
 *	  │    nk_dxlib_render(ctx1);
 *	  │    nk_dxlib_render(ctx2);
 *	  │  }
 *	  │}
 *	  │--- ウインドウプロシージャ ---
 *	  │static LRESULT CALLBACK NkWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
 *	  │  if(nk_dxlib_handle_event(ctx1, hWnd, uMsg, wParam, lParam) | //両方のコンテキストに処理させるために'||'ではなく'|'とする。
 *	  │     nk_dxlib_handle_event(ctx2, hWnd, uMsg, wParam, lParam)) {
 *	  │    if(nk_window_is_any_hovered(ctx1) || //ここは判定だけなので'||'で構わない。
 *	  │       nk_window_is_any_hovered(ctx2)) {
 *	  │      SetUseHookWinProcReturnValue(TRUE); return 1;
 *	  │    }
 *	  │  }
 *	  │  return 0;
 *	  │}
 *	* Wed Nov 02 22:11:30 JST 2016 Naoyuki Sawa
 *	- PrpWnd_exec()を追加しました。
 *	  clipprp.cモジュールのPrpEdt_exec()はPDCursesを使っているのに対して、こちらはNuklearを使って似た表示を行ってみた応用例です。
 *	  ただし、PrpEdt_exec()は編集にも対応していますが、PrpWnd_exec()は表示のみで、編集は未対応です。
 *	  PrpEdt_exec()は、PrpEdt_new()/PrpEdt_exec()/PrpEdt_draw()/PrpEdt_free()の組み合わせで使うか,又は,PrpEdt_run()でブロッキングするかですが、PrpWnd_exec()は準備は不要でこの関数一つでブロッキング無しで使えます。
 *	  詳細は、nuklear_dxlib.cpp内のPrpWnd_exec()実装箇所の、「■使用例」を参照して下さい。
 *	- PrpEdt_exec()はclipprp.cモジュールに含めたのに対して、PrpWnd_exec()はclipprp.cモジュールに含めなかった理由は、まだNuklearが発展途上で頻繁に変更される可能性が高いと思ったからです。
 *	  PDCursesは既に枯れていて当面変更されないと思うのでclipprp.cモジュールに含めても構いませんが、PrpWnd_exec()をclipprp.cモジュールに含めるとNuklearの仕様が変わる度にclipprp.cを変更する必要が生じてエンバグの危険が有ると思いました。
 *	  それよりも、nuklear_dxlib.cppに含めておけば、Nuklearの仕様が変わった時は、NuklearのDxLib用レンダリングバックエンドの追従と一緒に、同じモジュール内でPrpWnd_exec()も修正すれば良いからです。
 *	* Thu Nov 03 18:19:33 JST 2016 Naoyuki Sawa
 *	- nk_dxlib_draw_image()を、サブイメージの描画に対応しました。
 *	  スプライトの一部だけを描画します。
 *	- 主に、カーソルの描画を行うために利用しています。
 *	  カーソルをロードする処理の例は、nk_dxlib_draw_image()内のコメントを参照して下さい。
 *	* Fri Nov 04 09:13:40 JST 2016 Naoyuki Sawa
 *	- 'nuklear.h'を更新しました。
 *	  下記のリビジョンをダウンロードし、前回と同じ変更を適用しました。
 *	- □使用した'nuklear.h'のリビジョン
 *	  │https://github.com/vurtun/nuklear
 *	  │Latest commit 18bacf0 6 hours ago
 *	  オリジナル版のNuklearの上記のリビジョンを「keep/nuklear-master.7z」に保存しておきました。
 *	- 今回のリビジョンに、僕のプルリクエストが二つ取り込まれました(^^)y
 *	  修正した点は、nk_value_color_byte()とnk_hsva_f()のバグ修正です。
 *	* Fri Nov 04 21:14:19 JST 2016 Naoyuki Sawa
 *	- nk_dxlib_load_cursor()を追加しました。
 *	  '/clip/test.win/grp/MkTexNo.bat'の同日のコメントも参照して下さい。
 *	- Nuklearにカーソル描画を行わせたい場合に、これまではカーソルをロードする処理をアプリケーション側のソース内で明示的に書いていましたが、今後はnk_dxlib_load_cursor()を呼び出すだけで良くなりました。
 *	  尚、Nuklearにカーソル描画を行わせない場合(Windowsのカーソル表示だけで良い場合)は、nk_dxlib_load_cursor()を呼び出す必要は有りません。
 *	* Sat Nov 05 21:12:06 JST 2016 Naoyuki Sawa
 *	- nk_dxlib_draw_rect_multi_color()を、仮実装から、本実装に変更しました。
 *	  これまでは、仮実装として、単色で塗り潰していました。
 *	  今回、本実装として、グラデーションで塗り潰すように変更しました。
 *	  詳細は、nk_dxlib_draw_rect_multi_color()の実装を参照して下さい。
 *	* Wed Nov 09 21:58:17 JST 2016 Naoyuki Sawa
 *	- 'nuklear.h'を更新しました。
 *	  下記のリビジョンをダウンロードし、前回と同じ変更を適用しました。
 *	- □使用した'nuklear.h'のリビジョン
 *	  │https://github.com/vurtun/nuklear
 *	  │Latest commit 9f9591c 3 days ago
 *	  オリジナル版のNuklearの上記のリビジョンを「keep/nuklear-master.7z」に保存しておきました。
 *	- 今回のリビジョンに、僕のプルリクエストが取り込まれました(^^)y
 *	  修正した点は、nk_color_hex_rgba()とnk_color_hex_rgb()のバグ修正です。
 *	* Thu Nov 10 10:10:00 JST 2016 Naoyuki Sawa
 *	- 'nuklear.h'を更新しました。
 *	  下記のリビジョンをダウンロードし、前回と同じ変更を適用しました。
 *	- □使用した'nuklear.h'のリビジョン
 *	  │https://github.com/vurtun/nuklear
 *	  │Latest commit 42efd82 6 hours ago
 *	  オリジナル版のNuklearの上記のリビジョンを「keep/nuklear-master.7z」に保存しておきました。
 *	* Fri Nov 11 21:09:25 JST 2016 Naoyuki Sawa
 *	- 'nuklear.h'を更新しました。
 *	  下記のリビジョンをダウンロードし、前回と同じ変更を適用しました。
 *	- □使用した'nuklear.h'のリビジョン
 *	  │https://github.com/vurtun/nuklear
 *	  │Latest commit 02fb019 23 minutes ago
 *	  オリジナル版のNuklearの上記のリビジョンを「keep/nuklear-master.7z」に保存しておきました。
 *	* Sat Nov 12 09:40:37 JST 2016 Naoyuki Sawa
 *	- 'nuklear.h'を更新しました。
 *	  下記のリビジョンをダウンロードし、前回と同じ変更を適用しました。
 *	- □使用した'nuklear.h'のリビジョン
 *	  │https://github.com/vurtun/nuklear
 *	  │Latest commit 7fa1aa2 7 hours ago
 *	  オリジナル版のNuklearの上記のリビジョンを「keep/nuklear-master.7z」に保存しておきました。
 *	- 今回のリビジョンに、僕のプルリクエストが取り込まれました(^^)y
 *	  修正した点は、nk_layout_row_begin(～NK_STATIC～)を使うと間違ったレイアウトになっていた問題の修正です。
 *	* Sun Nov 13 21:39:44 JST 2016 Naoyuki Sawa
 *	- 'nuklear.h'を更新しました。
 *	  下記のリビジョンをダウンロードし、前回と同じ変更を適用しました。
 *	- □使用した'nuklear.h'のリビジョン
 *	  │https://github.com/vurtun/nuklear
 *	  │Latest commit f2b9b9a 2 hours ago
 *	  オリジナル版のNuklearの上記のリビジョンを「keep/nuklear-master.7z」に保存しておきました。
 *	* Tue Nov 15 09:07:00 JST 2016 Naoyuki Sawa
 *	- 'nuklear.h'を更新しました。
 *	  下記のリビジョンをダウンロードし、前回と同じ変更を適用しました。
 *	- □使用した'nuklear.h'のリビジョン
 *	  │https://github.com/vurtun/nuklear
 *	  │Latest commit 8e60328 4 hours ago
 *	  オリジナル版のNuklearの上記のリビジョンを「keep/nuklear-master.7z」に保存しておきました。
 *	* Thu Nov 17 21:56:29 JST 2016 Naoyuki Sawa
 *	- nk_dxlib_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)を提出しましたが、まだ採用されていないので、それまでここで明示的に初期化しておく事にします。
 *	  プルリクエストが採用されたら、この処理は不要になるので、削除して下さい。
 *	* Sat Nov 19 14:03:42 JST 2016 Naoyuki Sawa
 *	- 'nuklear.h'を更新しました。
 *	  下記のリビジョンをダウンロードし、前回と同じ変更を適用しました。
 *	- □使用した'nuklear.h'のリビジョン
 *	  │https://github.com/vurtun/nuklear
 *	  │Latest commit e229856 12 hours ago
 *	  オリジナル版のNuklearの上記のリビジョンを「keep/nuklear-master.7z」に保存しておきました。
 *	* Sun Nov 20 09:41:16 JST 2016 Naoyuki Sawa
 *	- 'nuklear.h'を更新しました。
 *	  下記のリビジョンをダウンロードし、前回と同じ変更を適用しました。
 *	- □使用した'nuklear.h'のリビジョン
 *	  │https://github.com/vurtun/nuklear
 *	  │Latest commit 6a374ea 5 hours ago
 *	  オリジナル版のNuklearの上記のリビジョンを「keep/nuklear-master.7z」に保存しておきました。
 */
/****************************************************************************
 *	
 ****************************************************************************/
// * Sun Oct 23 10:04:30 JST 2016 Naoyuki Sawa
// - これまでは、当モジュール内ではBoehm GCを利用しないようにしていました(生のmalloc,freeを使っていた)が、工夫して、Boehm GCのアロケータを使うように出来ました。
//   詳細は、以下の通りです。
// - 'nuklear.h'をインクルードする前に、'leak_detector.h'をインクルードする事は出来ません。
//   'extclip.h'の中でインクルードしている'nuklear_dxlib.h'の中でインクルードしている'nuklear.h'の中に有る、'struct nk_allocator'に'free'というフィールドが有り、
//   'nuklear.h'の中で'(*alloc->free)(～)'形式ではなく'alloc->free(～)'形式で使われているため、'leak_detector.h'の'free(～)'マクロ定義と衝突してしまうからです。
// - 'leak_detector.h'をインクルードせずに'gc.h'だけをインクルードすれば上記の問題は発生しませんが、管理の都合上、当モジュールだけそうするのは望ましく無いです。
//   そこで、下記①②③の手順でインクルードを行う事で、'nuklear.h'と'leak_detector.h'を共存する事が出来ました。
//   ただし、'nuklear.h'の実装部分(②)に対して、'leak_detector.h'によるmallocとfreeのマクロ置き換えは効かないなので、明示的にアロケータを指定する必要が有ります。
//   明示的にアロケータを指定する処理は、nk_dxlib_init()の中で行っています。
/*--------------------------------------------------------------------------*/
//①Boehm GC以外をインクルードする。
#define GC_H			//'extclip.h'でインクルードしている'gc.h'を抑制する。
#define GC_CPP_H		//'extclip.h'でインクルードしている'gc_cpp.h'を抑制する。
#define GC_LEAK_DETECTOR_H	//'extclip.h'でインクルードしている'leak_detector.h'を抑制する。
#include "clip.h"
/*--------------------------------------------------------------------------*/
//②Nuklearを実装する。
#undef  __NUKLEAR_DXLIB_H__	//'nuklear_dxlib.h'をもう一度読み込むために、左記のマクロを未定義に戻す。
#pragma warning(push)
#pragma warning(disable: 4018)	//warning C4018: '<' : signed と unsigned の数値を比較しようとしました。
#pragma warning(disable: 4028)	//warning C4028: 2 番目の引数の型が関数宣言と一致しません。
#define NK_IMPLEMENTATION	//┐
#include "nuklear_dxlib.h"	//├'nuklear_dxlib.h'の中でインクルードしている'nuklear.h'の'IMPLEMENTATION'を有効にする。
#undef  NK_IMPLEMENTATION	//┘
#pragma warning(pop)
/*--------------------------------------------------------------------------*/
//③Boehm GCをインクルードする。
#undef  GC_H			//┐
#undef  GC_CPP_H		//├①で定義したシンボルを未定義に戻す。
#undef  GC_LEAK_DETECTOR_H	//┘
//{{～～～～～この範囲はextclip.hからコピーしました。～～～～～
#ifndef _DEBUG
#include <gc.h>	//リリースビルドならばleak_detector.hよりも先にgc.hをインクルードする。
#endif//_DEBUG
#include <leak_detector.h>
//↑↓この順序は必須です。gc_cpp.hはgc.hをインクルードしているので、leak_detector.hよりも後でインクルードしなければなりません。leak_detector.hよりも先にインクルードすると、leak_detector.hよりも先にgc.hをインクルードしたのと同じ事になってしまい、malloc()をGC_malloc()に置き換えるかGC_debug_malloc()に置き換えるかを切り替えらる仕組みが無効になってしまいます。
#ifdef  __cplusplus
#if     (_MSC_VER >= 1900)	//┐
#pragma warning(push)		//│
#pragma warning(disable:4595)	//│
#endif//(_MSC_VER >= 1900)	//┴VS2015では、gc_cpp.hをインクルードすると「'...':非メンバーのnewまたはdelete演算子関数はインラインで宣言できません」という警告が出るので、一時的に警告を抑制します。
#include <gc_cpp.h>	//ガベージコレクションの対象とするクラスは「class A: public gc {...};」のように定義する必要が有ります。左記のように定義したクラス以外はガベージコレクションの対象にならず、明示的に開放しなければいつまでも残ってしまいます。詳細は/clip/tool/gc/gc_cpp.hを参照して下さい。
#if     (_MSC_VER >= 1900)	//┬VS2015では、gc_cpp.hをインクルードすると「'...':非メンバーのnewまたはdelete演算子関数はインラインで宣言できません」という警告が出るので、一時的に警告を抑制します。
#pragma warning(pop)		//│
#endif//(_MSC_VER >= 1900)	//┘
#endif//__cplusplus
//}}～～～～～この範囲はextclip.hからコピーしました。～～～～～
/*--------------------------------------------------------------------------*/
// * Fri Oct 21 22:24:40 JST 2016 Naoyuki Sawa
// - VC++6.0で発生する'nuklear.h'のエラーと警告は、上記の対応でほとんど回避出来たのですが、一か所だけ回避出来ないエラーが残り、仕方無く'nuklear.h'を直接修正しました。
//   修正箇所は、'nuklear.h'の「template<typename T> struct nk_helper<T,0>」を参照して下さい。
// * Sat Oct 22 10:03:01 JST 2016 Naoyuki Sawa
// - オリジナル版のリビジョンが更新されて、'nuklear.h'を更新する度に修正する手間を省くように、'nuklear.h.patch'を作成しておきました。
//   □パッチ作成方法
//   │C:\UnxUtils\usr\local\wbin\diff.exe -u C:\Users\Owner\Desktop\nuklear-master\nuklear.h .\nuklear.h > nuklear.h.patch
//   □パッチ適用方法
//   │C:\Home\Tools\patch.exe < nuklear.h.patch
// - UnxUtils版のpatch.exeは上手く動作しないので、「patch.exe ユーザーアカウント制御(UAC)対応版」(http://blogs.osdn.jp/2015/01/13/patch.html)を使用させて頂きました。
/****************************************************************************
 *	構造体
 ****************************************************************************/
struct nk_dxlib {
	struct nk_context	ctx;		//コンテキスト
//{{2016/10/30変更:nk_dxlibfont_create()とnk_dxlibfont_del()を削除し、nk_dxlib_init_font()を追加しました。
//	nk_user_font*		font;		//デフォルトフォント
//↓2016/10/30変更:nk_dxlibfont_create()とnk_dxlibfont_del()を削除し、nk_dxlib_init_font()を追加しました。
	nk_user_font		font;		//デフォルトフォント
//}}2016/10/30変更:nk_dxlibfont_create()とnk_dxlibfont_del()を削除し、nk_dxlib_init_font()を追加しました。
//{{2016/11/01削除:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//	ST_CbkQue*		pCbkQue;	//┐
//	int			pri;		//├レンダーターゲット
//	int			width;		//│
//	int			height;		//┘
//}}2016/11/01削除:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//{{2016/11/02追加:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
	int			t0;		//前回nk_dxlib_render()が呼び出された時刻
//}}2016/11/02追加:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
};
//{{2016/11/02削除:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
//static struct nk_dxlib dxlib;
//}}2016/11/02削除:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
/****************************************************************************
 *	ローカル関数宣言
 ****************************************************************************/
static int convert_color(struct nk_color col);
//{{2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//static void nk_dxlib_scissor(int x, int y, int w, int h);
//static void nk_dxlib_draw_line(int x1, int y1, int x2, int y2, int line_thickness, struct nk_color col);
//static void nk_dxlib_draw_curve(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4, int line_thickness, struct nk_color col);
//static void nk_dxlib_draw_rect(int x, int y, int w, int h, int rounding, int line_thickness, struct nk_color col);
//static void nk_dxlib_draw_rect_filled(int x, int y, int w, int h, int rounding, struct nk_color col);
//static void nk_dxlib_draw_rect_multi_color(int x, int y, int w, int h, struct nk_color left, struct nk_color top, struct nk_color bottom, struct nk_color right);
//static void nk_dxlib_draw_circle(int x, int y, int w, int h, int line_thickness, struct nk_color col);
//static void nk_dxlib_draw_circle_filled(int x, int y, int w, int h, struct nk_color col);
//static void nk_dxlib_draw_arc(int cx, int cy, int r, float a1, float a2, int line_thickness, struct nk_color col);
//static void nk_dxlib_draw_arc_filled(int cx, int cy, int r, float a1, float a2, struct nk_color col);
//static void nk_dxlib_draw_triangle(int x1, int y1, int x2, int y2, int x3, int y3, int line_thickness, struct nk_color col);
//static void nk_dxlib_draw_triangle_filled(int x1, int y1, int x2, int y2, int x3, int y3, struct nk_color col);
//static void nk_dxlib_draw_polygon(const struct nk_vec2i* points, int point_count, int line_thickness, struct nk_color col);
//static void nk_dxlib_draw_polygon_filled(const struct nk_vec2i* points, int point_count, struct nk_color col);
//static void nk_dxlib_draw_polyline(const struct nk_vec2i* points, int point_count, int line_thickness, struct nk_color col);
//static void nk_dxlib_draw_text(int x, int y, int w, int h, const char* string, int len, const struct nk_user_font* font, struct nk_color bg, struct nk_color fg);
//static void nk_dxlib_draw_image(int x, int y, int w, int h, const struct nk_image* img, struct nk_color col);
//↓2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
static void nk_dxlib_scissor(ST_CbkQue* pCbkQue, int pri, int x, int y, int w, int h);
static void nk_dxlib_draw_line(ST_CbkQue* pCbkQue, int pri, int x1, int y1, int x2, int y2, int line_thickness, struct nk_color col);
static void nk_dxlib_draw_curve(ST_CbkQue* pCbkQue, int pri, int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4, int line_thickness, struct nk_color col);
static void nk_dxlib_draw_rect(ST_CbkQue* pCbkQue, int pri, int x, int y, int w, int h, int rounding, int line_thickness, struct nk_color col);
static void nk_dxlib_draw_rect_filled(ST_CbkQue* pCbkQue, int pri, int x, int y, int w, int h, int rounding, struct nk_color col);
//{{2016/11/05変更:nk_dxlib_draw_rect_multi_color()を、仮実装から、本実装に変更しました。
//static void nk_dxlib_draw_rect_multi_color(ST_CbkQue* pCbkQue, int pri, int x, int y, int w, int h, struct nk_color left, struct nk_color top, struct nk_color bottom, struct nk_color right);
//↓2016/11/05変更:nk_dxlib_draw_rect_multi_color()を、仮実装から、本実装に変更しました。
static void nk_dxlib_draw_rect_multi_color(ST_CbkQue* pCbkQue, int pri, int x, int y, int w, int h, struct nk_color col1, struct nk_color col2, struct nk_color col3, struct nk_color col4);
//}}2016/11/05変更:nk_dxlib_draw_rect_multi_color()を、仮実装から、本実装に変更しました。
static void nk_dxlib_draw_circle(ST_CbkQue* pCbkQue, int pri, int x, int y, int w, int h, int line_thickness, struct nk_color col);
static void nk_dxlib_draw_circle_filled(ST_CbkQue* pCbkQue, int pri, int x, int y, int w, int h, struct nk_color col);
static void nk_dxlib_draw_arc(ST_CbkQue* pCbkQue, int pri, int cx, int cy, int r, float a1, float a2, int line_thickness, struct nk_color col);
static void nk_dxlib_draw_arc_filled(ST_CbkQue* pCbkQue, int pri, int cx, int cy, int r, float a1, float a2, struct nk_color col);
static void nk_dxlib_draw_triangle(ST_CbkQue* pCbkQue, int pri, int x1, int y1, int x2, int y2, int x3, int y3, int line_thickness, struct nk_color col);
static void nk_dxlib_draw_triangle_filled(ST_CbkQue* pCbkQue, int pri, int x1, int y1, int x2, int y2, int x3, int y3, struct nk_color col);
static void nk_dxlib_draw_polygon(ST_CbkQue* pCbkQue, int pri, const struct nk_vec2i* points, int point_count, int line_thickness, struct nk_color col);
static void nk_dxlib_draw_polygon_filled(ST_CbkQue* pCbkQue, int pri, const struct nk_vec2i* points, int point_count, struct nk_color col);
static void nk_dxlib_draw_polyline(ST_CbkQue* pCbkQue, int pri, const struct nk_vec2i* points, int point_count, int line_thickness, struct nk_color col);
static void nk_dxlib_draw_text(ST_CbkQue* pCbkQue, int pri, int x, int y, int w, int h, const char* string, int len, const struct nk_user_font* font, struct nk_color bg, struct nk_color fg);
static void nk_dxlib_draw_image(ST_CbkQue* pCbkQue, int pri, int x, int y, int w, int h, const struct nk_image* img, struct nk_color col);
//}}2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
static float nk_dxlibfont_get_text_width(nk_handle handle, float height, const char* text, int len);
/****************************************************************************
 *	グローバル関数
 ****************************************************************************/
//{{2016/10/30変更:nk_dxlibfont_create()とnk_dxlibfont_del()を削除し、nk_dxlib_init_font()を追加しました。
////フォントを作成する。
//NK_API struct nk_user_font* nk_dxlibfont_create(const char* FontName, int Size) {
//	//構造体のメモリを確保する。
//	struct nk_user_font* font = (struct nk_user_font*)calloc(1, sizeof(struct nk_user_font));
//	if(!font) { DIE(); }
//	//フォントハンドルを作成する。
//	int FontHandle = CreateFontToHandle(FontName, Size, 0);
//	if(FontHandle == -1) { DIE(); }
//	//nk_user_font構造体のフィールドを格納する。
//	font->userdata = nk_handle_id(FontHandle);
//	font->height   = GetFontSizeToHandle(FontHandle);	//Sizeをそのまま格納しても同じはずだが、もしDxLib内部の処理で違うフォントサイズが選択された場合のために、明示的にフォントサイズを取得する事にした。
//	font->width    = nk_dxlibfont_get_text_width;
//	return font;
//}
///*--------------------------------------------------------------------------*/
////フォントを削除する。
//NK_API void nk_dxlibfont_del(struct nk_user_font* font/*NULL可*/) {
//	//引数がNULLでなければ…
//	if(font) {
//		//フォントハンドルを削除する。
//		int FontHandle = font->userdata.id;
//		if(DeleteFontToHandle(FontHandle)) { DIE(); }
//		//構造体のメモリを解放する。
//		free(font);
//	}
//}
//↓2016/10/30変更:nk_dxlibfont_create()とnk_dxlibfont_del()を削除し、nk_dxlib_init_font()を追加しました。
///*--------------------------------------------------------------------------*/
//フォントを初期化する。
NK_API void nk_dxlib_init_font(struct nk_user_font* font, int FontHandle) {
	//nk_user_font構造体のフィールドを格納する。
	memset(font, 0, sizeof(struct nk_user_font));
	font->userdata = nk_handle_id(FontHandle);
	font->height   = GetFontSizeToHandle(FontHandle);
	font->width    = nk_dxlibfont_get_text_width;
}
//}}2016/10/30変更:nk_dxlibfont_create()とnk_dxlibfont_del()を削除し、nk_dxlib_init_font()を追加しました。
/*--------------------------------------------------------------------------*/
NK_INTERN void* nk_dxlib_plugin_alloc(nk_handle userdata, void* old, nk_size size) {
//誤り	return realloc(old, size);	←←←■重要■こう書いてはいけない事に注意せよ。old引数はヒントでありこのメモリブロックが直接reallocされる事をNuklearは想定していない(少なくともリビジョン01eb4f8時点では)。詳細は'nuklear.h'のnk_malloc(),及び,nk_buffer_realloc()の実装を参照せよ。
	return malloc(size);
      //       ~~~~~~~~~~~~実際には'GC_malloc(size)'又は'GC_debug_malloc(size,GC_EXTRA_PARAMS)'に展開される。ちゃんとGC_malloc,又は,GC_debug_mallocを呼び出すコードが生成されている事を、デバッガの混合モードで確認しました。
}
/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
NK_INTERN void nk_dxlib_plugin_free(nk_handle userdata, void* ptr) {
	free(ptr);
      //~~~~~~~~~実際には'GC_free(p)'又は'GC_debug_free(p)'に展開される。ちゃんとGC_free,又は,GC_debug_freeを呼び出すコードが生成されている事を、デバッガの混合モードで確認しました。
}
/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
//ライブラリを初期化する。
//{{2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//NK_API struct nk_context* nk_dxlib_init(ST_CbkQue* pCbkQue, int pri, int width, int height) {
//↓2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//NK_API struct nk_context* nk_dxlib_init() {
//↓2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
NK_API struct nk_context* nk_dxlib_new() {
	//構造体のメモリを確保する。
	struct nk_dxlib* dxlib = (struct nk_dxlib*)calloc(1, sizeof(struct nk_dxlib));
	if(!dxlib) { DIE(); }
//}}2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
//}}2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//{{2016/11/01削除:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//	//レンダーターゲットの情報を格納する。
//	dxlib.pCbkQue = pCbkQue;
//	dxlib.pri     = pri;
//	dxlib.width   = width;
//	dxlib.height  = height;
//}}2016/11/01削除:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//{{2016/10/30変更:nk_dxlibfont_create()とnk_dxlibfont_del()を削除し、nk_dxlib_init_font()を追加しました。
//	//デフォルトフォントを作成する。
//	dxlib.font = nk_dxlibfont_create("Arial", 14);	//調整可
//↓2016/10/30変更:nk_dxlibfont_create()とnk_dxlibfont_del()を削除し、nk_dxlib_init_font()を追加しました。
	//デフォルトフォントを初期化する。
	{
		//デフォルトフォント用のフォントハンドルを作成する。
		int FontCacheCharNum = GetFontCacheCharNum();					//フォントキャッシュでキャッシュできる文字数を退避する。
		if(FontCacheCharNum == -1) { DIE(); }
		if(SetFontCacheCharNum(128/*調整可*/)) { DIE(); }				//フォントキャッシュでキャッシュできる文字数を設定する。フォントキャッシュの容量を節約するためにこうしました。DxLibのデフォルトでは2024文字(DxLibMakeTest/DxFont.h参照)ですが、Arialフォントは英語フォントなのでもっと少なくて済むからです。
		int FontHandle = CreateFontToHandle("Arial"/*調整可*/, 14/*調整可*/, 0);	//デフォルトフォント用のフォントハンドルを作成する。
		if(SetFontCacheCharNum(FontCacheCharNum)) { DIE(); }	//忘れないで!!		//フォントキャッシュでキャッシュできる文字数を復帰する。
		if(FontHandle == -1) { DIE(); }
		//デフォルトフォントを初期化する。
//{{2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
//		nk_dxlib_init_font(&dxlib.font, FontHandle);
//↓2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
		nk_dxlib_init_font(&dxlib->font, FontHandle);
//}}2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
	}
//}}2016/10/30変更:nk_dxlibfont_create()とnk_dxlibfont_del()を削除し、nk_dxlib_init_font()を追加しました。
	//コンテキストを初期化する。
	{
		struct nk_allocator alloc;
		memset(&alloc, 0, sizeof alloc);
		alloc.alloc = nk_dxlib_plugin_alloc;
		alloc.free  = nk_dxlib_plugin_free;
//{{2016/10/30変更:nk_dxlibfont_create()とnk_dxlibfont_del()を削除し、nk_dxlib_init_font()を追加しました。
//		nk_init(&dxlib.ctx, &alloc, dxlib.font);
//↓2016/10/30変更:nk_dxlibfont_create()とnk_dxlibfont_del()を削除し、nk_dxlib_init_font()を追加しました。
//		nk_init(&dxlib.ctx, &alloc, &dxlib.font);
//↓2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
		nk_init(&dxlib->ctx, &alloc, &dxlib->font);
//}}2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
	}
	//デフォルトスタイルを設定する。
	{
		static const unsigned char TBL_ColTbl[][(1+4/*rgba*/)]={		//□DEFAULT		//□WHITE		//□RED			//□BLUE		//□DARK
			{NK_COLOR_TEXT,				255,255,255,255},	//175,175,175,255	// 70, 70, 70,255	//190,190,190,255	// 20, 20, 20,255	//210,210,210,255
			{NK_COLOR_WINDOW,			 45, 45, 45,192},	// 45, 45, 45,255	//175,175,175,255	// 30, 33, 40,215	//202,212,214,215	// 57, 67, 71,215
			{NK_COLOR_HEADER,			 40, 40, 40,224},	// 40, 40, 40,255	//175,175,175,255	//181, 45, 69,220	//137,182,224,220	// 51, 51, 56,220
		//	{NK_COLOR_BORDER,			 65, 65, 65,255},	// 65, 65, 65,255	//  0,  0,  0,255	// 51, 55, 67,255	//140,159,173,255	// 46, 46, 46,255
			{NK_COLOR_BUTTON,			 50, 50, 50,128},	// 50, 50, 50,255	//185,185,185,255	//181, 45, 69,255	//137,182,224,255	// 48, 83,111,255
		//	{NK_COLOR_BUTTON_HOVER,			 40, 40, 40,255},	// 40, 40, 40,255	//170,170,170,255	//190, 50, 70,255	//142,187,229,255	// 58, 93,121,255
		//	{NK_COLOR_BUTTON_ACTIVE,		 35, 35, 35,255},	// 35, 35, 35,255	//160,160,160,255	//195, 55, 75,255	//147,192,234,255	// 63, 98,126,255
			{NK_COLOR_TOGGLE,			100,100,100,128},	//100,100,100,255	//150,150,150,255	// 51, 55, 67,255	//177,210,210,255	// 50, 58, 61,255
		//	{NK_COLOR_TOGGLE_HOVER,			120,120,120,255},	//120,120,120,255	//120,120,120,255	// 45, 60, 60,255	//182,215,215,255	// 45, 53, 56,255
		//	{NK_COLOR_TOGGLE_CURSOR,		 45, 45, 45,255},	// 45, 45, 45,255	//175,175,175,255	//181, 45, 69,255	//137,182,224,255	// 48, 83,111,255
			{NK_COLOR_SELECT,			 45, 45, 45,128},	// 45, 45, 45,255	//190,190,190,255	// 51, 55, 67,255	//177,210,210,255	// 57, 67, 61,255
		//	{NK_COLOR_SELECT_ACTIVE,		 35, 35, 35,255},	// 35, 35, 35,255	//175,175,175,255	//181, 45, 69,255	//137,182,224,255	// 48, 83,111,255
			{NK_COLOR_SLIDER,			 38, 38, 38,128},	// 38, 38, 38,255	//190,190,190,255	// 51, 55, 67,255	//177,210,210,255	// 50, 58, 61,255
			{NK_COLOR_SLIDER_CURSOR,		100,100,100,255},	//100,100,100,255	// 80, 80, 80,255	//181, 45, 69,255	//137,182,224,245	// 48, 83,111,245
		//	{NK_COLOR_SLIDER_CURSOR_HOVER,		120,120,120,255},	//120,120,120,255	// 70, 70, 70,255	//186, 50, 74,255	//142,188,229,255	// 53, 88,116,255
		//	{NK_COLOR_SLIDER_CURSOR_ACTIVE,		150,150,150,255},	//150,150,150,255	// 60, 60, 60,255	//191, 55, 79,255	//147,193,234,255	// 58, 93,121,255
			{NK_COLOR_PROPERTY,			 38, 38, 38,128},	// 38, 38, 38,255	//175,175,175,255	// 51, 55, 67,255	//210,210,210,255	// 50, 58, 61,255
			{NK_COLOR_EDIT,				 38, 38, 38,128},	// 38, 38, 38,255	//150,150,150,255	// 51, 55, 67,225	//210,210,210,225	// 50, 58, 61,225
		//	{NK_COLOR_EDIT_CURSOR,			175,175,175,255},	//175,175,175,255	//  0,  0,  0,255	//190,190,190,255	// 20, 20, 20,255	//210,210,210,255
			{NK_COLOR_COMBO,			 45, 45, 45,128},	// 45, 45, 45,255	//175,175,175,255	// 51, 55, 67,255	//210,210,210,255	// 50, 58, 61,255
			{NK_COLOR_CHART,			120,120,120,128},	//120,120,120,255	//160,160,160,255	// 51, 55, 67,255	//210,210,210,255	// 50, 58, 61,255
		//	{NK_COLOR_CHART_COLOR,			 45, 45, 45,255},	// 45, 45, 45,255	// 45, 45, 45,255	//170, 40, 60,255	//137,182,224,255	// 48, 83,111,255
		//	{NK_COLOR_CHART_COLOR_HIGHLIGHT,	255, 0,  0, 255},	//255, 0,  0, 255	//255,  0,  0,255	//255,  0,  0,255	//255,  0,  0,255	//255,  0,  0,255
			{NK_COLOR_SCROLLBAR,			 40, 40, 40,128},	// 40, 40, 40,255	//180,180,180,255	// 30, 33, 40,255	//190,200,200,255	// 50, 58, 61,255
			{NK_COLOR_SCROLLBAR_CURSOR,		100,100,100,128},	//100,100,100,255	//140,140,140,255	// 64, 84, 95,255	// 64, 84, 95,255	// 48, 83,111,255
		//	{NK_COLOR_SCROLLBAR_CURSOR_HOVER,	120,120,120,255},	//120,120,120,255	//150,150,150,255	// 70, 90,100,255	// 70, 90,100,255	// 53, 88,116,255
		//	{NK_COLOR_SCROLLBAR_CURSOR_ACTIVE,	150,150,150,255},	//150,150,150,255	//160,160,160,255	// 75, 95,105,255	// 75, 95,105,255	// 58, 93,121,255
			{NK_COLOR_TAB_HEADER,			 40, 40, 40,128},	// 40, 40, 40,255	//180,180,180,255	//181, 45, 69,220	//156,193,220,255	// 48, 83,111,255
		};
		struct nk_color table[NK_COLOR_COUNT];
		int i;
		//デフォルトカラースタイルを取得する。
		for(i = 0; i < NK_COLOR_COUNT; i++) { table[i] = nk_default_color_style[i]; }
		//TBL_ColTbl[]で指定されたカラースタイルを変更する。
		for(i = 0; i < ARRAY_SIZE(TBL_ColTbl); i++) { table[TBL_ColTbl[i][0]] = nk_rgba_bv(&TBL_ColTbl[i][1/*rgba*/]); }
		//デフォルトスタイルを設定する。
//{{2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
//		nk_style_from_table(&dxlib.ctx, table);
//↓2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
		nk_style_from_table(&dxlib->ctx, table);
//}}2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
	}
//{{2016/11/02追加:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
	//前回nk_dxlib_render()が呼び出された時刻の初期値を、現在時刻とする。
	dxlib->t0 = GetNowCount();
//}}2016/11/02追加:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
//{{2016/11/17追加:nk_dxlib_new()に、ポップアップの枠が表示されない問題を暫定的に回避する処理を追加しました。
	// * Thu Nov 17 21:56:29 JST 2016 Naoyuki Sawa
	// - nk_dxlib_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)を提出しましたが、まだ採用されていないので、それまでここで明示的に初期化しておく事にします。
	//   プルリクエストが採用されたら、この処理は不要になるので、削除して下さい。
	dxlib->ctx.style.window.popup_border_color = dxlib->ctx.style.window.border_color;
	dxlib->ctx.style.window.popup_border       = dxlib->ctx.style.window.border;
//}}2016/11/17追加:nk_dxlib_new()に、ポップアップの枠が表示されない問題を暫定的に回避する処理を追加しました。
//{{2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
//	return &dxlib.ctx;
//↓2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
	return &dxlib->ctx;
//}}2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
}
/*--------------------------------------------------------------------------*/
//ライブラリを終了する。
//{{2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
//NK_API void nk_dxlib_free() {
//	//コンテキストを終了する。
//	nk_free(&dxlib.ctx);
////{{2016/10/30変更:nk_dxlibfont_create()とnk_dxlibfont_del()を削除し、nk_dxlib_init_font()を追加しました。
////	//デフォルトフォントを削除する。
////	nk_dxlibfont_del(dxlib.font);
////↓2016/10/30変更:nk_dxlibfont_create()とnk_dxlibfont_del()を削除し、nk_dxlib_init_font()を追加しました。
//	//デフォルトフォントを削除する。
//	{
//		//デフォルトフォント用のフォントハンドルを削除する。
//		int FontHandle = dxlib.font.userdata.id;
//		if(DeleteFontToHandle(FontHandle)) { DIE(); }
//	}
////}}2016/10/30変更:nk_dxlibfont_create()とnk_dxlibfont_del()を削除し、nk_dxlib_init_font()を追加しました。
//}
//↓2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
NK_API void nk_dxlib_free(struct nk_context* ctx) {
	struct nk_dxlib* dxlib = CONTAINING_RECORD(ctx, struct nk_dxlib, ctx);
	//コンテキストを終了する。
	nk_free(&dxlib->ctx);
	//デフォルトフォントを削除する。
	{
		//デフォルトフォント用のフォントハンドルを削除する。
		int FontHandle = dxlib->font.userdata.id;
		if(DeleteFontToHandle(FontHandle)) { DIE(); }
	}
	//構造体のメモリを解放する。
	free(dxlib);
}
//}}2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
/*--------------------------------------------------------------------------*/
//{{2016/10/29削除:nk_dxlib_set_font()を削除しました。
////フォントを設定する。
//NK_API void nk_dxlib_set_font(struct nk_user_font* font) {
//	nk_style_set_font(&dxlib.ctx, font);
//}
//}}2016/10/29削除:nk_dxlib_set_font()を削除しました。
/*--------------------------------------------------------------------------*/
//イベントを処理する。
//{{2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
//NK_API int nk_dxlib_handle_event(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
//↓2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
NK_API int nk_dxlib_handle_event(struct nk_context* ctx, HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
	struct nk_dxlib* dxlib = CONTAINING_RECORD(ctx, struct nk_dxlib, ctx);
//}}2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
	switch(uMsg) {
	case WM_KEYDOWN:
	case WM_KEYUP:
	case WM_SYSKEYDOWN:
	case WM_SYSKEYUP:
		{
			static const int TBL_KeyMap[][3/*vk,(ctrl==0),(ctrl==1)*/]={
			{VK_SHIFT	,NK_KEY_SHIFT		,NK_KEY_SHIFT		},
			{VK_LSHIFT	,NK_KEY_SHIFT		,NK_KEY_SHIFT		},
			{VK_RSHIFT	,NK_KEY_SHIFT		,NK_KEY_SHIFT		},
			{VK_CONTROL	,NK_KEY_CTRL		,NK_KEY_CTRL		},
			{VK_LCONTROL	,NK_KEY_CTRL		,NK_KEY_CTRL		},
			{VK_RCONTROL	,NK_KEY_CTRL		,NK_KEY_CTRL		},
			{VK_DELETE	,NK_KEY_DEL		,NK_KEY_DEL		},
			{VK_RETURN	,NK_KEY_ENTER		,NK_KEY_ENTER		},
			{VK_TAB		,NK_KEY_TAB		,NK_KEY_TAB		},
			{VK_BACK	,NK_KEY_BACKSPACE	,NK_KEY_BACKSPACE	},
			{VK_UP		,NK_KEY_UP		,NK_KEY_UP		},
			{VK_DOWN	,NK_KEY_DOWN		,NK_KEY_DOWN		},
			{VK_LEFT	,NK_KEY_LEFT		,NK_KEY_TEXT_WORD_LEFT	},
			{VK_RIGHT	,NK_KEY_RIGHT		,NK_KEY_TEXT_WORD_RIGHT	},
			{VK_HOME	,NK_KEY_SCROLL_START	,NK_KEY_SCROLL_START	},	//追加:NK_KEY_TEXT_START
			{VK_END		,NK_KEY_SCROLL_END	,NK_KEY_SCROLL_END	},	//追加:NK_KEY_TEXT_END
			{VK_NEXT	,NK_KEY_SCROLL_DOWN	,NK_KEY_SCROLL_DOWN	},
			{VK_PRIOR	,NK_KEY_SCROLL_UP	,NK_KEY_SCROLL_UP	},
			{'C'		,-1			,NK_KEY_COPY		},
			{'X'		,-1			,NK_KEY_CUT		},
			{'V'		,-1			,NK_KEY_PASTE		},
			{'Z'		,-1			,NK_KEY_TEXT_UNDO	},
			{'R'		,-1			,NK_KEY_TEXT_REDO	}};
			int down = !(lParam & (1<<31));	//オリジナル版のNuklearの'nuklear_gdi.h'はこの部分のTrue/Falseが逆であるバグが有るようだ(リビジョン4020b1b時点)。このフラグはNuklearの内部であまり利用されていないようなのでバグが顕在化していないのだと思う。	//{{2016/11/17コメント追記:2016/11/16にプルリクエスト(https://github.com/vurtun/nuklear/pull/284)を提出しました。プルリクエストが採用されたらオリジナル版のNuklearも直ると思います。}}
			int ctrl = !!(GetKeyState(VK_CONTROL) & (1<<15));
			int i;
			for(i = 0; i < ARRAY_SIZE(TBL_KeyMap); i++) {
				if(TBL_KeyMap[i][0/*vk*/] == (int)wParam) {
					int key = TBL_KeyMap[i][1 + ctrl];
//{{2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
//					if(key != -1) { nk_input_key(&dxlib.ctx, (enum nk_keys)key, down); }
//					if(wParam == VK_HOME) { nk_input_key(&dxlib.ctx, NK_KEY_TEXT_START, down); }	//追加
//					if(wParam == VK_END)  { nk_input_key(&dxlib.ctx, NK_KEY_TEXT_END,   down); }	//追加
//↓2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
					if(key != -1) { nk_input_key(&dxlib->ctx, (enum nk_keys)key, down); }
					if(wParam == VK_HOME) { nk_input_key(&dxlib->ctx, NK_KEY_TEXT_START, down); }	//追加
					if(wParam == VK_END)  { nk_input_key(&dxlib->ctx, NK_KEY_TEXT_END,   down); }	//追加
//}}2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
					return 1;
				}
			}
		}
		break;
	case WM_CHAR:
		if((wParam >= 0x20) && (wParam <= 0x7F)) {
//{{2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
//			nk_input_char(&dxlib.ctx, wParam);	//現在の実装では、マルチバイト文字が入力出来ません。マルチバイト文字の入力に対応するには、複数回のWM_CHARをまとめてマルチバイト文字を構成し、Unicodeに変換してnk_input_unicode()を呼び出す必要が有ります。
//↓2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
			nk_input_char(&dxlib->ctx, wParam);	//現在の実装では、マルチバイト文字が入力出来ません。マルチバイト文字の入力に対応するには、複数回のWM_CHARをまとめてマルチバイト文字を構成し、Unicodeに変換してnk_input_unicode()を呼び出す必要が有ります。
//}}2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
			return 1;
		}
		break;
	case WM_MOUSEMOVE:
//{{2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
//		nk_input_motion(&dxlib.ctx, (short)LOWORD(lParam), (short)HIWORD(lParam));
//↓2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
		nk_input_motion(&dxlib->ctx, (short)LOWORD(lParam), (short)HIWORD(lParam));
//}}2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
		return 1;
	case WM_MOUSEWHEEL:
//{{2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
//		nk_input_scroll(&dxlib.ctx, (float)(short)HIWORD(wParam) / WHEEL_DELTA);
//↓2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
		nk_input_scroll(&dxlib->ctx, (float)(short)HIWORD(wParam) / WHEEL_DELTA);
//}}2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
		return 1;
	case WM_LBUTTONDOWN:
//{{2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
//		nk_input_button(&dxlib.ctx, NK_BUTTON_LEFT, (short)LOWORD(lParam), (short)HIWORD(lParam), 1);
//↓2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
		nk_input_button(&dxlib->ctx, NK_BUTTON_LEFT, (short)LOWORD(lParam), (short)HIWORD(lParam), 1);
//}}2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
		SetCapture(hWnd);
		return 1;
	case WM_LBUTTONUP:
//{{2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
//		nk_input_button(&dxlib.ctx, NK_BUTTON_LEFT, (short)LOWORD(lParam), (short)HIWORD(lParam), 0);
//↓2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
		nk_input_button(&dxlib->ctx, NK_BUTTON_LEFT, (short)LOWORD(lParam), (short)HIWORD(lParam), 0);
//}}2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
		ReleaseCapture();
		return 1;
	case WM_RBUTTONDOWN:
//{{2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
//		nk_input_button(&dxlib.ctx, NK_BUTTON_RIGHT, (short)LOWORD(lParam), (short)HIWORD(lParam), 1);
//↓2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
		nk_input_button(&dxlib->ctx, NK_BUTTON_RIGHT, (short)LOWORD(lParam), (short)HIWORD(lParam), 1);
//}}2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
		SetCapture(hWnd);
		return 1;
	case WM_RBUTTONUP:
//{{2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
//		nk_input_button(&dxlib.ctx, NK_BUTTON_RIGHT, (short)LOWORD(lParam), (short)HIWORD(lParam), 0);
//↓2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
		nk_input_button(&dxlib->ctx, NK_BUTTON_RIGHT, (short)LOWORD(lParam), (short)HIWORD(lParam), 0);
//}}2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
		ReleaseCapture();
		return 1;
	case WM_MBUTTONDOWN:
//{{2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
//		nk_input_button(&dxlib.ctx, NK_BUTTON_MIDDLE, (short)LOWORD(lParam), (short)HIWORD(lParam), 1);
//↓2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
		nk_input_button(&dxlib->ctx, NK_BUTTON_MIDDLE, (short)LOWORD(lParam), (short)HIWORD(lParam), 1);
//}}2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
		SetCapture(hWnd);
		return 1;
	case WM_MBUTTONUP:
//{{2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
//		nk_input_button(&dxlib.ctx, NK_BUTTON_MIDDLE, (short)LOWORD(lParam), (short)HIWORD(lParam), 0);
//↓2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
		nk_input_button(&dxlib->ctx, NK_BUTTON_MIDDLE, (short)LOWORD(lParam), (short)HIWORD(lParam), 0);
//}}2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
		ReleaseCapture();
		return 1;
	}
	return 0;
}
/*--------------------------------------------------------------------------*/
//現在のコンテキストを描画する。
//{{2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//NK_API void nk_dxlib_render() {
//↓2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//NK_API void nk_dxlib_render(ST_CbkQue* pCbkQue, int pri) {
//↓2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
NK_API void nk_dxlib_render(struct nk_context* ctx, ST_CbkQue* pCbkQue, int pri) {
	struct nk_dxlib* dxlib = CONTAINING_RECORD(ctx, struct nk_dxlib, ctx);
//}}2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
//{{2016/10/31追加:NK_WINDOW_SCROLL_AUTO_HIDEに対応しました。
	// * Mon Oct 31 21:38:12 JST 2016 Naoyuki Sawa
	// - NK_WINDOW_SCROLL_AUTO_HIDEに対応しました。
	//   詳細は、以下の通りです。
	// - これまでは、nk_begin()等にNK_WINDOW_SCROLL_AUTO_HIDEを指定しても、スクロールバーが消えていませんでした。
	//   原因は、コンテキストのdelta_time_secondsフィールドに、経過時間を設定していなかった事でした。
	//   コンテキストのdelta_time_secondsフィールドには、アプリケーション側で、経過時間を格納する必要が有りました。
	//   今回、nk_dxlib_render()をそのように修正したので、NK_WINDOW_SCROLL_AUTO_HIDEを指定すると、一定時間後にスクロールバーが消えるようになりました。
	// - 尚、2016/10/31時点のNuklear(リビジョン69b13a0)では、delta_time_secondsフィールドは、NK_WINDOW_SCROLL_AUTO_HIDEの用途にしか使用されていません。
	//   従って、もしNK_WINDOW_SCROLL_AUTO_HIDEに対応する必要が無ければ、アプリケーションがdelta_time_secondsフィールドに値を格納しなくても構いません。
	{
//{{2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
//		static int t0;
//		if(!t0) { t0 = GetNowCount(); }
//		int t1 = GetNowCount();
//		dxlib.ctx.delta_time_seconds = (t1 - t0) / 1000.0f;
//		t0 = t1;
//↓2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
		int t1 = GetNowCount();
		dxlib->ctx.delta_time_seconds = (t1 - dxlib->t0) / 1000.0f;
		dxlib->t0 = t1;
//}}2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
	}
//}}2016/10/31追加:NK_WINDOW_SCROLL_AUTO_HIDEに対応しました。
	{
		const struct nk_command* cmd;
		//描画可能領域を描画対象画面全体にする。
		// - もし、優先度priで描画を開始する時点で描画可能領域が狭められていても、一旦、描画可能領域を描画対象画面全体にして描画する事にしました。
		CbkQue_SetDrawAreaFull(pCbkQue, pri);
		//現在のコンテキストの、各コマンドを描画する。
//{{2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
//		nk_foreach(cmd, &dxlib.ctx) {
//↓2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
		nk_foreach(cmd, &dxlib->ctx) {
//}}2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
			switch(cmd->type) {
			default:
				{
					syslog(LOG_NOTICE, "nk_dxlib_render: unknown nk_command_type(%d)", cmd->type);
				}
				break;
			case NK_COMMAND_NOP:
				{
					/** no job **/
				}
				break;
			case NK_COMMAND_SCISSOR:
				{
					const struct nk_command_scissor* p = (const struct nk_command_scissor*)cmd;
//{{2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//					nk_dxlib_scissor(
//↓2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
					nk_dxlib_scissor(pCbkQue, pri,
//}}2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
						p->x,
						p->y,
						p->w,
						p->h);
				}
				break;
			case NK_COMMAND_LINE:
				{
					const struct nk_command_line* p = (const struct nk_command_line*)cmd;
//{{2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//					nk_dxlib_draw_line(
//↓2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
					nk_dxlib_draw_line(pCbkQue, pri,
//}}2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
						p->begin.x,
						p->begin.y,
						p->end.x,
						p->end.y,
						p->line_thickness,
						p->color);
				}
				break;
			case NK_COMMAND_CURVE:
				{
					const struct nk_command_curve* p = (const struct nk_command_curve*)cmd;
//{{2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//					nk_dxlib_draw_curve(
//↓2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
					nk_dxlib_draw_curve(pCbkQue, pri,
//}}2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
						p->begin.x,
						p->begin.y,
						p->ctrl[0].x,
						p->ctrl[0].y,
						p->ctrl[1].x,
						p->ctrl[1].y,
						p->end.x,
						p->end.y,
						p->line_thickness,
						p->color);
				}
				break;
			case NK_COMMAND_RECT:
				{
					const struct nk_command_rect* p = (const struct nk_command_rect*)cmd;
//{{2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//					nk_dxlib_draw_rect(
//↓2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
					nk_dxlib_draw_rect(pCbkQue, pri,
//}}2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
						p->x,
						p->y,
						p->w,
						p->h,
						p->rounding,
						p->line_thickness,
						p->color);
				}
				break;
			case NK_COMMAND_RECT_FILLED:
				{
					const struct nk_command_rect_filled* p = (const struct nk_command_rect_filled*)cmd;
//{{2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//					nk_dxlib_draw_rect_filled(
//↓2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
					nk_dxlib_draw_rect_filled(pCbkQue, pri,
//}}2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
						p->x,
						p->y,
						p->w,
						p->h,
						p->rounding,
						p->color);
				}
				break;
			case NK_COMMAND_RECT_MULTI_COLOR:
				{
					const struct nk_command_rect_multi_color* p = (const struct nk_command_rect_multi_color*)cmd;
//{{2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//					nk_dxlib_draw_rect_multi_color(
//↓2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
					nk_dxlib_draw_rect_multi_color(pCbkQue, pri,
//}}2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
						p->x,
						p->y,
						p->w,
						p->h,
						p->left,	//{{2016/11/05コメント追記:nk_command_rect_multi_color構造体のフィールド名は間違っています。実際にはleft  =左上の色です。}}
						p->top,		//{{2016/11/05コメント追記:nk_command_rect_multi_color構造体のフィールド名は間違っています。実際にはtop   =右上の色です。}}
						p->bottom,	//{{2016/11/05コメント追記:nk_command_rect_multi_color構造体のフィールド名は間違っています。実際にはbottom=右下の色です。}}
						p->right);	//{{2016/11/05コメント追記:nk_command_rect_multi_color構造体のフィールド名は間違っています。実際にはright =左下の色です。}}
				}
				break;
			case NK_COMMAND_CIRCLE:
				{
					const struct nk_command_circle* p = (const struct nk_command_circle*)cmd;
//{{2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//					nk_dxlib_draw_circle(
//↓2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
					nk_dxlib_draw_circle(pCbkQue, pri,
//}}2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
						p->x,
						p->y,
						p->w,
						p->h,
						p->line_thickness,
						p->color);
				}
				break;
			case NK_COMMAND_CIRCLE_FILLED:
				{
					const struct nk_command_circle_filled* p = (const struct nk_command_circle_filled*)cmd;
//{{2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//					nk_dxlib_draw_circle_filled(
//↓2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
					nk_dxlib_draw_circle_filled(pCbkQue, pri,
//}}2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
						p->x,
						p->y,
						p->w,
						p->h,
						p->color);
				}
				break;
			case NK_COMMAND_ARC:
				{
					const struct nk_command_arc* p = (const struct nk_command_arc*)cmd;
//{{2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//					nk_dxlib_draw_arc(
//↓2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
					nk_dxlib_draw_arc(pCbkQue, pri,
//}}2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
						p->cx,
						p->cy,
						p->r,
						p->a[0],
						p->a[1],
						p->line_thickness,
						p->color);
				}
				break;
			case NK_COMMAND_ARC_FILLED:
				{
					const struct nk_command_arc_filled* p = (const struct nk_command_arc_filled*)cmd;
//{{2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//					nk_dxlib_draw_arc_filled(
//↓2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
					nk_dxlib_draw_arc_filled(pCbkQue, pri,
//}}2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
						p->cx,
						p->cy,
						p->r,
						p->a[0],
						p->a[1],
						p->color);
				}
				break;
			case NK_COMMAND_TRIANGLE:
				{
					const struct nk_command_triangle* p = (const struct nk_command_triangle*)cmd;
//{{2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//					nk_dxlib_draw_triangle(
//↓2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
					nk_dxlib_draw_triangle(pCbkQue, pri,
//}}2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
						p->a.x,
						p->a.y,
						p->b.x,
						p->b.y,
						p->c.x,
						p->c.y,
						p->line_thickness,
						p->color);
				}
				break;
			case NK_COMMAND_TRIANGLE_FILLED:
				{
					const struct nk_command_triangle_filled* p = (const struct nk_command_triangle_filled*)cmd;
//{{2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//					nk_dxlib_draw_triangle_filled(
//↓2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
					nk_dxlib_draw_triangle_filled(pCbkQue, pri,
//}}2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
						p->a.x,
						p->a.y,
						p->b.x,
						p->b.y,
						p->c.x,
						p->c.y,
						p->color);
				}
				break;
			case NK_COMMAND_POLYGON:
				{
					const struct nk_command_polygon* p = (const struct nk_command_polygon*)cmd;
//{{2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//					nk_dxlib_draw_polygon(
//↓2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
					nk_dxlib_draw_polygon(pCbkQue, pri,
//}}2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
						p->points,
						p->point_count,
						p->line_thickness,
						p->color);
				}
				break;
			case NK_COMMAND_POLYGON_FILLED:
				{
					const struct nk_command_polygon_filled* p = (const struct nk_command_polygon_filled*)cmd;
//{{2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//					nk_dxlib_draw_polygon_filled(
//↓2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
					nk_dxlib_draw_polygon_filled(pCbkQue, pri,
//}}2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
						p->points,
						p->point_count,
						p->color);
				}
				break;
			case NK_COMMAND_POLYLINE:
				{
					const struct nk_command_polyline* p = (const struct nk_command_polyline*)cmd;
//{{2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//					nk_dxlib_draw_polyline(
//↓2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
					nk_dxlib_draw_polyline(pCbkQue, pri,
//}}2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
						p->points,
						p->point_count,
						p->line_thickness,
						p->color);
				}
				break;
			case NK_COMMAND_TEXT:
				{
					const struct nk_command_text* p = (const struct nk_command_text*)cmd;
//{{2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//					nk_dxlib_draw_text(
//↓2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
					nk_dxlib_draw_text(pCbkQue, pri,
//}}2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
						p->x,
						p->y,
						p->w,
						p->h,
						p->string,
						p->length,
						p->font,
						p->background,
						p->foreground);
				}
				break;
			case NK_COMMAND_IMAGE:
				{
					const struct nk_command_image* p = (const struct nk_command_image*)cmd;
//{{2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//					nk_dxlib_draw_image(
//↓2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
					nk_dxlib_draw_image(pCbkQue, pri,
//}}2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
						p->x,
						p->y,
						p->w,
						p->h,
						&p->img,
						p->col);
				}
				break;
			}
		}
		//描画可能領域を描画対象画面全体にする。
		// - もし、NK_COMMAND_SCISSORによって描画可能領域が狭められていた場合のために、確実に、描画可能領域を描画対象画面全体に戻す事にしました。
		CbkQue_SetDrawAreaFull(pCbkQue, pri);
	}
	//現在のコンテキストの、コマンドをクリアする。
//{{2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
//	nk_clear(&dxlib.ctx);
//↓2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
	nk_clear(&dxlib->ctx);
//}}2016/11/02変更:NuklearのDxLib用レンダリングバックエンドの、複数インスタンスを作成出来るようにしました。
}
/*--------------------------------------------------------------------------*/
//{{2016/11/04追加:nk_dxlib_load_cursor()を追加しました。
//カーソルをロードする。
// - 'nk_custom_cursor_data.gif'を、アプリケーションのグラフィック素材に追加して、そのスプライト番号を、当関数の引数iSprNo_NK_CUSTOM_CURSOR_DATAに指定して下さい。
//   当関数は、'nk_custom_cursor_data.gif'の座標に決め打ちなので、他のカーソル画像をロードする事は出来ません。
//   もし、アプリケーション独自のカーソル画像を使用する必要が有る場合は、アプリケーション側のソース内で、当関数と同様のカーソルロード処理を書いて下さい。
NK_API void nk_dxlib_load_cursor(struct nk_context* ctx, int iSprNo_NK_CUSTOM_CURSOR_DATA) {
	//nuklear.hのnk_font_atlas_bake()を元にして作成しました。
	static const unsigned char nk_cursor_data[/*NK_CURSOR_COUNT*/][3/*Pos,Size,Offset*/][2/*x,y*/]={
	{{ 0, 3},{12,19},{ 0, 0}},	//NK_CURSOR_ARROW
	{{13, 0},{ 7,16},{ 4, 8}},	//NK_CURSOR_TEXT
	{{31, 0},{23,23},{11,11}},	//NK_CURSOR_MOVE
	{{21, 0},{ 9,23},{ 5,11}},	//NK_CURSOR_RESIZE_VERTICAL
	{{55,18},{23, 9},{11, 5}},	//NK_CURSOR_RESIZE_HORIZONTAL
	{{73, 0},{17,17},{ 9, 9}},	//NK_CURSOR_RESIZE_TOP_LEFT_DOWN_RIGHT
	{{55, 0},{17,17},{ 9, 9}}};	//NK_CURSOR_RESIZE_TOP_RIGHT_DOWN_LEFT
	static_assert(((sizeof nk_cursor_data)/(sizeof nk_cursor_data[0])) == NK_CURSOR_COUNT, "nk_cursor_data[]の要素数が不正です。");
	static struct nk_cursor cursors[NK_CURSOR_COUNT]; /* カーソル定義の配列、ＳＴＡＴＩＣです！ */	//Nuklearのコンテキストはカーソル定義の配列をコピーせずにポインタで参照するので、staticとする必要が有る。複数インスタンスを作成した場合も、全てのインスタンスで共用出来ます。
	//カーソル定義の配列を初期化する。
	// - 当関数が複数回呼び出された場合(複数インスタンスに対してカーソルをロードした場合など)、カーソル定義の配列は共用するので、カーソル定義の配列を初期化する処理は最初の一回だけでも構わないのですが、実装を簡単にするために毎回初期化する事にしました。
	//   何度初期化しても結果は同じになりますし、リソースリークも発生しないし、また、当関数は頻繁に呼び出されるものではないので、多少無駄な処理を行っても性能の低下も問題とならないからです。
	//   ただし、上記は、アプリケーションが当関数を複数回呼び出す場合、iSprNo_NK_CUSTOM_CURSOR_DATA引数に同じ値を指定する事を前提としています。
	//   実際には、iSprNo_NK_CUSTOM_CURSOR_DATA引数には'nk_custom_cursor_data.gif'のスプライト番号以外を指定する事は無いはずだし、一つのアプリケーション内で異なるカーソルセットを使用する事も無いと思うので問題無いはずですが、万一この制約が問題になった場合はカーソル定義の配列を当関数内のstatic変数ではなくnk_dxlib構造体のフィールドに変更して、カーソル定義の配列をコンテキスト毎に保持するように変更して下さい。
	int i;
	for(i = 0; i < NK_CURSOR_COUNT; ++i) {
		int PosX		= nk_cursor_data[i][0][0];
		int PosY		= nk_cursor_data[i][0][1];
		int SizeX		= nk_cursor_data[i][1][0];
		int SizeY		= nk_cursor_data[i][1][1];
		int OffsetX		= nk_cursor_data[i][2][0];
		int OffsetY		= nk_cursor_data[i][2][1];
		cursors[i].img		= nk_subimage_id(iSprNo_NK_CUSTOM_CURSOR_DATA, SizeX, SizeY, nk_rect(PosX, PosY, SizeX, SizeY));
		cursors[i].size		= nk_vec2(SizeX, SizeY);
		cursors[i].offset	= nk_vec2(OffsetX, OffsetY);
	}
	nk_style_load_all_cursors(ctx, cursors);	//nk_style_load_all_cursors()が、nk_style_show_cursor()の効果も含んでいます。
}
//}}2016/11/04追加:nk_dxlib_load_cursor()を追加しました。
/****************************************************************************
 *	ローカル関数
 ****************************************************************************/
static int convert_color(struct nk_color col) {
	return RGBA_MAKE(col.r, col.g, col.b, col.a);
}
/*--------------------------------------------------------------------------*/
//{{2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//static void nk_dxlib_scissor(int x, int y, int w, int h) {
//↓2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
static void nk_dxlib_scissor(ST_CbkQue* pCbkQue, int pri, int x, int y, int w, int h) {
//}}2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//{{2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//	CbkQue_SetDrawArea(dxlib.pCbkQue, dxlib.pri,
//↓2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
	CbkQue_SetDrawArea(pCbkQue, pri,
//}}2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
		x,
		y,
		x + w,
		y + h);
}
/*--------------------------------------------------------------------------*/
//{{2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//static void nk_dxlib_draw_line(int x1, int y1, int x2, int y2, int line_thickness, struct nk_color col) {
//↓2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
static void nk_dxlib_draw_line(ST_CbkQue* pCbkQue, int pri, int x1, int y1, int x2, int y2, int line_thickness, struct nk_color col) {
//}}2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
	int rgba = convert_color(col);
//{{2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//	CbkQue_draw_line(dxlib.pCbkQue, dxlib.pri,
//↓2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
	CbkQue_draw_line(pCbkQue, pri,
//}}2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
		x1,
		y1,
		x2,
		y2,
		line_thickness,
		rgba);
}
/*--------------------------------------------------------------------------*/
//本当はベジェ曲線を描く必要が有るのですが、現在の実装では、始点(x1,y1),制御点(x2,y2),制御点(x3,y3),終点(x4,y4)を直線で結んでいます。
//{{2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//static void nk_dxlib_draw_curve(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4, int line_thickness, struct nk_color col) {
//↓2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
static void nk_dxlib_draw_curve(ST_CbkQue* pCbkQue, int pri, int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4, int line_thickness, struct nk_color col) {
//}}2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
	int rgba = convert_color(col);
//{{2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//	CbkQue_draw_line(dxlib.pCbkQue, dxlib.pri,
//↓2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
	CbkQue_draw_line(pCbkQue, pri,
//}}2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
		x1,
		y1,
		x2,
		y2,
		line_thickness,
		rgba);
//{{2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//	CbkQue_draw_line(dxlib.pCbkQue, dxlib.pri,
//↓2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
	CbkQue_draw_line(pCbkQue, pri,
//}}2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
		x2,
		y2,
		x3,
		y3,
		line_thickness,
		rgba);
//{{2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//	CbkQue_draw_line(dxlib.pCbkQue, dxlib.pri,
//↓2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
	CbkQue_draw_line(pCbkQue, pri,
//}}2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
		x3,
		y3,
		x4,
		y4,
		line_thickness,
		rgba);
}
/*--------------------------------------------------------------------------*/
//現在の実装では、rounding引数とline_thickness引数を無視しています。
//DxLib自体にはDrawRoundRect()という関数が有るので、今後対応する事は可能だと思います。
//{{2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//static void nk_dxlib_draw_rect(int x, int y, int w, int h, int rounding, int line_thickness, struct nk_color col) {
//↓2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
static void nk_dxlib_draw_rect(ST_CbkQue* pCbkQue, int pri, int x, int y, int w, int h, int rounding, int line_thickness, struct nk_color col) {
//}}2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
	int rgba = convert_color(col);
//{{2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//	CbkQue_draw_box(dxlib.pCbkQue, dxlib.pri,
//↓2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
	CbkQue_draw_box(pCbkQue, pri,
//}}2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
		x,
		y,
		w,
		h,
		rgba);
}
/*--------------------------------------------------------------------------*/
//現在の実装では、rounding引数を無視しています。
//DxLib自体にはDrawRoundRect()という関数が有るので、今後対応する事は可能だと思います。
//{{2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//static void nk_dxlib_draw_rect_filled(int x, int y, int w, int h, int rounding, struct nk_color col) {
//↓2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
static void nk_dxlib_draw_rect_filled(ST_CbkQue* pCbkQue, int pri, int x, int y, int w, int h, int rounding, struct nk_color col) {
//}}2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
	int rgba = convert_color(col);
//{{2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//	CbkQue_draw_box_fill(dxlib.pCbkQue, dxlib.pri,
//↓2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
	CbkQue_draw_box_fill(pCbkQue, pri,
//}}2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
		x,
		y,
		w,
		h,
		rgba);
}
/*--------------------------------------------------------------------------*/
//{{2016/11/05変更:nk_dxlib_draw_rect_multi_color()を、仮実装から、本実装に変更しました。
////本当はグラデーションで塗り潰した矩形を描く必要が有るのですが、現在の実装では、単色で塗り潰した矩形を描いています。
////{{2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
////static void nk_dxlib_draw_rect_multi_color(int x, int y, int w, int h, struct nk_color left, struct nk_color top, struct nk_color bottom, struct nk_color right) {
////↓2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//static void nk_dxlib_draw_rect_multi_color(ST_CbkQue* pCbkQue, int pri, int x, int y, int w, int h, struct nk_color left, struct nk_color top, struct nk_color bottom, struct nk_color right) {
////}}2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
////{{2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
////	nk_dxlib_draw_rect_filled(
////↓2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//	nk_dxlib_draw_rect_filled(pCbkQue, pri,
////}}2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//		x,
//		y,
//		w,
//		h,
//		0,
//		left);
//}
//↓2016/11/05変更:nk_dxlib_draw_rect_multi_color()を、仮実装から、本実装に変更しました。
static void nk_dxlib_draw_rect_multi_color(ST_CbkQue* pCbkQue, int pri, int x, int y, int w, int h, struct nk_color col1, struct nk_color col2, struct nk_color col3, struct nk_color col4) {
	int rgba1 = convert_color(col1), rgba2 = convert_color(col2), rgba3 = convert_color(col3), rgba4 = convert_color(col4);
	CbkQue_draw_box_mc(pCbkQue, pri,
		x,
		y,
		w,
		h,
		rgba1,	//左上の色┐
		rgba2,	//右上の色├TriangleFanの並び
		rgba3,	//右下の色│
		rgba4);	//左下の色┘
}
//}}2016/11/05変更:nk_dxlib_draw_rect_multi_color()を、仮実装から、本実装に変更しました。
/*--------------------------------------------------------------------------*/
//現在の実装では、line_thickness引数を無視しています。
//{{2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//static void nk_dxlib_draw_circle(int x, int y, int w, int h, int line_thickness, struct nk_color col) {
//↓2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
static void nk_dxlib_draw_circle(ST_CbkQue* pCbkQue, int pri, int x, int y, int w, int h, int line_thickness, struct nk_color col) {
//}}2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
	int rgba = convert_color(col);
//{{2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//	CbkQue_draw_oval(dxlib.pCbkQue, dxlib.pri,
//↓2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
	CbkQue_draw_oval(pCbkQue, pri,
//}}2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
		x,
		y,
		w,
		h,
		rgba);
}
/*--------------------------------------------------------------------------*/
//{{2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//static void nk_dxlib_draw_circle_filled(int x, int y, int w, int h, struct nk_color col) {
//↓2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
static void nk_dxlib_draw_circle_filled(ST_CbkQue* pCbkQue, int pri, int x, int y, int w, int h, struct nk_color col) {
//}}2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
	int rgba = convert_color(col);
//{{2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//	CbkQue_draw_oval_fill(dxlib.pCbkQue, dxlib.pri,
//↓2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
	CbkQue_draw_oval_fill(pCbkQue, pri,
//}}2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
		x,
		y,
		w,
		h,
		rgba);
}
/*--------------------------------------------------------------------------*/
//本当は円弧を描く必要が有るのですが、現在の実装では、全円を描いています。
//{{2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//static void nk_dxlib_draw_arc(int cx, int cy, int r, float a1, float a2, int line_thickness, struct nk_color col) {
//↓2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
static void nk_dxlib_draw_arc(ST_CbkQue* pCbkQue, int pri, int cx, int cy, int r, float a1, float a2, int line_thickness, struct nk_color col) {
//}}2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//{{2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//	nk_dxlib_draw_circle(
//↓2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
	nk_dxlib_draw_circle(pCbkQue, pri,
//}}2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
		cx - r,
		cy - r,
		r << 1,
		r << 1,
		line_thickness,
		col);
}
/*--------------------------------------------------------------------------*/
//本当は円弧を描く必要が有るのですが、現在の実装では、全円を描いています。
//{{2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//static void nk_dxlib_draw_arc_filled(int cx, int cy, int r, float a1, float a2, struct nk_color col) {
//↓2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
static void nk_dxlib_draw_arc_filled(ST_CbkQue* pCbkQue, int pri, int cx, int cy, int r, float a1, float a2, struct nk_color col) {
//}}2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//{{2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//	nk_dxlib_draw_circle_filled(
//↓2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
	nk_dxlib_draw_circle_filled(pCbkQue, pri,
//}}2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
		cx - r,
		cy - r,
		r << 1,
		r << 1,
		col);
}
/*--------------------------------------------------------------------------*/
//{{2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//static void nk_dxlib_draw_triangle(int x1, int y1, int x2, int y2, int x3, int y3, int line_thickness, struct nk_color col) {
//↓2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
static void nk_dxlib_draw_triangle(ST_CbkQue* pCbkQue, int pri, int x1, int y1, int x2, int y2, int x3, int y3, int line_thickness, struct nk_color col) {
//}}2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
	struct nk_vec2i points[3] = {
		{ x1, y1 },
		{ x2, y2 },
		{ x3, y3 }
	};
//{{2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//	nk_dxlib_draw_polygon(
//↓2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
	nk_dxlib_draw_polygon(pCbkQue, pri,
//}}2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
		points,
		3,
		line_thickness,
		col);
}
/*--------------------------------------------------------------------------*/
//{{2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//static void nk_dxlib_draw_triangle_filled(int x1, int y1, int x2, int y2, int x3, int y3, struct nk_color col) {
//↓2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
static void nk_dxlib_draw_triangle_filled(ST_CbkQue* pCbkQue, int pri, int x1, int y1, int x2, int y2, int x3, int y3, struct nk_color col) {
//}}2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
	struct nk_vec2i points[3] = {
		{ x1, y1 },
		{ x2, y2 },
		{ x3, y3 }
	};
//{{2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//	nk_dxlib_draw_polygon_filled(
//↓2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
	nk_dxlib_draw_polygon_filled(pCbkQue, pri,
//}}2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
		points,
		3,
		col);
}
/*--------------------------------------------------------------------------*/
//現在の実装では、line_thickness引数を無視しています。
//{{2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//static void nk_dxlib_draw_polygon(const struct nk_vec2i* points, int point_count, int line_thickness, struct nk_color col) {
//↓2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
static void nk_dxlib_draw_polygon(ST_CbkQue* pCbkQue, int pri, const struct nk_vec2i* points, int point_count, int line_thickness, struct nk_color col) {
//}}2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
	int rgba = convert_color(col);
	int (*xy)[2/*x,y*/] = (int (*)[2])alloca(sizeof(int[2/*x,y*/]) * point_count);
	int i;
	for(i = 0; i < point_count; i++) {
		xy[i][0/*x*/] = points[i].x;
		xy[i][1/*y*/] = points[i].y;
	}
//{{2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//	CbkQue_draw_polygon(dxlib.pCbkQue, dxlib.pri,
//↓2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
	CbkQue_draw_polygon(pCbkQue, pri,
//}}2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
		xy,
		point_count,
		rgba);
}
/*--------------------------------------------------------------------------*/
//{{2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//static void nk_dxlib_draw_polygon_filled(const struct nk_vec2i* points, int point_count, struct nk_color col) {
//↓2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
static void nk_dxlib_draw_polygon_filled(ST_CbkQue* pCbkQue, int pri, const struct nk_vec2i* points, int point_count, struct nk_color col) {
//}}2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
	int rgba = convert_color(col);
	int (*xy)[2/*x,y*/] = (int (*)[2])alloca(sizeof(int[2/*x,y*/]) * point_count);
	int i;
	for(i = 0; i < point_count; i++) {
		xy[i][0/*x*/] = points[i].x;
		xy[i][1/*y*/] = points[i].y;
	}
//{{2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//	CbkQue_draw_polygon_fill(dxlib.pCbkQue, dxlib.pri,
//↓2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
	CbkQue_draw_polygon_fill(pCbkQue, pri,
//}}2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
		xy,
		point_count,
		rgba);
}
/*--------------------------------------------------------------------------*/
//{{2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//static void nk_dxlib_draw_polyline(const struct nk_vec2i* points, int point_count, int line_thickness, struct nk_color col) {
//↓2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
static void nk_dxlib_draw_polyline(ST_CbkQue* pCbkQue, int pri, const struct nk_vec2i* points, int point_count, int line_thickness, struct nk_color col) {
//}}2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
	int rgba = convert_color(col);
	int i;
	for(i = 0; i < (point_count - 1); i++) {
//{{2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//		CbkQue_draw_line(dxlib.pCbkQue, dxlib.pri,
//↓2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
		CbkQue_draw_line(pCbkQue, pri,
//}}2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
			points[i + 0].x,
			points[i + 0].y,
			points[i + 1].x,
			points[i + 1].y,
			line_thickness,
			rgba);
	}
}
/*--------------------------------------------------------------------------*/
//{{2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//static void nk_dxlib_draw_text(int x, int y, int w, int h, const char* string, int len, const struct nk_user_font* font, struct nk_color bg, struct nk_color fg) {
//↓2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
static void nk_dxlib_draw_text(ST_CbkQue* pCbkQue, int pri, int x, int y, int w, int h, const char* string, int len, const struct nk_user_font* font, struct nk_color bg, struct nk_color fg) {
//}}2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
	int bg_rgba = convert_color(bg), fg_rgba = convert_color(fg);
	int FontHandle = font->userdata.id;
#if 0
	//'nuklear-master/demo/～'の各レンダリングバックエンドのソースから推測するに、Nuklearの仕様上は常に文字列の背景を塗り潰すのが正しいようなのだが、
	//背景色が半透明の場合に背景色を塗り潰すと、ウインドウの背景と文字列の背景で半透明色が二重に塗られてしまい、見た目に不自然な描画結果になる。
	//実際の所、文字列の背景色は常にウインドウの背景色と同じであるようだから、文字列の背景を塗り潰す必要は無いと思う。
	//その上、当関数の引数w,hは、文字列の高さよりもかなり小さいサイズが指定されるようで、塗り潰す範囲が文字列と合っていない。
	//以上の理由により、引数w,h,及び,bgは無視して、文字列を塗り潰す処理は行わない事にした。
//{{2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//	CbkQue_draw_box_fill(dxlib.pCbkQue, dxlib.pri,
//↓2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
	CbkQue_draw_box_fill(pCbkQue, pri,
//}}2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
		x,
		y,
		w,
		h,
		bg_rgba);
#endif
//{{2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//	CbkQue_draw_strf_handle(dxlib.pCbkQue, dxlib.pri,
//↓2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
	CbkQue_draw_strf_handle(pCbkQue, pri,
//}}2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
		x,
		y,
		FontHandle,
		1.0,
		1.0,
		0.0,
		0.0,
		fg_rgba,
		0,
		"%.*s", len, string);
}
/*--------------------------------------------------------------------------*/
//{{2016/10/31コメント削除:nk_dxlib_draw_image()を、仮実装から、本実装に変更しました。
////本当は画像を描く必要が有るのですが、現在の実装では、矩形を描いています。
//}}2016/10/31コメント削除:nk_dxlib_draw_image()を、仮実装から、本実装に変更しました。
//{{2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//static void nk_dxlib_draw_image(int x, int y, int w, int h, const struct nk_image* img, struct nk_color col) {
//↓2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
static void nk_dxlib_draw_image(ST_CbkQue* pCbkQue, int pri, int x, int y, int w, int h, const struct nk_image* img, struct nk_color col) {
//}}2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//{{2016/10/31変更:nk_dxlib_draw_image()を、仮実装から、本実装に変更しました。
//	nk_dxlib_draw_rect_filled(
//		x,
//		y,
//		w,
//		h,
//		0,
//		col);
//↓2016/10/31変更:nk_dxlib_draw_image()を、仮実装から、本実装に変更しました。
//	int rgba = convert_color(col);
//	int iSpr = img->handle.id;
//	int x1, y1, x2, y2, x3, y3, x4, y4;
//	x1 = x4 = x;		//左端の座標
//	x2 = x3 = x + w;	//右端の座標
//	y1 = y2 = y;		//上端の座標
//	y3 = y4 = y + h;	//下端の座標
////{{2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
////	CbkQue_draw_spr3(dxlib.pCbkQue, dxlib.pri,
////↓2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//	CbkQue_draw_spr3(pCbkQue, pri,
////}}2016/11/01変更:nk_dxlib_init()の引数を全て削除し、nk_dxlib_render()に引数pCbkQue,priを追加しました。
//		x1,	//┐
//		y1,	//│
//		x2,	//│
//		y2,	//├TriangleFanの並び
//		x3,	//│
//		y3,	//│
//		x4,	//│
//		y4,	//┘
//		iSpr,
//		rgba);
//↓2016/11/03変更:nk_dxlib_draw_image()を、サブイメージの描画に対応しました。
	int rgba = convert_color(col);
	int iSpr = img->handle.id;
	int x1, y1, x2, y2, x3, y3, x4, y4;
	x1 = x4 = x;		//左端の座標
	x2 = x3 = x + w;	//右端の座標
	y1 = y2 = y;		//上端の座標
	y3 = y4 = y + h;	//下端の座標
	//サブイメージでなければ…
	if(!nk_image_is_subimage(img)) {
		CbkQue_draw_spr3(pCbkQue, pri,
			x1,	//┐
			y1,	//│
			x2,	//│
			y2,	//├TriangleFanの並び
			x3,	//│
			y3,	//│
			x4,	//│
			y4,	//┘
			iSpr,
			rgba);
	//サブイメージならば…
	} else {
		// * Thu Nov 03 18:19:33 JST 2016 Naoyuki Sawa
		// - nk_dxlib_draw_image()を、サブイメージの描画に対応しました。
		//   スプライトの一部だけを描画します。
		// - 主に、カーソルの描画を行うために利用しています。
		//   □カーソルをロードする処理の例(nuklear.hのnk_font_atlas_bake()を元にして作成しました):	⇒{{2016/11/04コメント追記:カーソルをロードする処理を、アプリケーション個別に実装するのでなく、当モジュールの関数nk_dxlib_load_cursor()として実装しました。もう、アプリケーション側では、左記の「カーソルをロードする処理の例」を意識する必要は有りません。}}
		//   │{
		//   │	static const unsigned char nk_cursor_data[/*NK_CURSOR_COUNT*/][3/*Pos,Size,Offset*/][2/*x,y*/]={
		//   │	{{ 0, 3},{12,19},{ 0, 0}},	//NK_CURSOR_ARROW
		//   │	{{13, 0},{ 7,16},{ 4, 8}},	//NK_CURSOR_TEXT
		//   │	{{31, 0},{23,23},{11,11}},	//NK_CURSOR_MOVE
		//   │	{{21, 0},{ 9,23},{ 5,11}},	//NK_CURSOR_RESIZE_VERTICAL
		//   │	{{55,18},{23, 9},{11, 5}},	//NK_CURSOR_RESIZE_HORIZONTAL
		//   │	{{73, 0},{17,17},{ 9, 9}},	//NK_CURSOR_RESIZE_TOP_LEFT_DOWN_RIGHT
		//   │	{{55, 0},{17,17},{ 9, 9}}};	//NK_CURSOR_RESIZE_TOP_RIGHT_DOWN_LEFT
		//   │	static_assert(((sizeof nk_cursor_data)/(sizeof nk_cursor_data[0])) == NK_CURSOR_COUNT, "nk_cursor_data[]の要素数が不正です。");
		//   │	static struct nk_cursor cursors[NK_CURSOR_COUNT];
		//   │	int i;
		//   │	for(i = 0; i < NK_CURSOR_COUNT; ++i) {
		//   │		int PosX		= nk_cursor_data[i][0][0];
		//   │		int PosY		= nk_cursor_data[i][0][1];
		//   │		int SizeX		= nk_cursor_data[i][1][0];
		//   │		int SizeY		= nk_cursor_data[i][1][1];
		//   │		int OffsetX		= nk_cursor_data[i][2][0];
		//   │		int OffsetY		= nk_cursor_data[i][2][1];
		//   │		cursors[i].img		= nk_subimage_id(SprNo_NK_CUSTOM_CURSOR_DATA, SizeX, SizeY, nk_rect(PosX, PosY, SizeX, SizeY));
		//   │		cursors[i].size		= nk_vec2(SizeX, SizeY);
		//   │		cursors[i].offset	= nk_vec2(OffsetX, OffsetY);
		//   │	}
		//   │	nk_style_load_all_cursors(ctx, cursors);	//nk_style_load_all_cursors()が、nk_style_show_cursor()の効果も含んでいます。
		//   │}
		ST_SprDef stSprDef;
		get_sprDef(iSpr, &stSprDef);
		double u1, v1, u2, v2, u3, v3, u4, v4;
		u1 = u4 = (double) img->region[0/*x*/]                        / (double)stSprDef.w;
		u2 = u3 = (double)(img->region[0/*x*/] + img->region[2/*w*/]) / (double)stSprDef.w;
		v1 = v2 = (double) img->region[1/*y*/]                        / (double)stSprDef.h;
		v3 = v4 = (double)(img->region[1/*y*/] + img->region[3/*h*/]) / (double)stSprDef.h;
		int xy[4][2/*x,y*/] = {
			{ x1, y1 },	//左上	┐
			{ x2, y2 },	//右上	├TriangleStripの並び
			{ x4, y4 },	//左下	│
			{ x3, y3 }};	//右下	┘
		double uv[4][2/*u,v*/] = {
			{ u1, v1 },	//左上	┐
			{ u2, v2 },	//右上	├TriangleStripの並び
			{ u4, v4 },	//左下	│
			{ u3, v3 }};	//右下	┘
		CbkQue_draw_spr_ts(pCbkQue, pri,
			xy,
			uv,
			4,
			iSpr,
			rgba);
	}
//}}2016/11/03変更:nk_dxlib_draw_image()を、サブイメージの描画に対応しました。
}
/*--------------------------------------------------------------------------*/
static float nk_dxlibfont_get_text_width(nk_handle handle, float height, const char* text, int len) {
	int FontHandle = handle.id;
	return GetDrawStringWidthToHandle(text, len, FontHandle);
}
/****************************************************************************
 *	プロパティウインドウ
 ****************************************************************************/
#if 0
//■使用例
int cpp_main(int argc, char* argv[]) {
	if(!setjmp(env_exit)) {
		int bPrpWnd = 0;	//PrpWndウインドウを表示するフラグ。
		for(;;) {
			schedule();
			if(keyTrig[KEY_INPUT_P]) { bPrpWnd = !bPrpWnd; }	//[P]キーが押されたら、PrpWndウインドウを表示するフラグを切り替える。
			if(bPrpWnd) {	//PrpWndウインドウを表示するフラグがセットされていたら…
				//PrpWndウインドウを表示する。PrpWndウインドウが閉じられたら(bPrpWnd=0)にして、また[P]キーが押されるまでは非表示とする。
				bPrpWnd = PrpWnd_exec(ctx, "PrpWnd", nk_rect(10, 10, 500, 500),
					NK_WINDOW_BORDER|NK_WINDOW_MOVABLE|NK_WINDOW_SCALABLE|
					NK_WINDOW_CLOSABLE|NK_WINDOW_MINIMIZABLE|NK_WINDOW_TITLE|
					NK_WINDOW_SCROLL_AUTO_HIDE,
					phApp->pPrpKey, phApp->iTbl, phApp + 1, 0, fnVarFmt);
			}
		}
	}
	return EXIT_SUCCESS;
}
#endif
/*--------------------------------------------------------------------------*/
typedef struct _ST_PrpWnd {
	struct nk_context*	ctx;
	const void*		pPrpKey;
	int			iTbl;
	void*			pPrpTbl;
	int			iBitPos;
	void			(*fnVarFmt)(char* buf/*[cap]*/, int cap, int iFmt, int iVal);
	//↑ここまではPrpWnd_exec()の引数のうち必要な情報をそのまま格納するフィールドです。↑
	int			depth;		//直前のパスの階層の深さ
	int			hidden;		//ツリーの非表示階層の深さ
} ST_PrpWnd;
/*--------------------------------------------------------------------------*/
static int PrpWnd_exec_cb(int iType, const int* aName, const char* sPath, void* arg) {
	ST_PrpWnd* pPrpWnd = (ST_PrpWnd*)arg;
	char buf[256/*調整可*/];
	//パスを要素に分割する。
	char** strv = strv_split(sPath, ".");
	//パスの階層の深さ(1～)を求める。
	int depth = strv_length(strv);
	if(depth < 1) { DIE(); }	//(sPath="")で呼び出される事は無いはず。
	//テーブル型を経由せずにいきなりパスの階層が深くなっている事は無いはず。
	if(depth > pPrpWnd->depth) { DIE(); }	//もしここで停止したらバグです。
	//パスの階層が浅くなったら…
	while(pPrpWnd->depth > depth) {	//二段階以上一気に浅くなる事も有り得る事に注意せよ。
		//パスの階層を減らす。
		pPrpWnd->depth--;
		//ツリーの非表示階層内でなければ…
		if(!pPrpWnd->hidden) {
			//ツリーの現在の階層を閉じる。
			nk_tree_pop(pPrpWnd->ctx);
		//ツリーの非表示階層内ならば…
		} else {
			//ツリーの非表示階層を減らす。
			pPrpWnd->hidden--;
		}
	}
	//'var'型(-1),又は,タイプ型(0x8000～0xFFFF)ならば…
	if((short)iType < 0) {
		//ツリーの非表示階層内でなければ…
		if(!pPrpWnd->hidden) {
		    //{{ここでレイアウト設定を行う事にした理由は、「テーブル型(0x7FFF以下)ならば…」のブロックのコメントを参照して下さい。ちなみに、ツリー階層毎にレイアウト設定は一回で構わないのですが、ラベル毎にレイアウト設定しても問題無く、結果は同じになります。
			//1行の高さをラベルの最小限の高さとする。
			const struct nk_style* style = &pPrpWnd->ctx->style;
			nk_layout_row_dynamic(pPrpWnd->ctx, style->font->height + (style->text.padding.y * 2), 1);
		    //}}ここでレイアウト設定を行う事にした理由は、「テーブル型(0x7FFF以下)ならば…」のブロックのコメントを参照して下さい。ちなみに、ツリー階層毎にレイアウト設定は一回で構わないのですが、ラベル毎にレイアウト設定しても問題無く、結果は同じになります。
			//ラベルを生成する。
			PrpTbl_fmt_v(pPrpWnd->pPrpKey, pPrpWnd->iTbl, pPrpWnd->pPrpTbl, pPrpWnd->iBitPos, buf, sizeof buf, pPrpWnd->fnVarFmt, aName);
			nk_labelf(pPrpWnd->ctx, NK_TEXT_LEFT, "%s = %s", strv[depth - 1], buf);
		}
#ifdef  USE_PRP_DOUBLE
	//組み込み'Double'型(0x7FFF)ならば…
	} else if(iType == PrpTbl_Double) {
		//ツリーの非表示階層内でなければ…
		if(!pPrpWnd->hidden) {
		    //{{ここでレイアウト設定を行う事にした理由は、「テーブル型(0x7FFF以下)ならば…」のブロックのコメントを参照して下さい。ちなみに、ツリー階層毎にレイアウト設定は一回で構わないのですが、ラベル毎にレイアウト設定しても問題無く、結果は同じになります。
			//1行の高さをラベルの最小限の高さとする。
			const struct nk_style* style = &pPrpWnd->ctx->style;
			nk_layout_row_dynamic(pPrpWnd->ctx, style->font->height + (style->text.padding.y * 2), 1);
		    //}}ここでレイアウト設定を行う事にした理由は、「テーブル型(0x7FFF以下)ならば…」のブロックのコメントを参照して下さい。ちなみに、ツリー階層毎にレイアウト設定は一回で構わないのですが、ラベル毎にレイアウト設定しても問題無く、結果は同じになります。
			//ラベルを生成する。
			PrpTbl_ffmt_v(pPrpWnd->pPrpKey, pPrpWnd->iTbl, pPrpWnd->pPrpTbl, pPrpWnd->iBitPos, buf, sizeof buf, aName);
			nk_labelf(pPrpWnd->ctx, NK_TEXT_LEFT, "%s = %s", strv[depth - 1], buf);
		}
#endif//USE_PRP_DOUBLE
	//テーブル型(0x7FFF以下)ならば…
	} else {
		//パスの階層を増やす。
		pPrpWnd->depth++;
		//ツリーの非表示階層内でなければ…
		if(!pPrpWnd->hidden) {
			//ツリーの階層を生成する。ツリーの階層が開いていたら…
		//誤	if(nk_tree_push(pPrpWnd->ctx, NK_TREE_NODE/*NK_TREE_TABでも可*/, sPath, NK_MINIMIZED)) {	⇒【重要】nk_tree_push()は、ソースファイル名と行番号をキーにしているので、関数化したりループで回す場合は使えません。
		/*正*/	if(nk_tree_push_hashed(pPrpWnd->ctx, NK_TREE_NODE/*NK_TREE_TABでも可*/, strv[depth - 1], NK_MINIMIZED, sPath, strlen(sPath), 0)) {	//表示するのはパスの最後の要素ですが、キーはNuklearウインドウ内で一意とするためにパス全体を指定します。
			    //{{ここでレイアウトを設定すると、ツリーの直後にツリーが有る時に無駄な空白が生じてしまいます。ここではなく、このツリー階層の最初の(又は個々の)ラベルを生成する時にレイアウトを設定する方が適切です。上のブロックのコメントを参照して下さい。
			    //	//1行の高さをラベルの最小限の高さとする。
			    //	const struct nk_style* style = &ctx->style;
			    //	nk_layout_row_dynamic(ctx, style->font->height + (style->text.padding.y * 2), 1);
			    //}}ここでレイアウトを設定すると、ツリーの直後にツリーが有る時に無駄な空白が生じてしまいます。ここではなく、このツリー階層の最初の(又は個々の)ラベルを生成する時にレイアウトを設定する方が適切です。上のブロックのコメントを参照して下さい。
			//ツリーの階層が閉じていたら…
			} else {
				//ツリーの非表示階層を増やす。
				pPrpWnd->hidden++;
			}
		//ツリーの非表示階層内ならば…
		} else {
			//ツリーの非表示階層を増やす。この階層も暗黙の非表示階層だからです。
			pPrpWnd->hidden++;
		}
	}
	//パスを要素に分割したメモリを解放する。
	strv_free(strv);
	return 0;
}
/*--------------------------------------------------------------------------*/
int PrpWnd_exec(struct nk_context* ctx, const char* title, struct nk_rect bounds, nk_flags flags, const void* pPrpKey, int iTbl, void* pPrpTbl, int iBitPos, void (*fnVarFmt/*NULL可*/)(char* buf/*[cap]*/, int cap, int iFmt, int iVal)) {
	ST_PrpWnd stPrpWnd;
	memset(&stPrpWnd, 0, sizeof stPrpWnd);
	stPrpWnd.ctx      = ctx;
	stPrpWnd.pPrpKey  = pPrpKey;
	stPrpWnd.iTbl     = iTbl;
	stPrpWnd.pPrpTbl  = pPrpTbl;
	stPrpWnd.iBitPos  = iBitPos;
	stPrpWnd.fnVarFmt = fnVarFmt;
	stPrpWnd.depth    = 1;	//要注意!!
//不要	stPrpWnd.hidden   = 0;
	//--- Window ---
	if(nk_begin(ctx, title, bounds, flags)) {
	    //{{ここでレイアウトを設定すると、最初の行の前に無駄な空白が生じてしまいます。個々のラベルを生成する時にレイアウトを設定しているので、ここではレイアウトを設定しないのが適切です。PrpWnd_exec_cb()内のコメントを参照して下さい。
	    //	//1行の高さをラベルの最小限の高さとする。
	    //	const struct nk_style* style = &ctx->style;
	    //	nk_layout_row_dynamic(ctx, style->font->height + (style->text.padding.y * 2), 1);
	    //}}ここでレイアウトを設定すると、最初の行の前に無駄な空白が生じてしまいます。個々のラベルを生成する時にレイアウトを設定しているので、ここではレイアウトを設定しないのが適切です。PrpWnd_exec_cb()内のコメントを参照して下さい。
		//ツリー階層を生成する。
		PrpTbl_list(pPrpKey, iTbl, PrpWnd_exec_cb, NULL, 0, NULL, 0, &stPrpWnd);
		//最後に閉じられていなかったツリーの階層を閉じる。
		while(stPrpWnd.depth > 1) {	//二段階以上残っている事も有り得る事に注意せよ。
			//パスの階層を減らす。
			stPrpWnd.depth--;
			//ツリーの非表示階層内でなければ…
			if(!stPrpWnd.hidden) {
				//ツリーの現在の階層を閉じる。
				nk_tree_pop(ctx);
			//ツリーの非表示階層内ならば…
			} else {
				//ツリーの非表示階層を増やす。この階層も暗黙の非表示階層だからです。
				stPrpWnd.hidden--;
			}
		}
	}
	nk_end(ctx);
	if(nk_window_is_closed(ctx, title)) {	//ウインドウが閉じられたら…
	    //{{2016/10/29追加:Nuklear(リビジョン01eb4f8時点)のバグ回避
	        // * Sat Oct 29 01:47:50 JST 2016 Naoyuki Sawa
		// - 2016/10/29時点のNuklear(リビジョン01eb4f8)には、以下のバグが有ります。
		//   ⇒NK_WINDOW_CLOSABLE,かつ,NK_WINDOW_MINIMIZABLEであるウインドウを、最小化した状態で閉じると、再表示出来なくなる。
		//   原因は、nuklear.hのnk_clear()のループの先頭で、最小化した状態のウインドウをクリア対象外にしている事だと思います。
		//   何故、最小化した状態のウインドウをクリア対象外にしているのか不明なので、単純にnuklear.hを修正する事が出来ません。
		// - そこで、nuklear.hを修正せずに、アプリケーション側で回避する事にしました。
		//   最小化した状態で閉じたウインドウが問題になるわけですから、ウインドウが閉じた直後に最小化を解除すれば良いのです。
		//   この方法は、'https://github.com/vurtun/nuklear/issues/266'の記事を参考にさせて頂きました。
		//   ただし、上記の記事ではnk_windowを直接操作していますが、それよりもnk_window_collapse()を使う方が安全だと思うので、そうしました。
		// - 今後、Nuklear自体が修正されたら、この対策は不要になるので削除して下さい。
		// * Mon Oct 31 10:46:38 JST 2016 Naoyuki Sawa
		// - 2016/10/31時点のNuklear(リビジョン69b13a0)でも、直っていませんでした。
		//   Issues(https://github.com/vurtun/nuklear/issues/266)に、リビジョン69b13a0で直った(?)みたいなコメントが有るのですが、実際に試したところ直っていませんでした。
		//   従って、下記のバグ回避コードは、引き続き、残しておきます。
		nk_window_collapse(ctx, title, NK_MAXIMIZED);
	    //}}2016/10/29追加:Nuklear(リビジョン01eb4f8時点)のバグ回避
		return 0;	//ウインドウが閉じられたら、0を返す。
	}
	return 1;	//ウインドウが閉じられていなければ、1を返す。
}
