annotate scn2k/scn2k_text.cc @ 40:651237260724

* Center button-type selects
author thib
date Wed, 18 Mar 2009 16:44:49 +0000
parents de29c4d2d043
children 01aa5ddf7dc8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
223b71206888 Initial import
thib
parents:
diff changeset
1 /*
223b71206888 Initial import
thib
parents:
diff changeset
2 TODO:
223b71206888 Initial import
thib
parents:
diff changeset
3 日付のラベルが画面切り替え時に欠けるのを修正
223b71206888 Initial import
thib
parents:
diff changeset
4 画像効果 : 人間の入れ換わりなど
223b71206888 Initial import
thib
parents:
diff changeset
5 kcursor の操作を WidText クラスに任せる
223b71206888 Initial import
thib
parents:
diff changeset
6 WidText クラスには新たに以下の操作を加える
223b71206888 Initial import
thib
parents:
diff changeset
7 ・ウェイト終了後、クリアなしに新たなテキストを追加、新たにstart-waitする
223b71206888 Initial import
thib
parents:
diff changeset
8 ・文字の描画 (Start) と Wait(カーソル表示待ち)の分離。
223b71206888 Initial import
thib
parents:
diff changeset
9 Start すると文字を描画開始する。クリックで全描画。
223b71206888 Initial import
thib
parents:
diff changeset
10 Flush するとバッファ内の文字をすべて描画する
223b71206888 Initial import
thib
parents:
diff changeset
11 Wait すると全描画後、クリックされるまでカーソルを表示するまで待つ
223b71206888 Initial import
thib
parents:
diff changeset
12 TextImpl 側の状態としては Wait のみを持つ (PREPAREに戻るのを待つ)
223b71206888 Initial import
thib
parents:
diff changeset
13 ただし、Skip の権利はどっちがもつ?(現状は?)
223b71206888 Initial import
thib
parents:
diff changeset
14
223b71206888 Initial import
thib
parents:
diff changeset
15 GrpObj: NextObj と GrpObj を分離。CreateObj は現状通り、Visible=1 時に行う。
223b71206888 Initial import
thib
parents:
diff changeset
16 それぞれ num=0 (screen) の枝leaf として実装。delete時は親のdeleteのみを
223b71206888 Initial import
thib
parents:
diff changeset
17 行い、子はGrpObjの実体だけを削除する
223b71206888 Initial import
thib
parents:
diff changeset
18 Visible 後のhide は実際に hide とする
223b71206888 Initial import
thib
parents:
diff changeset
19 ExecReservedCmd() はなくせるはず。Delete() もなくなる。
223b71206888 Initial import
thib
parents:
diff changeset
20 カノギ:ReBlit() がうまくいかないせいで名前ウィンドウが消えた時の背景がなくなる
223b71206888 Initial import
thib
parents:
diff changeset
21
223b71206888 Initial import
thib
parents:
diff changeset
22 くら:回想表示
223b71206888 Initial import
thib
parents:
diff changeset
23 SEL画像効果
223b71206888 Initial import
thib
parents:
diff changeset
24 DONE:
223b71206888 Initial import
thib
parents:
diff changeset
25 ともよのテキストウィンドウ実装、ボタン実装
223b71206888 Initial import
thib
parents:
diff changeset
26 shake の画像効果
223b71206888 Initial import
thib
parents:
diff changeset
27 オブジェクト内のテキスト色の実装
223b71206888 Initial import
thib
parents:
diff changeset
28 画像効果の改善
223b71206888 Initial import
thib
parents:
diff changeset
29 */
223b71206888 Initial import
thib
parents:
diff changeset
30
223b71206888 Initial import
thib
parents:
diff changeset
31 /*
223b71206888 Initial import
thib
parents:
diff changeset
32 * Copyright (c) 2004-2006 Kazunori "jagarl" Ueno
223b71206888 Initial import
thib
parents:
diff changeset
33 * All rights reserved.
223b71206888 Initial import
thib
parents:
diff changeset
34 *
223b71206888 Initial import
thib
parents:
diff changeset
35 * Redistribution and use in source and binary forms, with or without
223b71206888 Initial import
thib
parents:
diff changeset
36 * modification, are permitted provided that the following conditions
223b71206888 Initial import
thib
parents:
diff changeset
37 * are met:
223b71206888 Initial import
thib
parents:
diff changeset
38 * 1. Redistributions of source code must retain the above copyright
223b71206888 Initial import
thib
parents:
diff changeset
39 * notice, this list of conditions and the following disclaimer.
223b71206888 Initial import
thib
parents:
diff changeset
40 * 2. Redistributions in binary form must reproduce the above copyright
223b71206888 Initial import
thib
parents:
diff changeset
41 * notice, this list of conditions and the following disclaimer in the
223b71206888 Initial import
thib
parents:
diff changeset
42 * documentation and/or other materials provided with the distribution.
223b71206888 Initial import
thib
parents:
diff changeset
43 * 3. The name of the author may not be used to endorse or promote products
223b71206888 Initial import
thib
parents:
diff changeset
44 * derived from this software without specific prior written permission.
223b71206888 Initial import
thib
parents:
diff changeset
45 *
223b71206888 Initial import
thib
parents:
diff changeset
46 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
223b71206888 Initial import
thib
parents:
diff changeset
47 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
223b71206888 Initial import
thib
parents:
diff changeset
48 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
223b71206888 Initial import
thib
parents:
diff changeset
49 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
223b71206888 Initial import
thib
parents:
diff changeset
50 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
223b71206888 Initial import
thib
parents:
diff changeset
51 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
223b71206888 Initial import
thib
parents:
diff changeset
52 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
223b71206888 Initial import
thib
parents:
diff changeset
53 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
223b71206888 Initial import
thib
parents:
diff changeset
54 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
223b71206888 Initial import
thib
parents:
diff changeset
55 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
223b71206888 Initial import
thib
parents:
diff changeset
56 */
223b71206888 Initial import
thib
parents:
diff changeset
57
223b71206888 Initial import
thib
parents:
diff changeset
58 #include"window/event.h"
223b71206888 Initial import
thib
parents:
diff changeset
59 #include"window/picture.h"
223b71206888 Initial import
thib
parents:
diff changeset
60 #include"window/widget.h"
223b71206888 Initial import
thib
parents:
diff changeset
61 #include"system/file.h"
223b71206888 Initial import
thib
parents:
diff changeset
62 #include"system/system_config.h"
223b71206888 Initial import
thib
parents:
diff changeset
63 #include"scn2k.h"
223b71206888 Initial import
thib
parents:
diff changeset
64
223b71206888 Initial import
thib
parents:
diff changeset
65 #include<string>
223b71206888 Initial import
thib
parents:
diff changeset
66 using namespace std;
223b71206888 Initial import
thib
parents:
diff changeset
67
223b71206888 Initial import
thib
parents:
diff changeset
68 // kanji conv : デバッグ表示用
223b71206888 Initial import
thib
parents:
diff changeset
69 void kconv(const unsigned char* src, unsigned char* dest);
223b71206888 Initial import
thib
parents:
diff changeset
70 void kconv_rev(const unsigned char* src, unsigned char* dest);
223b71206888 Initial import
thib
parents:
diff changeset
71 string kconv(const string& s);
223b71206888 Initial import
thib
parents:
diff changeset
72 string kconv_rev(const string& s);
223b71206888 Initial import
thib
parents:
diff changeset
73 // render.cc
223b71206888 Initial import
thib
parents:
diff changeset
74 void DSurfaceFillA(Surface* src, const Rect& rect, int r, int g, int b, int a); // テキストウィンドウ背景の設定
223b71206888 Initial import
thib
parents:
diff changeset
75 void DSurfaceMove(Surface* src_o, const Rect& srcrect, Surface* dst_o, const Rect& dstrect); // コピー
223b71206888 Initial import
thib
parents:
diff changeset
76
223b71206888 Initial import
thib
parents:
diff changeset
77 /**************************************************************::
223b71206888 Initial import
thib
parents:
diff changeset
78 **
223b71206888 Initial import
thib
parents:
diff changeset
79 ** TextImpl(interface)
223b71206888 Initial import
thib
parents:
diff changeset
80 */
223b71206888 Initial import
thib
parents:
diff changeset
81 struct TimerAtom {
223b71206888 Initial import
thib
parents:
diff changeset
82 int from;
223b71206888 Initial import
thib
parents:
diff changeset
83 int to;
223b71206888 Initial import
thib
parents:
diff changeset
84 unsigned int start_time;
223b71206888 Initial import
thib
parents:
diff changeset
85 unsigned int total_time;
223b71206888 Initial import
thib
parents:
diff changeset
86 };
223b71206888 Initial import
thib
parents:
diff changeset
87
223b71206888 Initial import
thib
parents:
diff changeset
88 struct TextWindow {
223b71206888 Initial import
thib
parents:
diff changeset
89 /* @@@ : SetWindowColor での surface 再設定に注意 */
223b71206888 Initial import
thib
parents:
diff changeset
90 WidText* wid;
223b71206888 Initial import
thib
parents:
diff changeset
91 bool name_visible;
223b71206888 Initial import
thib
parents:
diff changeset
92 WidLabel* name;
223b71206888 Initial import
thib
parents:
diff changeset
93 PicContainer* name_container;
223b71206888 Initial import
thib
parents:
diff changeset
94 PicBase* face;
223b71206888 Initial import
thib
parents:
diff changeset
95 PicBase* face_pics[8];
223b71206888 Initial import
thib
parents:
diff changeset
96 TextWindow(PicContainer& parent, Event::Container& event, int window_no, const AyuSysConfig& config, void* callback);
223b71206888 Initial import
thib
parents:
diff changeset
97 ~TextWindow() {
223b71206888 Initial import
thib
parents:
diff changeset
98 if (name_container) delete name_container;
223b71206888 Initial import
thib
parents:
diff changeset
99 int i; for (i=0; i<8; i++) {
223b71206888 Initial import
thib
parents:
diff changeset
100 if (face_pics[i]) delete face_pics[i];
223b71206888 Initial import
thib
parents:
diff changeset
101 }
223b71206888 Initial import
thib
parents:
diff changeset
102 if (wid) delete wid;
223b71206888 Initial import
thib
parents:
diff changeset
103 }
223b71206888 Initial import
thib
parents:
diff changeset
104 Rect WakuSize(PicContainer& pic, int waku_no, const AyuSysConfig& config);
223b71206888 Initial import
thib
parents:
diff changeset
105 void MakeWaku(PicContainer& pic, Event::Container& event, int waku_no,int window_no, bool* use_btn, const AyuSysConfig& config, void* callback);
223b71206888 Initial import
thib
parents:
diff changeset
106 void show(void) {
223b71206888 Initial import
thib
parents:
diff changeset
107 wid->show();
223b71206888 Initial import
thib
parents:
diff changeset
108 if (name_container && name_visible) name_container->show();
223b71206888 Initial import
thib
parents:
diff changeset
109 if (face) face->show();
223b71206888 Initial import
thib
parents:
diff changeset
110 }
223b71206888 Initial import
thib
parents:
diff changeset
111 void hide(void) {
223b71206888 Initial import
thib
parents:
diff changeset
112 wid->hide();
223b71206888 Initial import
thib
parents:
diff changeset
113 if (name_container) name_container->hide();
223b71206888 Initial import
thib
parents:
diff changeset
114 if (face) face->hide();
223b71206888 Initial import
thib
parents:
diff changeset
115 }
223b71206888 Initial import
thib
parents:
diff changeset
116 void ShowFace(const char* path) {
223b71206888 Initial import
thib
parents:
diff changeset
117 if (!face) return;
223b71206888 Initial import
thib
parents:
diff changeset
118 face->SetSurface( path, 0,0);
223b71206888 Initial import
thib
parents:
diff changeset
119 }
223b71206888 Initial import
thib
parents:
diff changeset
120 void ResetFace(void) {
223b71206888 Initial import
thib
parents:
diff changeset
121 if (!face) return;
223b71206888 Initial import
thib
parents:
diff changeset
122 face->SetSurface( (Surface*)0, 0,0);
223b71206888 Initial import
thib
parents:
diff changeset
123 }
223b71206888 Initial import
thib
parents:
diff changeset
124 void StartText(const TextStream& _stream) {
223b71206888 Initial import
thib
parents:
diff changeset
125 wid->Clear();
223b71206888 Initial import
thib
parents:
diff changeset
126 wid->stream = _stream;
223b71206888 Initial import
thib
parents:
diff changeset
127 if (name_container) {
223b71206888 Initial import
thib
parents:
diff changeset
128 char namestr[1024];
223b71206888 Initial import
thib
parents:
diff changeset
129 namestr[0] = 0;
223b71206888 Initial import
thib
parents:
diff changeset
130 wid->stream.RemoveName(namestr, 1024);
223b71206888 Initial import
thib
parents:
diff changeset
131 if (namestr[0] == 0) {
223b71206888 Initial import
thib
parents:
diff changeset
132 name_container->hide();
223b71206888 Initial import
thib
parents:
diff changeset
133 } else {
223b71206888 Initial import
thib
parents:
diff changeset
134 if (name) {
223b71206888 Initial import
thib
parents:
diff changeset
135 name_container->show_all();
223b71206888 Initial import
thib
parents:
diff changeset
136 name->SetText(namestr);
223b71206888 Initial import
thib
parents:
diff changeset
137 }
223b71206888 Initial import
thib
parents:
diff changeset
138 }
223b71206888 Initial import
thib
parents:
diff changeset
139 }
223b71206888 Initial import
thib
parents:
diff changeset
140 wid->Start();
223b71206888 Initial import
thib
parents:
diff changeset
141 }
223b71206888 Initial import
thib
parents:
diff changeset
142 void SetName(const char* n) {
223b71206888 Initial import
thib
parents:
diff changeset
143 if (name_container && name) {
223b71206888 Initial import
thib
parents:
diff changeset
144 if (n[0]) {
223b71206888 Initial import
thib
parents:
diff changeset
145 name_container->show();
223b71206888 Initial import
thib
parents:
diff changeset
146 name->SetText(n);
223b71206888 Initial import
thib
parents:
diff changeset
147 name_visible = true;
223b71206888 Initial import
thib
parents:
diff changeset
148 } else {
223b71206888 Initial import
thib
parents:
diff changeset
149 name_container->hide();
223b71206888 Initial import
thib
parents:
diff changeset
150 name_visible = false;
223b71206888 Initial import
thib
parents:
diff changeset
151 }
223b71206888 Initial import
thib
parents:
diff changeset
152 }
223b71206888 Initial import
thib
parents:
diff changeset
153 }
223b71206888 Initial import
thib
parents:
diff changeset
154 };
223b71206888 Initial import
thib
parents:
diff changeset
155
223b71206888 Initial import
thib
parents:
diff changeset
156 class TextImpl {
223b71206888 Initial import
thib
parents:
diff changeset
157 private:
223b71206888 Initial import
thib
parents:
diff changeset
158 public:
223b71206888 Initial import
thib
parents:
diff changeset
159 TextWindow* text;
223b71206888 Initial import
thib
parents:
diff changeset
160 typedef enum {NORMAL=0, WAIT_TEXT=1, WAIT=2, WAIT_CLICK=3, WAIT_ABORT=4, WAIT_CLICK_MOUSEPOS = 5, WAIT_CLICK_MOUSEPOSEND_L = 6, WAIT_CLICK_MOUSEPOSEND_R = 7,
223b71206888 Initial import
thib
parents:
diff changeset
161 WAIT_SELECT_INBOX = 10, WAIT_SELECT_OUTBOX=11, WAIT_SELECT_VALUE = 12,
223b71206888 Initial import
thib
parents:
diff changeset
162 WAIT_EXTRN_MASK = 64, SAVEMASK = 128, LOADMASK = 256, SKIPMASK = 512,
223b71206888 Initial import
thib
parents:
diff changeset
163 CLEARSCR_MASK = 1024, STATSAVE_MASK = 2048, CLEARSCR_WAIT_MASK=(1<<12),
223b71206888 Initial import
thib
parents:
diff changeset
164 SKIPEND_MASK = (1<<13), BACKLOG_MASK=(1<<14), BACKLOG_MASK_FWD=(1<<15), BACKLOG_MASK_KOE=(1<<16), BACKLOG_WAIT_MASK=(1<<17),
223b71206888 Initial import
thib
parents:
diff changeset
165 ALLMASK = (CLEARSCR_MASK | WAIT_EXTRN_MASK | SAVEMASK | LOADMASK | SKIPMASK | BACKLOG_MASK | BACKLOG_MASK_FWD | BACKLOG_MASK_KOE | BACKLOG_WAIT_MASK | STATSAVE_MASK | CLEARSCR_WAIT_MASK | SKIPEND_MASK)
223b71206888 Initial import
thib
parents:
diff changeset
166 } Status;
223b71206888 Initial import
thib
parents:
diff changeset
167 Status status, status_saved, status_mask;
223b71206888 Initial import
thib
parents:
diff changeset
168 private:
223b71206888 Initial import
thib
parents:
diff changeset
169 std::string ruby_text;
223b71206888 Initial import
thib
parents:
diff changeset
170 bool ruby_text_flag;
223b71206888 Initial import
thib
parents:
diff changeset
171 unsigned int wait_time;
223b71206888 Initial import
thib
parents:
diff changeset
172 unsigned int old_time;
223b71206888 Initial import
thib
parents:
diff changeset
173 unsigned int base_time;
223b71206888 Initial import
thib
parents:
diff changeset
174 int text_window_number;
223b71206888 Initial import
thib
parents:
diff changeset
175 bool text_parsing;
223b71206888 Initial import
thib
parents:
diff changeset
176 TextStream text_stream;
223b71206888 Initial import
thib
parents:
diff changeset
177 SkipMode skip_mode;
223b71206888 Initial import
thib
parents:
diff changeset
178 int save_selectcount;
223b71206888 Initial import
thib
parents:
diff changeset
179
223b71206888 Initial import
thib
parents:
diff changeset
180 std::map<int, TimerAtom> timer_var;
223b71206888 Initial import
thib
parents:
diff changeset
181 std::vector<WidTextButton*> selects;
223b71206888 Initial import
thib
parents:
diff changeset
182 std::vector<int> sel_backlog_pos;
223b71206888 Initial import
thib
parents:
diff changeset
183 string replace_name[26];
223b71206888 Initial import
thib
parents:
diff changeset
184 string replace_name2[26];
223b71206888 Initial import
thib
parents:
diff changeset
185 PicContainer* sel_widget;
223b71206888 Initial import
thib
parents:
diff changeset
186 PicWidget* backlog_widget;
223b71206888 Initial import
thib
parents:
diff changeset
187
223b71206888 Initial import
thib
parents:
diff changeset
188 vector<BacklogItem>& backlog;
223b71206888 Initial import
thib
parents:
diff changeset
189 BacklogItem& backlog_item;
223b71206888 Initial import
thib
parents:
diff changeset
190 BacklogItem cur_backlog_item;
223b71206888 Initial import
thib
parents:
diff changeset
191 BacklogItem drawn_backlog_item;
223b71206888 Initial import
thib
parents:
diff changeset
192
223b71206888 Initial import
thib
parents:
diff changeset
193 public:
223b71206888 Initial import
thib
parents:
diff changeset
194 PicContainer& parent;
223b71206888 Initial import
thib
parents:
diff changeset
195 Event::Container& event;
223b71206888 Initial import
thib
parents:
diff changeset
196 AyuSysConfig& config;
223b71206888 Initial import
thib
parents:
diff changeset
197 private:
223b71206888 Initial import
thib
parents:
diff changeset
198 TextWindow* widgets[32];
223b71206888 Initial import
thib
parents:
diff changeset
199 WidTimeCursor* kcursor;
223b71206888 Initial import
thib
parents:
diff changeset
200 Surface* sel_bg1;
223b71206888 Initial import
thib
parents:
diff changeset
201 Surface* sel_bg2;
223b71206888 Initial import
thib
parents:
diff changeset
202 Rect sel_bg_rect;
223b71206888 Initial import
thib
parents:
diff changeset
203
223b71206888 Initial import
thib
parents:
diff changeset
204 void SetCursor(int num);
223b71206888 Initial import
thib
parents:
diff changeset
205 VarInfo wait_savedvar[2];
223b71206888 Initial import
thib
parents:
diff changeset
206
223b71206888 Initial import
thib
parents:
diff changeset
207 public:
223b71206888 Initial import
thib
parents:
diff changeset
208 void AddText(const char* str);
223b71206888 Initial import
thib
parents:
diff changeset
209
223b71206888 Initial import
thib
parents:
diff changeset
210 static void PressFuncSkip(void* pointer, WidButton* from);
223b71206888 Initial import
thib
parents:
diff changeset
211 static void PressFuncLoad(void* pointer, WidButton* from);
223b71206888 Initial import
thib
parents:
diff changeset
212 static void PressFuncSave(void* pointer, WidButton* from);
223b71206888 Initial import
thib
parents:
diff changeset
213 static void PressFuncBacklog(void* pointer, WidButton* from);
223b71206888 Initial import
thib
parents:
diff changeset
214 static void PressFuncBacklogFwd(void* pointer, WidButton* from);
223b71206888 Initial import
thib
parents:
diff changeset
215 private:
223b71206888 Initial import
thib
parents:
diff changeset
216 static void PressFuncButton(void* pointer, WidButton* from);
223b71206888 Initial import
thib
parents:
diff changeset
217 static bool PressFunc(int x, int y, void* pointer);
223b71206888 Initial import
thib
parents:
diff changeset
218
223b71206888 Initial import
thib
parents:
diff changeset
219 public:
223b71206888 Initial import
thib
parents:
diff changeset
220 TextImpl(Event::Container& _event, PicContainer& _parent, AyuSysConfig& config, vector<BacklogItem>& parent_backlog, BacklogItem& parent_backlog_item);
223b71206888 Initial import
thib
parents:
diff changeset
221 ~TextImpl();
223b71206888 Initial import
thib
parents:
diff changeset
222 void InitWindow(void);
223b71206888 Initial import
thib
parents:
diff changeset
223 void SetWindowColor(int r, int g, int b, int a, bool is_transparent);
223b71206888 Initial import
thib
parents:
diff changeset
224 void SetTextSpeed(int new_speed);
223b71206888 Initial import
thib
parents:
diff changeset
225 void SetTextWait(int new_wait);
223b71206888 Initial import
thib
parents:
diff changeset
226 void CreateSelect(Cmd& cmd);
223b71206888 Initial import
thib
parents:
diff changeset
227 void Exec(Cmd& cmd);
223b71206888 Initial import
thib
parents:
diff changeset
228 bool Wait(unsigned int current_time, Cmd& cmd);
223b71206888 Initial import
thib
parents:
diff changeset
229 void hide(void);
223b71206888 Initial import
thib
parents:
diff changeset
230 void show(void) { show(text_window_number); }
223b71206888 Initial import
thib
parents:
diff changeset
231 void show(int num);
223b71206888 Initial import
thib
parents:
diff changeset
232 void DrawBacklog(BacklogItem& item, Cmd& cmd);
223b71206888 Initial import
thib
parents:
diff changeset
233 void Save(std::string& str, bool select_save);
223b71206888 Initial import
thib
parents:
diff changeset
234 void Load(const char* str);
223b71206888 Initial import
thib
parents:
diff changeset
235 void SetSkipMode(SkipMode _mode);
223b71206888 Initial import
thib
parents:
diff changeset
236 void CreateSelBG(void);
223b71206888 Initial import
thib
parents:
diff changeset
237 };
223b71206888 Initial import
thib
parents:
diff changeset
238
223b71206888 Initial import
thib
parents:
diff changeset
239 /**************************************************************::
223b71206888 Initial import
thib
parents:
diff changeset
240 **
223b71206888 Initial import
thib
parents:
diff changeset
241 ** TextImpl(implementation)
223b71206888 Initial import
thib
parents:
diff changeset
242 */
223b71206888 Initial import
thib
parents:
diff changeset
243 TextImpl::TextImpl(Event::Container& _event, PicContainer& _parent, AyuSysConfig& _config, vector<BacklogItem>& parent_backlog, BacklogItem& parent_backlog_item) :
223b71206888 Initial import
thib
parents:
diff changeset
244 text(0),status(TextImpl::NORMAL), status_saved(TextImpl::NORMAL), status_mask(TextImpl::NORMAL), ruby_text_flag(false),
223b71206888 Initial import
thib
parents:
diff changeset
245 old_time(0), base_time(0), text_window_number(0), text_parsing(false), skip_mode(SKIP_NO), save_selectcount(0), sel_widget(0),
223b71206888 Initial import
thib
parents:
diff changeset
246 backlog_widget(0), backlog(parent_backlog), backlog_item(parent_backlog_item), parent(_parent), event(_event), config(_config),
223b71206888 Initial import
thib
parents:
diff changeset
247 kcursor(0), sel_bg1(0), sel_bg2(0), sel_bg_rect(0,0,0,0) {
223b71206888 Initial import
thib
parents:
diff changeset
248 int i;
223b71206888 Initial import
thib
parents:
diff changeset
249 for (i=0; i<32; i++) {
223b71206888 Initial import
thib
parents:
diff changeset
250 widgets[i] = 0;
223b71206888 Initial import
thib
parents:
diff changeset
251 }
223b71206888 Initial import
thib
parents:
diff changeset
252 text_stream.kanji_type = TextStream::sjis;
223b71206888 Initial import
thib
parents:
diff changeset
253 event.RegisterGlobalPressFunc(&PressFunc, (void*)this);
223b71206888 Initial import
thib
parents:
diff changeset
254 }
223b71206888 Initial import
thib
parents:
diff changeset
255
223b71206888 Initial import
thib
parents:
diff changeset
256 TextImpl::~TextImpl() {
223b71206888 Initial import
thib
parents:
diff changeset
257 if (sel_widget) delete sel_widget;
223b71206888 Initial import
thib
parents:
diff changeset
258 int i;
223b71206888 Initial import
thib
parents:
diff changeset
259 for (i=0; i<32; i++) {
223b71206888 Initial import
thib
parents:
diff changeset
260 if (widgets[i]) delete widgets[i];
223b71206888 Initial import
thib
parents:
diff changeset
261 }
223b71206888 Initial import
thib
parents:
diff changeset
262 if (backlog_widget) delete backlog_widget;
223b71206888 Initial import
thib
parents:
diff changeset
263 if (sel_bg1) parent.Root().DeleteSurface(sel_bg1);
223b71206888 Initial import
thib
parents:
diff changeset
264 if (sel_bg2) parent.Root().DeleteSurface(sel_bg2);
223b71206888 Initial import
thib
parents:
diff changeset
265 event.DeleteGlobalPressFunc(&PressFunc, (void*)this);
223b71206888 Initial import
thib
parents:
diff changeset
266 }
223b71206888 Initial import
thib
parents:
diff changeset
267
223b71206888 Initial import
thib
parents:
diff changeset
268 bool TextImpl::PressFunc(int x, int y, void* pointer) {
223b71206888 Initial import
thib
parents:
diff changeset
269 TextImpl* t = (TextImpl*)pointer;
223b71206888 Initial import
thib
parents:
diff changeset
270 if (t->status == WAIT_CLICK) {
223b71206888 Initial import
thib
parents:
diff changeset
271 t->status = WAIT_ABORT;
223b71206888 Initial import
thib
parents:
diff changeset
272 } else if (t->status == WAIT_CLICK_MOUSEPOS) {
223b71206888 Initial import
thib
parents:
diff changeset
273 t->status = WAIT_CLICK_MOUSEPOSEND_L;
223b71206888 Initial import
thib
parents:
diff changeset
274 } else if (t->status_mask & CLEARSCR_WAIT_MASK) {
223b71206888 Initial import
thib
parents:
diff changeset
275 t->status_mask = Status(t->status_mask & (~CLEARSCR_WAIT_MASK));
223b71206888 Initial import
thib
parents:
diff changeset
276 if (t->text) t->text->show();
223b71206888 Initial import
thib
parents:
diff changeset
277 if (t->kcursor) {
223b71206888 Initial import
thib
parents:
diff changeset
278 if (t->status == WAIT_TEXT) t->kcursor->show();
223b71206888 Initial import
thib
parents:
diff changeset
279 }
223b71206888 Initial import
thib
parents:
diff changeset
280 if (t->sel_widget) t->sel_widget->show();
223b71206888 Initial import
thib
parents:
diff changeset
281 if (t->backlog_widget) t->backlog_widget->show();
223b71206888 Initial import
thib
parents:
diff changeset
282 } else if (t->status_mask & BACKLOG_WAIT_MASK) {
223b71206888 Initial import
thib
parents:
diff changeset
283 t->status_mask = Status(t->status_mask | BACKLOG_MASK_KOE);
223b71206888 Initial import
thib
parents:
diff changeset
284 } else if ( (t->skip_mode & SKIP_TEXT) && (!(t->skip_mode & SKIP_IN_MENU)) ) {
223b71206888 Initial import
thib
parents:
diff changeset
285 if (t->status == WAIT_SELECT_INBOX) ;
223b71206888 Initial import
thib
parents:
diff changeset
286 else if (t->status == WAIT_SELECT_OUTBOX) ;
223b71206888 Initial import
thib
parents:
diff changeset
287 else if (t->status == WAIT_SELECT_VALUE) ;
223b71206888 Initial import
thib
parents:
diff changeset
288 else t->status_mask = Status(t->status_mask | SKIPEND_MASK);
223b71206888 Initial import
thib
parents:
diff changeset
289 }
223b71206888 Initial import
thib
parents:
diff changeset
290 return true; // event not deleted
223b71206888 Initial import
thib
parents:
diff changeset
291 }
223b71206888 Initial import
thib
parents:
diff changeset
292 void TextImpl::PressFuncButton(void* pointer, WidButton* from) {
223b71206888 Initial import
thib
parents:
diff changeset
293 TextImpl* t = (TextImpl*)pointer;
223b71206888 Initial import
thib
parents:
diff changeset
294 if (t->status != WAIT_SELECT_INBOX && t->status != WAIT_SELECT_OUTBOX) return;
223b71206888 Initial import
thib
parents:
diff changeset
295 vector<WidTextButton*>::iterator it;
223b71206888 Initial import
thib
parents:
diff changeset
296 int sel = 0;
223b71206888 Initial import
thib
parents:
diff changeset
297 for (it=t->selects.begin(); it != t->selects.end(); it++, sel++) {
223b71206888 Initial import
thib
parents:
diff changeset
298 if (from == *it) break;
223b71206888 Initial import
thib
parents:
diff changeset
299 }
223b71206888 Initial import
thib
parents:
diff changeset
300 if (it == t->selects.end()) {
223b71206888 Initial import
thib
parents:
diff changeset
301 fprintf(stderr,"TextImpl::PressFuncButton: Cannot find select widget\n");
223b71206888 Initial import
thib
parents:
diff changeset
302 return;
223b71206888 Initial import
thib
parents:
diff changeset
303 }
223b71206888 Initial import
thib
parents:
diff changeset
304 t->status = Status(WAIT_SELECT_VALUE + sel);
223b71206888 Initial import
thib
parents:
diff changeset
305 return;
223b71206888 Initial import
thib
parents:
diff changeset
306 }
223b71206888 Initial import
thib
parents:
diff changeset
307
223b71206888 Initial import
thib
parents:
diff changeset
308 void TextImpl::SetSkipMode(SkipMode _mode) {
223b71206888 Initial import
thib
parents:
diff changeset
309 if ( (skip_mode & SKIP_IN_MENU) && (_mode & SKIP_IN_MENU) == 0) {
223b71206888 Initial import
thib
parents:
diff changeset
310 if (status_mask & BACKLOG_WAIT_MASK) { // backlog mode から復帰
223b71206888 Initial import
thib
parents:
diff changeset
311 status_mask = Status(status_mask & (~(BACKLOG_MASK|BACKLOG_MASK_FWD|BACKLOG_MASK_KOE|BACKLOG_WAIT_MASK)));
223b71206888 Initial import
thib
parents:
diff changeset
312 text->wid->Clear();
223b71206888 Initial import
thib
parents:
diff changeset
313 if (status == WAIT_TEXT && text != 0) {
223b71206888 Initial import
thib
parents:
diff changeset
314 text->StartText(text_stream);
223b71206888 Initial import
thib
parents:
diff changeset
315 text->ShowFace(backlog_item.face.c_str());
223b71206888 Initial import
thib
parents:
diff changeset
316 text->wid->Flush();
223b71206888 Initial import
thib
parents:
diff changeset
317 if (kcursor) kcursor->show();
223b71206888 Initial import
thib
parents:
diff changeset
318 }
223b71206888 Initial import
thib
parents:
diff changeset
319 drawn_backlog_item.Clear();
223b71206888 Initial import
thib
parents:
diff changeset
320 }
223b71206888 Initial import
thib
parents:
diff changeset
321 if (text) text->wid->activate();
223b71206888 Initial import
thib
parents:
diff changeset
322 if (sel_widget) {
223b71206888 Initial import
thib
parents:
diff changeset
323 sel_widget->show();
223b71206888 Initial import
thib
parents:
diff changeset
324 if (kcursor) kcursor->hide();
223b71206888 Initial import
thib
parents:
diff changeset
325 }
223b71206888 Initial import
thib
parents:
diff changeset
326 if (backlog_widget) backlog_widget->show();
223b71206888 Initial import
thib
parents:
diff changeset
327 if (status_mask & STATSAVE_MASK) {
223b71206888 Initial import
thib
parents:
diff changeset
328 status_mask = Status(status_mask & (~STATSAVE_MASK));
223b71206888 Initial import
thib
parents:
diff changeset
329 status = status_saved;
223b71206888 Initial import
thib
parents:
diff changeset
330 }
223b71206888 Initial import
thib
parents:
diff changeset
331 } else if ( (skip_mode & SKIP_IN_MENU) == 0 && (_mode & SKIP_IN_MENU) ) {
223b71206888 Initial import
thib
parents:
diff changeset
332 if (text) text->wid->deactivate();
223b71206888 Initial import
thib
parents:
diff changeset
333 if (sel_widget) sel_widget->hide();
223b71206888 Initial import
thib
parents:
diff changeset
334 if (backlog_widget) backlog_widget->hide();
223b71206888 Initial import
thib
parents:
diff changeset
335 }
223b71206888 Initial import
thib
parents:
diff changeset
336 skip_mode = _mode;
223b71206888 Initial import
thib
parents:
diff changeset
337 }
223b71206888 Initial import
thib
parents:
diff changeset
338
223b71206888 Initial import
thib
parents:
diff changeset
339 /* hash_map が欲しい……*/
223b71206888 Initial import
thib
parents:
diff changeset
340 #include<map>
223b71206888 Initial import
thib
parents:
diff changeset
341 #include<list>
223b71206888 Initial import
thib
parents:
diff changeset
342 struct SaveFaceHash { // バックログセーブ時の顔画像管理を行う
223b71206888 Initial import
thib
parents:
diff changeset
343 map<string, int> facetonum;
223b71206888 Initial import
thib
parents:
diff changeset
344 typedef pair<string,int> Node;
223b71206888 Initial import
thib
parents:
diff changeset
345 typedef list<Node> List;
223b71206888 Initial import
thib
parents:
diff changeset
346 List container;
223b71206888 Initial import
thib
parents:
diff changeset
347 int id_max;
223b71206888 Initial import
thib
parents:
diff changeset
348 static int size_max;
223b71206888 Initial import
thib
parents:
diff changeset
349 SaveFaceHash() : id_max(0) {
223b71206888 Initial import
thib
parents:
diff changeset
350 }
223b71206888 Initial import
thib
parents:
diff changeset
351 void NewNode(string face, int face_id) {
223b71206888 Initial import
thib
parents:
diff changeset
352 facetonum[face] = face_id;
223b71206888 Initial import
thib
parents:
diff changeset
353 container.push_front(Node(face, face_id));
223b71206888 Initial import
thib
parents:
diff changeset
354 if (container.size() > size_max) {
223b71206888 Initial import
thib
parents:
diff changeset
355 Node remove = container.back();
223b71206888 Initial import
thib
parents:
diff changeset
356 container.pop_back();
223b71206888 Initial import
thib
parents:
diff changeset
357 facetonum.erase(remove.first);
223b71206888 Initial import
thib
parents:
diff changeset
358 }
223b71206888 Initial import
thib
parents:
diff changeset
359 }
223b71206888 Initial import
thib
parents:
diff changeset
360 int Add(string face) {
223b71206888 Initial import
thib
parents:
diff changeset
361 int id; int ret = -1;
223b71206888 Initial import
thib
parents:
diff changeset
362 int i; List::iterator it;
223b71206888 Initial import
thib
parents:
diff changeset
363 if (face.empty()) return -1;
223b71206888 Initial import
thib
parents:
diff changeset
364 if (facetonum.find(face) == facetonum.end()) {
223b71206888 Initial import
thib
parents:
diff changeset
365 id = ++id_max;
223b71206888 Initial import
thib
parents:
diff changeset
366 NewNode(face, id);
223b71206888 Initial import
thib
parents:
diff changeset
367 ret = -1;
223b71206888 Initial import
thib
parents:
diff changeset
368 } else {
223b71206888 Initial import
thib
parents:
diff changeset
369 id = facetonum[face];
223b71206888 Initial import
thib
parents:
diff changeset
370 for (i=0, it=container.begin(); it != container.end(); i++, it++) {
223b71206888 Initial import
thib
parents:
diff changeset
371 if (it->second == id) {
223b71206888 Initial import
thib
parents:
diff changeset
372 ret = i;
223b71206888 Initial import
thib
parents:
diff changeset
373 Node n = *it;
223b71206888 Initial import
thib
parents:
diff changeset
374 container.erase(it);
223b71206888 Initial import
thib
parents:
diff changeset
375 container.push_front(n);
223b71206888 Initial import
thib
parents:
diff changeset
376 break;
223b71206888 Initial import
thib
parents:
diff changeset
377 }
223b71206888 Initial import
thib
parents:
diff changeset
378 }
223b71206888 Initial import
thib
parents:
diff changeset
379 }
223b71206888 Initial import
thib
parents:
diff changeset
380 return ret;
223b71206888 Initial import
thib
parents:
diff changeset
381 }
223b71206888 Initial import
thib
parents:
diff changeset
382 string Get(int num) {
223b71206888 Initial import
thib
parents:
diff changeset
383 if (num < 0) return "";
223b71206888 Initial import
thib
parents:
diff changeset
384 List::iterator it = container.begin();
223b71206888 Initial import
thib
parents:
diff changeset
385 for (; it != container.end(); it++) {
223b71206888 Initial import
thib
parents:
diff changeset
386 if (num == 0) return it->first;
223b71206888 Initial import
thib
parents:
diff changeset
387 num--;
223b71206888 Initial import
thib
parents:
diff changeset
388 }
223b71206888 Initial import
thib
parents:
diff changeset
389 return "";
223b71206888 Initial import
thib
parents:
diff changeset
390 }
223b71206888 Initial import
thib
parents:
diff changeset
391 };
223b71206888 Initial import
thib
parents:
diff changeset
392 int SaveFaceHash::size_max = 20;
223b71206888 Initial import
thib
parents:
diff changeset
393
223b71206888 Initial import
thib
parents:
diff changeset
394 void TextImpl::Save(string& str, bool rollback_save) {
223b71206888 Initial import
thib
parents:
diff changeset
395 char buf[1024];
223b71206888 Initial import
thib
parents:
diff changeset
396 str = "\n";
223b71206888 Initial import
thib
parents:
diff changeset
397 str += "[TextImpl Window]\n";
223b71206888 Initial import
thib
parents:
diff changeset
398 sprintf(buf, "TextImplWindow=%d\n",text_window_number);
223b71206888 Initial import
thib
parents:
diff changeset
399 str += buf;
223b71206888 Initial import
thib
parents:
diff changeset
400 if (rollback_save) {
223b71206888 Initial import
thib
parents:
diff changeset
401 ++save_selectcount;
223b71206888 Initial import
thib
parents:
diff changeset
402 BacklogItem save_item;
223b71206888 Initial import
thib
parents:
diff changeset
403 save_item.SetSavepos(save_selectcount);
223b71206888 Initial import
thib
parents:
diff changeset
404 backlog.push_back(save_item);
223b71206888 Initial import
thib
parents:
diff changeset
405 }
223b71206888 Initial import
thib
parents:
diff changeset
406 sprintf(buf, "SaveSelectCount=%d\n",save_selectcount);
223b71206888 Initial import
thib
parents:
diff changeset
407
223b71206888 Initial import
thib
parents:
diff changeset
408 str += buf;
223b71206888 Initial import
thib
parents:
diff changeset
409 int i;
223b71206888 Initial import
thib
parents:
diff changeset
410 for (i=0; i<26; i++) {
223b71206888 Initial import
thib
parents:
diff changeset
411 if (replace_name2[i].empty()) continue;
223b71206888 Initial import
thib
parents:
diff changeset
412 sprintf(buf, "RName.%c=%s\n",i+'A',replace_name2[i].c_str());
223b71206888 Initial import
thib
parents:
diff changeset
413 str += buf;
223b71206888 Initial import
thib
parents:
diff changeset
414 }
223b71206888 Initial import
thib
parents:
diff changeset
415 int cnt = 0;
223b71206888 Initial import
thib
parents:
diff changeset
416 vector<BacklogItem>::iterator it;
223b71206888 Initial import
thib
parents:
diff changeset
417 it = backlog.begin();
223b71206888 Initial import
thib
parents:
diff changeset
418 if (!rollback_save) {
223b71206888 Initial import
thib
parents:
diff changeset
419 SaveFaceHash face_log;
223b71206888 Initial import
thib
parents:
diff changeset
420 do {
223b71206888 Initial import
thib
parents:
diff changeset
421 int cur_scn = -1; int cur_pos = -1;
223b71206888 Initial import
thib
parents:
diff changeset
422 sprintf(buf, "Backlog.%d=",++cnt);
223b71206888 Initial import
thib
parents:
diff changeset
423 str += buf;
223b71206888 Initial import
thib
parents:
diff changeset
424 for (; it != backlog.end(); it++) {
223b71206888 Initial import
thib
parents:
diff changeset
425 buf[0] = 0; int buflen = 0;
223b71206888 Initial import
thib
parents:
diff changeset
426 if (it->scn == -1) continue;
223b71206888 Initial import
thib
parents:
diff changeset
427 if (it->pos == -1 && it->scn != 0) continue;
223b71206888 Initial import
thib
parents:
diff changeset
428
223b71206888 Initial import
thib
parents:
diff changeset
429 buf[buflen++] = ';';
223b71206888 Initial import
thib
parents:
diff changeset
430 if (it->scn == 0 && it->pos == -1) {
223b71206888 Initial import
thib
parents:
diff changeset
431 buflen += snprintf(buf+buflen, 1000-buflen, "\"%s\".", it->text.Save().c_str());
223b71206888 Initial import
thib
parents:
diff changeset
432 } else {
223b71206888 Initial import
thib
parents:
diff changeset
433 if (cur_scn != -1 && cur_scn != it->scn) break; // scn change
223b71206888 Initial import
thib
parents:
diff changeset
434 if (cur_pos != -1 && cur_pos/5000 != it->pos/5000) break; // pos exceeded
223b71206888 Initial import
thib
parents:
diff changeset
435 if (!it->text.container.empty()) {
223b71206888 Initial import
thib
parents:
diff changeset
436 buflen += snprintf(buf+buflen, 1000-buflen, "\"%s\"", it->text.Save().c_str());
223b71206888 Initial import
thib
parents:
diff changeset
437 }
223b71206888 Initial import
thib
parents:
diff changeset
438 if (cur_scn == -1) { // scene change
223b71206888 Initial import
thib
parents:
diff changeset
439 buflen += snprintf(buf+buflen, 1000-buflen, ":%d:%d",it->scn,it->pos);
223b71206888 Initial import
thib
parents:
diff changeset
440 cur_scn = it->scn;
223b71206888 Initial import
thib
parents:
diff changeset
441 } else {
223b71206888 Initial import
thib
parents:
diff changeset
442 buflen += snprintf(buf+buflen, 1000-buflen, "%d",it->pos);
223b71206888 Initial import
thib
parents:
diff changeset
443 }
223b71206888 Initial import
thib
parents:
diff changeset
444 cur_pos = it->pos;
223b71206888 Initial import
thib
parents:
diff changeset
445 }
223b71206888 Initial import
thib
parents:
diff changeset
446 if (it->koe != -1)
223b71206888 Initial import
thib
parents:
diff changeset
447 buflen += snprintf(buf+buflen, 1000-buflen, ",%d",it->koe);
223b71206888 Initial import
thib
parents:
diff changeset
448 if (!it->face.empty()) {
223b71206888 Initial import
thib
parents:
diff changeset
449 if (it->koe == -1) buf[buflen++] = ',';
223b71206888 Initial import
thib
parents:
diff changeset
450 int face_num = face_log.Add(it->face);
223b71206888 Initial import
thib
parents:
diff changeset
451 if (face_num >= 0 && face_num < 20)
223b71206888 Initial import
thib
parents:
diff changeset
452 buflen += snprintf(buf+buflen, 1000-buflen, ",%c", 'A'+face_num);
223b71206888 Initial import
thib
parents:
diff changeset
453 else
223b71206888 Initial import
thib
parents:
diff changeset
454 buflen += snprintf(buf+buflen, 1000-buflen, ",\"%s\"", it->face.c_str());
223b71206888 Initial import
thib
parents:
diff changeset
455 }
223b71206888 Initial import
thib
parents:
diff changeset
456 buf[buflen++] = '\0';
223b71206888 Initial import
thib
parents:
diff changeset
457 if (buflen >= 1000) { // 万が一、バックログ1アイテムの大きさが 1000byte を越えるとき
223b71206888 Initial import
thib
parents:
diff changeset
458 fprintf(stderr,"Fatal : Cannot save backlog crrectly; Please send bug report to the author.\n");
223b71206888 Initial import
thib
parents:
diff changeset
459 } else str += buf;
223b71206888 Initial import
thib
parents:
diff changeset
460 }
223b71206888 Initial import
thib
parents:
diff changeset
461 str += "\n";
223b71206888 Initial import
thib
parents:
diff changeset
462 } while(it != backlog.end());
223b71206888 Initial import
thib
parents:
diff changeset
463 }
223b71206888 Initial import
thib
parents:
diff changeset
464 return;
223b71206888 Initial import
thib
parents:
diff changeset
465 }
223b71206888 Initial import
thib
parents:
diff changeset
466 void TextImpl::Load(const char* str) {
223b71206888 Initial import
thib
parents:
diff changeset
467 if (text) text->wid->Clear();
223b71206888 Initial import
thib
parents:
diff changeset
468 hide();
223b71206888 Initial import
thib
parents:
diff changeset
469 text_window_number = 0;
223b71206888 Initial import
thib
parents:
diff changeset
470 save_selectcount = 0;
223b71206888 Initial import
thib
parents:
diff changeset
471 if (sel_widget) {
223b71206888 Initial import
thib
parents:
diff changeset
472 selects.clear();
223b71206888 Initial import
thib
parents:
diff changeset
473 sel_backlog_pos.clear();
223b71206888 Initial import
thib
parents:
diff changeset
474 delete sel_widget;
223b71206888 Initial import
thib
parents:
diff changeset
475 sel_widget = 0;
223b71206888 Initial import
thib
parents:
diff changeset
476 }
223b71206888 Initial import
thib
parents:
diff changeset
477 if (backlog_widget) {
223b71206888 Initial import
thib
parents:
diff changeset
478 delete backlog_widget;
223b71206888 Initial import
thib
parents:
diff changeset
479 backlog_widget = 0;
223b71206888 Initial import
thib
parents:
diff changeset
480 }
223b71206888 Initial import
thib
parents:
diff changeset
481 status = NORMAL;
223b71206888 Initial import
thib
parents:
diff changeset
482 status_mask = NORMAL;
223b71206888 Initial import
thib
parents:
diff changeset
483 status_saved = NORMAL;
223b71206888 Initial import
thib
parents:
diff changeset
484 text_parsing = false;
223b71206888 Initial import
thib
parents:
diff changeset
485 text_stream.Clear();
223b71206888 Initial import
thib
parents:
diff changeset
486 // backlog.clear();
223b71206888 Initial import
thib
parents:
diff changeset
487 vector<BacklogItem> new_backlog;
223b71206888 Initial import
thib
parents:
diff changeset
488 backlog_item.Clear();
223b71206888 Initial import
thib
parents:
diff changeset
489 cur_backlog_item.Clear();
223b71206888 Initial import
thib
parents:
diff changeset
490 drawn_backlog_item.Clear();
223b71206888 Initial import
thib
parents:
diff changeset
491
223b71206888 Initial import
thib
parents:
diff changeset
492 str = strstr(str, "\n[TextImpl Window]\n");
223b71206888 Initial import
thib
parents:
diff changeset
493
223b71206888 Initial import
thib
parents:
diff changeset
494 if (str) {
223b71206888 Initial import
thib
parents:
diff changeset
495 SaveFaceHash face_log;
223b71206888 Initial import
thib
parents:
diff changeset
496 str += strlen("\n[TextImpl Window]\n");
223b71206888 Initial import
thib
parents:
diff changeset
497 const char* strend = str;
223b71206888 Initial import
thib
parents:
diff changeset
498 do {
223b71206888 Initial import
thib
parents:
diff changeset
499 str = strend;
223b71206888 Initial import
thib
parents:
diff changeset
500
223b71206888 Initial import
thib
parents:
diff changeset
501 strend = strchr(str, '\n');
223b71206888 Initial import
thib
parents:
diff changeset
502 if (strend == 0) strend = str + strlen(str);
223b71206888 Initial import
thib
parents:
diff changeset
503 else strend++;
223b71206888 Initial import
thib
parents:
diff changeset
504
223b71206888 Initial import
thib
parents:
diff changeset
505 if (str[0] == '[') break; // next section
223b71206888 Initial import
thib
parents:
diff changeset
506 if (strncmp(str, "TextImplWindow=",15) == 0) {
223b71206888 Initial import
thib
parents:
diff changeset
507 str += 15;
223b71206888 Initial import
thib
parents:
diff changeset
508 sscanf(str, "%d", &text_window_number);
223b71206888 Initial import
thib
parents:
diff changeset
509 } else if (strncmp(str, "SaveSelectCount=",16) == 0) {
223b71206888 Initial import
thib
parents:
diff changeset
510 str += 16;
223b71206888 Initial import
thib
parents:
diff changeset
511 sscanf(str, "%d", &save_selectcount);
223b71206888 Initial import
thib
parents:
diff changeset
512 } else if (strncmp(str, "RName.", 6) == 0) {
223b71206888 Initial import
thib
parents:
diff changeset
513 int n = str[6]-'A';
223b71206888 Initial import
thib
parents:
diff changeset
514 if (n >= 0 && n < 26 && str[7] == '=') {
223b71206888 Initial import
thib
parents:
diff changeset
515 const char* s = strchr(str, '\n');
223b71206888 Initial import
thib
parents:
diff changeset
516 int len = -1;
223b71206888 Initial import
thib
parents:
diff changeset
517 if (s) len = s-(str+8);
223b71206888 Initial import
thib
parents:
diff changeset
518 if (len > 0) {
223b71206888 Initial import
thib
parents:
diff changeset
519 replace_name2[n].assign(str+8, len);
223b71206888 Initial import
thib
parents:
diff changeset
520 }
223b71206888 Initial import
thib
parents:
diff changeset
521 }
223b71206888 Initial import
thib
parents:
diff changeset
522 } else if (strncmp(str, "Backlog.", 8) == 0) {
223b71206888 Initial import
thib
parents:
diff changeset
523 int cur_scn = -1;
223b71206888 Initial import
thib
parents:
diff changeset
524 int n = -1;
223b71206888 Initial import
thib
parents:
diff changeset
525 sscanf(str+8, "%d", &n); /* not used */
223b71206888 Initial import
thib
parents:
diff changeset
526 const char* next_str = strchr(str, ';');
223b71206888 Initial import
thib
parents:
diff changeset
527 while(next_str != 0 && next_str < strend) {
223b71206888 Initial import
thib
parents:
diff changeset
528 str = next_str + 1;
223b71206888 Initial import
thib
parents:
diff changeset
529 next_str = strchr(str, ';');
223b71206888 Initial import
thib
parents:
diff changeset
530 if (next_str == 0) next_str = strend;
223b71206888 Initial import
thib
parents:
diff changeset
531
223b71206888 Initial import
thib
parents:
diff changeset
532 BacklogItem item;
223b71206888 Initial import
thib
parents:
diff changeset
533 if (str[0] == '"') {
223b71206888 Initial import
thib
parents:
diff changeset
534 const char* send = strchr(str+1, '"');
223b71206888 Initial import
thib
parents:
diff changeset
535 if (send == 0 || send > next_str) continue;
223b71206888 Initial import
thib
parents:
diff changeset
536 string tmp_str; tmp_str.assign(str+1, send-str-1);
223b71206888 Initial import
thib
parents:
diff changeset
537 item.DeleteTextPos();
223b71206888 Initial import
thib
parents:
diff changeset
538 item.text.Load(tmp_str);
223b71206888 Initial import
thib
parents:
diff changeset
539 str = send + 1;
223b71206888 Initial import
thib
parents:
diff changeset
540 }
223b71206888 Initial import
thib
parents:
diff changeset
541 if (str[0] == '.') {
223b71206888 Initial import
thib
parents:
diff changeset
542 item.DeleteTextPos();
223b71206888 Initial import
thib
parents:
diff changeset
543 str++;
223b71206888 Initial import
thib
parents:
diff changeset
544 } else if (str[0] == ':') {
223b71206888 Initial import
thib
parents:
diff changeset
545 sscanf(str, ":%d:%d", &item.scn, &item.pos);
223b71206888 Initial import
thib
parents:
diff changeset
546 cur_scn = item.scn;
223b71206888 Initial import
thib
parents:
diff changeset
547
223b71206888 Initial import
thib
parents:
diff changeset
548 } else {
223b71206888 Initial import
thib
parents:
diff changeset
549 item.scn = cur_scn;
223b71206888 Initial import
thib
parents:
diff changeset
550 sscanf(str, "%d", &item.pos);
223b71206888 Initial import
thib
parents:
diff changeset
551 }
223b71206888 Initial import
thib
parents:
diff changeset
552 str = strchr(str, ',');
223b71206888 Initial import
thib
parents:
diff changeset
553 if (str == 0 || str > next_str) goto backlog_store;
223b71206888 Initial import
thib
parents:
diff changeset
554 str++;
223b71206888 Initial import
thib
parents:
diff changeset
555 if (str[0] == ';' || str[0] == ',')
223b71206888 Initial import
thib
parents:
diff changeset
556 item.koe = -1;
223b71206888 Initial import
thib
parents:
diff changeset
557 else
223b71206888 Initial import
thib
parents:
diff changeset
558 sscanf(str, "%d", &item.koe);
223b71206888 Initial import
thib
parents:
diff changeset
559 str = strchr(str, ',');
223b71206888 Initial import
thib
parents:
diff changeset
560 if (str == 0 || str > next_str) goto backlog_store;
223b71206888 Initial import
thib
parents:
diff changeset
561 str++;
223b71206888 Initial import
thib
parents:
diff changeset
562 if (*str == '"') {
223b71206888 Initial import
thib
parents:
diff changeset
563 const char* send = strchr(str+1, '"');
223b71206888 Initial import
thib
parents:
diff changeset
564 if (send) {
223b71206888 Initial import
thib
parents:
diff changeset
565 item.face.assign(str+1, send-str-1);
223b71206888 Initial import
thib
parents:
diff changeset
566 }
223b71206888 Initial import
thib
parents:
diff changeset
567 } else if (*str >= 'A' && *str <= 'Z') {
223b71206888 Initial import
thib
parents:
diff changeset
568 item.face = face_log.Get(*str - 'A');
223b71206888 Initial import
thib
parents:
diff changeset
569 }
223b71206888 Initial import
thib
parents:
diff changeset
570 face_log.Add(item.face);
223b71206888 Initial import
thib
parents:
diff changeset
571 backlog_store:
223b71206888 Initial import
thib
parents:
diff changeset
572 new_backlog.push_back(item);
223b71206888 Initial import
thib
parents:
diff changeset
573 }
223b71206888 Initial import
thib
parents:
diff changeset
574 }
223b71206888 Initial import
thib
parents:
diff changeset
575 } while (*strend != 0);
223b71206888 Initial import
thib
parents:
diff changeset
576 }
223b71206888 Initial import
thib
parents:
diff changeset
577 if (new_backlog.empty() && (!backlog.empty())) { // empty なら save_selectcount まで backlog を巻き戻す
223b71206888 Initial import
thib
parents:
diff changeset
578 vector<BacklogItem>::iterator it = backlog.end();
223b71206888 Initial import
thib
parents:
diff changeset
579 do {
223b71206888 Initial import
thib
parents:
diff changeset
580 it--;
223b71206888 Initial import
thib
parents:
diff changeset
581 if (it->scn == BacklogItem::SaveSelect && it->pos == save_selectcount) {
223b71206888 Initial import
thib
parents:
diff changeset
582 // Save 位置を見つけたらそれ以降を erase
223b71206888 Initial import
thib
parents:
diff changeset
583 backlog.erase(it, backlog.end());
223b71206888 Initial import
thib
parents:
diff changeset
584 break;
223b71206888 Initial import
thib
parents:
diff changeset
585 }
223b71206888 Initial import
thib
parents:
diff changeset
586 } while(it != backlog.begin());
223b71206888 Initial import
thib
parents:
diff changeset
587 --save_selectcount;
223b71206888 Initial import
thib
parents:
diff changeset
588 } else {
223b71206888 Initial import
thib
parents:
diff changeset
589 backlog.swap(new_backlog);
223b71206888 Initial import
thib
parents:
diff changeset
590 }
223b71206888 Initial import
thib
parents:
diff changeset
591 // backlog.clear();
223b71206888 Initial import
thib
parents:
diff changeset
592 return;
223b71206888 Initial import
thib
parents:
diff changeset
593 }
223b71206888 Initial import
thib
parents:
diff changeset
594
223b71206888 Initial import
thib
parents:
diff changeset
595 void TextImpl::hide(void) {
223b71206888 Initial import
thib
parents:
diff changeset
596 if (text) text->hide();
223b71206888 Initial import
thib
parents:
diff changeset
597 if (kcursor) kcursor->hide();
223b71206888 Initial import
thib
parents:
diff changeset
598 text = 0;
223b71206888 Initial import
thib
parents:
diff changeset
599 }
223b71206888 Initial import
thib
parents:
diff changeset
600 void TextImpl::show(int num) {
223b71206888 Initial import
thib
parents:
diff changeset
601 if (num != text_window_number) {
223b71206888 Initial import
thib
parents:
diff changeset
602 hide();
223b71206888 Initial import
thib
parents:
diff changeset
603 if (num >= 0 && num < 32 && widgets[num] != 0) {
223b71206888 Initial import
thib
parents:
diff changeset
604 text_window_number = num;
223b71206888 Initial import
thib
parents:
diff changeset
605 }
223b71206888 Initial import
thib
parents:
diff changeset
606 }
223b71206888 Initial import
thib
parents:
diff changeset
607 text = widgets[text_window_number];
223b71206888 Initial import
thib
parents:
diff changeset
608 text->show();
223b71206888 Initial import
thib
parents:
diff changeset
609 if (kcursor) {
223b71206888 Initial import
thib
parents:
diff changeset
610 int kx, ky, d;
223b71206888 Initial import
thib
parents:
diff changeset
611 char key[1024];
223b71206888 Initial import
thib
parents:
diff changeset
612 sprintf(key, "#WINDOW.%03d.KEYCUR_MOD", text_window_number);
223b71206888 Initial import
thib
parents:
diff changeset
613 config.GetParam(key, 3, &d, &kx, &ky);
223b71206888 Initial import
thib
parents:
diff changeset
614 // 正しくない気がする
223b71206888 Initial import
thib
parents:
diff changeset
615 kx += text->wid->Pic()->PosX();
223b71206888 Initial import
thib
parents:
diff changeset
616 ky += text->wid->Pic()->PosY();
223b71206888 Initial import
thib
parents:
diff changeset
617 // 微妙に下にする
223b71206888 Initial import
thib
parents:
diff changeset
618 ky += 8;
223b71206888 Initial import
thib
parents:
diff changeset
619 kcursor->Pic()->Move(kx, ky);
223b71206888 Initial import
thib
parents:
diff changeset
620 }
223b71206888 Initial import
thib
parents:
diff changeset
621 }
223b71206888 Initial import
thib
parents:
diff changeset
622 void TextImpl::DrawBacklog(BacklogItem& item, Cmd& cmd) {
18
4d7486cb20a9 Sync with upstream
thib
parents: 17
diff changeset
623 show();
0
223b71206888 Initial import
thib
parents:
diff changeset
624 text->wid->deactivate();
223b71206888 Initial import
thib
parents:
diff changeset
625 status_mask = Status(status_mask | BACKLOG_WAIT_MASK);
223b71206888 Initial import
thib
parents:
diff changeset
626 drawn_backlog_item = item;
223b71206888 Initial import
thib
parents:
diff changeset
627 if (item.text.container.empty()) {
223b71206888 Initial import
thib
parents:
diff changeset
628 // cmd から text 内容を再構成
223b71206888 Initial import
thib
parents:
diff changeset
629 TextStream saved_text = text_stream;
223b71206888 Initial import
thib
parents:
diff changeset
630 text_stream.Clear();
223b71206888 Initial import
thib
parents:
diff changeset
631 AddText(cmd.Str(cmd.args[0]));
223b71206888 Initial import
thib
parents:
diff changeset
632 item.text = text_stream;
223b71206888 Initial import
thib
parents:
diff changeset
633 text_stream = saved_text;
223b71206888 Initial import
thib
parents:
diff changeset
634 }
18
4d7486cb20a9 Sync with upstream
thib
parents: 17
diff changeset
635 item.text.InsertColor(0, item.text.container.size(), 0xff,0xff,0);
17
a95c130b567b Shows name in backlog
thib
parents: 0
diff changeset
636 text->StartText(item.text);
0
223b71206888 Initial import
thib
parents:
diff changeset
637 text->wid->Flush();
223b71206888 Initial import
thib
parents:
diff changeset
638 if (item.face.empty()) text->ResetFace();
223b71206888 Initial import
thib
parents:
diff changeset
639 else text->ShowFace(item.face.c_str());
223b71206888 Initial import
thib
parents:
diff changeset
640 if (kcursor) kcursor->hide();
223b71206888 Initial import
thib
parents:
diff changeset
641 }
223b71206888 Initial import
thib
parents:
diff changeset
642
223b71206888 Initial import
thib
parents:
diff changeset
643 void TextImpl::CreateSelBG(void) {
223b71206888 Initial import
thib
parents:
diff changeset
644 if (sel_bg1 != 0 || sel_bg2 != 0) return;
223b71206888 Initial import
thib
parents:
diff changeset
645
223b71206888 Initial import
thib
parents:
diff changeset
646 const char* btnfile1 = config.GetParaStr("#SELBTN.000.NAME");
223b71206888 Initial import
thib
parents:
diff changeset
647 const char* btnfile2 = config.GetParaStr("#SELBTN.000.BACK");
223b71206888 Initial import
thib
parents:
diff changeset
648 char path[1024];
223b71206888 Initial import
thib
parents:
diff changeset
649 strcpy(path, btnfile1);
223b71206888 Initial import
thib
parents:
diff changeset
650 sel_bg1 = parent.Root().NewSurface(path);
223b71206888 Initial import
thib
parents:
diff changeset
651 if (sel_bg1 == 0) {
223b71206888 Initial import
thib
parents:
diff changeset
652 sprintf(path,"%s.g00",btnfile1);
223b71206888 Initial import
thib
parents:
diff changeset
653 sel_bg1 = parent.Root().NewSurface(path);
223b71206888 Initial import
thib
parents:
diff changeset
654 }
223b71206888 Initial import
thib
parents:
diff changeset
655 strcpy(path, btnfile2);
223b71206888 Initial import
thib
parents:
diff changeset
656 sel_bg2 = parent.Root().NewSurface(path);
223b71206888 Initial import
thib
parents:
diff changeset
657 if (sel_bg2 == 0) {
223b71206888 Initial import
thib
parents:
diff changeset
658 sprintf(path,"%s.g00",btnfile2);
223b71206888 Initial import
thib
parents:
diff changeset
659 sel_bg2 = parent.Root().NewSurface(path);
223b71206888 Initial import
thib
parents:
diff changeset
660 }
223b71206888 Initial import
thib
parents:
diff changeset
661 sel_bg_rect = Rect(0,0,0,0);
223b71206888 Initial import
thib
parents:
diff changeset
662 if (sel_bg1) sel_bg_rect.join(Rect(*sel_bg1));
223b71206888 Initial import
thib
parents:
diff changeset
663 if (sel_bg2) sel_bg_rect.join(Rect(*sel_bg2));
223b71206888 Initial import
thib
parents:
diff changeset
664 return;
223b71206888 Initial import
thib
parents:
diff changeset
665 }
223b71206888 Initial import
thib
parents:
diff changeset
666
223b71206888 Initial import
thib
parents:
diff changeset
667 void TextImpl::CreateSelect(Cmd& cmd) {
223b71206888 Initial import
thib
parents:
diff changeset
668 char key[1024];
223b71206888 Initial import
thib
parents:
diff changeset
669 sprintf(key, "#WINDOW.%03d.SELCOM_USE",text_window_number);
223b71206888 Initial import
thib
parents:
diff changeset
670 int sel_type = 0;
38
658272d883ed * Support (more or less) button style selects (fuuko's ones)
thib
parents: 18
diff changeset
671 if (cmd.cmd3 == 1) config.GetParam(key, 1, &sel_type);
658272d883ed * Support (more or less) button style selects (fuuko's ones)
thib
parents: 18
diff changeset
672 else if (cmd.cmd3 == 3) sel_type = 0;
0
223b71206888 Initial import
thib
parents:
diff changeset
673
223b71206888 Initial import
thib
parents:
diff changeset
674 int sel_size = cmd.args.size() / 2;
223b71206888 Initial import
thib
parents:
diff changeset
675 int i;
223b71206888 Initial import
thib
parents:
diff changeset
676 // cur_backlog_item に次にbacklogに入るべき内容を作成
223b71206888 Initial import
thib
parents:
diff changeset
677 // CreateSelect() 後、SAVEPOINT なので現在のbacklogの内容(前のメッセージ)が
223b71206888 Initial import
thib
parents:
diff changeset
678 // backlog に代入される。その後、backlog_item に cur_backlog_item の内容がセットされる(Wait()内)
223b71206888 Initial import
thib
parents:
diff changeset
679 char backlog_sel_text[11] = {0x81,0x69,0x91,0x49,0x91,0xf0,0x8e,0x88,0x81,0x6a,0x00};
223b71206888 Initial import
thib
parents:
diff changeset
680 cur_backlog_item.Clear();
223b71206888 Initial import
thib
parents:
diff changeset
681 cur_backlog_item.AddTextPos(cmd);
223b71206888 Initial import
thib
parents:
diff changeset
682 cur_backlog_item.text.Add(backlog_sel_text);
223b71206888 Initial import
thib
parents:
diff changeset
683 cur_backlog_item.text.AddReturn();
223b71206888 Initial import
thib
parents:
diff changeset
684 sel_backlog_pos.clear();
223b71206888 Initial import
thib
parents:
diff changeset
685 for (i=0; i<sel_size; i++) {
223b71206888 Initial import
thib
parents:
diff changeset
686 sel_backlog_pos.push_back(cur_backlog_item.text.container.size());
223b71206888 Initial import
thib
parents:
diff changeset
687 cur_backlog_item.text.Add(cmd.Str(cmd.args[i*2]));
223b71206888 Initial import
thib
parents:
diff changeset
688 cur_backlog_item.text.AddReturn();
223b71206888 Initial import
thib
parents:
diff changeset
689 }
223b71206888 Initial import
thib
parents:
diff changeset
690 sel_backlog_pos.push_back(cur_backlog_item.text.container.size());
223b71206888 Initial import
thib
parents:
diff changeset
691
223b71206888 Initial import
thib
parents:
diff changeset
692 if (sel_type == 0) { // Princess Bride: 選択ウィンドウを別表示
223b71206888 Initial import
thib
parents:
diff changeset
693 External_select:
223b71206888 Initial import
thib
parents:
diff changeset
694 CreateSelBG();
223b71206888 Initial import
thib
parents:
diff changeset
695 hide(); // なので、テキストウィンドウは消去
40
651237260724 * Center button-type selects
thib
parents: 39
diff changeset
696 int baseposx, baseposy, repposx, repposy, centerx, centery;
0
223b71206888 Initial import
thib
parents:
diff changeset
697 int mojisize, col1, col2;
40
651237260724 * Center button-type selects
thib
parents: 39
diff changeset
698 config.GetParam("#SELBTN.000.CENTERING", 2, &centerx, &centery);
0
223b71206888 Initial import
thib
parents:
diff changeset
699 config.GetParam("#SELBTN.000.BASEPOS", 2, &baseposx, &baseposy);
223b71206888 Initial import
thib
parents:
diff changeset
700 config.GetParam("#SELBTN.000.REPPOS", 2, &repposx, &repposy);
223b71206888 Initial import
thib
parents:
diff changeset
701 config.GetParam("#SELBTN.000.MOJISIZE", 1, &mojisize);
223b71206888 Initial import
thib
parents:
diff changeset
702 config.GetParam("#SELBTN.000.MOJIDEFAULTCOL", 1, &col1);
223b71206888 Initial import
thib
parents:
diff changeset
703 config.GetParam("#SELBTN.000.MOJISELECTCOL", 1, &col2);
223b71206888 Initial import
thib
parents:
diff changeset
704 if (col1 == col2) col2 = 1; // CLANNAD でとりあえず。
223b71206888 Initial import
thib
parents:
diff changeset
705 int r, g, b;
223b71206888 Initial import
thib
parents:
diff changeset
706 sprintf(key, "#COLOR_TABLE.%03d", col1);
223b71206888 Initial import
thib
parents:
diff changeset
707 config.GetParam(key, 3, &r, &g, &b);
223b71206888 Initial import
thib
parents:
diff changeset
708 Color fore(r,g,b);
223b71206888 Initial import
thib
parents:
diff changeset
709 sprintf(key, "#COLOR_TABLE.%03d", col2);
223b71206888 Initial import
thib
parents:
diff changeset
710 config.GetParam(key, 3, &r, &g, &b);
223b71206888 Initial import
thib
parents:
diff changeset
711 Color seled(r,g,b);
223b71206888 Initial import
thib
parents:
diff changeset
712
223b71206888 Initial import
thib
parents:
diff changeset
713 /* ウィジット作成 */
223b71206888 Initial import
thib
parents:
diff changeset
714 /* ウィンドウ背景の大きさを求める */
223b71206888 Initial import
thib
parents:
diff changeset
715 if (baseposx == 0 && sel_bg_rect.width() != 0)
223b71206888 Initial import
thib
parents:
diff changeset
716 baseposx = (parent.Width()-sel_bg_rect.width()) / 2; // ボタン位置をセンタリング
40
651237260724 * Center button-type selects
thib
parents: 39
diff changeset
717 if (centerx)
651237260724 * Center button-type selects
thib
parents: 39
diff changeset
718 baseposx = (parent.Width()-sel_bg_rect.width()-sel_size*repposx) / 2;
651237260724 * Center button-type selects
thib
parents: 39
diff changeset
719 if (centery)
651237260724 * Center button-type selects
thib
parents: 39
diff changeset
720 baseposy = (parent.Height()-sel_bg_rect.height()-sel_size*repposy) / 2;
0
223b71206888 Initial import
thib
parents:
diff changeset
721
223b71206888 Initial import
thib
parents:
diff changeset
722 sel_widget = parent.create_node( Rect(0, 0, parent.Width(), parent.Height()),0);
223b71206888 Initial import
thib
parents:
diff changeset
723
223b71206888 Initial import
thib
parents:
diff changeset
724 for (i=0; i<sel_size; i++) {
223b71206888 Initial import
thib
parents:
diff changeset
725 PicBase* p;
223b71206888 Initial import
thib
parents:
diff changeset
726 // 背景作成
223b71206888 Initial import
thib
parents:
diff changeset
727 if (sel_bg2) {
223b71206888 Initial import
thib
parents:
diff changeset
728 p = sel_widget->create_node(Rect(baseposx, baseposy, baseposx+sel_bg_rect.width(), baseposy+sel_bg_rect.height()),0);
223b71206888 Initial import
thib
parents:
diff changeset
729 p->SetSurface(sel_bg2, 0, 0);
223b71206888 Initial import
thib
parents:
diff changeset
730 }
223b71206888 Initial import
thib
parents:
diff changeset
731 if (sel_bg1) {
223b71206888 Initial import
thib
parents:
diff changeset
732 p = sel_widget->create_node(Rect(baseposx, baseposy, baseposx+sel_bg_rect.width(), baseposy+sel_bg_rect.height()),0);
223b71206888 Initial import
thib
parents:
diff changeset
733 p->SetSurface(sel_bg1, 0, 0);
223b71206888 Initial import
thib
parents:
diff changeset
734 }
223b71206888 Initial import
thib
parents:
diff changeset
735 /* ボタン作成 */
223b71206888 Initial import
thib
parents:
diff changeset
736 const char* str = cmd.Str(cmd.args[i*2]);
223b71206888 Initial import
thib
parents:
diff changeset
737 int value = cmd.args[i*2+1].value;
223b71206888 Initial import
thib
parents:
diff changeset
738 while(selects.size() <= value) selects.push_back(0); // vector の大きさを広げる
223b71206888 Initial import
thib
parents:
diff changeset
739
223b71206888 Initial import
thib
parents:
diff changeset
740 kconv( (const unsigned char*)str, (unsigned char*)key);
223b71206888 Initial import
thib
parents:
diff changeset
741 selects[value] = new WidTextButton(event, sel_widget, key, mojisize, WidTextButton::CENTER,
223b71206888 Initial import
thib
parents:
diff changeset
742 Rect(baseposx, baseposy, baseposx+sel_bg_rect.width(), baseposy+sel_bg_rect.height()), 1, fore, seled, Color(0,0,0,0));
223b71206888 Initial import
thib
parents:
diff changeset
743 selects[value]->press_func = &PressFuncButton;
223b71206888 Initial import
thib
parents:
diff changeset
744 selects[value]->press_pointer = (void*)this;
223b71206888 Initial import
thib
parents:
diff changeset
745
223b71206888 Initial import
thib
parents:
diff changeset
746 baseposx += repposx;
223b71206888 Initial import
thib
parents:
diff changeset
747 baseposy += repposy;
223b71206888 Initial import
thib
parents:
diff changeset
748 }
223b71206888 Initial import
thib
parents:
diff changeset
749 sel_widget->show_all();
223b71206888 Initial import
thib
parents:
diff changeset
750 status = WAIT_SELECT_OUTBOX;
223b71206888 Initial import
thib
parents:
diff changeset
751 } else { // CLANNAD: テキストウィンドウ内に選択肢表示
223b71206888 Initial import
thib
parents:
diff changeset
752 int mojisize;
223b71206888 Initial import
thib
parents:
diff changeset
753 config.GetParam("#SELBTN.000.MOJISIZE", 1, &mojisize);
223b71206888 Initial import
thib
parents:
diff changeset
754 Color fore(0xff,0xff,0xff);
223b71206888 Initial import
thib
parents:
diff changeset
755 Color seled(0xff,0xff,0xff);
223b71206888 Initial import
thib
parents:
diff changeset
756
223b71206888 Initial import
thib
parents:
diff changeset
757 show();
223b71206888 Initial import
thib
parents:
diff changeset
758 if (text == 0) goto External_select; // テキスト・ウィンドウを表示できなければ外部選択肢にする
223b71206888 Initial import
thib
parents:
diff changeset
759 text->wid->Clear();
223b71206888 Initial import
thib
parents:
diff changeset
760 if (kcursor) kcursor->hide();
223b71206888 Initial import
thib
parents:
diff changeset
761 /* ウィジット作成 : テキスト表示範囲と同じ*/
223b71206888 Initial import
thib
parents:
diff changeset
762 int posx = text->wid->pictext->PosX();
223b71206888 Initial import
thib
parents:
diff changeset
763 int posy = text->wid->pictext->PosY();
223b71206888 Initial import
thib
parents:
diff changeset
764 int sel_w = text->wid->pictext->Width();
223b71206888 Initial import
thib
parents:
diff changeset
765 int sel_h = text->wid->pictext->Height();
223b71206888 Initial import
thib
parents:
diff changeset
766 sel_widget = text->wid->PicNode()->create_node(Rect(posx, posy, posx+sel_w, posy+sel_h), 0);
223b71206888 Initial import
thib
parents:
diff changeset
767
223b71206888 Initial import
thib
parents:
diff changeset
768 int sel_y = 0;
223b71206888 Initial import
thib
parents:
diff changeset
769 for (i=0; i<sel_size; i++) {
223b71206888 Initial import
thib
parents:
diff changeset
770 PicBase* p;
223b71206888 Initial import
thib
parents:
diff changeset
771 /* ボタン作成 */
223b71206888 Initial import
thib
parents:
diff changeset
772 const char* str = cmd.Str(cmd.args[i*2]);
223b71206888 Initial import
thib
parents:
diff changeset
773 int value = cmd.args[i*2+1].value;
223b71206888 Initial import
thib
parents:
diff changeset
774 while(selects.size() <= value) selects.push_back(0); // vector の大きさを広げる
223b71206888 Initial import
thib
parents:
diff changeset
775
223b71206888 Initial import
thib
parents:
diff changeset
776 kconv( (const unsigned char*)str, (unsigned char*)key);
223b71206888 Initial import
thib
parents:
diff changeset
777 selects[value] = new WidTextButton(event, sel_widget, key, mojisize, WidTextButton::Attribute(WidTextButton::REVERSE | WidTextButton::NOPADDING),
223b71206888 Initial import
thib
parents:
diff changeset
778 Rect(0, sel_y, sel_w, sel_y), 1, fore, seled, Color(0,0,0,0));
223b71206888 Initial import
thib
parents:
diff changeset
779 selects[value]->press_func = &PressFuncButton;
223b71206888 Initial import
thib
parents:
diff changeset
780 selects[value]->press_pointer = (void*)this;
223b71206888 Initial import
thib
parents:
diff changeset
781
223b71206888 Initial import
thib
parents:
diff changeset
782 sel_y += selects[value]->Pic()->Height() + 1;
223b71206888 Initial import
thib
parents:
diff changeset
783 }
223b71206888 Initial import
thib
parents:
diff changeset
784 sel_widget->show_all();
223b71206888 Initial import
thib
parents:
diff changeset
785 status = WAIT_SELECT_INBOX;
223b71206888 Initial import
thib
parents:
diff changeset
786 }
223b71206888 Initial import
thib
parents:
diff changeset
787 }
223b71206888 Initial import
thib
parents:
diff changeset
788
223b71206888 Initial import
thib
parents:
diff changeset
789 void TextImpl::AddText(const char* str_o) {
223b71206888 Initial import
thib
parents:
diff changeset
790 char str[10001];
223b71206888 Initial import
thib
parents:
diff changeset
791 if (text == 0) return;
223b71206888 Initial import
thib
parents:
diff changeset
792 /* まず、replace string を変換 */
223b71206888 Initial import
thib
parents:
diff changeset
793 int i;
223b71206888 Initial import
thib
parents:
diff changeset
794 int cnt = 0;
223b71206888 Initial import
thib
parents:
diff changeset
795 /* * = 81 96 A-Z = 0x82 [0x60-0x79] */
223b71206888 Initial import
thib
parents:
diff changeset
796 /* % = 81 93 A-Z = 0x82 [0x60-0x79] */
223b71206888 Initial import
thib
parents:
diff changeset
797 for (i=0; cnt<10000 && str_o[i] != 0; i++) {
223b71206888 Initial import
thib
parents:
diff changeset
798 if (str_o[i] < 0) {
223b71206888 Initial import
thib
parents:
diff changeset
799 if ( (unsigned char)str_o[i] == 0x81 && (unsigned char)str_o[i+1] == 0x96 && (unsigned char)str_o[i+2] == 0x82) {
223b71206888 Initial import
thib
parents:
diff changeset
800 int c = str_o[i+3];
223b71206888 Initial import
thib
parents:
diff changeset
801 if (c >= 0x60 && c <= 0x79 && replace_name[c-0x60].length() != 0) { // 名前変換
223b71206888 Initial import
thib
parents:
diff changeset
802 i += 3;
223b71206888 Initial import
thib
parents:
diff changeset
803 strcpy(str+cnt, replace_name[c-0x60].c_str());
223b71206888 Initial import
thib
parents:
diff changeset
804 cnt += replace_name[c-0x60].length();
223b71206888 Initial import
thib
parents:
diff changeset
805 continue;
223b71206888 Initial import
thib
parents:
diff changeset
806 }
223b71206888 Initial import
thib
parents:
diff changeset
807 } else if ( (unsigned char)str_o[i] == 0x81 && (unsigned char)str_o[i+1] == 0x93 && (unsigned char)str_o[i+2] == 0x82) {
223b71206888 Initial import
thib
parents:
diff changeset
808 int c = str_o[i+3];
223b71206888 Initial import
thib
parents:
diff changeset
809 if (c >= 0x60 && c <= 0x79 && replace_name2[c-0x60].length() != 0) { // 名前変換2
223b71206888 Initial import
thib
parents:
diff changeset
810 i += 3;
223b71206888 Initial import
thib
parents:
diff changeset
811 strcpy(str+cnt, replace_name2[c-0x60].c_str());
223b71206888 Initial import
thib
parents:
diff changeset
812 cnt += replace_name2[c-0x60].length();
223b71206888 Initial import
thib
parents:
diff changeset
813 continue;
223b71206888 Initial import
thib
parents:
diff changeset
814 }
223b71206888 Initial import
thib
parents:
diff changeset
815 }
223b71206888 Initial import
thib
parents:
diff changeset
816 str[cnt++] = str_o[i++];
223b71206888 Initial import
thib
parents:
diff changeset
817 }
223b71206888 Initial import
thib
parents:
diff changeset
818 str[cnt++] = str_o[i];
223b71206888 Initial import
thib
parents:
diff changeset
819 }
223b71206888 Initial import
thib
parents:
diff changeset
820 str[cnt] = 0;
223b71206888 Initial import
thib
parents:
diff changeset
821 str[10000] = 0;
223b71206888 Initial import
thib
parents:
diff changeset
822 char* str_top = str;
223b71206888 Initial import
thib
parents:
diff changeset
823
223b71206888 Initial import
thib
parents:
diff changeset
824 for (char* s = str_top; *s != 0; s++) {
223b71206888 Initial import
thib
parents:
diff changeset
825 // if (*(unsigned char*)s == 0xa1 && *(unsigned char*)(s+1) == 0xda) { /* euc */
223b71206888 Initial import
thib
parents:
diff changeset
826 if (*(unsigned char*)s == 0x81 && *(unsigned char*)(s+1) == 0x79) { /* sjis */
223b71206888 Initial import
thib
parents:
diff changeset
827 // 名前
223b71206888 Initial import
thib
parents:
diff changeset
828 *s = 0;
223b71206888 Initial import
thib
parents:
diff changeset
829 if (s != str_top) text_stream.Add(str_top);
223b71206888 Initial import
thib
parents:
diff changeset
830 s += 2;
223b71206888 Initial import
thib
parents:
diff changeset
831 char* name_top = s;
223b71206888 Initial import
thib
parents:
diff changeset
832 for (; *s != 0; s++) {
223b71206888 Initial import
thib
parents:
diff changeset
833 // if (*(unsigned char*)s == 0xa1 && *(unsigned char*)(s+1) == 0xdb) { /* euc */
223b71206888 Initial import
thib
parents:
diff changeset
834 if (*(unsigned char*)s == 0x81 && *(unsigned char*)(s+1) == 0x7a) { /* sjis */
223b71206888 Initial import
thib
parents:
diff changeset
835 *s = 0;
223b71206888 Initial import
thib
parents:
diff changeset
836 s += 2;
223b71206888 Initial import
thib
parents:
diff changeset
837 text_stream.AddName(name_top);
223b71206888 Initial import
thib
parents:
diff changeset
838 break;
223b71206888 Initial import
thib
parents:
diff changeset
839 }
223b71206888 Initial import
thib
parents:
diff changeset
840 if (*s < 0 && s[1] != 0) s++; // 全角文字なら2字飛ばす
223b71206888 Initial import
thib
parents:
diff changeset
841 }
223b71206888 Initial import
thib
parents:
diff changeset
842 str_top = s;
223b71206888 Initial import
thib
parents:
diff changeset
843 }
223b71206888 Initial import
thib
parents:
diff changeset
844 if (*s == 0x0a) {
223b71206888 Initial import
thib
parents:
diff changeset
845 *s = 0;
223b71206888 Initial import
thib
parents:
diff changeset
846 text_stream.Add(str_top);
223b71206888 Initial import
thib
parents:
diff changeset
847 text_stream.AddReturn();
223b71206888 Initial import
thib
parents:
diff changeset
848 str_top = s;
223b71206888 Initial import
thib
parents:
diff changeset
849 } else if (*s < 0 && s[1] != 0) s++;
223b71206888 Initial import
thib
parents:
diff changeset
850 }
223b71206888 Initial import
thib
parents:
diff changeset
851 text_stream.Add(str_top);
223b71206888 Initial import
thib
parents:
diff changeset
852 return;
223b71206888 Initial import
thib
parents:
diff changeset
853 }
223b71206888 Initial import
thib
parents:
diff changeset
854
223b71206888 Initial import
thib
parents:
diff changeset
855 void TextImpl::Exec(Cmd& cmd) {
223b71206888 Initial import
thib
parents:
diff changeset
856 if (cmd.cmd_type == CMD_TEXT) {
223b71206888 Initial import
thib
parents:
diff changeset
857 if (text == 0) {
223b71206888 Initial import
thib
parents:
diff changeset
858 show();
223b71206888 Initial import
thib
parents:
diff changeset
859 }
223b71206888 Initial import
thib
parents:
diff changeset
860 if (cmd.args.size() != 1) return;
223b71206888 Initial import
thib
parents:
diff changeset
861 if (ruby_text_flag) {
223b71206888 Initial import
thib
parents:
diff changeset
862 ruby_text = cmd.Str(cmd.args[0]);
223b71206888 Initial import
thib
parents:
diff changeset
863 ruby_text_flag = 0;
223b71206888 Initial import
thib
parents:
diff changeset
864 cmd.clear();
223b71206888 Initial import
thib
parents:
diff changeset
865 return;
223b71206888 Initial import
thib
parents:
diff changeset
866 }
223b71206888 Initial import
thib
parents:
diff changeset
867 cur_backlog_item.AddTextPos(cmd);
223b71206888 Initial import
thib
parents:
diff changeset
868 AddText(cmd.Str(cmd.args[0]));
223b71206888 Initial import
thib
parents:
diff changeset
869 char debug[1024];
223b71206888 Initial import
thib
parents:
diff changeset
870 kconv( (unsigned char*)cmd.Str(cmd.args[0]), (unsigned char*)debug);
223b71206888 Initial import
thib
parents:
diff changeset
871 eprintf("text: %s\n",debug);
223b71206888 Initial import
thib
parents:
diff changeset
872 if (text_parsing)
223b71206888 Initial import
thib
parents:
diff changeset
873 cmd.clear();
223b71206888 Initial import
thib
parents:
diff changeset
874 else
223b71206888 Initial import
thib
parents:
diff changeset
875 cmd.cmd_type = CMD_SAVEPOINT;
223b71206888 Initial import
thib
parents:
diff changeset
876 text_parsing = true; /* テキスト待ち直後のテキスト位置=セーブ位置 */
223b71206888 Initial import
thib
parents:
diff changeset
877 return;
223b71206888 Initial import
thib
parents:
diff changeset
878 }
223b71206888 Initial import
thib
parents:
diff changeset
879 if (cmd.cmd_type != CMD_OTHER) return;
223b71206888 Initial import
thib
parents:
diff changeset
880 /* テキストウィンドウを消去するコマンド類をチェックする */
223b71206888 Initial import
thib
parents:
diff changeset
881 if (cmd.cmd1 == 1 && cmd.cmd2 == 0x21) {
223b71206888 Initial import
thib
parents:
diff changeset
882 if (cmd.cmd3 == 0x49 || cmd.cmd3 == 0x4b || cmd.cmd3 == 0x4c) {
223b71206888 Initial import
thib
parents:
diff changeset
883 if (text) text->ResetFace();
223b71206888 Initial import
thib
parents:
diff changeset
884 cur_backlog_item.face = "";
223b71206888 Initial import
thib
parents:
diff changeset
885 hide();
223b71206888 Initial import
thib
parents:
diff changeset
886 }
223b71206888 Initial import
thib
parents:
diff changeset
887 }
223b71206888 Initial import
thib
parents:
diff changeset
888 if (cmd.cmd1 == 1 && cmd.cmd2 == 0x17 && cmd.cmd3 == 0 && cmd.cmd4 == 1) {
223b71206888 Initial import
thib
parents:
diff changeset
889 // PlayKoe ; 声出力コマンドをチェックする */
223b71206888 Initial import
thib
parents:
diff changeset
890 cur_backlog_item.koe = cmd.args[0].value;
223b71206888 Initial import
thib
parents:
diff changeset
891 }
223b71206888 Initial import
thib
parents:
diff changeset
892 if (cmd.cmd1 == 0 && cmd.cmd2 == 3 && cmd.cmd3 == 0x97) { // いいのかなー
223b71206888 Initial import
thib
parents:
diff changeset
893
223b71206888 Initial import
thib
parents:
diff changeset
894 if (text) {
223b71206888 Initial import
thib
parents:
diff changeset
895 text->ResetFace();
223b71206888 Initial import
thib
parents:
diff changeset
896 text->wid->Clear();
223b71206888 Initial import
thib
parents:
diff changeset
897 }
223b71206888 Initial import
thib
parents:
diff changeset
898 cur_backlog_item.face = "";
223b71206888 Initial import
thib
parents:
diff changeset
899 text_stream.Clear();
223b71206888 Initial import
thib
parents:
diff changeset
900 hide();
223b71206888 Initial import
thib
parents:
diff changeset
901 }
223b71206888 Initial import
thib
parents:
diff changeset
902 if (cmd.cmd1 == 0 && cmd.cmd2 == 3) {
223b71206888 Initial import
thib
parents:
diff changeset
903 if (cmd.cmd3 == 0x11) { // テキスト表示、クリック待ち
223b71206888 Initial import
thib
parents:
diff changeset
904 if (text) {
223b71206888 Initial import
thib
parents:
diff changeset
905 eprintf("start\n");
223b71206888 Initial import
thib
parents:
diff changeset
906 text->StartText(text_stream);
223b71206888 Initial import
thib
parents:
diff changeset
907 if (skip_mode & SKIP_TEXT) text->wid->Flush();
223b71206888 Initial import
thib
parents:
diff changeset
908 else if (kcursor) kcursor->show();
223b71206888 Initial import
thib
parents:
diff changeset
909 status = WAIT_TEXT;
223b71206888 Initial import
thib
parents:
diff changeset
910 text_parsing = false;
223b71206888 Initial import
thib
parents:
diff changeset
911 }
223b71206888 Initial import
thib
parents:
diff changeset
912 backlog_item = cur_backlog_item;
223b71206888 Initial import
thib
parents:
diff changeset
913 if (cur_backlog_item.scn == 0 && cur_backlog_item.pos == -1) backlog_item.text = text_stream;
223b71206888 Initial import
thib
parents:
diff changeset
914 cur_backlog_item.Clear();
223b71206888 Initial import
thib
parents:
diff changeset
915
223b71206888 Initial import
thib
parents:
diff changeset
916 cmd.clear();
223b71206888 Initial import
thib
parents:
diff changeset
917 cmd.cmd_type = CMD_WAITFRAMEUPDATE; // 画像描画に戻る(skip時にテキストが描画されやすくするため)
223b71206888 Initial import
thib
parents:
diff changeset
918 // これだと1フレーム1テキストしか表示されなくなるので注意
223b71206888 Initial import
thib
parents:
diff changeset
919 } else if (cmd.cmd3 == 3 || cmd.cmd3 == 0xc9) { // リターン挿入
223b71206888 Initial import
thib
parents:
diff changeset
920 text_stream.AddReturn();
223b71206888 Initial import
thib
parents:
diff changeset
921 cur_backlog_item.DeleteTextPos();
223b71206888 Initial import
thib
parents:
diff changeset
922 cmd.clear();
223b71206888 Initial import
thib
parents:
diff changeset
923 } else if (cmd.cmd3 == 0x3e8 || cmd.cmd3 == 0x3e9) { // 顔グラフィック変更
223b71206888 Initial import
thib
parents:
diff changeset
924 if (text == 0) {
223b71206888 Initial import
thib
parents:
diff changeset
925 show();
223b71206888 Initial import
thib
parents:
diff changeset
926 }
223b71206888 Initial import
thib
parents:
diff changeset
927 if (cmd.cmd3 == 0x3e8) {
223b71206888 Initial import
thib
parents:
diff changeset
928 string s = cmd.Str(cmd.args[0]);
223b71206888 Initial import
thib
parents:
diff changeset
929 s += ".g00";
223b71206888 Initial import
thib
parents:
diff changeset
930 if (text) text->ShowFace(s.c_str());
223b71206888 Initial import
thib
parents:
diff changeset
931 cur_backlog_item.face = s;
223b71206888 Initial import
thib
parents:
diff changeset
932 cmd.cmd_type = CMD_SAVECMD_ONCE;
223b71206888 Initial import
thib
parents:
diff changeset
933 } else if (cmd.cmd3 == 0x3e9) { // 顔グラフィック消去
223b71206888 Initial import
thib
parents:
diff changeset
934 if (text) text->ResetFace();
223b71206888 Initial import
thib
parents:
diff changeset
935 cur_backlog_item.face = "";
223b71206888 Initial import
thib
parents:
diff changeset
936 cmd.cmd_type = CMD_SAVECMD_ONCE;
223b71206888 Initial import
thib
parents:
diff changeset
937 }
223b71206888 Initial import
thib
parents:
diff changeset
938 } else if (cmd.cmd3 == 0x78) { // ルビ関連
223b71206888 Initial import
thib
parents:
diff changeset
939 if (text == 0) {
223b71206888 Initial import
thib
parents:
diff changeset
940 show();
223b71206888 Initial import
thib
parents:
diff changeset
941 }
223b71206888 Initial import
thib
parents:
diff changeset
942 if (cmd.cmd4 == 1) {
223b71206888 Initial import
thib
parents:
diff changeset
943 ruby_text_flag = true;
223b71206888 Initial import
thib
parents:
diff changeset
944 eprintf("SetRubyTextImpl.");
223b71206888 Initial import
thib
parents:
diff changeset
945 cmd.clear();
223b71206888 Initial import
thib
parents:
diff changeset
946 } else if (cmd.cmd4 == 0) {
223b71206888 Initial import
thib
parents:
diff changeset
947 if (ruby_text.length() == 0) { // ルビを振るテキストがない
223b71206888 Initial import
thib
parents:
diff changeset
948 eprintf("Cannot find ruby text.\n");
223b71206888 Initial import
thib
parents:
diff changeset
949 return;
223b71206888 Initial import
thib
parents:
diff changeset
950 }
223b71206888 Initial import
thib
parents:
diff changeset
951 if (cmd.args.size() != 1) return;
223b71206888 Initial import
thib
parents:
diff changeset
952 char debug1[1024], debug2[1024];
223b71206888 Initial import
thib
parents:
diff changeset
953 kconv( (unsigned char*)ruby_text.c_str(), (unsigned char*)debug1);
223b71206888 Initial import
thib
parents:
diff changeset
954 kconv( (unsigned char*)cmd.Str(cmd.args[0]), (unsigned char*)debug2);
223b71206888 Initial import
thib
parents:
diff changeset
955 eprintf("SetRuby. %s, %s",debug1, debug2);
223b71206888 Initial import
thib
parents:
diff changeset
956 text_stream.AddRuby(ruby_text.c_str(), cmd.Str(cmd.args[0]));
223b71206888 Initial import
thib
parents:
diff changeset
957 cur_backlog_item.DeleteTextPos();
223b71206888 Initial import
thib
parents:
diff changeset
958 cmd.clear();
223b71206888 Initial import
thib
parents:
diff changeset
959 }
223b71206888 Initial import
thib
parents:
diff changeset
960 } else if (cmd.cmd3 == 0x66) { // テキストウィンドウの形
223b71206888 Initial import
thib
parents:
diff changeset
961 if (cmd.cmd4 == 0) {
223b71206888 Initial import
thib
parents:
diff changeset
962 eprintf("set text window <- %d\n",cmd.args[0].value);
223b71206888 Initial import
thib
parents:
diff changeset
963 if (text) show(cmd.args[0].value);
223b71206888 Initial import
thib
parents:
diff changeset
964 else text_window_number = cmd.args[0].value;
223b71206888 Initial import
thib
parents:
diff changeset
965 } else if (cmd.cmd4 == 1) { // default value
223b71206888 Initial import
thib
parents:
diff changeset
966 eprintf("set text window <- default\n");
223b71206888 Initial import
thib
parents:
diff changeset
967 if (text) show(0);
223b71206888 Initial import
thib
parents:
diff changeset
968 else text_window_number = 0;
223b71206888 Initial import
thib
parents:
diff changeset
969 }
223b71206888 Initial import
thib
parents:
diff changeset
970 cmd.clear();
223b71206888 Initial import
thib
parents:
diff changeset
971 } else if (cmd.cmd3 == 0x67) { // テキストウィンドウ表示?
223b71206888 Initial import
thib
parents:
diff changeset
972 show();
223b71206888 Initial import
thib
parents:
diff changeset
973 // 表示の際はテキストをクリアしない?
223b71206888 Initial import
thib
parents:
diff changeset
974 // if (text) text->wid->Clear();
223b71206888 Initial import
thib
parents:
diff changeset
975 // text_stream.Clear();
223b71206888 Initial import
thib
parents:
diff changeset
976 cmd.clear();
223b71206888 Initial import
thib
parents:
diff changeset
977 } else if (cmd.cmd3 == 0x68) { // テキスト表示?
223b71206888 Initial import
thib
parents:
diff changeset
978 // 全テキスト表示
223b71206888 Initial import
thib
parents:
diff changeset
979 if (text) {
223b71206888 Initial import
thib
parents:
diff changeset
980 text->StartText(text_stream);
223b71206888 Initial import
thib
parents:
diff changeset
981 text->wid->Flush();
223b71206888 Initial import
thib
parents:
diff changeset
982 }
223b71206888 Initial import
thib
parents:
diff changeset
983 cmd.clear();
223b71206888 Initial import
thib
parents:
diff changeset
984 } else if (cmd.cmd3 == 0x98) { // テキストウィンドウクリア?
223b71206888 Initial import
thib
parents:
diff changeset
985 show();
223b71206888 Initial import
thib
parents:
diff changeset
986 if (text) text->wid->Clear();
223b71206888 Initial import
thib
parents:
diff changeset
987 text_stream.Clear();
223b71206888 Initial import
thib
parents:
diff changeset
988 cmd.clear();
223b71206888 Initial import
thib
parents:
diff changeset
989 }
223b71206888 Initial import
thib
parents:
diff changeset
990 } else if (cmd.cmd1 == 0 && cmd.cmd2 == 2 && (cmd.cmd3 == 1 || cmd.cmd3 == 3) && cmd.cmd4 == 0) {
223b71206888 Initial import
thib
parents:
diff changeset
991 // 選択肢
223b71206888 Initial import
thib
parents:
diff changeset
992 CreateSelect(cmd);
39 993 //FIXME: Check if it's really clean
994 if (text_parsing) {
995 show();
996 text->StartText(text_stream);
997 if (skip_mode & SKIP_TEXT) text->wid->Flush();
998 else if (kcursor) kcursor->hide();
999 text_parsing = false;
1000 text_stream.Clear();
1001 }
0
223b71206888 Initial import
thib
parents:
diff changeset
1002 cmd.cmd_type = CMD_ROLLBACKPOINT; /* 選択肢はセーブ位置 / シナリオ巻き戻し位置 */
223b71206888 Initial import
thib
parents:
diff changeset
1003 // cmd.clear();
223b71206888 Initial import
thib
parents:
diff changeset
1004 } else if (cmd.cmd1 == 0 && cmd.cmd2 == 4) {
223b71206888 Initial import
thib
parents:
diff changeset
1005 if (cmd.cmd3 == 0x44c) { // テキストスキップ開始
223b71206888 Initial import
thib
parents:
diff changeset
1006 status_mask = Status(SKIPMASK | status_mask);
223b71206888 Initial import
thib
parents:
diff changeset
1007 cmd.clear();
223b71206888 Initial import
thib
parents:
diff changeset
1008 } else if (cmd.cmd3 == 0x3e8) { // ウィンドウ消去
223b71206888 Initial import
thib
parents:
diff changeset
1009 status_mask = Status(CLEARSCR_MASK | status_mask);
223b71206888 Initial import
thib
parents:
diff changeset
1010 cmd.clear();
223b71206888 Initial import
thib
parents:
diff changeset
1011 }
223b71206888 Initial import
thib
parents:
diff changeset
1012 } else if (cmd.cmd1 == 1 && cmd.cmd2 == 0x04) {
223b71206888 Initial import
thib
parents:
diff changeset
1013 /* ウェイト関連命令 */
223b71206888 Initial import
thib
parents:
diff changeset
1014 if (cmd.cmd3 == 0x64 || cmd.cmd3 == 0x6f || cmd.cmd3 == 0x79) {
223b71206888 Initial import
thib
parents:
diff changeset
1015 eprintf("wait %dmsec\n",cmd.args[0].value);
223b71206888 Initial import
thib
parents:
diff changeset
1016 if (cmd.cmd3 == 0x64 && text) {
223b71206888 Initial import
thib
parents:
diff changeset
1017 /* 0x64 だと文字描画中の待ちに使うことがある */
223b71206888 Initial import
thib
parents:
diff changeset
1018 text->StartText(text_stream);
223b71206888 Initial import
thib
parents:
diff changeset
1019 text->wid->Flush();
223b71206888 Initial import
thib
parents:
diff changeset
1020 }
223b71206888 Initial import
thib
parents:
diff changeset
1021 if (cmd.cmd3 == 0x6f || cmd.cmd3 == 0x79) wait_time = base_time + cmd.args[0].value;
223b71206888 Initial import
thib
parents:
diff changeset
1022 else wait_time = old_time + cmd.args[0].value;
223b71206888 Initial import
thib
parents:
diff changeset
1023 status = WAIT;
223b71206888 Initial import
thib
parents:
diff changeset
1024 cmd.cmd_type = CMD_WAITFRAMEUPDATE; // 画像描画に戻る(skip時にテキストが描画されやすくするため)
223b71206888 Initial import
thib
parents:
diff changeset
1025 } else if (cmd.cmd3 == 0x65 || cmd.cmd3 == 0x70) {
223b71206888 Initial import
thib
parents:
diff changeset
1026 eprintf("wait %dmsec(click stop)\n",cmd.args[0].value);
223b71206888 Initial import
thib
parents:
diff changeset
1027 if (cmd.cmd3 == 0x70) wait_time = base_time + cmd.args[0].value;
223b71206888 Initial import
thib
parents:
diff changeset
1028 else wait_time = old_time + cmd.args[0].value;
223b71206888 Initial import
thib
parents:
diff changeset
1029 status = WAIT_CLICK;
223b71206888 Initial import
thib
parents:
diff changeset
1030 cmd.cmd_type = CMD_WAITFRAMEUPDATE; // 画像描画に戻る(skip時にテキストが描画されやすくするため)
223b71206888 Initial import
thib
parents:
diff changeset
1031 } else if (cmd.cmd3 == 0x83) {
223b71206888 Initial import
thib
parents:
diff changeset
1032 /* マウスがクリックされるまで待つ */
223b71206888 Initial import
thib
parents:
diff changeset
1033 eprintf("wait and get mouse pos at click\n");
223b71206888 Initial import
thib
parents:
diff changeset
1034 wait_time = old_time + 1000 * 1000;
223b71206888 Initial import
thib
parents:
diff changeset
1035 status = WAIT_CLICK_MOUSEPOS;
223b71206888 Initial import
thib
parents:
diff changeset
1036 wait_savedvar[0] = cmd.args[0];
223b71206888 Initial import
thib
parents:
diff changeset
1037 wait_savedvar[1] = cmd.args[1];
223b71206888 Initial import
thib
parents:
diff changeset
1038 cmd.clear();
223b71206888 Initial import
thib
parents:
diff changeset
1039 } else if (cmd.cmd3 == 0x1fe) {
223b71206888 Initial import
thib
parents:
diff changeset
1040 eprintf("get timer value[%d]\n",cmd.args[0].value);
223b71206888 Initial import
thib
parents:
diff changeset
1041 if (timer_var.find(cmd.args[0].value) == timer_var.end()) {
223b71206888 Initial import
thib
parents:
diff changeset
1042 cmd.SetSysvar(0);
223b71206888 Initial import
thib
parents:
diff changeset
1043 } else {
223b71206888 Initial import
thib
parents:
diff changeset
1044 TimerAtom& atom = timer_var[cmd.args[0].value];
223b71206888 Initial import
thib
parents:
diff changeset
1045 if (atom.total_time <= 0) atom.total_time = 1;
223b71206888 Initial import
thib
parents:
diff changeset
1046 int cur_tm = old_time - atom.start_time;
223b71206888 Initial import
thib
parents:
diff changeset
1047 if (cur_tm < 0) cur_tm = atom.total_time; // エラーなら最終時間に合わせる
223b71206888 Initial import
thib
parents:
diff changeset
1048 if (cur_tm > atom.total_time) cur_tm = atom.total_time;
223b71206888 Initial import
thib
parents:
diff changeset
1049 // use 'long long'(64bit) or 'double'(80bit) type, since total_time, to and from is 32 bit.
223b71206888 Initial import
thib
parents:
diff changeset
1050 int v = atom.from + (long long)(atom.to-atom.from)*cur_tm/int(atom.total_time);
223b71206888 Initial import
thib
parents:
diff changeset
1051 cmd.SetSysvar(v);
223b71206888 Initial import
thib
parents:
diff changeset
1052 }
223b71206888 Initial import
thib
parents:
diff changeset
1053 /* From rldev-1.40, reallive.kfn
223b71206888 Initial import
thib
parents:
diff changeset
1054 0x72 fun Timer (store) <1:Sys:00114, 1> ('counter') ()
223b71206888 Initial import
thib
parents:
diff changeset
1055 0x73 fun CmpTimer (store) <1:Sys:00115, 1> ('time') ('time', 'counter')
223b71206888 Initial import
thib
parents:
diff changeset
1056 0x74 fun SetTimer <1:Sys:00116, 1> ('time') ('time', 'counter')
223b71206888 Initial import
thib
parents:
diff changeset
1057
223b71206888 Initial import
thib
parents:
diff changeset
1058 0x78 fun ResetExTimer <1:Sys:00120, 1> ('counter') ()
223b71206888 Initial import
thib
parents:
diff changeset
1059 0x79 fun timeEx <1:Sys:00121, 1> ('time') ('time', 'counter')
223b71206888 Initial import
thib
parents:
diff changeset
1060 0x7a fun timeExC (store) <1:Sys:00122, 1> ('time') ('time', 'counter')
223b71206888 Initial import
thib
parents:
diff changeset
1061 0x7b fun timeExC2 (store) <1:Sys:00123, 1> ('time') ('time', 'counter') // UNDOCUMENTED
223b71206888 Initial import
thib
parents:
diff changeset
1062 0x7c fun ExTimer (store) <1:Sys:00124, 1> ('counter') ()
223b71206888 Initial import
thib
parents:
diff changeset
1063 0x7d fun CmpExTimer (store) <1:Sys:00125, 1> ('time') ('time', 'counter')
223b71206888 Initial import
thib
parents:
diff changeset
1064 0x7e fun SetExTimer <1:Sys:00126, 1> ('time') ('time', 'counter')
223b71206888 Initial import
thib
parents:
diff changeset
1065 */
223b71206888 Initial import
thib
parents:
diff changeset
1066
223b71206888 Initial import
thib
parents:
diff changeset
1067 } else if (cmd.cmd3 == 0x6e || cmd.cmd3 == 0x78) { // set basetime
223b71206888 Initial import
thib
parents:
diff changeset
1068 if (cmd.cmd4 == 1) {
223b71206888 Initial import
thib
parents:
diff changeset
1069 eprintf("set basetime\n");
223b71206888 Initial import
thib
parents:
diff changeset
1070 base_time = old_time;
223b71206888 Initial import
thib
parents:
diff changeset
1071 cmd.clear();
223b71206888 Initial import
thib
parents:
diff changeset
1072 } else if (cmd.cmd4 == 0) { // n-th base time
223b71206888 Initial import
thib
parents:
diff changeset
1073 int index = cmd.args[0].value;
223b71206888 Initial import
thib
parents:
diff changeset
1074 eprintf("set basetime (%d)\n",index);
223b71206888 Initial import
thib
parents:
diff changeset
1075 TimerAtom& atom = timer_var[index];
223b71206888 Initial import
thib
parents:
diff changeset
1076 atom.from = 0;
223b71206888 Initial import
thib
parents:
diff changeset
1077 atom.to = 0;
223b71206888 Initial import
thib
parents:
diff changeset
1078 atom.total_time = 0;
223b71206888 Initial import
thib
parents:
diff changeset
1079 atom.start_time = old_time;
223b71206888 Initial import
thib
parents:
diff changeset
1080 cmd.clear();
223b71206888 Initial import
thib
parents:
diff changeset
1081 }
223b71206888 Initial import
thib
parents:
diff changeset
1082 } else if (cmd.cmd3 == 0x72 || cmd.cmd3 == 0x7c) { // get time
223b71206888 Initial import
thib
parents:
diff changeset
1083 if (cmd.cmd4 == 1) { // get time
223b71206888 Initial import
thib
parents:
diff changeset
1084 eprintf("get time\n");
223b71206888 Initial import
thib
parents:
diff changeset
1085 cmd.SetSysvar(old_time - base_time);
223b71206888 Initial import
thib
parents:
diff changeset
1086 } else if (cmd.cmd4 == 0) { // n-th get time
223b71206888 Initial import
thib
parents:
diff changeset
1087 int index = cmd.args[0].value;
223b71206888 Initial import
thib
parents:
diff changeset
1088 eprintf("get time %dth\n",index);
223b71206888 Initial import
thib
parents:
diff changeset
1089 if (timer_var.find(index) == timer_var.end()) cmd.SetSysvar(0);
223b71206888 Initial import
thib
parents:
diff changeset
1090 else cmd.SetSysvar(old_time - timer_var[index].start_time);
223b71206888 Initial import
thib
parents:
diff changeset
1091 }
223b71206888 Initial import
thib
parents:
diff changeset
1092 } else if (cmd.cmd3 == 0x26c || cmd.cmd3 == 0x270) { // set basetime(multi)
223b71206888 Initial import
thib
parents:
diff changeset
1093 int j = 0;
223b71206888 Initial import
thib
parents:
diff changeset
1094 eprintf("set basetime\n");
223b71206888 Initial import
thib
parents:
diff changeset
1095 int i; for (i=0; i<cmd.argc; i++) {
223b71206888 Initial import
thib
parents:
diff changeset
1096 int cnt = cmd.args[j++].value; // 3なので無視
223b71206888 Initial import
thib
parents:
diff changeset
1097 int num = cmd.args[j++].value;
223b71206888 Initial import
thib
parents:
diff changeset
1098 TimerAtom& atom = timer_var[num];
223b71206888 Initial import
thib
parents:
diff changeset
1099 atom.from = cmd.args[j++].value;
223b71206888 Initial import
thib
parents:
diff changeset
1100 atom.to = cmd.args[j++].value;
223b71206888 Initial import
thib
parents:
diff changeset
1101 atom.total_time = cmd.args[j++].value;
223b71206888 Initial import
thib
parents:
diff changeset
1102 atom.start_time = old_time;
223b71206888 Initial import
thib
parents:
diff changeset
1103 }
223b71206888 Initial import
thib
parents:
diff changeset
1104 cmd.clear();
223b71206888 Initial import
thib
parents:
diff changeset
1105 } else if (cmd.cmd3 == 0x276) { // get time (multi)
223b71206888 Initial import
thib
parents:
diff changeset
1106 int j = 0;
223b71206888 Initial import
thib
parents:
diff changeset
1107 eprintf("get timer value\n");
223b71206888 Initial import
thib
parents:
diff changeset
1108 vector<VarInfo> args = cmd.args;
223b71206888 Initial import
thib
parents:
diff changeset
1109 vector<VarInfo>::iterator it = args.begin();
223b71206888 Initial import
thib
parents:
diff changeset
1110 int argc = cmd.argc;
223b71206888 Initial import
thib
parents:
diff changeset
1111 int active_timers = 0;
223b71206888 Initial import
thib
parents:
diff changeset
1112 int i; for (i=0; i<argc; i++) {
223b71206888 Initial import
thib
parents:
diff changeset
1113 int cnt = (it++)->value;
223b71206888 Initial import
thib
parents:
diff changeset
1114 int num = (it++)->value;
223b71206888 Initial import
thib
parents:
diff changeset
1115
223b71206888 Initial import
thib
parents:
diff changeset
1116 if (timer_var.find(num) == timer_var.end()) {
223b71206888 Initial import
thib
parents:
diff changeset
1117 cmd.SetFlagvar(*it++, 0);
223b71206888 Initial import
thib
parents:
diff changeset
1118 } else {
223b71206888 Initial import
thib
parents:
diff changeset
1119 TimerAtom& atom = timer_var[num];
223b71206888 Initial import
thib
parents:
diff changeset
1120 if (atom.total_time <= 0) atom.total_time = 1;
223b71206888 Initial import
thib
parents:
diff changeset
1121 int cur_tm = old_time - atom.start_time;
223b71206888 Initial import
thib
parents:
diff changeset
1122 if (cur_tm < 0) cur_tm = atom.total_time; // エラーなら最終時間に合わせる
223b71206888 Initial import
thib
parents:
diff changeset
1123 if (cur_tm > atom.total_time) cur_tm = atom.total_time;
223b71206888 Initial import
thib
parents:
diff changeset
1124 // use 'long long'(64bit) or 'double'(80bit) type, since total_time, to and from is 32 bit.
223b71206888 Initial import
thib
parents:
diff changeset
1125 int v = atom.from + (long long)(atom.to-atom.from)*cur_tm/int(atom.total_time);
223b71206888 Initial import
thib
parents:
diff changeset
1126 cmd.SetFlagvar(*it++, v);
223b71206888 Initial import
thib
parents:
diff changeset
1127 if (atom.total_time != -1 && cur_tm < atom.total_time) active_timers++;
223b71206888 Initial import
thib
parents:
diff changeset
1128 }
223b71206888 Initial import
thib
parents:
diff changeset
1129 }
223b71206888 Initial import
thib
parents:
diff changeset
1130 if (active_timers) active_timers = 1;
223b71206888 Initial import
thib
parents:
diff changeset
1131 cmd.SetSysvar(active_timers);
223b71206888 Initial import
thib
parents:
diff changeset
1132 } else if (cmd.cmd3 == 0x1f4) {
223b71206888 Initial import
thib
parents:
diff changeset
1133 TimerAtom& atom = timer_var[cmd.args[0].value];
223b71206888 Initial import
thib
parents:
diff changeset
1134 atom.from = cmd.args[1].value;
223b71206888 Initial import
thib
parents:
diff changeset
1135 atom.to = cmd.args[2].value;
223b71206888 Initial import
thib
parents:
diff changeset
1136 atom.total_time = cmd.args[3].value;
223b71206888 Initial import
thib
parents:
diff changeset
1137 atom.start_time = old_time;
223b71206888 Initial import
thib
parents:
diff changeset
1138 cmd.clear();
223b71206888 Initial import
thib
parents:
diff changeset
1139 } else if (cmd.cmd3 == 0x3e8) {
223b71206888 Initial import
thib
parents:
diff changeset
1140 /* rand() */
223b71206888 Initial import
thib
parents:
diff changeset
1141 int min = 0, max;
223b71206888 Initial import
thib
parents:
diff changeset
1142 if (cmd.args.size() == 2) {
223b71206888 Initial import
thib
parents:
diff changeset
1143 min = cmd.args[0].value;
223b71206888 Initial import
thib
parents:
diff changeset
1144 max = cmd.args[1].value;
223b71206888 Initial import
thib
parents:
diff changeset
1145 } else {
223b71206888 Initial import
thib
parents:
diff changeset
1146 max = cmd.args[1].value;
223b71206888 Initial import
thib
parents:
diff changeset
1147 }
223b71206888 Initial import
thib
parents:
diff changeset
1148 if (min > max) {
223b71206888 Initial import
thib
parents:
diff changeset
1149 int tmp = max;
223b71206888 Initial import
thib
parents:
diff changeset
1150 max = min;
223b71206888 Initial import
thib
parents:
diff changeset
1151 min = tmp;
223b71206888 Initial import
thib
parents:
diff changeset
1152 }
223b71206888 Initial import
thib
parents:
diff changeset
1153 int r = random();
223b71206888 Initial import
thib
parents:
diff changeset
1154 if (min == max) r = min;
223b71206888 Initial import
thib
parents:
diff changeset
1155 else r = (r % (max-min)) + min;
223b71206888 Initial import
thib
parents:
diff changeset
1156 cmd.SetSysvar(r);
223b71206888 Initial import
thib
parents:
diff changeset
1157 } else if (cmd.cmd3 == 0x3ea) {
223b71206888 Initial import
thib
parents:
diff changeset
1158 int val = cmd.args[0].value;
223b71206888 Initial import
thib
parents:
diff changeset
1159 if (val < 0) val = -val;
223b71206888 Initial import
thib
parents:
diff changeset
1160 cmd.SetSysvar(val);
223b71206888 Initial import
thib
parents:
diff changeset
1161 } else if (cmd.cmd3 == 0x3ec) {
223b71206888 Initial import
thib
parents:
diff changeset
1162 /* min だよなあ・・・*/
223b71206888 Initial import
thib
parents:
diff changeset
1163 int min = cmd.args[0].value;
223b71206888 Initial import
thib
parents:
diff changeset
1164 int max = cmd.args[1].value;
223b71206888 Initial import
thib
parents:
diff changeset
1165 if (max < min) min = max;
223b71206888 Initial import
thib
parents:
diff changeset
1166 cmd.SetSysvar(min);
223b71206888 Initial import
thib
parents:
diff changeset
1167 } else if (cmd.cmd3 == 0x3ef) {
223b71206888 Initial import
thib
parents:
diff changeset
1168 /* min */
223b71206888 Initial import
thib
parents:
diff changeset
1169 int min = cmd.args[0].value;
223b71206888 Initial import
thib
parents:
diff changeset
1170 int max = cmd.args[1].value;
223b71206888 Initial import
thib
parents:
diff changeset
1171 if (max < min) min = max;
223b71206888 Initial import
thib
parents:
diff changeset
1172 cmd.SetSysvar(min);
223b71206888 Initial import
thib
parents:
diff changeset
1173 } else if (cmd.cmd3 == 0x320) {
223b71206888 Initial import
thib
parents:
diff changeset
1174 /* range conversion : 比率に丸める */
223b71206888 Initial import
thib
parents:
diff changeset
1175 // アルゴリズムは間違えてるような気がする
223b71206888 Initial import
thib
parents:
diff changeset
1176 //
223b71206888 Initial import
thib
parents:
diff changeset
1177 if (cmd.args.size() >= 7) {
223b71206888 Initial import
thib
parents:
diff changeset
1178 int val = cmd.args[0].value;
223b71206888 Initial import
thib
parents:
diff changeset
1179 int offset = cmd.args[1].value;
223b71206888 Initial import
thib
parents:
diff changeset
1180 int r_min = cmd.args[2].value;
223b71206888 Initial import
thib
parents:
diff changeset
1181 int v_min = cmd.args[3].value;
223b71206888 Initial import
thib
parents:
diff changeset
1182 int v_max = cmd.args[4].value;
223b71206888 Initial import
thib
parents:
diff changeset
1183 int r_max = cmd.args[5].value;
223b71206888 Initial import
thib
parents:
diff changeset
1184 int mode = cmd.args[6].value;
223b71206888 Initial import
thib
parents:
diff changeset
1185 // rldev : mode == 1,3 : 'acceralating curve', 2,3: 'decelerating curve'
223b71206888 Initial import
thib
parents:
diff changeset
1186 // 複数の引数リスト(r_minからmodeまでのリスト)もつこともあり、その場合は
223b71206888 Initial import
thib
parents:
diff changeset
1187 // "cancel out in some way" らしい
223b71206888 Initial import
thib
parents:
diff changeset
1188 if (mode == 1 || mode == 3) val += offset;
223b71206888 Initial import
thib
parents:
diff changeset
1189 else if (mode == 2 || mode == 4) val -= offset;
223b71206888 Initial import
thib
parents:
diff changeset
1190 if (cmd.args.size() != 7)
223b71206888 Initial import
thib
parents:
diff changeset
1191 fprintf(stderr,"\n%d/%d: cmd 01-04:0320 : XXXX NOT SUPPORTED LIST : DOUBLE RANGE CONVERSION! XXXXXXXXXXX\n",cmd.scn,cmd.pos);
223b71206888 Initial import
thib
parents:
diff changeset
1192 if (val < v_min) val = v_min;
223b71206888 Initial import
thib
parents:
diff changeset
1193 if (val > v_max) val = v_max;
223b71206888 Initial import
thib
parents:
diff changeset
1194 val = (r_max-r_min)*(val-v_min)/(v_max-v_min) + r_min;
223b71206888 Initial import
thib
parents:
diff changeset
1195 cmd.SetSysvar(val);
223b71206888 Initial import
thib
parents:
diff changeset
1196 }
223b71206888 Initial import
thib
parents:
diff changeset
1197 } else if (cmd.cmd3 == 0x3f1) {
223b71206888 Initial import
thib
parents:
diff changeset
1198 /* range 内に丸める */
223b71206888 Initial import
thib
parents:
diff changeset
1199 int min = cmd.args[0].value;
223b71206888 Initial import
thib
parents:
diff changeset
1200 int val = cmd.args[1].value;
223b71206888 Initial import
thib
parents:
diff changeset
1201 int max = cmd.args[2].value;
223b71206888 Initial import
thib
parents:
diff changeset
1202 if (min > max) {
223b71206888 Initial import
thib
parents:
diff changeset
1203 int tmp = max;
223b71206888 Initial import
thib
parents:
diff changeset
1204 max = min;
223b71206888 Initial import
thib
parents:
diff changeset
1205 min = tmp;
223b71206888 Initial import
thib
parents:
diff changeset
1206 }
223b71206888 Initial import
thib
parents:
diff changeset
1207 if (val < min) val = min;
223b71206888 Initial import
thib
parents:
diff changeset
1208 if (val > max) val = max;
223b71206888 Initial import
thib
parents:
diff changeset
1209 cmd.SetSysvar(val);
223b71206888 Initial import
thib
parents:
diff changeset
1210 } else if (cmd.cmd3 == 0x16c && cmd.cmd4 == 0) {
223b71206888 Initial import
thib
parents:
diff changeset
1211 /* なんかよくわからないけどカーソル形状変更にしとく */
223b71206888 Initial import
thib
parents:
diff changeset
1212 SetCursor(cmd.args[0].value);
223b71206888 Initial import
thib
parents:
diff changeset
1213 cmd.clear();
223b71206888 Initial import
thib
parents:
diff changeset
1214 } else if (cmd.cmd3 == 0x0bc1) { // メニューからのロード
223b71206888 Initial import
thib
parents:
diff changeset
1215 cmd.cmd_type = CMD_LOADREQ;
223b71206888 Initial import
thib
parents:
diff changeset
1216 } else if ( (cmd.cmd3 >= 0x8d4 && cmd.cmd3 <= 0x8d8) || cmd.cmd3 == 0x8db || cmd.cmd3 == 0x93f || cmd.cmd3 == 0xa39) {
223b71206888 Initial import
thib
parents:
diff changeset
1217 // テキストウィンドウの色設定
223b71206888 Initial import
thib
parents:
diff changeset
1218 int r, g, b, a, flag;
223b71206888 Initial import
thib
parents:
diff changeset
1219 if (cmd.cmd3 == 0xa39) { // 元設定を取り出す
223b71206888 Initial import
thib
parents:
diff changeset
1220 config.GetOriginalParam("#WINDOW_ATTR", 5, &r, &g, &b, &a, &flag);
223b71206888 Initial import
thib
parents:
diff changeset
1221 } else {
223b71206888 Initial import
thib
parents:
diff changeset
1222 config.GetParam("#WINDOW_ATTR", 5, &r, &g, &b, &a, &flag);
223b71206888 Initial import
thib
parents:
diff changeset
1223 }
223b71206888 Initial import
thib
parents:
diff changeset
1224 if (cmd.cmd3 == 0xa39 || cmd.cmd3 == 0x93f) { // 設定を変数に取り出す
223b71206888 Initial import
thib
parents:
diff changeset
1225 if (cmd.args.size() != 5) {
223b71206888 Initial import
thib
parents:
diff changeset
1226 fprintf(stderr,"cmd 01-04:%4d : invalid arg size\n", cmd.cmd3);
223b71206888 Initial import
thib
parents:
diff changeset
1227 } else {
223b71206888 Initial import
thib
parents:
diff changeset
1228 vector<VarInfo> args(cmd.args);
223b71206888 Initial import
thib
parents:
diff changeset
1229 cmd.SetFlagvar(args[0], r);
223b71206888 Initial import
thib
parents:
diff changeset
1230 cmd.SetFlagvar(args[1], g);
223b71206888 Initial import
thib
parents:
diff changeset
1231 cmd.SetFlagvar(args[2], b);
223b71206888 Initial import
thib
parents:
diff changeset
1232 cmd.SetFlagvar(args[3], a);
223b71206888 Initial import
thib
parents:
diff changeset
1233 cmd.SetFlagvar(args[4], flag);
223b71206888 Initial import
thib
parents:
diff changeset
1234 }
223b71206888 Initial import
thib
parents:
diff changeset
1235 } else {
223b71206888 Initial import
thib
parents:
diff changeset
1236 switch(cmd.cmd3) {
223b71206888 Initial import
thib
parents:
diff changeset
1237 case 0x8d4: r = cmd.args[0].value; break;
223b71206888 Initial import
thib
parents:
diff changeset
1238 case 0x8d5: g = cmd.args[0].value; break;
223b71206888 Initial import
thib
parents:
diff changeset
1239 case 0x8d6: b = cmd.args[0].value; break;
223b71206888 Initial import
thib
parents:
diff changeset
1240 case 0x8d7: a = cmd.args[0].value; break;
223b71206888 Initial import
thib
parents:
diff changeset
1241 case 0x8d8: flag = cmd.args[0].value; break;
223b71206888 Initial import
thib
parents:
diff changeset
1242 case 0x8db:
223b71206888 Initial import
thib
parents:
diff changeset
1243 r = cmd.args[0].value;
223b71206888 Initial import
thib
parents:
diff changeset
1244 g = cmd.args[1].value;
223b71206888 Initial import
thib
parents:
diff changeset
1245 b = cmd.args[2].value;
223b71206888 Initial import
thib
parents:
diff changeset
1246 a = cmd.args[3].value;
223b71206888 Initial import
thib
parents:
diff changeset
1247 flag = cmd.args[4].value;
223b71206888 Initial import
thib
parents:
diff changeset
1248 break;
223b71206888 Initial import
thib
parents:
diff changeset
1249 }
223b71206888 Initial import
thib
parents:
diff changeset
1250 config.SetParam("#WINDOW_ATTR", 5, r, g, b, a, flag);
223b71206888 Initial import
thib
parents:
diff changeset
1251 SetWindowColor(r, g, b, a, flag);
223b71206888 Initial import
thib
parents:
diff changeset
1252 cmd.clear();
223b71206888 Initial import
thib
parents:
diff changeset
1253 }
223b71206888 Initial import
thib
parents:
diff changeset
1254 } else if (cmd.cmd3 == 0xa28 || cmd.cmd3 == 0xa29 || cmd.cmd3 == 0xa2c || cmd.cmd3 == 0xa2d || cmd.cmd3 == 0xa2e) {
223b71206888 Initial import
thib
parents:
diff changeset
1255 int v = 0;
223b71206888 Initial import
thib
parents:
diff changeset
1256 switch(cmd.cmd3) {
223b71206888 Initial import
thib
parents:
diff changeset
1257 case 0xa28: case 0xa2d: config.GetOriginalParam("#INIT_MESSAGE_SPEED", 1, &v); break;
223b71206888 Initial import
thib
parents:
diff changeset
1258 case 0xa29: config.GetOriginalParam("#INIT_MESSAGE_SPEED_MOD", 1, &v); break;
223b71206888 Initial import
thib
parents:
diff changeset
1259 case 0xa2c: config.GetOriginalParam("#MESSAGE_KEY_WAIT_USE", 1, &v); break;
223b71206888 Initial import
thib
parents:
diff changeset
1260 case 0xa2e: config.GetOriginalParam("#MESSAGE_KEY_WAIT_TIME", 1, &v); break;
223b71206888 Initial import
thib
parents:
diff changeset
1261 }
223b71206888 Initial import
thib
parents:
diff changeset
1262 cmd.SetSysvar(v);
223b71206888 Initial import
thib
parents:
diff changeset
1263 } else if (cmd.cmd3 == 0x913 || cmd.cmd3 == 0x914 || cmd.cmd3 == 0x92f || cmd.cmd3 == 0x8af || cmd.cmd3 == 0x8b0 || cmd.cmd3 == 0x8cb) {
223b71206888 Initial import
thib
parents:
diff changeset
1264 // テキスト表示速度関連
223b71206888 Initial import
thib
parents:
diff changeset
1265 int m, speed;
223b71206888 Initial import
thib
parents:
diff changeset
1266 config.GetParam("#INIT_MESSAGE_SPEED", 1, &speed);
223b71206888 Initial import
thib
parents:
diff changeset
1267 config.GetParam("#INIT_MESSAGE_SPEED_MOD", 1, &m);
223b71206888 Initial import
thib
parents:
diff changeset
1268 if (cmd.cmd3 == 0x913 || cmd.cmd3 == 0x92f) fprintf(stderr,"TEXT speed %d\n",speed);
223b71206888 Initial import
thib
parents:
diff changeset
1269 else if (cmd.cmd3 == 0x914) fprintf(stderr,"TEXT mode %d\n",m);
223b71206888 Initial import
thib
parents:
diff changeset
1270 else if (cmd.cmd3 == 0x8af || cmd.cmd3 == 0x8cb) fprintf(stderr,"TEXT %d, %d <- speed %d\n",m,speed,cmd.args[0].value);
223b71206888 Initial import
thib
parents:
diff changeset
1271 else fprintf(stderr,"TEXT %d, %d <- mode %d\n",m,speed,cmd.args[0].value);
223b71206888 Initial import
thib
parents:
diff changeset
1272 if (cmd.cmd3 == 0x913 || cmd.cmd3 == 0x92f) cmd.SetSysvar(speed);
223b71206888 Initial import
thib
parents:
diff changeset
1273 else if (cmd.cmd3 == 0x914) cmd.SetSysvar(m);
223b71206888 Initial import
thib
parents:
diff changeset
1274 else {
223b71206888 Initial import
thib
parents:
diff changeset
1275 if (cmd.cmd3 == 0x8af || cmd.cmd3 == 0x8cb) speed = cmd.args[0].value;
223b71206888 Initial import
thib
parents:
diff changeset
1276 else m = cmd.args[0].value;
223b71206888 Initial import
thib
parents:
diff changeset
1277 if (speed < 10) speed = 10;
223b71206888 Initial import
thib
parents:
diff changeset
1278 else if (speed > 1000) speed = 1000;
223b71206888 Initial import
thib
parents:
diff changeset
1279 config.SetParam("#INIT_MESSAGE_SPEED", 1, speed);
223b71206888 Initial import
thib
parents:
diff changeset
1280 config.SetParam("#INIT_MESSAGE_SPEED_MOD", 1, m);
223b71206888 Initial import
thib
parents:
diff changeset
1281 if (m) speed = -1;
223b71206888 Initial import
thib
parents:
diff changeset
1282 SetTextSpeed(speed);
223b71206888 Initial import
thib
parents:
diff changeset
1283 cmd.clear();
223b71206888 Initial import
thib
parents:
diff changeset
1284 }
223b71206888 Initial import
thib
parents:
diff changeset
1285 } else if (cmd.cmd3 == 0x92e || cmd.cmd3 == 0x930 || cmd.cmd3 == 0x8ca || cmd.cmd3 == 0x8cc) {
223b71206888 Initial import
thib
parents:
diff changeset
1286 // テキストオートモード関連
223b71206888 Initial import
thib
parents:
diff changeset
1287 int m, wait;
223b71206888 Initial import
thib
parents:
diff changeset
1288 config.GetParam("#MESSAGE_KEY_WAIT_USE", 1, &m);
223b71206888 Initial import
thib
parents:
diff changeset
1289 config.GetParam("#MESSAGE_KEY_WAIT_TIME", 1, &wait);
223b71206888 Initial import
thib
parents:
diff changeset
1290 if (cmd.cmd3 == 0x92e) fprintf(stderr,"AUTO mode %d\n",m);
223b71206888 Initial import
thib
parents:
diff changeset
1291 else if (cmd.cmd3 == 0x930) fprintf(stderr,"AUTO wait %d\n",wait);
223b71206888 Initial import
thib
parents:
diff changeset
1292 else if (cmd.cmd3 == 0x8ca) fprintf(stderr,"AUTO %d,%d <- mode %d\n",m,wait,cmd.args[0].value);
223b71206888 Initial import
thib
parents:
diff changeset
1293 else fprintf(stderr,"AUTO %d,%d <- wait %d\n",m,wait,cmd.args[0].value);
223b71206888 Initial import
thib
parents:
diff changeset
1294
223b71206888 Initial import
thib
parents:
diff changeset
1295 if (cmd.cmd3 == 0x92e) cmd.SetSysvar(m);
223b71206888 Initial import
thib
parents:
diff changeset
1296 else if (cmd.cmd3 == 0x930) cmd.SetSysvar(wait);
223b71206888 Initial import
thib
parents:
diff changeset
1297 else {
223b71206888 Initial import
thib
parents:
diff changeset
1298 if (cmd.cmd3 == 0x8ca) m = cmd.args[0].value;
223b71206888 Initial import
thib
parents:
diff changeset
1299 else wait = cmd.args[1].value;
223b71206888 Initial import
thib
parents:
diff changeset
1300 if (wait < 0) wait = 0;
223b71206888 Initial import
thib
parents:
diff changeset
1301 else if (wait > 60000) wait = 60000;
223b71206888 Initial import
thib
parents:
diff changeset
1302 config.SetParam("#MESSAGE_KEY_WAIT_USE", 1, m);
223b71206888 Initial import
thib
parents:
diff changeset
1303 config.SetParam("#MESSAGE_KEY_WAIT_TIME", 1, wait);
223b71206888 Initial import
thib
parents:
diff changeset
1304 if (m) SetTextWait(wait);
223b71206888 Initial import
thib
parents:
diff changeset
1305 else SetTextWait(-1);
223b71206888 Initial import
thib
parents:
diff changeset
1306 cmd.clear();
223b71206888 Initial import
thib
parents:
diff changeset
1307 }
223b71206888 Initial import
thib
parents:
diff changeset
1308 } else if (cmd.cmd3 == 0x51f && cmd.cmd4 == 0) { // replace_name2 の設定
223b71206888 Initial import
thib
parents:
diff changeset
1309 int n = cmd.args[0].value;
223b71206888 Initial import
thib
parents:
diff changeset
1310 if (n>=0 && n<26) {
223b71206888 Initial import
thib
parents:
diff changeset
1311 replace_name2[n] = cmd.Str(cmd.args[1]);
223b71206888 Initial import
thib
parents:
diff changeset
1312 }
223b71206888 Initial import
thib
parents:
diff changeset
1313 cmd.clear();
223b71206888 Initial import
thib
parents:
diff changeset
1314 } else if (cmd.cmd3 == 0x51e && cmd.cmd4 == 0) { // replace_name2 を得る
223b71206888 Initial import
thib
parents:
diff changeset
1315 int n = cmd.args[0].value;
223b71206888 Initial import
thib
parents:
diff changeset
1316 if (n >= 0 && n < 26) {
223b71206888 Initial import
thib
parents:
diff changeset
1317 cmd.SetStrvar(cmd.args[1], replace_name2[n]);
223b71206888 Initial import
thib
parents:
diff changeset
1318 } else {
223b71206888 Initial import
thib
parents:
diff changeset
1319 cmd.SetStrvar(cmd.args[1], "");
223b71206888 Initial import
thib
parents:
diff changeset
1320 }
223b71206888 Initial import
thib
parents:
diff changeset
1321 } else if (cmd.cmd3 == 0x514 && cmd.cmd4 == 0) { // replace_name を得る
223b71206888 Initial import
thib
parents:
diff changeset
1322 int n = cmd.args[0].value;
223b71206888 Initial import
thib
parents:
diff changeset
1323 if (n >= 0 && n < 26) {
223b71206888 Initial import
thib
parents:
diff changeset
1324 cmd.SetStrvar(cmd.args[1], replace_name[n]);
223b71206888 Initial import
thib
parents:
diff changeset
1325 } else {
223b71206888 Initial import
thib
parents:
diff changeset
1326 cmd.SetStrvar(cmd.args[1], "");
223b71206888 Initial import
thib
parents:
diff changeset
1327 }
223b71206888 Initial import
thib
parents:
diff changeset
1328 }
223b71206888 Initial import
thib
parents:
diff changeset
1329 }
223b71206888 Initial import
thib
parents:
diff changeset
1330
223b71206888 Initial import
thib
parents:
diff changeset
1331 return;
223b71206888 Initial import
thib
parents:
diff changeset
1332 }
223b71206888 Initial import
thib
parents:
diff changeset
1333 extern int print_blit;
223b71206888 Initial import
thib
parents:
diff changeset
1334 bool TextImpl::Wait(unsigned int current_time, Cmd& cmd) {
223b71206888 Initial import
thib
parents:
diff changeset
1335 if (current_time != 0xffffffffUL) old_time = current_time;
223b71206888 Initial import
thib
parents:
diff changeset
1336 /*
223b71206888 Initial import
thib
parents:
diff changeset
1337 if (event.presscount(MOUSE_UP)) {
223b71206888 Initial import
thib
parents:
diff changeset
1338 if (text) text->Pic()->ReBlit();
223b71206888 Initial import
thib
parents:
diff changeset
1339 }
223b71206888 Initial import
thib
parents:
diff changeset
1340 if (event.presscount(MOUSE_DOWN)) {
223b71206888 Initial import
thib
parents:
diff changeset
1341 print_blit^=1;
223b71206888 Initial import
thib
parents:
diff changeset
1342 }
223b71206888 Initial import
thib
parents:
diff changeset
1343 */
223b71206888 Initial import
thib
parents:
diff changeset
1344
223b71206888 Initial import
thib
parents:
diff changeset
1345 if (status == NORMAL && status_mask == NORMAL) return false;
223b71206888 Initial import
thib
parents:
diff changeset
1346
223b71206888 Initial import
thib
parents:
diff changeset
1347 if (status_mask & WAIT_EXTRN_MASK) return true;
223b71206888 Initial import
thib
parents:
diff changeset
1348 if (status_mask & (BACKLOG_MASK|BACKLOG_MASK_FWD) ) {
223b71206888 Initial import
thib
parents:
diff changeset
1349 if (status_mask & BACKLOG_WAIT_MASK) ;
223b71206888 Initial import
thib
parents:
diff changeset
1350 else {
223b71206888 Initial import
thib
parents:
diff changeset
1351 if ( (status == WAIT_TEXT && text != 0) || status == WAIT_SELECT_INBOX || status == WAIT_SELECT_OUTBOX) {
223b71206888 Initial import
thib
parents:
diff changeset
1352 if(text && text->wid->status != WidText::PREPARE && text->wid->status != WidText::WAIT && text->wid->status != WidText::WAIT2) {
223b71206888 Initial import
thib
parents:
diff changeset
1353 text->wid->Flush(); // 表示を最後の状態にする
223b71206888 Initial import
thib
parents:
diff changeset
1354 }
223b71206888 Initial import
thib
parents:
diff changeset
1355 if (status == WAIT_TEXT && text != 0 && kcursor) kcursor->show();
223b71206888 Initial import
thib
parents:
diff changeset
1356 }
223b71206888 Initial import
thib
parents:
diff changeset
1357 }
223b71206888 Initial import
thib
parents:
diff changeset
1358 if (status_mask & BACKLOG_MASK) {
223b71206888 Initial import
thib
parents:
diff changeset
1359 cmd.cmd_type = CMD_BACKLOGREQ;
223b71206888 Initial import
thib
parents:
diff changeset
1360 } else {
223b71206888 Initial import
thib
parents:
diff changeset
1361 cmd.cmd_type = CMD_BACKLOGREQ_FWD;
223b71206888 Initial import
thib
parents:
diff changeset
1362 }
223b71206888 Initial import
thib
parents:
diff changeset
1363 status_mask = Status(status_mask & ~(BACKLOG_MASK|BACKLOG_MASK_FWD));
223b71206888 Initial import
thib
parents:
diff changeset
1364 return false;
223b71206888 Initial import
thib
parents:
diff changeset
1365 }
223b71206888 Initial import
thib
parents:
diff changeset
1366 if ( (status_mask & BACKLOG_WAIT_MASK) && (status_mask & BACKLOG_MASK_KOE)) {
223b71206888 Initial import
thib
parents:
diff changeset
1367 if (drawn_backlog_item.koe != -1) {
223b71206888 Initial import
thib
parents:
diff changeset
1368 cmd.cmd_type = CMD_OTHER;
223b71206888 Initial import
thib
parents:
diff changeset
1369 cmd.cmd1 = 1;
223b71206888 Initial import
thib
parents:
diff changeset
1370 cmd.cmd2 = 0x17;
223b71206888 Initial import
thib
parents:
diff changeset
1371 cmd.cmd3 = 0;
223b71206888 Initial import
thib
parents:
diff changeset
1372 cmd.cmd4 = 1;
223b71206888 Initial import
thib
parents:
diff changeset
1373 cmd.args.clear();
223b71206888 Initial import
thib
parents:
diff changeset
1374 cmd.args.push_back(VarInfo(drawn_backlog_item.koe));
223b71206888 Initial import
thib
parents:
diff changeset
1375 cmd.args.push_back(VarInfo(0));
223b71206888 Initial import
thib
parents:
diff changeset
1376 }
223b71206888 Initial import
thib
parents:
diff changeset
1377 status_mask = Status(status_mask & ~BACKLOG_MASK_KOE);
223b71206888 Initial import
thib
parents:
diff changeset
1378 return false;
223b71206888 Initial import
thib
parents:
diff changeset
1379 }
223b71206888 Initial import
thib
parents:
diff changeset
1380 if (skip_mode & SKIP_IN_MENU) return false;
223b71206888 Initial import
thib
parents:
diff changeset
1381 if (status_mask & SAVEMASK) {
223b71206888 Initial import
thib
parents:
diff changeset
1382 cmd.cmd_type = CMD_SAVEREQ;
223b71206888 Initial import
thib
parents:
diff changeset
1383 status_mask = Status(status_mask & ~SAVEMASK);
223b71206888 Initial import
thib
parents:
diff changeset
1384 return false;
223b71206888 Initial import
thib
parents:
diff changeset
1385 }
223b71206888 Initial import
thib
parents:
diff changeset
1386 if (status_mask & LOADMASK) {
223b71206888 Initial import
thib
parents:
diff changeset
1387 cmd.cmd_type = CMD_LOADREQ;
223b71206888 Initial import
thib
parents:
diff changeset
1388 status_mask = Status(status_mask & ~LOADMASK);
223b71206888 Initial import
thib
parents:
diff changeset
1389 return false;
223b71206888 Initial import
thib
parents:
diff changeset
1390 }
223b71206888 Initial import
thib
parents:
diff changeset
1391 if (status_mask & SKIPEND_MASK) {
223b71206888 Initial import
thib
parents:
diff changeset
1392 if ( (skip_mode & SKIP_TEXT) && (skip_mode & SKIPEND_TEXT)) {
223b71206888 Initial import
thib
parents:
diff changeset
1393 if (skip_mode & SKIPEND_KEY) { // shift skip 中
223b71206888 Initial import
thib
parents:
diff changeset
1394 SkipMode new_mode = SkipMode(skip_mode & (~SKIPEND_TEXT));
223b71206888 Initial import
thib
parents:
diff changeset
1395 if (new_mode & (SKIP_GRP_NOEFFEC || SKIP_GRP_NODRAW))
223b71206888 Initial import
thib
parents:
diff changeset
1396 new_mode = SkipMode(new_mode & (~SKIP_GRP_FAST));
223b71206888 Initial import
thib
parents:
diff changeset
1397 cmd.SetSysvar(TYPE_SYS_SKIPMODE, new_mode);
223b71206888 Initial import
thib
parents:
diff changeset
1398 } else {
223b71206888 Initial import
thib
parents:
diff changeset
1399 cmd.SetSysvar(TYPE_SYS_SKIPMODE, SKIP_NO);
223b71206888 Initial import
thib
parents:
diff changeset
1400 }
223b71206888 Initial import
thib
parents:
diff changeset
1401 }
223b71206888 Initial import
thib
parents:
diff changeset
1402 status_mask = Status(status_mask & ~SKIPEND_MASK);
223b71206888 Initial import
thib
parents:
diff changeset
1403 }
223b71206888 Initial import
thib
parents:
diff changeset
1404 if (status_mask & SKIPMASK) {
223b71206888 Initial import
thib
parents:
diff changeset
1405 if (skip_mode != SKIP_NO) {
223b71206888 Initial import
thib
parents:
diff changeset
1406 cmd.SetSysvar(TYPE_SYS_SKIPMODE, skip_mode | SKIPEND_TEXT);
223b71206888 Initial import
thib
parents:
diff changeset
1407 } else {
223b71206888 Initial import
thib
parents:
diff changeset
1408 cmd.SetSysvar(TYPE_SYS_SKIPMODE, SKIP_TEXT | SKIP_GRP_FAST | SKIPEND_TEXT);
223b71206888 Initial import
thib
parents:
diff changeset
1409 }
223b71206888 Initial import
thib
parents:
diff changeset
1410 status_mask = Status(status_mask & ~SKIPMASK);
223b71206888 Initial import
thib
parents:
diff changeset
1411 return false;
223b71206888 Initial import
thib
parents:
diff changeset
1412 }
223b71206888 Initial import
thib
parents:
diff changeset
1413 if (event.presscount(MOUSE_RIGHT)) {
223b71206888 Initial import
thib
parents:
diff changeset
1414 if ( (status == WAIT_TEXT && text != 0) || status == WAIT_SELECT_INBOX || status == WAIT_SELECT_OUTBOX) {
223b71206888 Initial import
thib
parents:
diff changeset
1415 if(text && text->wid->status != WidText::PREPARE && text->wid->status != WidText::WAIT && text->wid->status != WidText::WAIT2) {
223b71206888 Initial import
thib
parents:
diff changeset
1416 text->wid->Flush(); // 表示を最後の状態にする
223b71206888 Initial import
thib
parents:
diff changeset
1417 }
223b71206888 Initial import
thib
parents:
diff changeset
1418 cmd.cmd_type = CMD_MENUREQ;
223b71206888 Initial import
thib
parents:
diff changeset
1419 if (!(status_mask & STATSAVE_MASK)) {
223b71206888 Initial import
thib
parents:
diff changeset
1420 status_saved = status;
223b71206888 Initial import
thib
parents:
diff changeset
1421 status_mask = Status(status_mask | STATSAVE_MASK);
223b71206888 Initial import
thib
parents:
diff changeset
1422 }
223b71206888 Initial import
thib
parents:
diff changeset
1423 return false;
223b71206888 Initial import
thib
parents:
diff changeset
1424 } else if (status == WAIT_CLICK_MOUSEPOS) {
223b71206888 Initial import
thib
parents:
diff changeset
1425 status = WAIT_CLICK_MOUSEPOSEND_R;
223b71206888 Initial import
thib
parents:
diff changeset
1426 }
223b71206888 Initial import
thib
parents:
diff changeset
1427 }
223b71206888 Initial import
thib
parents:
diff changeset
1428 if (event.presscount(MOUSE_UP)) {
223b71206888 Initial import
thib
parents:
diff changeset
1429 if ( (status == WAIT_TEXT && text != 0) || status == WAIT_SELECT_INBOX || status == WAIT_SELECT_OUTBOX) {
223b71206888 Initial import
thib
parents:
diff changeset
1430 if(text && text->wid->status != WidText::PREPARE && text->wid->status != WidText::WAIT && text->wid->status != WidText::WAIT2) {
223b71206888 Initial import
thib
parents:
diff changeset
1431 text->wid->Flush(); // 表示を最後の状態にする
223b71206888 Initial import
thib
parents:
diff changeset
1432 }
223b71206888 Initial import
thib
parents:
diff changeset
1433 cmd.cmd_type = CMD_BACKLOGREQ;
223b71206888 Initial import
thib
parents:
diff changeset
1434 if (!(status_mask & STATSAVE_MASK)) {
223b71206888 Initial import
thib
parents:
diff changeset
1435 status_saved = status;
223b71206888 Initial import
thib
parents:
diff changeset
1436 status_mask = Status(status_mask | STATSAVE_MASK);
223b71206888 Initial import
thib
parents:
diff changeset
1437 }
223b71206888 Initial import
thib
parents:
diff changeset
1438 return false;
223b71206888 Initial import
thib
parents:
diff changeset
1439 }
223b71206888 Initial import
thib
parents:
diff changeset
1440 }
223b71206888 Initial import
thib
parents:
diff changeset
1441 if (status_mask & CLEARSCR_MASK) {
223b71206888 Initial import
thib
parents:
diff changeset
1442 if ( (status == WAIT_TEXT && text != 0 ) || status == WAIT_SELECT_INBOX || status == WAIT_SELECT_OUTBOX) {
223b71206888 Initial import
thib
parents:
diff changeset
1443 if (skip_mode) skip_mode = SKIP_NO;
223b71206888 Initial import
thib
parents:
diff changeset
1444 if (text && text->wid->status != WidText::PREPARE && text->wid->status != WidText::WAIT && text->wid->status != WidText::WAIT2) {
223b71206888 Initial import
thib
parents:
diff changeset
1445 text->wid->Flush(); // 表示を最後の状態にする
223b71206888 Initial import
thib
parents:
diff changeset
1446 return true;
223b71206888 Initial import
thib
parents:
diff changeset
1447 }
223b71206888 Initial import
thib
parents:
diff changeset
1448 status_mask = Status(status_mask & (~CLEARSCR_MASK) | CLEARSCR_WAIT_MASK);
223b71206888 Initial import
thib
parents:
diff changeset
1449 if (text) text->hide();
223b71206888 Initial import
thib
parents:
diff changeset
1450 if (kcursor) kcursor->hide();
223b71206888 Initial import
thib
parents:
diff changeset
1451 if (sel_widget) sel_widget->hide();
223b71206888 Initial import
thib
parents:
diff changeset
1452 if (backlog_widget) backlog_widget->hide();
223b71206888 Initial import
thib
parents:
diff changeset
1453 return true;
223b71206888 Initial import
thib
parents:
diff changeset
1454 }
223b71206888 Initial import
thib
parents:
diff changeset
1455 status_mask = Status(status_mask & (~CLEARSCR_MASK));
223b71206888 Initial import
thib
parents:
diff changeset
1456 return false;
223b71206888 Initial import
thib
parents:
diff changeset
1457 }
223b71206888 Initial import
thib
parents:
diff changeset
1458 if (status_mask & CLEARSCR_WAIT_MASK) {
223b71206888 Initial import
thib
parents:
diff changeset
1459 return true;
223b71206888 Initial import
thib
parents:
diff changeset
1460 }
223b71206888 Initial import
thib
parents:
diff changeset
1461 if (status == WAIT_TEXT) {
223b71206888 Initial import
thib
parents:
diff changeset
1462 if (text == 0) { status = NORMAL; return false;}
223b71206888 Initial import
thib
parents:
diff changeset
1463 if (skip_mode & SKIP_TEXT) {
223b71206888 Initial import
thib
parents:
diff changeset
1464 } else if (text->wid->status != WidText::PREPARE) {
223b71206888 Initial import
thib
parents:
diff changeset
1465 return true;
223b71206888 Initial import
thib
parents:
diff changeset
1466 }
223b71206888 Initial import
thib
parents:
diff changeset
1467 if (kcursor) kcursor->hide();
223b71206888 Initial import
thib
parents:
diff changeset
1468 text_stream.Clear();
223b71206888 Initial import
thib
parents:
diff changeset
1469 status = NORMAL;
223b71206888 Initial import
thib
parents:
diff changeset
1470 cmd.cmd_type = CMD_TEXTEND;
223b71206888 Initial import
thib
parents:
diff changeset
1471 return false;
223b71206888 Initial import
thib
parents:
diff changeset
1472 }
223b71206888 Initial import
thib
parents:
diff changeset
1473 if (status == WAIT) {
223b71206888 Initial import
thib
parents:
diff changeset
1474 if (skip_mode & SKIP_TEXT) ;
223b71206888 Initial import
thib
parents:
diff changeset
1475 else if (wait_time > current_time) return true;
223b71206888 Initial import
thib
parents:
diff changeset
1476 status = NORMAL;
223b71206888 Initial import
thib
parents:
diff changeset
1477 } else if (status == WAIT_CLICK) {
223b71206888 Initial import
thib
parents:
diff changeset
1478 if (skip_mode & SKIP_TEXT) ;
223b71206888 Initial import
thib
parents:
diff changeset
1479 else if (wait_time > current_time) return true;
223b71206888 Initial import
thib
parents:
diff changeset
1480 status = NORMAL;
223b71206888 Initial import
thib
parents:
diff changeset
1481 cmd.SetSysvar(0);
223b71206888 Initial import
thib
parents:
diff changeset
1482 } else if (status == WAIT_ABORT) {
223b71206888 Initial import
thib
parents:
diff changeset
1483 cmd.SetSysvar(1);
223b71206888 Initial import
thib
parents:
diff changeset
1484 status = NORMAL;
223b71206888 Initial import
thib
parents:
diff changeset
1485 } else if (status == WAIT_CLICK_MOUSEPOS || status == WAIT_CLICK_MOUSEPOSEND_L || status == WAIT_CLICK_MOUSEPOSEND_R) {
223b71206888 Initial import
thib
parents:
diff changeset
1486 if (status == WAIT_CLICK_MOUSEPOS && (skip_mode & SKIP_TEXT) == 0) return true; // keep wait
223b71206888 Initial import
thib
parents:
diff changeset
1487 else {
223b71206888 Initial import
thib
parents:
diff changeset
1488 int x, y;
223b71206888 Initial import
thib
parents:
diff changeset
1489 event.MousePos(x,y);
223b71206888 Initial import
thib
parents:
diff changeset
1490 if (status == WAIT_CLICK_MOUSEPOS) x = y = 0; // skip mode
223b71206888 Initial import
thib
parents:
diff changeset
1491 cmd.clear();
223b71206888 Initial import
thib
parents:
diff changeset
1492 cmd.SetFlagvar(wait_savedvar[0], x);
223b71206888 Initial import
thib
parents:
diff changeset
1493 cmd.SetFlagvar(wait_savedvar[1], y);
223b71206888 Initial import
thib
parents:
diff changeset
1494 if (status == WAIT_CLICK_MOUSEPOSEND_R) cmd.SetSysvar(-1);
223b71206888 Initial import
thib
parents:
diff changeset
1495 else cmd.SetSysvar(0);
223b71206888 Initial import
thib
parents:
diff changeset
1496 status = NORMAL;
223b71206888 Initial import
thib
parents:
diff changeset
1497 }
223b71206888 Initial import
thib
parents:
diff changeset
1498 } else if (status == WAIT_SELECT_INBOX || status == WAIT_SELECT_OUTBOX) {
223b71206888 Initial import
thib
parents:
diff changeset
1499 return true;
223b71206888 Initial import
thib
parents:
diff changeset
1500 } else if ( int(status) >= WAIT_SELECT_VALUE) {
223b71206888 Initial import
thib
parents:
diff changeset
1501 int sel_val = int(status) - WAIT_SELECT_VALUE;
223b71206888 Initial import
thib
parents:
diff changeset
1502 cmd.SetSysvar(sel_val);
223b71206888 Initial import
thib
parents:
diff changeset
1503 selects.clear();
223b71206888 Initial import
thib
parents:
diff changeset
1504 delete sel_widget;
223b71206888 Initial import
thib
parents:
diff changeset
1505 sel_widget = 0;
223b71206888 Initial import
thib
parents:
diff changeset
1506 status = NORMAL;
223b71206888 Initial import
thib
parents:
diff changeset
1507 // CreateSelect() で作成された cur_backlog_item を backlog_item へ反映させる
223b71206888 Initial import
thib
parents:
diff changeset
1508 cur_backlog_item.text.InsertColor(sel_backlog_pos[sel_val], sel_backlog_pos[sel_val+1], 0xff, 0, 0);
223b71206888 Initial import
thib
parents:
diff changeset
1509 backlog_item = cur_backlog_item;
223b71206888 Initial import
thib
parents:
diff changeset
1510 cur_backlog_item.Clear();
223b71206888 Initial import
thib
parents:
diff changeset
1511 }
223b71206888 Initial import
thib
parents:
diff changeset
1512 return false;
223b71206888 Initial import
thib
parents:
diff changeset
1513 }
223b71206888 Initial import
thib
parents:
diff changeset
1514
223b71206888 Initial import
thib
parents:
diff changeset
1515 void clearbtn_press(void* pointer, WidButton* button) {
223b71206888 Initial import
thib
parents:
diff changeset
1516 if (pointer == 0) return;
223b71206888 Initial import
thib
parents:
diff changeset
1517 TextImpl* t = (TextImpl*)pointer;
223b71206888 Initial import
thib
parents:
diff changeset
1518 t->status_mask = TextImpl::Status(t->status_mask | TextImpl::CLEARSCR_MASK);
223b71206888 Initial import
thib
parents:
diff changeset
1519 return;
223b71206888 Initial import
thib
parents:
diff changeset
1520 }
223b71206888 Initial import
thib
parents:
diff changeset
1521 void TextImpl::PressFuncSkip(void* pointer, WidButton* from) {
223b71206888 Initial import
thib
parents:
diff changeset
1522 if (pointer == 0) return;
223b71206888 Initial import
thib
parents:
diff changeset
1523 TextImpl* t = (TextImpl*)pointer;
223b71206888 Initial import
thib
parents:
diff changeset
1524 t->status_mask = TextImpl::Status(t->status_mask | TextImpl::SKIPMASK);
223b71206888 Initial import
thib
parents:
diff changeset
1525 return;
223b71206888 Initial import
thib
parents:
diff changeset
1526 }
223b71206888 Initial import
thib
parents:
diff changeset
1527 void TextImpl::PressFuncLoad(void* pointer, WidButton* from) {
223b71206888 Initial import
thib
parents:
diff changeset
1528 if (pointer == 0) return;
223b71206888 Initial import
thib
parents:
diff changeset
1529 TextImpl* t = (TextImpl*)pointer;
223b71206888 Initial import
thib
parents:
diff changeset
1530 t->status_mask = TextImpl::Status(t->status_mask | TextImpl::LOADMASK);
223b71206888 Initial import
thib
parents:
diff changeset
1531 return;
223b71206888 Initial import
thib
parents:
diff changeset
1532 }
223b71206888 Initial import
thib
parents:
diff changeset
1533 void TextImpl::PressFuncSave(void* pointer, WidButton* from) {
223b71206888 Initial import
thib
parents:
diff changeset
1534 if (pointer == 0) return;
223b71206888 Initial import
thib
parents:
diff changeset
1535 TextImpl* t = (TextImpl*)pointer;
223b71206888 Initial import
thib
parents:
diff changeset
1536 t->status_mask = TextImpl::Status(t->status_mask | TextImpl::SAVEMASK);
223b71206888 Initial import
thib
parents:
diff changeset
1537 return;
223b71206888 Initial import
thib
parents:
diff changeset
1538 }
223b71206888 Initial import
thib
parents:
diff changeset
1539 void TextImpl::PressFuncBacklog(void* pointer, WidButton* from) {
223b71206888 Initial import
thib
parents:
diff changeset
1540 if (pointer == 0) return;
223b71206888 Initial import
thib
parents:
diff changeset
1541 TextImpl* t = (TextImpl*)pointer;
223b71206888 Initial import
thib
parents:
diff changeset
1542 t->status_mask = TextImpl::Status(t->status_mask | TextImpl::BACKLOG_MASK);
223b71206888 Initial import
thib
parents:
diff changeset
1543 return;
223b71206888 Initial import
thib
parents:
diff changeset
1544 }
223b71206888 Initial import
thib
parents:
diff changeset
1545 void TextImpl::PressFuncBacklogFwd(void* pointer, WidButton* from) {
223b71206888 Initial import
thib
parents:
diff changeset
1546 if (pointer == 0) return;
223b71206888 Initial import
thib
parents:
diff changeset
1547 TextImpl* t = (TextImpl*)pointer;
223b71206888 Initial import
thib
parents:
diff changeset
1548 t->status_mask = TextImpl::Status(t->status_mask | TextImpl::BACKLOG_MASK_FWD);
223b71206888 Initial import
thib
parents:
diff changeset
1549 return;
223b71206888 Initial import
thib
parents:
diff changeset
1550 }
223b71206888 Initial import
thib
parents:
diff changeset
1551 void movebtn_drag(int from_x, int from_y, int x, int y, void* pointer, WidButton* button) {
223b71206888 Initial import
thib
parents:
diff changeset
1552 if (pointer == 0) return;
223b71206888 Initial import
thib
parents:
diff changeset
1553 fprintf(stderr,"drag.\n");
223b71206888 Initial import
thib
parents:
diff changeset
1554 }
223b71206888 Initial import
thib
parents:
diff changeset
1555 #define BTNCNT 10
223b71206888 Initial import
thib
parents:
diff changeset
1556 static char* btnname[BTNCNT] = {
223b71206888 Initial import
thib
parents:
diff changeset
1557 "MOVE",
223b71206888 Initial import
thib
parents:
diff changeset
1558 "CLEAR",
223b71206888 Initial import
thib
parents:
diff changeset
1559 "READJUMP",
223b71206888 Initial import
thib
parents:
diff changeset
1560 "AUTOMODE",
223b71206888 Initial import
thib
parents:
diff changeset
1561 "MSGBK",
223b71206888 Initial import
thib
parents:
diff changeset
1562 "MSGBKLEFT",
223b71206888 Initial import
thib
parents:
diff changeset
1563 "MSGBKRIGHT",
223b71206888 Initial import
thib
parents:
diff changeset
1564 "EXBTN_000",
223b71206888 Initial import
thib
parents:
diff changeset
1565 "EXBTN_001",
223b71206888 Initial import
thib
parents:
diff changeset
1566 "EXBTN_002"
223b71206888 Initial import
thib
parents:
diff changeset
1567 };
223b71206888 Initial import
thib
parents:
diff changeset
1568 static int btnpos[BTNCNT] = { // g00 ファイル内のボタン情報の位置
223b71206888 Initial import
thib
parents:
diff changeset
1569 // 0, 1, 13, 12, 2, 3, 4, 5, 6, 7 // princess bride?
223b71206888 Initial import
thib
parents:
diff changeset
1570 0, 1, 13, 14, 2, 3, 4, 5, 6, 7 // tomoyo after?
223b71206888 Initial import
thib
parents:
diff changeset
1571 };
223b71206888 Initial import
thib
parents:
diff changeset
1572 static WidButton::PressFunc btnpress[BTNCNT] = {
223b71206888 Initial import
thib
parents:
diff changeset
1573 0, clearbtn_press, &TextImpl::PressFuncSkip,0,&TextImpl::PressFuncBacklogFwd,&TextImpl::PressFuncBacklog,&TextImpl::PressFuncBacklogFwd,&TextImpl::PressFuncSave,&TextImpl::PressFuncLoad,0
223b71206888 Initial import
thib
parents:
diff changeset
1574 };
223b71206888 Initial import
thib
parents:
diff changeset
1575 static WidButton::DragFunc btndrag[BTNCNT] = {
223b71206888 Initial import
thib
parents:
diff changeset
1576 movebtn_drag, 0,0,0,0, 0,0,0,0, 0
223b71206888 Initial import
thib
parents:
diff changeset
1577 };
223b71206888 Initial import
thib
parents:
diff changeset
1578
223b71206888 Initial import
thib
parents:
diff changeset
1579 void TextImpl::SetTextSpeed(int speed) {
223b71206888 Initial import
thib
parents:
diff changeset
1580 // 100 : 10char / sec
223b71206888 Initial import
thib
parents:
diff changeset
1581 // 10 : 100char / sec
223b71206888 Initial import
thib
parents:
diff changeset
1582 // text widget:
223b71206888 Initial import
thib
parents:
diff changeset
1583 if (speed <= 0) speed = -1;
223b71206888 Initial import
thib
parents:
diff changeset
1584 else if (speed > 1000) speed = 1;
223b71206888 Initial import
thib
parents:
diff changeset
1585 else speed = 1000 / speed;
223b71206888 Initial import
thib
parents:
diff changeset
1586 int i;
223b71206888 Initial import
thib
parents:
diff changeset
1587 for (i=0; i<32; i++)
223b71206888 Initial import
thib
parents:
diff changeset
1588 if (widgets[i]) widgets[i]->wid->SetSpeed(speed);
223b71206888 Initial import
thib
parents:
diff changeset
1589 }
223b71206888 Initial import
thib
parents:
diff changeset
1590 void TextImpl::SetTextWait(int wait) {
223b71206888 Initial import
thib
parents:
diff changeset
1591 int i;
223b71206888 Initial import
thib
parents:
diff changeset
1592 for (i=0; i<32; i++)
223b71206888 Initial import
thib
parents:
diff changeset
1593 if (widgets[i]) widgets[i]->wid->SetWait(wait);
223b71206888 Initial import
thib
parents:
diff changeset
1594 }
223b71206888 Initial import
thib
parents:
diff changeset
1595
223b71206888 Initial import
thib
parents:
diff changeset
1596 void TextImpl::SetWindowColor(int r, int g, int b, int a, bool is_transparent) {
223b71206888 Initial import
thib
parents:
diff changeset
1597 char key[1024];
223b71206888 Initial import
thib
parents:
diff changeset
1598 int w;
223b71206888 Initial import
thib
parents:
diff changeset
1599
223b71206888 Initial import
thib
parents:
diff changeset
1600 for (w=0; w<32; w++) {
223b71206888 Initial import
thib
parents:
diff changeset
1601 if (widgets[w] == 0) continue;
223b71206888 Initial import
thib
parents:
diff changeset
1602 sprintf(key, "#WAKU.%03d.000.BACK", w);
223b71206888 Initial import
thib
parents:
diff changeset
1603 const char* back = config.GetParaStr(key);
223b71206888 Initial import
thib
parents:
diff changeset
1604 if (back == 0 || back[0] == 0) continue;
223b71206888 Initial import
thib
parents:
diff changeset
1605 sprintf(key, "%s.g00", back);
223b71206888 Initial import
thib
parents:
diff changeset
1606 Surface* back_s = parent.Root().NewSurface(key);
223b71206888 Initial import
thib
parents:
diff changeset
1607 if (back_s == 0) continue;
223b71206888 Initial import
thib
parents:
diff changeset
1608 Rect rect(*back_s);
223b71206888 Initial import
thib
parents:
diff changeset
1609 Surface* new_s = parent.Root().NewSurface(rect.width(), rect.height(), ALPHA_MASK);
223b71206888 Initial import
thib
parents:
diff changeset
1610 DSurfaceMove(back_s, rect, new_s, rect);
223b71206888 Initial import
thib
parents:
diff changeset
1611 DSurfaceFillA(new_s, rect, r, g, b, a);
223b71206888 Initial import
thib
parents:
diff changeset
1612 widgets[w]->wid->Pic()->SetSurface(new_s, 0, 0);
223b71206888 Initial import
thib
parents:
diff changeset
1613 widgets[w]->wid->Pic()->SetSurfaceFreeFlag(1);
223b71206888 Initial import
thib
parents:
diff changeset
1614 if (!is_transparent)
223b71206888 Initial import
thib
parents:
diff changeset
1615 widgets[w]->wid->Pic()->SetSurfaceAttribute(PicBase::BLIT_MULTIPLY);
223b71206888 Initial import
thib
parents:
diff changeset
1616 parent.Root().DeleteSurface(back_s);
223b71206888 Initial import
thib
parents:
diff changeset
1617 }
223b71206888 Initial import
thib
parents:
diff changeset
1618 return;
223b71206888 Initial import
thib
parents:
diff changeset
1619 }
223b71206888 Initial import
thib
parents:
diff changeset
1620
223b71206888 Initial import
thib
parents:
diff changeset
1621 void TextImpl::SetCursor(int cursor_no) {
223b71206888 Initial import
thib
parents:
diff changeset
1622 char key[1024];
223b71206888 Initial import
thib
parents:
diff changeset
1623 sprintf(key, "#CURSOR.%03d.NAME", cursor_no);
223b71206888 Initial import
thib
parents:
diff changeset
1624 string path = config.GetParaStr(key);
223b71206888 Initial import
thib
parents:
diff changeset
1625 if (path.length() == 0) return; // 名前なし
223b71206888 Initial import
thib
parents:
diff changeset
1626 path += ".pdt";
223b71206888 Initial import
thib
parents:
diff changeset
1627 int w,h,cont,speed;
223b71206888 Initial import
thib
parents:
diff changeset
1628 sprintf(key, "#CURSOR.%03d.SIZE", cursor_no);
223b71206888 Initial import
thib
parents:
diff changeset
1629 config.GetParam(key, 2, &w, &h);
223b71206888 Initial import
thib
parents:
diff changeset
1630 sprintf(key, "#CURSOR.%03d.CONT", cursor_no);
223b71206888 Initial import
thib
parents:
diff changeset
1631 config.GetParam(key, 1, &cont);
223b71206888 Initial import
thib
parents:
diff changeset
1632 sprintf(key, "#CURSOR.%03d.SPEED", cursor_no);
223b71206888 Initial import
thib
parents:
diff changeset
1633 config.GetParam(key, 1, &speed);
223b71206888 Initial import
thib
parents:
diff changeset
1634
223b71206888 Initial import
thib
parents:
diff changeset
1635 // speed で1周、cont 回変化
223b71206888 Initial import
thib
parents:
diff changeset
1636 if (kcursor) delete kcursor;
223b71206888 Initial import
thib
parents:
diff changeset
1637
223b71206888 Initial import
thib
parents:
diff changeset
1638 kcursor = new WidTimeCursor(event, speed/cont, &parent, path.c_str(), 0, 0, w, 0, cont, Rect(0,0,w,h));
223b71206888 Initial import
thib
parents:
diff changeset
1639 int i;
223b71206888 Initial import
thib
parents:
diff changeset
1640 for (i=0; i<32; i++) {
223b71206888 Initial import
thib
parents:
diff changeset
1641 if (widgets[i]) widgets[i]->wid->SetCursor(kcursor);
223b71206888 Initial import
thib
parents:
diff changeset
1642 }
223b71206888 Initial import
thib
parents:
diff changeset
1643 }
223b71206888 Initial import
thib
parents:
diff changeset
1644
223b71206888 Initial import
thib
parents:
diff changeset
1645 void kconv(const unsigned char* src, unsigned char* dest) {
223b71206888 Initial import
thib
parents:
diff changeset
1646 /* input : sjis output: euc */
223b71206888 Initial import
thib
parents:
diff changeset
1647 while(*src) {
223b71206888 Initial import
thib
parents:
diff changeset
1648 unsigned int high = *src++;
223b71206888 Initial import
thib
parents:
diff changeset
1649 if (high < 0x80) {
223b71206888 Initial import
thib
parents:
diff changeset
1650 /* ASCII */
223b71206888 Initial import
thib
parents:
diff changeset
1651 *dest++ = high; continue;
223b71206888 Initial import
thib
parents:
diff changeset
1652 } else if (high < 0xa0) {
223b71206888 Initial import
thib
parents:
diff changeset
1653 /* SJIS */
223b71206888 Initial import
thib
parents:
diff changeset
1654 high -= 0x71;
223b71206888 Initial import
thib
parents:
diff changeset
1655 } else if (high < 0xe0) {
223b71206888 Initial import
thib
parents:
diff changeset
1656 /* hankaku KANA */
223b71206888 Initial import
thib
parents:
diff changeset
1657 *dest++ = 0x8e; *dest++ = high;
223b71206888 Initial import
thib
parents:
diff changeset
1658 continue;
223b71206888 Initial import
thib
parents:
diff changeset
1659 } else { /* high >= 0xe0 : SJIS */
223b71206888 Initial import
thib
parents:
diff changeset
1660 high -= 0xb1;
223b71206888 Initial import
thib
parents:
diff changeset
1661 }
223b71206888 Initial import
thib
parents:
diff changeset
1662 /* SJIS convert */
223b71206888 Initial import
thib
parents:
diff changeset
1663 high = (high<<1) + 1;
223b71206888 Initial import
thib
parents:
diff changeset
1664
223b71206888 Initial import
thib
parents:
diff changeset
1665 unsigned int low = *src++;
223b71206888 Initial import
thib
parents:
diff changeset
1666 if (low == 0) break; /* incorrect code */
223b71206888 Initial import
thib
parents:
diff changeset
1667 if (low > 0x7f) low--;
223b71206888 Initial import
thib
parents:
diff changeset
1668 if (low >= 0x9e) {
223b71206888 Initial import
thib
parents:
diff changeset
1669 low -= 0x7d;
223b71206888 Initial import
thib
parents:
diff changeset
1670 high++;
223b71206888 Initial import
thib
parents:
diff changeset
1671 } else {
223b71206888 Initial import
thib
parents:
diff changeset
1672 low -= 0x1f;
223b71206888 Initial import
thib
parents:
diff changeset
1673 }
223b71206888 Initial import
thib
parents:
diff changeset
1674 *dest++ = high | 0x80; *dest++ = low | 0x80;
223b71206888 Initial import
thib
parents:
diff changeset
1675 }
223b71206888 Initial import
thib
parents:
diff changeset
1676 *dest = 0;
223b71206888 Initial import
thib
parents:
diff changeset
1677 }
223b71206888 Initial import
thib
parents:
diff changeset
1678 void kconv_rev(const unsigned char* src, unsigned char* dest) {
223b71206888 Initial import
thib
parents:
diff changeset
1679 /* input : euc output: sjis */
223b71206888 Initial import
thib
parents:
diff changeset
1680 while(*src) {
223b71206888 Initial import
thib
parents:
diff changeset
1681 unsigned int high = *src++;
223b71206888 Initial import
thib
parents:
diff changeset
1682 if (high < 0x80) {
223b71206888 Initial import
thib
parents:
diff changeset
1683 /* ASCII */
223b71206888 Initial import
thib
parents:
diff changeset
1684 *dest++ = high; continue;
223b71206888 Initial import
thib
parents:
diff changeset
1685 } else if (high == 0x8e) { /* hankaku KANA */
223b71206888 Initial import
thib
parents:
diff changeset
1686 high = *src;
223b71206888 Initial import
thib
parents:
diff changeset
1687 if (high >= 0xa0 && high < 0xe0)
223b71206888 Initial import
thib
parents:
diff changeset
1688 *dest++ = *src++;
223b71206888 Initial import
thib
parents:
diff changeset
1689 continue;
223b71206888 Initial import
thib
parents:
diff changeset
1690 } else {
223b71206888 Initial import
thib
parents:
diff changeset
1691 unsigned int low = *src++;
223b71206888 Initial import
thib
parents:
diff changeset
1692 if (low == 0) break; /* incorrect code , EOS */
223b71206888 Initial import
thib
parents:
diff changeset
1693 if (low < 0x80) continue; /* incorrect code */
223b71206888 Initial import
thib
parents:
diff changeset
1694 /* convert */
223b71206888 Initial import
thib
parents:
diff changeset
1695 low &= 0x7f; high &= 0x7f;
223b71206888 Initial import
thib
parents:
diff changeset
1696 low += (high & 1) ? 0x1f : 0x7d;
223b71206888 Initial import
thib
parents:
diff changeset
1697 high = (high-0x21)>>1;
223b71206888 Initial import
thib
parents:
diff changeset
1698 high += (high > 0x1e) ? 0xc1 : 0x81;
223b71206888 Initial import
thib
parents:
diff changeset
1699 *dest++ = high;
223b71206888 Initial import
thib
parents:
diff changeset
1700 if (low > 0x7f) low++;
223b71206888 Initial import
thib
parents:
diff changeset
1701 *dest++ = low;
223b71206888 Initial import
thib
parents:
diff changeset
1702 }
223b71206888 Initial import
thib
parents:
diff changeset
1703 }
223b71206888 Initial import
thib
parents:
diff changeset
1704 *dest = 0;
223b71206888 Initial import
thib
parents:
diff changeset
1705 }
223b71206888 Initial import
thib
parents:
diff changeset
1706 string kconv(const string& s) {
223b71206888 Initial import
thib
parents:
diff changeset
1707 char* out = new char[s.length()*2+100];
223b71206888 Initial import
thib
parents:
diff changeset
1708 kconv((const unsigned char*)s.c_str(), (unsigned char*)out);
223b71206888 Initial import
thib
parents:
diff changeset
1709 string ret = out;
223b71206888 Initial import
thib
parents:
diff changeset
1710 delete[] out;
223b71206888 Initial import
thib
parents:
diff changeset
1711 return ret;
223b71206888 Initial import
thib
parents:
diff changeset
1712 }
223b71206888 Initial import
thib
parents:
diff changeset
1713 string kconv_rev(const string& s) {
223b71206888 Initial import
thib
parents:
diff changeset
1714 char* out = new char[s.length()*2+100];
223b71206888 Initial import
thib
parents:
diff changeset
1715 kconv_rev((const unsigned char*)s.c_str(), (unsigned char*)out);
223b71206888 Initial import
thib
parents:
diff changeset
1716 string ret = out;
223b71206888 Initial import
thib
parents:
diff changeset
1717 delete[] out;
223b71206888 Initial import
thib
parents:
diff changeset
1718 return ret;
223b71206888 Initial import
thib
parents:
diff changeset
1719 }
223b71206888 Initial import
thib
parents:
diff changeset
1720
223b71206888 Initial import
thib
parents:
diff changeset
1721 /**************************************************************::
223b71206888 Initial import
thib
parents:
diff changeset
1722 **
223b71206888 Initial import
thib
parents:
diff changeset
1723 ** Text
223b71206888 Initial import
thib
parents:
diff changeset
1724 */
223b71206888 Initial import
thib
parents:
diff changeset
1725 Text::Text(Event::Container& _event, PicContainer& _parent, AyuSysConfig& config) {
223b71206888 Initial import
thib
parents:
diff changeset
1726 pimpl = new TextImpl(_event, _parent, config, backlog, backlog_item);
223b71206888 Initial import
thib
parents:
diff changeset
1727 }
223b71206888 Initial import
thib
parents:
diff changeset
1728 Text::~Text() {
223b71206888 Initial import
thib
parents:
diff changeset
1729 delete pimpl;
223b71206888 Initial import
thib
parents:
diff changeset
1730 }
223b71206888 Initial import
thib
parents:
diff changeset
1731 void Text::InitWindow(void) {
223b71206888 Initial import
thib
parents:
diff changeset
1732 pimpl->InitWindow();
223b71206888 Initial import
thib
parents:
diff changeset
1733 }
223b71206888 Initial import
thib
parents:
diff changeset
1734 void Text::Exec(Cmd& cmd) {
223b71206888 Initial import
thib
parents:
diff changeset
1735 pimpl->Exec(cmd);
223b71206888 Initial import
thib
parents:
diff changeset
1736 }
223b71206888 Initial import
thib
parents:
diff changeset
1737 bool Text::Wait(unsigned int current_time, Cmd& cmd) {
223b71206888 Initial import
thib
parents:
diff changeset
1738 return pimpl->Wait(current_time, cmd);
223b71206888 Initial import
thib
parents:
diff changeset
1739 }
223b71206888 Initial import
thib
parents:
diff changeset
1740 void Text::SetSkipMode(SkipMode mode) {
223b71206888 Initial import
thib
parents:
diff changeset
1741 pimpl->SetSkipMode(mode);
223b71206888 Initial import
thib
parents:
diff changeset
1742 }
223b71206888 Initial import
thib
parents:
diff changeset
1743 void Text::Save(std::string& str, bool select_save) {
223b71206888 Initial import
thib
parents:
diff changeset
1744 pimpl->Save(str, select_save);
223b71206888 Initial import
thib
parents:
diff changeset
1745 }
223b71206888 Initial import
thib
parents:
diff changeset
1746 void Text::Load(const char* str) {
223b71206888 Initial import
thib
parents:
diff changeset
1747 pimpl->Load(str);
223b71206888 Initial import
thib
parents:
diff changeset
1748 }
223b71206888 Initial import
thib
parents:
diff changeset
1749
223b71206888 Initial import
thib
parents:
diff changeset
1750 void Text::hide(void) {
223b71206888 Initial import
thib
parents:
diff changeset
1751 pimpl->hide();
223b71206888 Initial import
thib
parents:
diff changeset
1752 }
223b71206888 Initial import
thib
parents:
diff changeset
1753 void Text::show(void) {
223b71206888 Initial import
thib
parents:
diff changeset
1754 pimpl->show();
223b71206888 Initial import
thib
parents:
diff changeset
1755 }
223b71206888 Initial import
thib
parents:
diff changeset
1756 void Text::show(int num) {
223b71206888 Initial import
thib
parents:
diff changeset
1757 pimpl->show(num);
223b71206888 Initial import
thib
parents:
diff changeset
1758 }
223b71206888 Initial import
thib
parents:
diff changeset
1759 void Text::DrawBacklog(BacklogItem& item, Cmd& cmd) {
223b71206888 Initial import
thib
parents:
diff changeset
1760 pimpl->DrawBacklog(item, cmd);
223b71206888 Initial import
thib
parents:
diff changeset
1761 }
223b71206888 Initial import
thib
parents:
diff changeset
1762 /**************************************************************::
223b71206888 Initial import
thib
parents:
diff changeset
1763 **
223b71206888 Initial import
thib
parents:
diff changeset
1764 ** BacklogItem
223b71206888 Initial import
thib
parents:
diff changeset
1765 */
223b71206888 Initial import
thib
parents:
diff changeset
1766
223b71206888 Initial import
thib
parents:
diff changeset
1767 BacklogItem::BacklogItem(void) {
223b71206888 Initial import
thib
parents:
diff changeset
1768 scn = -1;
223b71206888 Initial import
thib
parents:
diff changeset
1769 pos = -1;
223b71206888 Initial import
thib
parents:
diff changeset
1770 koe = -1;
223b71206888 Initial import
thib
parents:
diff changeset
1771 face = "";
223b71206888 Initial import
thib
parents:
diff changeset
1772 text.kanji_type = TextStream::sjis;
223b71206888 Initial import
thib
parents:
diff changeset
1773 }
223b71206888 Initial import
thib
parents:
diff changeset
1774 void BacklogItem::Clear(void) {
223b71206888 Initial import
thib
parents:
diff changeset
1775 scn = -1;
223b71206888 Initial import
thib
parents:
diff changeset
1776 pos = -1;
223b71206888 Initial import
thib
parents:
diff changeset
1777 koe = -1;
223b71206888 Initial import
thib
parents:
diff changeset
1778 text.Clear();
223b71206888 Initial import
thib
parents:
diff changeset
1779 }
223b71206888 Initial import
thib
parents:
diff changeset
1780 void BacklogItem::AddTextPos(Cmd& cmd) {
223b71206888 Initial import
thib
parents:
diff changeset
1781 if (scn == -1 && pos == -1) {
223b71206888 Initial import
thib
parents:
diff changeset
1782 scn = cmd.scn;
223b71206888 Initial import
thib
parents:
diff changeset
1783 pos = cmd.pos;
223b71206888 Initial import
thib
parents:
diff changeset
1784 return;
223b71206888 Initial import
thib
parents:
diff changeset
1785 }
223b71206888 Initial import
thib
parents:
diff changeset
1786 DeleteTextPos();
223b71206888 Initial import
thib
parents:
diff changeset
1787 }
223b71206888 Initial import
thib
parents:
diff changeset
1788 void BacklogItem::DeleteTextPos(void) {
223b71206888 Initial import
thib
parents:
diff changeset
1789 scn = 0;
223b71206888 Initial import
thib
parents:
diff changeset
1790 pos = -1;
223b71206888 Initial import
thib
parents:
diff changeset
1791 }
223b71206888 Initial import
thib
parents:
diff changeset
1792 BacklogItem& BacklogItem::operator =(const BacklogItem& p) {
223b71206888 Initial import
thib
parents:
diff changeset
1793 scn = p.scn;
223b71206888 Initial import
thib
parents:
diff changeset
1794 pos = p.pos;
223b71206888 Initial import
thib
parents:
diff changeset
1795 koe = p.koe;
223b71206888 Initial import
thib
parents:
diff changeset
1796 face = p.face;
223b71206888 Initial import
thib
parents:
diff changeset
1797 text = p.text;
223b71206888 Initial import
thib
parents:
diff changeset
1798 }
223b71206888 Initial import
thib
parents:
diff changeset
1799 void BacklogItem::SetSavepos(int p) {
223b71206888 Initial import
thib
parents:
diff changeset
1800 Clear();
223b71206888 Initial import
thib
parents:
diff changeset
1801 scn = SaveSelect;
223b71206888 Initial import
thib
parents:
diff changeset
1802 pos = p;
223b71206888 Initial import
thib
parents:
diff changeset
1803 }
223b71206888 Initial import
thib
parents:
diff changeset
1804
223b71206888 Initial import
thib
parents:
diff changeset
1805 Rect TextWindow::WakuSize(PicContainer& pic, int waku_no, const AyuSysConfig& config) {
223b71206888 Initial import
thib
parents:
diff changeset
1806 char key[1024];
223b71206888 Initial import
thib
parents:
diff changeset
1807 sprintf(key, "#WAKU.%03d.000.NAME", waku_no);
223b71206888 Initial import
thib
parents:
diff changeset
1808 const char* name = config.GetParaStr(key);
223b71206888 Initial import
thib
parents:
diff changeset
1809 if (!name) return Rect(0,0,0,0);
223b71206888 Initial import
thib
parents:
diff changeset
1810 std::string str = name; str += ".g00";
223b71206888 Initial import
thib
parents:
diff changeset
1811 Surface* s = pic.Root().NewSurface(str.c_str());
223b71206888 Initial import
thib
parents:
diff changeset
1812 if (!s) return Rect(0,0,0,0);
223b71206888 Initial import
thib
parents:
diff changeset
1813 Rect r(*s);
223b71206888 Initial import
thib
parents:
diff changeset
1814 pic.Root().DeleteSurface(s);
223b71206888 Initial import
thib
parents:
diff changeset
1815 return r;
223b71206888 Initial import
thib
parents:
diff changeset
1816 }
223b71206888 Initial import
thib
parents:
diff changeset
1817 void TextWindow::MakeWaku(PicContainer& pic, Event::Container& event, int waku_no, int window_no, bool* use_btn, const AyuSysConfig& config, void* callback) {
223b71206888 Initial import
thib
parents:
diff changeset
1818 char key[1024];
223b71206888 Initial import
thib
parents:
diff changeset
1819 std::string str;
223b71206888 Initial import
thib
parents:
diff changeset
1820 /* 枠を作成 */
223b71206888 Initial import
thib
parents:
diff changeset
1821 sprintf(key, "#WAKU.%03d.000.NAME", waku_no);
223b71206888 Initial import
thib
parents:
diff changeset
1822 const char* name = config.GetParaStr(key);
223b71206888 Initial import
thib
parents:
diff changeset
1823 if (name && name[0] == 0) name = 0;
223b71206888 Initial import
thib
parents:
diff changeset
1824 sprintf(key, "#WAKU.%03d.000.BACK", waku_no);
223b71206888 Initial import
thib
parents:
diff changeset
1825 const char* back = config.GetParaStr(key);
223b71206888 Initial import
thib
parents:
diff changeset
1826 if (back && back[0] == 0) back = 0;
223b71206888 Initial import
thib
parents:
diff changeset
1827 sprintf(key, "#WAKU.%03d.000.BTN", waku_no);
223b71206888 Initial import
thib
parents:
diff changeset
1828 const char* btn = config.GetParaStr(key);
223b71206888 Initial import
thib
parents:
diff changeset
1829 if (btn && btn[0] == 0) btn = 0;
223b71206888 Initial import
thib
parents:
diff changeset
1830
223b71206888 Initial import
thib
parents:
diff changeset
1831 if (name == 0 && back == 0 && btn == 0) return;
223b71206888 Initial import
thib
parents:
diff changeset
1832
223b71206888 Initial import
thib
parents:
diff changeset
1833 /* まず、テキスト背景を設定 */
223b71206888 Initial import
thib
parents:
diff changeset
1834 if (back) {
223b71206888 Initial import
thib
parents:
diff changeset
1835 str = back; str += ".g00";
223b71206888 Initial import
thib
parents:
diff changeset
1836 int rc,gc,bc,ac, flag;
223b71206888 Initial import
thib
parents:
diff changeset
1837 char key[1024];
223b71206888 Initial import
thib
parents:
diff changeset
1838 sprintf(key, "#WINDOW.%03d.ATTR", window_no);
223b71206888 Initial import
thib
parents:
diff changeset
1839 if (config.GetParam(key, 5, &rc, &gc, &bc, &ac, &flag) == -1) {
223b71206888 Initial import
thib
parents:
diff changeset
1840 config.GetParam("#WINDOW_ATTR", 5, &rc, &gc, &bc, &ac, &flag);
223b71206888 Initial import
thib
parents:
diff changeset
1841 }
223b71206888 Initial import
thib
parents:
diff changeset
1842 Surface* back_s = pic.Root().NewSurface(str.c_str());
223b71206888 Initial import
thib
parents:
diff changeset
1843 if (back_s) {
223b71206888 Initial import
thib
parents:
diff changeset
1844 Rect rect(*back_s);
223b71206888 Initial import
thib
parents:
diff changeset
1845 Surface* s = pic.Root().NewSurface(rect.width(), rect.height(), ALPHA_MASK);
223b71206888 Initial import
thib
parents:
diff changeset
1846 DSurfaceMove(back_s, rect, s, rect);
223b71206888 Initial import
thib
parents:
diff changeset
1847 DSurfaceFillA(s, rect, rc, gc, bc, ac); // 透明度設定
223b71206888 Initial import
thib
parents:
diff changeset
1848 pic.SetSurface(s, 0, 0);
223b71206888 Initial import
thib
parents:
diff changeset
1849 pic.SetSurfaceFreeFlag(1);
223b71206888 Initial import
thib
parents:
diff changeset
1850 if (flag == 0) wid->Pic()->SetSurfaceAttribute(PicBase::BLIT_MULTIPLY);
223b71206888 Initial import
thib
parents:
diff changeset
1851 pic.Root().DeleteSurface(back_s);
223b71206888 Initial import
thib
parents:
diff changeset
1852 }
223b71206888 Initial import
thib
parents:
diff changeset
1853 }
223b71206888 Initial import
thib
parents:
diff changeset
1854 /* その前に枠飾りを設定 */
223b71206888 Initial import
thib
parents:
diff changeset
1855 if (name) {
223b71206888 Initial import
thib
parents:
diff changeset
1856 str = name; str += ".g00";
223b71206888 Initial import
thib
parents:
diff changeset
1857 Surface* s = pic.Root().NewSurface(str.c_str());
223b71206888 Initial import
thib
parents:
diff changeset
1858 if (s) {
223b71206888 Initial import
thib
parents:
diff changeset
1859 Rect rect(*s);
223b71206888 Initial import
thib
parents:
diff changeset
1860 pic.Root().DeleteSurface(s);
223b71206888 Initial import
thib
parents:
diff changeset
1861 PicBase* p = pic.create_leaf(Rect(0, 0, rect.width(), rect.height()),0);
223b71206888 Initial import
thib
parents:
diff changeset
1862 p->SetSurface(str.c_str(), 0, 0);
223b71206888 Initial import
thib
parents:
diff changeset
1863 p->ZMove(ZMOVE_BOTTOM);
223b71206888 Initial import
thib
parents:
diff changeset
1864 p->show();
223b71206888 Initial import
thib
parents:
diff changeset
1865 }
223b71206888 Initial import
thib
parents:
diff changeset
1866 }
223b71206888 Initial import
thib
parents:
diff changeset
1867 if (btn == 0) return;
223b71206888 Initial import
thib
parents:
diff changeset
1868 if (use_btn == 0) return;
223b71206888 Initial import
thib
parents:
diff changeset
1869 // ボタンの作成
223b71206888 Initial import
thib
parents:
diff changeset
1870 // 使用するボタンについては、必要に応じて show() すること
223b71206888 Initial import
thib
parents:
diff changeset
1871
223b71206888 Initial import
thib
parents:
diff changeset
1872 /* ボタンの位置情報を求める */
223b71206888 Initial import
thib
parents:
diff changeset
1873 str = btn; str += ".g00";
223b71206888 Initial import
thib
parents:
diff changeset
1874 ARCINFO* info = file_searcher.Find(FILESEARCH::PDT, str.c_str(), "g00");
223b71206888 Initial import
thib
parents:
diff changeset
1875 if (info == 0) return; // cannot find file
223b71206888 Initial import
thib
parents:
diff changeset
1876 const char* data = info->Read();
223b71206888 Initial import
thib
parents:
diff changeset
1877 /* g00 ファイルのヘッダ部分に位置情報は入っている */
223b71206888 Initial import
thib
parents:
diff changeset
1878 /* 存在しなければボタン画像ではない */
223b71206888 Initial import
thib
parents:
diff changeset
1879 if (data == 0 || *data != 2) {
223b71206888 Initial import
thib
parents:
diff changeset
1880 delete info;
223b71206888 Initial import
thib
parents:
diff changeset
1881 return;
223b71206888 Initial import
thib
parents:
diff changeset
1882 }
223b71206888 Initial import
thib
parents:
diff changeset
1883 int index_count = read_little_endian_int(data+5); // 0x70 == 112 ( 8 個ずつグループなので、14個のボタン ) が標準
223b71206888 Initial import
thib
parents:
diff changeset
1884 int i;
223b71206888 Initial import
thib
parents:
diff changeset
1885 for (i=0; i<BTNCNT; i++) {
223b71206888 Initial import
thib
parents:
diff changeset
1886 if (!use_btn[i]) continue;
223b71206888 Initial import
thib
parents:
diff changeset
1887 if (btnpos[i]*8 >= index_count) {
223b71206888 Initial import
thib
parents:
diff changeset
1888 continue; // ボタンが存在しない
223b71206888 Initial import
thib
parents:
diff changeset
1889 }
223b71206888 Initial import
thib
parents:
diff changeset
1890 int x, y, w, h;
223b71206888 Initial import
thib
parents:
diff changeset
1891 sprintf(key, "#WAKU.%03d.000.%s_BOX", waku_no, btnname[i]);
223b71206888 Initial import
thib
parents:
diff changeset
1892 if (config.GetParam(key, 5, 0, &x, &y, &w, &h) == -1) continue;
223b71206888 Initial import
thib
parents:
diff changeset
1893 int sx, sy, sdx, sdy, cnt;
223b71206888 Initial import
thib
parents:
diff changeset
1894 const char* d = data + 9 + btnpos[i]*24*8;
223b71206888 Initial import
thib
parents:
diff changeset
1895 sx = read_little_endian_int(d);
223b71206888 Initial import
thib
parents:
diff changeset
1896 sy = read_little_endian_int(d+4);
223b71206888 Initial import
thib
parents:
diff changeset
1897 sdx = read_little_endian_int(d+24) - sx;
223b71206888 Initial import
thib
parents:
diff changeset
1898 sdy = read_little_endian_int(d+24 + 4) - sy;
223b71206888 Initial import
thib
parents:
diff changeset
1899 cnt = 2;
223b71206888 Initial import
thib
parents:
diff changeset
1900 if (sx+sdx*2 == read_little_endian_int(d+2*24) && sy+sdy*2 == read_little_endian_int(d+2*24+4)) cnt = 3;
223b71206888 Initial import
thib
parents:
diff changeset
1901 WidButton* wid = new WidButton(event, &pic, str.c_str(), sx, sy, sdx, sdy, cnt, Rect(x, y, x+w, y+h), 1);
223b71206888 Initial import
thib
parents:
diff changeset
1902 if (btnpress[i]) { wid->press_func = btnpress[i]; wid->press_pointer = callback;}
223b71206888 Initial import
thib
parents:
diff changeset
1903 if (btndrag[i]) { wid->drag_func = btndrag[i]; wid->drag_pointer = callback;}
223b71206888 Initial import
thib
parents:
diff changeset
1904 }
223b71206888 Initial import
thib
parents:
diff changeset
1905 delete info;
223b71206888 Initial import
thib
parents:
diff changeset
1906 return;
223b71206888 Initial import
thib
parents:
diff changeset
1907 }
223b71206888 Initial import
thib
parents:
diff changeset
1908
223b71206888 Initial import
thib
parents:
diff changeset
1909 TextWindow::TextWindow(PicContainer& parent, Event::Container& event, int win_no, const AyuSysConfig& config, void* callback) :
223b71206888 Initial import
thib
parents:
diff changeset
1910 wid(0), name_visible(true),name(0),name_container(0), face(0) {
223b71206888 Initial import
thib
parents:
diff changeset
1911 int i; for (i=0; i<8; i++) face_pics[i]=0;
223b71206888 Initial import
thib
parents:
diff changeset
1912 char key[1024];
223b71206888 Initial import
thib
parents:
diff changeset
1913 bool use_btn[BTNCNT];
223b71206888 Initial import
thib
parents:
diff changeset
1914 int size, rep1, rep2, cntw, cnth, mposx, mposy, posd, posx, posy, minx, miny, waku_no, ruby;
223b71206888 Initial import
thib
parents:
diff changeset
1915 sprintf(key, "#WINDOW.%03d.MOJI_SIZE", win_no); if (config.GetParam(key, 1, &size) == -1) return;
223b71206888 Initial import
thib
parents:
diff changeset
1916 sprintf(key, "#WINDOW.%03d.MOJI_REP", win_no); if (config.GetParam(key, 2, &rep1, &rep2) == -1) return;
223b71206888 Initial import
thib
parents:
diff changeset
1917 sprintf(key, "#WINDOW.%03d.MOJI_CNT", win_no); if (config.GetParam(key, 2, &cntw, &cnth) == -1) return;
223b71206888 Initial import
thib
parents:
diff changeset
1918 sprintf(key, "#WINDOW.%03d.POS", win_no); if (config.GetParam(key, 3, &posd, &posx, &posy) == -1) return;
223b71206888 Initial import
thib
parents:
diff changeset
1919 sprintf(key, "#WINDOW.%03d.MOJI_POS", win_no); if (config.GetParam(key, 4, &mposy, 0, &mposx, 0) == -1) return;
223b71206888 Initial import
thib
parents:
diff changeset
1920 sprintf(key, "#WINDOW.%03d.MOJI_MIN", win_no); if (config.GetParam(key, 2, &minx, &miny) == -1) return;
223b71206888 Initial import
thib
parents:
diff changeset
1921 sprintf(key, "#WINDOW.%03d.WAKU_SETNO", win_no);if (config.GetParam(key, 1, &waku_no) == -1) return;
223b71206888 Initial import
thib
parents:
diff changeset
1922 sprintf(key, "#WINDOW.%03d.LUBY_SIZE", win_no); if (config.GetParam(key, 1, &ruby) == -1) return;
223b71206888 Initial import
thib
parents:
diff changeset
1923
223b71206888 Initial import
thib
parents:
diff changeset
1924 /* テキストウィジット:画面の右下一杯まで使用 */
223b71206888 Initial import
thib
parents:
diff changeset
1925 /* posd == 2 なら画面下にひっつくように配置 */
223b71206888 Initial import
thib
parents:
diff changeset
1926 Rect r(0,0);
223b71206888 Initial import
thib
parents:
diff changeset
1927 if (posd == 2) {
223b71206888 Initial import
thib
parents:
diff changeset
1928 r = WakuSize(parent, waku_no, config);
223b71206888 Initial import
thib
parents:
diff changeset
1929 r = Rect(0, parent.Height()-r.height(), r.width(), parent.Height());
223b71206888 Initial import
thib
parents:
diff changeset
1930 posx = 0;
223b71206888 Initial import
thib
parents:
diff changeset
1931 posy = parent.Height()-r.height();
223b71206888 Initial import
thib
parents:
diff changeset
1932 } else /* posd == 0 ? */
223b71206888 Initial import
thib
parents:
diff changeset
1933 r = Rect(posx, posy, parent.Width(), parent.Height());
223b71206888 Initial import
thib
parents:
diff changeset
1934
223b71206888 Initial import
thib
parents:
diff changeset
1935 /* テキストウィンドウの作成 */
223b71206888 Initial import
thib
parents:
diff changeset
1936 int w = size*cntw; int h = (size+ruby+2)*cnth;
223b71206888 Initial import
thib
parents:
diff changeset
1937 wid = new WidText(event, &parent, r, Rect(mposx, mposy, mposx+w, mposy+h), size);
223b71206888 Initial import
thib
parents:
diff changeset
1938 wid->stream.kanji_type = TextStream::sjis;
223b71206888 Initial import
thib
parents:
diff changeset
1939 /* 顔ウィンドウの作成 */
223b71206888 Initial import
thib
parents:
diff changeset
1940 for (i=0; i<8; i++) {
223b71206888 Initial import
thib
parents:
diff changeset
1941 int x,y;
223b71206888 Initial import
thib
parents:
diff changeset
1942 sprintf(key, "#WINDOW.%03d.FACE.%03d", win_no, i);
223b71206888 Initial import
thib
parents:
diff changeset
1943 if (config.GetParam(key, 2, &x, &y) == -1) continue;
223b71206888 Initial import
thib
parents:
diff changeset
1944 /* 顔ウィンドウを作成する */
223b71206888 Initial import
thib
parents:
diff changeset
1945 if (x >= 0 && y >= 0) {
223b71206888 Initial import
thib
parents:
diff changeset
1946 face_pics[i] = wid->PicNode()->create_leaf(Rect(x,y), PicBase::FIT_SURFACE);
223b71206888 Initial import
thib
parents:
diff changeset
1947 } else {
223b71206888 Initial import
thib
parents:
diff changeset
1948 face_pics[i] = parent.create_leaf(Rect(x+posx,y+posy), PicBase::FIT_SURFACE);
223b71206888 Initial import
thib
parents:
diff changeset
1949 }
223b71206888 Initial import
thib
parents:
diff changeset
1950 face_pics[i]->show();
223b71206888 Initial import
thib
parents:
diff changeset
1951 }
223b71206888 Initial import
thib
parents:
diff changeset
1952 face = face_pics[0];
223b71206888 Initial import
thib
parents:
diff changeset
1953 // ボタンの設定
223b71206888 Initial import
thib
parents:
diff changeset
1954 for (i=0; i<BTNCNT; i++) {
223b71206888 Initial import
thib
parents:
diff changeset
1955 int num;
223b71206888 Initial import
thib
parents:
diff changeset
1956 sprintf(key, "#WINDOW.%03d.%s_USE", win_no, btnname[i]);
223b71206888 Initial import
thib
parents:
diff changeset
1957 config.GetParam(key, 1, &num);
223b71206888 Initial import
thib
parents:
diff changeset
1958 use_btn[i] = (num==0) ? false : true;
223b71206888 Initial import
thib
parents:
diff changeset
1959 }
223b71206888 Initial import
thib
parents:
diff changeset
1960 // make name window
223b71206888 Initial import
thib
parents:
diff changeset
1961 int shadow, name_mod, name_size, name_min, name_center, name_posx, name_posy, name_mposx, name_mposy;
223b71206888 Initial import
thib
parents:
diff changeset
1962 sprintf(key, "#WINDOW.%03d.MOJI_SHADOW", win_no); config.GetParam(key, 1, &shadow);
223b71206888 Initial import
thib
parents:
diff changeset
1963 sprintf(key, "#WINDOW.%03d.NAME_MOD", win_no); config.GetParam(key, 1, &name_mod);
223b71206888 Initial import
thib
parents:
diff changeset
1964 sprintf(key, "#WINDOW.%03d.NAME_MOJI_SIZE", win_no); config.GetParam(key, 1, &name_size);
223b71206888 Initial import
thib
parents:
diff changeset
1965 sprintf(key, "#WINDOW.%03d.NAME_MOJI_MIN", win_no); config.GetParam(key, 1, &name_min);
223b71206888 Initial import
thib
parents:
diff changeset
1966 sprintf(key, "#WINDOW.%03d.NAME_MOJI_POS", win_no); config.GetParam(key, 2, &name_mposx, &name_mposy);
223b71206888 Initial import
thib
parents:
diff changeset
1967 sprintf(key, "#WINDOW.%03d.NAME_CENTERING", win_no); config.GetParam(key, 1, &name_center);
223b71206888 Initial import
thib
parents:
diff changeset
1968 sprintf(key, "#WINDOW.%03d.NAME_POS", win_no); config.GetParam(key, 2, &name_posx, &name_posy);
223b71206888 Initial import
thib
parents:
diff changeset
1969 // if name_mode==0 name is in the text window
223b71206888 Initial import
thib
parents:
diff changeset
1970 // if name_mode == 1 open name window
223b71206888 Initial import
thib
parents:
diff changeset
1971 // if name_mode == 2 name is not used
223b71206888 Initial import
thib
parents:
diff changeset
1972 if (name_mod) {
223b71206888 Initial import
thib
parents:
diff changeset
1973 if (name_mod == 1) {
223b71206888 Initial import
thib
parents:
diff changeset
1974 int w = name_size*name_min; int h = name_size;
223b71206888 Initial import
thib
parents:
diff changeset
1975 int name_waku;
223b71206888 Initial import
thib
parents:
diff changeset
1976 sprintf(key, "#WINDOW.%03d.NAME_WAKU_SETNO", win_no);
223b71206888 Initial import
thib
parents:
diff changeset
1977 if (config.GetParam(key, 1, &name_waku) != -1 && name_waku != -1) {
223b71206888 Initial import
thib
parents:
diff changeset
1978 Rect waku_r = WakuSize(parent, name_waku, config);
223b71206888 Initial import
thib
parents:
diff changeset
1979 waku_r.rmove(r.lx, r.ty); // テキストウィンドウ位置に動かす
223b71206888 Initial import
thib
parents:
diff changeset
1980 waku_r.rmove(name_posx, name_posy-waku_r.height()); // NAME_POS へ位置補正
223b71206888 Initial import
thib
parents:
diff changeset
1981 name_container = parent.create_node(waku_r, 0);
223b71206888 Initial import
thib
parents:
diff changeset
1982 MakeWaku(*name_container, event, name_waku, win_no, 0, config, callback);
223b71206888 Initial import
thib
parents:
diff changeset
1983 Rect name_r(0,0,w,h);
223b71206888 Initial import
thib
parents:
diff changeset
1984 name_r.rmove(name_mposx, name_mposy);
223b71206888 Initial import
thib
parents:
diff changeset
1985 name = new WidLabel(name_container, name_r, true, 0, name_size);
223b71206888 Initial import
thib
parents:
diff changeset
1986 name->show();
223b71206888 Initial import
thib
parents:
diff changeset
1987 } else { // 名前専用枠なし
223b71206888 Initial import
thib
parents:
diff changeset
1988 Rect name_r(0, 0, w, h);
223b71206888 Initial import
thib
parents:
diff changeset
1989 name_r.rmove(r.lx, r.ty);
223b71206888 Initial import
thib
parents:
diff changeset
1990 name_r.rmove(name_posx, name_posy-name_size);
223b71206888 Initial import
thib
parents:
diff changeset
1991 name_container = parent.create_node(name_r, 0);
223b71206888 Initial import
thib
parents:
diff changeset
1992 name = new WidLabel(name_container, Rect(0,0,w,h), true, 0, name_size);
223b71206888 Initial import
thib
parents:
diff changeset
1993 name->show();
223b71206888 Initial import
thib
parents:
diff changeset
1994 name_container->show();
223b71206888 Initial import
thib
parents:
diff changeset
1995 }
223b71206888 Initial import
thib
parents:
diff changeset
1996 } else { // name_mod == 2 or 3
223b71206888 Initial import
thib
parents:
diff changeset
1997 name_container = parent.create_node( Rect(0,0,1,1), 0);
223b71206888 Initial import
thib
parents:
diff changeset
1998 }
223b71206888 Initial import
thib
parents:
diff changeset
1999 }
223b71206888 Initial import
thib
parents:
diff changeset
2000 MakeWaku(*wid->PicNode(), event,waku_no, win_no, use_btn, config, callback);
223b71206888 Initial import
thib
parents:
diff changeset
2001 }
223b71206888 Initial import
thib
parents:
diff changeset
2002 void TextImpl::InitWindow(void) {
223b71206888 Initial import
thib
parents:
diff changeset
2003 int i,j,k;
223b71206888 Initial import
thib
parents:
diff changeset
2004 int w;
223b71206888 Initial import
thib
parents:
diff changeset
2005 std::string str;
223b71206888 Initial import
thib
parents:
diff changeset
2006
223b71206888 Initial import
thib
parents:
diff changeset
2007 for (w=0; w<32; w++) {
223b71206888 Initial import
thib
parents:
diff changeset
2008 widgets[w] = new TextWindow(parent, event, w, config, (void*)this);
223b71206888 Initial import
thib
parents:
diff changeset
2009 if (widgets[w]->wid == 0) {
223b71206888 Initial import
thib
parents:
diff changeset
2010 delete widgets[w];
223b71206888 Initial import
thib
parents:
diff changeset
2011 widgets[w] = 0;
223b71206888 Initial import
thib
parents:
diff changeset
2012 }
223b71206888 Initial import
thib
parents:
diff changeset
2013 }
223b71206888 Initial import
thib
parents:
diff changeset
2014 SetCursor(0);
223b71206888 Initial import
thib
parents:
diff changeset
2015 for (i=0; i<26; i++) {
223b71206888 Initial import
thib
parents:
diff changeset
2016 char buf[1024];
223b71206888 Initial import
thib
parents:
diff changeset
2017 sprintf(buf, "#NAME.%c", i+'A');
223b71206888 Initial import
thib
parents:
diff changeset
2018 const char* s = config.GetParaStr(buf);
223b71206888 Initial import
thib
parents:
diff changeset
2019 if (s) replace_name[i] = s;
223b71206888 Initial import
thib
parents:
diff changeset
2020 }
223b71206888 Initial import
thib
parents:
diff changeset
2021 // replace_name2 : 初期設定
223b71206888 Initial import
thib
parents:
diff changeset
2022 // 渚、秋生、渚 (CLANNAD)
223b71206888 Initial import
thib
parents:
diff changeset
2023 char name_nagisa[3] = {0x8f,0x8d,0};
223b71206888 Initial import
thib
parents:
diff changeset
2024 char name_akio[5] = {0x8f, 0x48, 0x90, 0xb6, 0};
223b71206888 Initial import
thib
parents:
diff changeset
2025 replace_name2[0] = name_nagisa;
223b71206888 Initial import
thib
parents:
diff changeset
2026 replace_name2[1] = name_akio;
223b71206888 Initial import
thib
parents:
diff changeset
2027 replace_name2[2] = name_nagisa;
223b71206888 Initial import
thib
parents:
diff changeset
2028 text = 0;
223b71206888 Initial import
thib
parents:
diff changeset
2029 /* テキスト速度の設定 */
223b71206888 Initial import
thib
parents:
diff changeset
2030 int speed, mod, wait, auto_mod;
223b71206888 Initial import
thib
parents:
diff changeset
2031 config.GetParam("#INIT_MESSAGE_SPEED", 1, &speed);
223b71206888 Initial import
thib
parents:
diff changeset
2032 config.GetParam("#INIT_MESSAGE_SPEED_MOD", 1, &mod);
223b71206888 Initial import
thib
parents:
diff changeset
2033 config.GetParam("#MESSAGE_KEY_WAIT_USE", 1, &auto_mod);
223b71206888 Initial import
thib
parents:
diff changeset
2034 config.GetParam("#MESSAGE_KEY_WAIT_TIME", 1, &wait);
223b71206888 Initial import
thib
parents:
diff changeset
2035 if (mod) speed = -1;
223b71206888 Initial import
thib
parents:
diff changeset
2036 if (!auto_mod) wait = -1;
223b71206888 Initial import
thib
parents:
diff changeset
2037 SetTextSpeed(speed);
223b71206888 Initial import
thib
parents:
diff changeset
2038 SetTextWait(wait);
223b71206888 Initial import
thib
parents:
diff changeset
2039 return;
223b71206888 Initial import
thib
parents:
diff changeset
2040 }