BayGUIリライト[4]
とりあえずお約束のメガデモを動かしてみました。noiz2bgというアプリで、MONAにも移植されています。思ったより遅かったです。体感5倍といったのは嘘でした。ごめんなさい。
#ifdef SDL static unsigned int sdl_timer_callback (unsigned int interval, void* param) { SDL_Event event; SDL_RemoveTimer(globalTimerID); event.type = SDL_USEREVENT; return SDL_PushEvent(&event); } #endif /** クラス宣言 */ class GNoiz2bg : public Frame, WindowListener { private: int scene_count, scene; unsigned char* pbuf; public: /** コンストラクタ */ GNoiz2bg(const char* title) { logprintf("%s:%s:%d\n", __FILE__, __FUNCTION__, __LINE__); setBounds(50, 50, SCREEN_W + 12, SCREEN_H + 28); this->title = new String(title); this->pbuf = (unsigned char *)malloc(SCREEN_W * SCREEN_H * 4); initBackground(); setStageBackground(1); this->scene = 1; this->scene_count = FPS * 10; addWindowListener(this); } /** デストラクタ */ virtual ~GNoiz2bg() { logprintf("%s:%s:%d\n", __FILE__, __FUNCTION__, __LINE__); free(pbuf); } virtual void windowActivated(WindowEvent* e) { logprintf("%s:%s:%d\n", __FILE__, __FUNCTION__, __LINE__); } virtual void windowClosed(WindowEvent* e) { logprintf("%s:%s:%d\n", __FILE__, __FUNCTION__, __LINE__); } virtual void windowDeactivated(WindowEvent* e) { logprintf("%s:%s:%d\n", __FILE__, __FUNCTION__, __LINE__); } virtual void windowOpened(WindowEvent* e) { printf("%s:%s:%d\n", __FILE__, __FUNCTION__, __LINE__); #ifdef SDL globalTimerID = SDL_AddTimer(1, sdl_timer_callback, (void*)1); #endif } /** イベントハンドラ */ virtual void processEvent(AWTEvent* event) { //if (event->getID() == WindowEvent::WINDOW_OPENED) { //Frame::processEvent(event); moveBackground(); drawBackground(this->pbuf); for (int y = 0; y < SCREEN_H; y++) { for (int x = 0; x < SCREEN_W; x++) { unsigned char *p = &pbuf[(x + y * SCREEN_W) * 4]; this->image->setPixel(x + 6, y + 22, *((unsigned int*)p)); } } update(); scene_count--; if(scene_count <= 0){ scene = (scene + 1) % 6; scene_count = FPS * 20; setStageBackground(scene); } #ifdef SDL globalTimerID = SDL_AddTimer(1, sdl_timer_callback, (void*)1); #endif //} } }; #ifdef MONA int MonaMain(List<char*>* pekoe) #else int main(int argc, char *argv[]) #endif { _P<GNoiz2bg> noiz = new GNoiz2bg("noiz2bg for GUI"); noiz->run(); return 0; }