virtual void on_mouse_button_down(int x, int y, unsigned flags) { if(flags & agg::mouse_left) { if(m_quad.on_mouse_button_down(x, y)) { force_redraw(); } else { start_timer(); m_test_flag = true; on_draw(); on_draw(); on_draw(); on_draw(); char buf[100]; sprintf(buf, "time=%.3f", elapsed_time()); m_test_flag = false; force_redraw(); message(buf); } } }
/** * @brief Calls the on_draw() method of a Lua game. * @param game A game. * @param dst_surface The destination surface. */ void LuaContext::game_on_draw(Game& game, Surface& dst_surface) { push_game(l, game.get_savegame()); menus_on_draw(-1, dst_surface); on_draw(dst_surface); lua_pop(l, 1); }
void UIWidget::draw_func() { if (surface_area) surface_area->placement.start_transform(); on_draw(); std::vector<UIWidget *> elements = ElementID::recast_collection<UIWidget>(get_children()); std::reverse(elements.begin(), elements.end()); for (auto &child : elements) child->draw_func(); // draws the focus rectangle if it's focused /* if (focused && gimmie_super_screen()->draw_focused_outline) { al_draw_rounded_rectangle(0, 0, surface_area->placement.size.x, surface_area->placement.size.y, 3, 3, color::color(color::black, 0.2), 5); al_draw_rounded_rectangle(0, 0, surface_area->placement.size.x, surface_area->placement.size.y, 3, 3, color::mix(gimmie_super_screen()->focused_outline_color, color::purple, 0.6+0.4*sin(Framework::time_now*3)), 1.5); } */ if (surface_area) surface_area->placement.restore_transform(); // draws the collision shape (for debugging) //surface_area->draw_bounding_area(); }
virtual void on_ctrl_change() { if(m_benchmark.status()) { int i; on_draw(); update_window(); scanline_rasterizer ras; pixfmt pixf(rbuf_window()); base_renderer rb(pixf); solid_renderer solid(rb); draft_renderer draft(rb); char buf[256]; if(m_draft.status()) { start_timer(); for(i = 0; i < 10; i++) { draw_scene(ras, solid, draft); } sprintf(buf, "%3.3f milliseconds", elapsed_time()); } else { double times[5]; for(m_draw = 0; m_draw < 4; m_draw++) { start_timer(); for(i = 0; i < 10; i++) { draw_scene(ras, solid, draft); } times[m_draw] = elapsed_time(); } m_draw = 3; times[4] = times[3]; times[3] -= times[2]; times[2] -= times[1]; times[1] -= times[0]; FILE* fd = fopen(full_file_name("benchmark"), "a"); fprintf(fd, "%10.3f %10.3f %10.3f %10.3f %10.3f\n", times[0], times[1], times[2], times[3], times[4]); fclose(fd); sprintf(buf, " pipeline add_path sort render total\n" "%10.3f %10.3f %10.3f %10.3f %10.3f", times[0], times[1], times[2], times[3], times[4]); } message(buf); m_benchmark.status(false); force_redraw(); } }
/////////////////////// // normal void Tooltip::draw() { if(is_visible()) { std::string text = get_text(); int x = get_x(); int y = get_y(); int width = get_width (); int height = get_height(); double angle = get_angle(); double scale_x = get_scale().x; double scale_y = get_scale().y; double red = get_color().x; double green = get_color().y; double blue = get_color().z; double alpha = get_color().w; Renderer::draw_tooltip(text, x, y, width, height, angle, scale_x, scale_y, red, green, blue, alpha); if(label != nullptr) { label->draw(); //Renderer::draw_label(text, x, y, angle, get_label()->get_scale().x, get_label()->get_scale().y, // get_label()->get_font()->get_data(), // get_text_color().x,get_text_color().y,get_text_color().z,get_text_color().w); } } on_draw(); // callback for all gui }
/** * \brief Calls sol.main.on_draw() if it exists. * \param dst_surface The destination surface. */ void LuaContext::main_on_draw(Surface& dst_surface) { push_main(l); on_draw(dst_surface); menus_on_draw(-1, dst_surface); lua_pop(l, 1); }
virtual void on_ctrl_change() { if(m_test.status()) { on_draw(); update_window(); m_test.status(false); start_timer(); int i; for(i = 0; i < 1000; i++) { draw_aliased(); } double t1 = elapsed_time(); start_timer(); for(i = 0; i < 1000; i++) { draw_anti_aliased(); } double t2 = elapsed_time(); update_window(); char buf[100]; sprintf(buf, "Time Aliased=%.2fms Time Anti-Aliased=%.2fms", t1, t2); message(buf); } }
/** * \brief Calls the on_draw() method of a Lua menu. * \param menu_ref A reference to the menu object. * \param dst_surface The destination surface. */ void LuaContext::menu_on_draw( const ScopedLuaRef& menu_ref, const SurfacePtr& dst_surface ) { push_ref(l, menu_ref); on_draw(dst_surface); menus_on_draw(-1, dst_surface); // Draw children menus if any. lua_pop(l, 1); }
static rt_bool_t mainmenu_event_handler(struct rtgui_object *object, rtgui_event_t *event) { switch (event->type) { case RTGUI_EVENT_PAINT: on_draw(RTGUI_WIDGET(object)); break; case RTGUI_EVENT_KBD: { struct rtgui_event_kbd *ekbd = (struct rtgui_event_kbd *)event; if ((ekbd->key == RTGUIK_RIGHT) && RTGUI_KBD_IS_UP(ekbd)) { next_page(RTGUI_WIDGET(object)); } else if ((ekbd->key == RTGUIK_LEFT) && RTGUI_KBD_IS_UP(ekbd)) { priv_page(RTGUI_WIDGET(object)); } else { return rtgui_win_event_handler(object, event); } } break; case RTGUI_EVENT_MOUSE_BUTTON: { struct rtgui_event_mouse *emouse; emouse = (struct rtgui_event_mouse *)event; return app_list_view_onmouse(app_list, emouse); } case RTGUI_EVENT_GESTURE: { struct rtgui_event_gesture *gestrure_event = (struct rtgui_event_gesture *)event; switch (gestrure_event->type) { case RTGUI_GESTURE_RIGHT: priv_page(RTGUI_WIDGET(object)); break; case RTGUI_GESTURE_LEFT: next_page(RTGUI_WIDGET(object)); break; } } break; case RTGUI_EVENT_WIN_ACTIVATE: statusbar_set_title(RT_NULL); statusbar_show_back_button(RT_FALSE); return rtgui_win_event_handler(object, event); default: return rtgui_win_event_handler(object, event); } return RT_FALSE; }
//------------------------------------------------------------------------ void platform_support::force_redraw() { Rect bounds; m_specific->m_redraw_flag = true; // on_ctrl_change (); on_draw(); SetRect(&bounds, 0, 0, m_rbuf_window.width(), m_rbuf_window.height()); InvalWindowRect(m_specific->m_window, &bounds); }
/** * \brief Calls the on_draw() method of a Lua game if it is defined. * * Also calls the method on its menus. * * \param game A game. * \param dst_surface The destination surface. */ void LuaContext::game_on_draw(Game& game, Surface& dst_surface) { if (!game.get_savegame().is_known_to_lua()) { return; } push_game(l, game.get_savegame()); if (userdata_has_field(game.get_savegame(), "on_draw")) { on_draw(dst_surface); } menus_on_draw(-1, dst_surface); lua_pop(l, 1); }
void Menubar::draw() { if(is_visible()) { // Draw menubar Renderer::draw_box(get_position().x, get_position().y, get_width(), get_height() , get_angle(), get_scale().x, get_scale().y, get_color().x, get_color().y, get_color().z, get_color().w, 0, false, false, 0, color, false, false, false, color, outline, outline_width, outline_color, outline_antialiased, false, 0.0, color, false, color, false); //----------------------------------------------------------------- for(int i = 0; i < menu_list.size(); i++) { Widget * menu = menu_list[i]; if(i != 0) {menu_list[i]->previous = menu_list[i - 1]; menu_list[i]->set_position(menu_list[i]->previous->get_position().x + menu_list[i]->previous->get_width(), get_position().y);} // menu[0] is the first menu so it won't have any previous if(i != menu_list.size()-1) menu_list[i]->next = menu_list[i + 1]; // Draw menus Renderer::draw_box(menu->get_position().x, menu->get_position().y, menu->get_width(), menu->get_height() , get_angle(), get_scale().x, get_scale().y, menu->get_color().x, menu->get_color().y, menu->get_color().z, menu->get_color().w, 0, false, false, 0, color, false, false, false, menu->get_title_bar_button_close_color(), menu->has_outline(), menu->outline_width, menu->outline_color, menu->outline_antialiased, false, 0.0, color, menu->has_gradient(), color, menu->has_shadow()); // Draw label Label * label = menu->get_label(); if(!label->get_string().empty()) { label->draw(); label->set_position(label->get_x() + menu->get_x(), label->get_y() + menu->get_y()); // set position relative to menu label->set_scale(0.5, 0.5); } // Draw image Image * image = menu->get_image(); if(image != nullptr) { image->draw(); image->set_position(image->get_relative_x() + menu->get_x(), image->get_relative_y() + menu->get_y()); // set position relative to menu } ///////////////////// for(int j = 0; j < menu_list[i]->sub.size(); j++) { Widget * sub = menu_list[i]->sub[j]; if(Mouse::is_over(menu->get_rect())) { if(Mouse::is_pressed(1)) {sub->set_visible(true);} else if(Mouse::is_pressed(1)) sub->set_visible(false); } if(sub->is_visible()) { menu->sub[0]->set_position(menu->sub[0]->previous->get_position().x, menu->previous->get_position().y + menu->sub[0]->previous->get_height()); if(j != 0) {sub->previous = menu_list[i]->sub[j - 1];sub->set_position(sub->previous->get_position().x, sub->previous->get_position().y + sub->previous->get_height());} if(j != menu->sub.size()-1) sub->next = menu->sub[j + 1]; // draw sub_menu Renderer::draw_box(sub->get_position().x, sub->get_position().y, sub->get_width(), sub->get_height() , get_angle(), get_scale().x, get_scale().y, sub->get_color().x, sub->get_color().y, sub->get_color().z, sub->get_color().w, 0, false, false, 0, color, false, false, false, sub->get_title_bar_button_close_color(), sub->has_outline(), sub->outline_width, sub->outline_color, sub->outline_antialiased, sub->has_border(), 0, color, sub->has_gradient(), color, sub->has_shadow()); // Draw label Label * label = sub->get_label(); if(!label->get_string().empty()) { label->draw(); label->set_position(label->get_x() + sub->get_x(), label->get_y() + sub->get_y()); label->set_scale(0.5, 0.5); } // Draw image Image * image = sub->get_image(); if(image != nullptr) { image->draw(); image->set_position(image->get_x() + sub->get_x(), image->get_y() + sub->get_y()); // set position relative to ui } // On hover if(highlight) { if(Mouse::is_over(sub->get_rect())) { sub->set_color(highlight_color); if(Mouse::is_pressed(1)) { #ifdef DOKUN_DEBUG0 std::cout <<"Submenu " << j << " at index " << i << " selected.\n"; #endif } } else sub->set_color(submenu_color); } } } } } on_draw(); }
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; HDC hdc; switch (message) { case WM_CREATE: { if (!hmWnd) hmWnd = hWnd; hdc = GetDC(hWnd); CBIT = GetDeviceCaps(hdc, BITSPIXEL); CBYTE = CBIT/8; ReleaseDC(hWnd, hdc); buffer = malloc(width*height*CBYTE); bmp.bmType = 0; bmp.bmWidth = width; bmp.bmHeight = height; bmp.bmWidthBytes = width*CBYTE; bmp.bmPlanes = 1; bmp.bmBitsPixel = CBIT; bmp.bmBits = buffer; if (CBYTE == 4) fmt = COLOR_FORMAT_BGRA; else if (CBYTE == 3) fmt = COLOR_FORMAT_BGR; else if (CBYTE == 2) fmt = COLOR_FORMAT_RGB565; ps_initialize(); canvas = ps_canvas_create_with_data(buffer, fmt, width, height, width*CBYTE); context = ps_context_create(canvas, 0); on_init(context, width, height); } break; case WM_PAINT: { HDC mdc; HGDIOBJ h; hdc = BeginPaint(hWnd, &ps); on_draw(context); mdc = CreateCompatibleDC(hdc); hbmp = CreateBitmapIndirect(&bmp); h = SelectObject(mdc, hbmp); BitBlt(hdc, 0, 0, width, height, mdc, 0, 0, SRCCOPY); SelectObject(mdc, h); DeleteObject(hbmp); DeleteDC(mdc); EndPaint(hWnd, &ps); } break; case WM_TIMER: on_timer(); break; case WM_SIZE: { ps_canvas* old_canvas = 0; width = LOWORD(lParam); height = HIWORD(lParam); free(buffer); if (width < 1) width = 1; if (height < 1) height = 1; buffer = malloc(width*height*CBYTE); bmp.bmType = 0; bmp.bmWidth = width; bmp.bmHeight = height; bmp.bmWidthBytes = width*CBYTE; bmp.bmPlanes = 1; bmp.bmBitsPixel = CBIT; bmp.bmBits = buffer; canvas = ps_canvas_create_with_data(buffer, fmt, width, height, width*CBYTE); old_canvas = ps_context_set_canvas(context, canvas); ps_canvas_unref(old_canvas); on_size(width, height); } break; case WM_ERASEBKGND: break; case WM_LBUTTONDOWN: on_mouse_event(LEFT_BUTTON_DOWN, wParam, LOWORD(lParam), HIWORD(lParam)); break; case WM_MOUSEMOVE: on_mouse_event(MOUSE_MOVE, wParam, LOWORD(lParam), HIWORD(lParam)); break; case WM_KEYDOWN: on_key_event(KEY_EVENT_DOWN, wParam); break; case WM_KEYUP: on_key_event(KEY_EVENT_UP, wParam); break; case WM_DESTROY: { on_term(context); ps_context_unref(context); ps_canvas_unref(canvas); ps_shutdown(); free(buffer); PostQuitMessage(0); } break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; }
//------------------------------------------------------------------------ int platform_support::run() { SDL_Event event; bool ev_flag = false; for(;;) { if(m_specific->m_update_flag) { on_draw(); update_window(); m_specific->m_update_flag = false; } ev_flag = false; if(m_wait_mode) { SDL_WaitEvent(&event); ev_flag = true; } else { if(SDL_PollEvent(&event)) { ev_flag = true; } else { on_idle(); } } if(ev_flag) { if(event.type == SDL_QUIT) { break; } int y; unsigned flags = 0; switch (event.type) { case SDL_VIDEORESIZE: if(!init(event.resize.w, event.resize.h, m_window_flags)) return false; on_resize(m_rbuf_window.width(), m_rbuf_window.height()); trans_affine_resizing(event.resize.w, event.resize.h); m_specific->m_update_flag = true; break; case SDL_KEYDOWN: { flags = 0; if(event.key.keysym.mod & KMOD_SHIFT) flags |= kbd_shift; if(event.key.keysym.mod & KMOD_CTRL) flags |= kbd_ctrl; bool left = false; bool up = false; bool right = false; bool down = false; switch(event.key.keysym.sym) { case key_left: left = true; break; case key_up: up = true; break; case key_right: right = true; break; case key_down: down = true; break; } if(m_ctrls.on_arrow_keys(left, right, down, up)) { on_ctrl_change(); force_redraw(); } else { on_key(m_specific->m_cur_x, m_specific->m_cur_y, event.key.keysym.sym, flags); } } break; case SDL_MOUSEMOTION: y = m_flip_y ? m_rbuf_window.height() - event.motion.y : event.motion.y; m_specific->m_cur_x = event.motion.x; m_specific->m_cur_y = y; flags = 0; if(event.motion.state & SDL_BUTTON(1)) flags |= mouse_left; if(event.motion.state & SDL_BUTTON(3)) flags |= mouse_right; if(m_ctrls.on_mouse_move(m_specific->m_cur_x, m_specific->m_cur_y, (flags & mouse_left) != 0)) { on_ctrl_change(); force_redraw(); } else { on_mouse_move(m_specific->m_cur_x, m_specific->m_cur_y, flags); } SDL_Event eventtrash; while (SDL_PeepEvents(&eventtrash, 1, SDL_GETEVENT, SDL_EVENTMASK(SDL_MOUSEMOTION))!=0){;} break; case SDL_MOUSEBUTTONDOWN: y = m_flip_y ? m_rbuf_window.height() - event.motion.y : event.motion.y; m_specific->m_cur_x = event.motion.x; m_specific->m_cur_y = y; flags = 0; if(event.button.button == SDL_BUTTON_LEFT) flags = mouse_left; if(event.button.button == SDL_BUTTON_RIGHT) flags = mouse_right; if(flags & mouse_left) { if(m_ctrls.on_mouse_button_down(m_specific->m_cur_x, m_specific->m_cur_y)) { m_ctrls.set_cur(m_specific->m_cur_x, m_specific->m_cur_y); on_ctrl_change(); force_redraw(); } else { if(m_ctrls.in_rect(m_specific->m_cur_x, m_specific->m_cur_y)) { if(m_ctrls.set_cur(m_specific->m_cur_x, m_specific->m_cur_y)) { on_ctrl_change(); force_redraw(); } } else { on_mouse_button_down(m_specific->m_cur_x, m_specific->m_cur_y, flags); } } } if(flags & mouse_right) { on_mouse_button_down(m_specific->m_cur_x, m_specific->m_cur_y, flags); } break; case SDL_MOUSEBUTTONUP: y = m_flip_y ? m_rbuf_window.height() - event.motion.y : event.motion.y; m_specific->m_cur_x = event.motion.x; m_specific->m_cur_y = y; flags = 0; if(m_ctrls.on_mouse_button_up(m_specific->m_cur_x, m_specific->m_cur_y)) { on_ctrl_change(); force_redraw(); } on_mouse_button_up(m_specific->m_cur_x, m_specific->m_cur_y, flags); break; } } } return 0; }
//------------------------------------------------------------------------ int platform_support::run() { SDL_Event event; bool ev_flag = false; for(;;) { if(m_specific->m_update_flag) { on_draw(); update_window(); m_specific->m_update_flag = false; } ev_flag = false; if(m_wait_mode) { SDL_WaitEvent(&event); ev_flag = true; } else { if(SDL_PollEvent(&event)) { ev_flag = true; } else { on_idle(); } } if(ev_flag) { if(event.type == SDL_QUIT) { break; } int y; unsigned flags = 0; switch (event.type) { int event_x; int event_y; case SDL_WINDOWEVENT: switch (event.window.event) { case SDL_WINDOWEVENT_RESIZED: ERROR_PRINT("SDL_WINDOWEVENT_RESIZED %d,%d\n", event.window.data1, event.window.data2); #ifndef __ANDROID__ if(!init(event.window.data1, event.window.data2, m_window_flags)) return false; on_resize(m_rbuf_window.width(), m_rbuf_window.height()); trans_affine_resizing(event.window.data1, event.window.data2); #endif m_specific->m_update_flag = true; break; default: DEBUG_PRINT("unknown win event type %d\n", event.window.event); break; } break; case SDL_APP_DIDENTERFOREGROUND: DEBUG_PRINT("SDL_APP_DIDENTERFOREGROUND"); enter_foreground(); break; case SDL_APP_WILLENTERFOREGROUND: DEBUG_PRINT("SDL_APP_WILLENTERFOREGROUND"); break; case SDL_APP_DIDENTERBACKGROUND: DEBUG_PRINT("SDL_APP_DIDENTERBACKGROUND"); enter_background(); break; case SDL_APP_WILLENTERBACKGROUND: DEBUG_PRINT("SDL_APP_WILLENTERBACKGROUND"); break; case SDL_KEYDOWN: { flags = 0; if(event.key.keysym.mod & KMOD_SHIFT) flags |= kbd_shift; if(event.key.keysym.mod & KMOD_CTRL) flags |= kbd_ctrl; bool left = false; bool up = false; bool right = false; bool down = false; switch(event.key.keysym.sym) { case key_left: left = true; break; case key_up: up = true; break; case key_right: right = true; break; case key_down: down = true; break; } if(m_ctrls.on_arrow_keys(left, right, down, up)) { on_ctrl_change(); force_redraw(); } else { on_key(m_specific->m_cur_x, m_specific->m_cur_y, event.key.keysym.sym, flags); } } break; case SDL_MOUSEMOTION: event_x = (double)event.button.x*width_factor; event_y = (double)event.button.y*hight_factor; y = m_flip_y ? m_rbuf_window.height() - event_y : event_y; m_specific->m_cur_x = event_x; m_specific->m_cur_y = y; flags = 0; if(event.motion.state & SDL_BUTTON_LMASK) flags |= mouse_left; if(event.motion.state & SDL_BUTTON_RMASK) flags |= mouse_right; if(m_ctrls.on_mouse_move(m_specific->m_cur_x, m_specific->m_cur_y, (flags & mouse_left) != 0)) { on_ctrl_change(); force_redraw(); } else { on_mouse_move(m_specific->m_cur_x, m_specific->m_cur_y, flags); } SDL_Event eventtrash; while (SDL_PeepEvents(&eventtrash, 1, SDL_GETEVENT, SDL_MOUSEMOTION, SDL_MOUSEMOTION)!=0){;} break; case SDL_MOUSEBUTTONDOWN: event_x = (double)event.button.x*width_factor; event_y = (double)event.button.y*hight_factor; DEBUG_PRINT("mouse down: %d,%d %d,%d\n", event.button.x,event.button.y, event_x,event_y); y = m_flip_y ? m_rbuf_window.height() - event_y : event_y; m_specific->m_cur_x = event_x; m_specific->m_cur_y = y; flags = 0; DEBUG_PRINT("mouse down: %d,%d w %d,%d\n", event_x,y, m_rbuf_window.width(), m_rbuf_window.height()); switch(event.button.button) { case SDL_BUTTON_LEFT: { flags = mouse_left; if(m_ctrls.on_mouse_button_down(m_specific->m_cur_x, m_specific->m_cur_y)) { m_ctrls.set_cur(m_specific->m_cur_x, m_specific->m_cur_y); on_ctrl_change(); force_redraw(); } else { if(m_ctrls.in_rect(m_specific->m_cur_x, m_specific->m_cur_y)) { if(m_ctrls.set_cur(m_specific->m_cur_x, m_specific->m_cur_y)) { on_ctrl_change(); force_redraw(); } } else { on_mouse_button_down(m_specific->m_cur_x, m_specific->m_cur_y, flags); } } } break; case SDL_BUTTON_RIGHT: DEBUG_PRINT("SDL_BUTTON_RIGHT"); flags = mouse_right; on_mouse_button_down(m_specific->m_cur_x, m_specific->m_cur_y, flags); break; } //switch(event.button.button) break; case SDL_MOUSEBUTTONUP: event_x = (double)event.button.x*width_factor; event_y = (double)event.button.y*hight_factor; y = m_flip_y ? m_rbuf_window.height() - event_y : event_y; m_specific->m_cur_x = event_x; m_specific->m_cur_y = y; flags = 0; if(m_ctrls.on_mouse_button_up(m_specific->m_cur_x, m_specific->m_cur_y)) { on_ctrl_change(); force_redraw(); } on_mouse_button_up(m_specific->m_cur_x, m_specific->m_cur_y, flags); break; case SDL_MOUSEWHEEL: break; case SDL_FINGERDOWN: case SDL_FINGERUP: case SDL_FINGERMOTION: DEBUG_PRINT("Finger: x=%f, y=%f dx=%f, dy=%f, %d\n", event.tfinger.x, event.tfinger.y, event.tfinger.dx, event.tfinger.dy, (int)event.tfinger.fingerId); on_touch_event( event.tfinger.x, m_flip_y ? 1-event.tfinger.y: event.tfinger.y, event.tfinger.dx, event.tfinger.dy, (int)event.tfinger.fingerId, !(event.type == SDL_FINGERUP)); break; case SDL_MULTIGESTURE: DEBUG_PRINT("Multi Gesture: x = %f, y = %f, dAng = %f, dR = %f numDownTouch = %i\n", event.mgesture.x, event.mgesture.y, event.mgesture.dTheta, event.mgesture.dDist, event.mgesture.numFingers); on_multi_gesture( event.mgesture.x, event.mgesture.y, event.mgesture.dTheta, event.mgesture.dDist, event.mgesture.numFingers); break; default: DEBUG_PRINT("unknown event type %d\n", event.type); break; } } } return 0; }
//------------------------------------------------------------------------ void platform_support::force_redraw() { on_draw(); update_window(); }
/** * @brief Calls the on_draw() method of a Lua menu. * @param menu_ref A reference to the menu object. * @param dst_surface The destination surface. */ void LuaContext::menu_on_draw(int menu_ref, Surface& dst_surface) { push_ref(l, menu_ref); on_draw(dst_surface); lua_pop(l, 1); }
static int PlatformProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam) { switch (message) { case MSG_CREATE: { if (!hmWnd) hmWnd = hWnd; unsigned char* pdr = 0; int w,h,p; RECT r; key_down = FALSE; GetClientRect(hWnd, &r); #if RGB555 sdc = CreateMemDC(width, height, 16, MEMDC_FLAG_SWSURFACE, 0x7C00, 0x3E0, 0x1F, 0x8000); #else sdc = CreateMemDC(width, height, 16, MEMDC_FLAG_SWSURFACE, 0xF800, 0x7E0, 0x1F, 0x00); #endif pdr = LockDC(sdc, &r, &w, &h, &p); UnlockDC(sdc); #if RGB555 fmt = COLOR_FORMAT_RGB555; #else fmt = COLOR_FORMAT_RGB565; #endif ps_initialize(); canvas = ps_canvas_create_with_data(pdr, fmt, w, h, p); context = ps_context_create(canvas, 0); on_init(context, width, height); } break; case MSG_TIMER: on_timer(); break; case MSG_PAINT: { HDC hdc = BeginPaint(hWnd); on_draw(context); BitBlt(sdc, 0, 0, width, height, hdc, 0, 0, 0); EndPaint(hWnd, hdc); } return 0; case MSG_ERASEBKGND: return 0; case MSG_LBUTTONDOWN: { key_down = TRUE; on_mouse_event(LEFT_BUTTON_DOWN, key_conv(wParam), LOSWORD(lParam), HISWORD(lParam)); } break; case MSG_LBUTTONUP: { key_down = FALSE; on_mouse_event(LEFT_BUTTON_UP, key_conv(wParam), LOSWORD(lParam), HISWORD(lParam)); } break; case MSG_MOUSEMOVE: { DWORD k = key_conv(wParam); if (key_down) k |= EVT_LBUTTON; on_mouse_event(MOUSE_MOVE, k, LOSWORD(lParam), HISWORD(lParam)); } break; case MSG_KEYDOWN: on_key_event(KEY_EVENT_DOWN, get_virtual_key(wParam)); break; case MSG_KEYUP: on_key_event(KEY_EVENT_UP, get_virtual_key(wParam)); break; case MSG_SIZECHANGED: { RECT r; int w,h,p; unsigned char* pdr = 0; ps_canvas* old_canvas = 0; RECT* rc = (RECT*)lParam; width = RECTWP(rc); height = RECTHP(rc); if (sdc) DeleteMemDC(sdc); if (width < 1) width = 1; if (height < 1) height = 1; #if RGB555 sdc = CreateMemDC(width, height, 16, MEMDC_FLAG_SWSURFACE, 0x7C00, 0x3E0, 0x1F, 0x8000); #else sdc = CreateMemDC(width, height, 16, MEMDC_FLAG_SWSURFACE, 0xF800, 0x7E0, 0x1F, 0x00); #endif GetClientRect(hWnd, &r); pdr = LockDC(sdc, &r, &w, &h, &p); UnlockDC(sdc); canvas = ps_canvas_create_with_data(pdr, fmt, w, h, p); old_canvas = ps_context_set_canvas(context, canvas); ps_canvas_unref(old_canvas); on_size(width, height); } break; case MSG_CLOSE: on_term(context); ps_context_unref(context); ps_canvas_unref(canvas); ps_shutdown(); DeleteMemDC(sdc); DestroyMainWindow (hWnd); PostQuitMessage (hWnd); return 0; } return DefaultMainWinProc(hWnd, message, wParam, lParam); }
void view::on_draw(wxPaintEvent& unused(evt)) { on_draw(new dc(this)); }
virtual BOOL handle_draw(HELEMENT he, DRAW_PARAMS ¶ms) { return on_draw(he, params.cmd, params.hdc, params.area); }