ザビタン開発日記
2009 | 01
2008 | 01 | 02 | 06 | 12
2007 | 10 | 11 | 12
10月 17 (水曜日) 2007
09:39
コンソールの位置と大きさ
 
ニセタスクバーを上にもっていっちゃったせいで、最初に表示される
コンソールとかぶってしまうようになりました。
また、当分は800x600でやっていきますが、それだとちょっとこの
コンソールでは狭すぎですよね?80x24くらいにしたいなぁ・・・

そんなわけでさっそく改造!
まずはコンソールの表示位置ね。
えーっと。これはどこでやってたっけかな・・・。

あったあった。bootpac.c内で key_win = open_console(shtctl, memtotal); として呼んでいる。これが最初のコンソール。

そのすぐ下のあたり。ここで、マウスや初期コンソールなどのシートの位置を
sheet_slideなどで調整しているね。

sheet_slide(key_win, 32, 4);

これを書き換えれば最初の位置が変更できる。

sheet_slide(key_win, 32, 32);

とりあえずこんなもんでいいかな。

次にコンソールの大きさ。これはどこでやってるのかな。
???あれれれ?
open_console関数内で決めうちしてるのかな?これ??

sheet_setbuf(sht, buf, 256, 165, -1); /* 透明色なし */

とりあえずこの辺の数字をいろいろといじってみる・・・

ふむ・・・・単にここいらへんの数字を変えただけではいろいろとズレが
生じちゃうよね?ここは一発、open_console関数の復習と逆説で考えてみよう。

まず、オイラの目的は80x24のコンソールがほしいわけ。
そうなると単にウィンドゥの大きさだけじゃない。その大きさの
テキストボックスが収まる窓が必要。これを逆に計算してみると・・・

標準状態:30x8文字で240x128(文字が8x16だからね)
欲しい状態:80x24文字だから640x384。

さらにウィンドゥの部品が覆うので高さが+37、幅が+16となるから
ウィンドゥの大きさは656x421とこうなるわけね。
open_console内の各数字をこれに合わせてみる・・・


             :
unsigned char *buf = (unsigned char *) memman_alloc_4k(memman, 656 * 421);
sheet_setbuf(sht, buf, 656, 421, -1); /* 透明色なし */
make_window8(buf, 656, 421, "console", 0);
make_textbox8(sht, 8, 28, 640, 384, COL8_000000);
sht->task = open_constask(sht, memtotal);
             :


・・・・おぉぉ! ひろーーいコンソールが!できたーーー!

ダメじゃん!!!!!!!


これ、わかります? 
ウィンドゥは広くなってるけど、コンソール部分は前と同じ大きさ
のままなんですよ〜?(T T)
これじゃまるで、旅館の大広間で3人だけ朝食喰ってる状態じゃないですか!!

えーーーっと、この辺の制御はどこだったかな・・・

むむむーーーーー!!!!

これはconsole.c内。でも、幅や高さをみな決め打ちで行ってますねぇ・・・

こりゃ大幅な改造・・・いや! むしろ引数、いやさ、せめて定数かなんかに改造しておかないと大変だぞおぉぉ!!!(汗

リビジョン8
 
30日を過ぎたBlogにはコメントできません。

Referer  (9)
(1) 2 3 4 5 6 7 8 9 10 » 

PopnupBlog V3 Denali created by Bluemoon inc.