Widgetと言えば、ややこしい初期化手続きやオブジェクトの管理が付き物だったのだが、このZeroMemoryWidgetではスタック以外のメモリー消費をゼロにしたという。
サンプル(以下に示す)を見れば一目瞭然、new Handlerすら無い。
ヒントとなったのは、HTML+ECMAScriptなどのスクリプトによるWidgetの動的生成だが、複数の記述言語を使用しなくても良いように考え、GDK(Gtkじゃない)を描画に用いた関数呼出でWidget群を構築したのだという。
[Hello World]
#include "zmw.h"
void hello world(void)
{ static GdkWindow w = NULL ;
ZMW(zmw window(&w))
{ zmw text("Hello World!") ;
} }
int main(int argc, char argv[])
{ zmw run(argc, argv, hello world) ;
return 0 ;
}
面倒なイベント処理も、Gtkと比べるとこの通り。
[event(Gtk)]
void handler destroy(GtkWidget widget, gpointer data)
{
printf ("ENDn") ;
exit (0) ;
}
...
button = gtk button new with label("Quit");
gtk signal connect(GTK OBJECT(button), "clicked",
GTK SIGNAL FUNC(handler destroy), NULL);
[event(ZMW)]
zmw button("Quit") ;
if ( exit allowed && zmw activated() ) {
printf ("ENDn") ;
exit (0) ;
} if ( zmw tip visible () ) {
ZMW( zmw window popup(&window tip) ) {
zmw text("Quit the program") ;
}}
これは、お手軽でいいかもね。
サンプル(以下に示す)を見れば一目瞭然、new Handlerすら無い。
ヒントとなったのは、HTML+ECMAScriptなどのスクリプトによるWidgetの動的生成だが、複数の記述言語を使用しなくても良いように考え、GDK(Gtkじゃない)を描画に用いた関数呼出でWidget群を構築したのだという。
[Hello World]
#include "zmw.h"
void hello world(void)
{ static GdkWindow w = NULL ;
ZMW(zmw window(&w))
{ zmw text("Hello World!") ;
} }
int main(int argc, char argv[])
{ zmw run(argc, argv, hello world) ;
return 0 ;
}
面倒なイベント処理も、Gtkと比べるとこの通り。
[event(Gtk)]
void handler destroy(GtkWidget widget, gpointer data)
{
printf ("ENDn") ;
exit (0) ;
}
...
button = gtk button new with label("Quit");
gtk signal connect(GTK OBJECT(button), "clicked",
GTK SIGNAL FUNC(handler destroy), NULL);
[event(ZMW)]
zmw button("Quit") ;
if ( exit allowed && zmw activated() ) {
printf ("ENDn") ;
exit (0) ;
} if ( zmw tip visible () ) {
ZMW( zmw window popup(&window tip) ) {
zmw text("Quit the program") ;
}}
これは、お手軽でいいかもね。
FOJYさんのコメントの日付が変なのはそのせいです。
もし、これでもコメントスパムが続くようなら、記事削除しかないかなあ。
テクマクマヤコン、エクマスクリプトは仕事でおぼえるチャンスが来そうで来なかったので、残念です。
ところでGDkと、perlのグラフィック系モジュール「GD」とは関係あるのでしょうか・・勉強不足で申し訳ないす。。拝見した文法がモロperlなので・・
http://search.cpan.org/~allenday/CGI-Widget-0.15/
くだらない書き込みでスミマセンでした
m(_ _)m