//############################################################################################################## //# Description: QWidget::resizeEvent() //# Comment: When resizeEvent() is called, the widget already has its new geometry. //# Authors: Martin Schaller (04/2008) //############################################################################################################## void RenderArea::resizeEvent(QResizeEvent * event) { QSize size=event->size(); delete pixmap; pixmap = new QPixmap(size); callback_list_call_attr_2(this->cbl, attr_resize, (void *)size.width(), (void *)size.height()); }
static LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) { struct graphics_priv* gra_priv = (struct graphics_priv*)GetWindowLongPtr( hwnd , DWLP_USER ); switch (Message) { case WM_CREATE: { if ( gra_priv ) { RECT rc ; GetClientRect( hwnd, &rc ); gra_priv->width = rc.right; gra_priv->height = rc.bottom; create_memory_dc(gra_priv); } } break; case WM_COMMAND: switch (LOWORD(wParam)) { case WM_USER + 1: break; } break; case WM_CLOSE: DestroyWindow(hwnd); break; case WM_USER+1: if ( gra_priv ) { RECT rc ; GetClientRect( hwnd, &rc ); gra_priv->width = rc.right; gra_priv->height = rc.bottom; create_memory_dc(gra_priv); callback_list_call_attr_2(gra_priv->cbl, attr_resize, (void *)gra_priv->width, (void *)gra_priv->height); } break; case WM_USER+2: { struct callback_list *cbl = (struct callback_list*)wParam; #ifdef HAVE_API_WIN32_CE /* FIXME: Reset the idle timer need a better place */ SystemIdleTimerReset(); #endif callback_list_call_0(cbl); } break; case WM_SIZE: if ( gra_priv ) { gra_priv->width = LOWORD( lParam ); gra_priv->height = HIWORD( lParam ); create_memory_dc(gra_priv); dbg(0, "resize gfx to: %d %d \n", gra_priv->width, gra_priv->height ); callback_list_call_attr_2(gra_priv->cbl, attr_resize, (void *)gra_priv->width, (void *)gra_priv->height); } break; case WM_DESTROY: #ifdef HAVE_API_WIN32_CE if ( gra_priv && gra_priv->window.priv ) { struct window_priv *win_priv = gra_priv->window.priv; if (win_priv->hBackLight) { ReleasePowerRequirement(win_priv->hBackLight); } } #endif PostQuitMessage(0); break; case WM_PAINT: if ( gra_priv && gra_priv->hMemDC) { struct graphics_priv* overlay; PAINTSTRUCT ps = { 0 }; HDC hdc; profile(0, NULL); dbg(1, "WM_PAINT\n"); overlay = gra_priv->overlays; #ifndef FAST_TRANSPARENCY BitBlt( gra_priv->hPrebuildDC, 0, 0, gra_priv->width , gra_priv->height, gra_priv->hMemDC, 0, 0, SRCCOPY); #endif while ( !gra_priv->disabled && overlay) { if ( !overlay->disabled && overlay->p.x >= 0 && overlay->p.y >= 0 && overlay->p.x < gra_priv->width && overlay->p.y < gra_priv->height ) { int x,y; int destPixel, srcPixel; int h,w; #ifdef FAST_TRANSPARENCY if ( !overlay->hPrebuildDC ) { overlay->hPrebuildBitmap = CreateBitmap(overlay->width,overlay->height,1,1,NULL); overlay->hPrebuildDC = CreateCompatibleDC(NULL); overlay->hOldPrebuildBitmap = SelectBitmap( overlay->hPrebuildDC, overlay->hPrebuildBitmap); SetBkColor(overlay->hMemDC,RGB(overlay->transparent_color.r >> 8,overlay->transparent_color.g >> 8,overlay->transparent_color.b >> 8)); BitBlt(overlay->hPrebuildDC,0,0,overlay->width,overlay->height,overlay->hMemDC,0,0,SRCCOPY); BitBlt(overlay->hMemDC,0,0,overlay->width,overlay->height,overlay->hPrebuildDC,0,0,SRCINVERT); } #else const COLORREF transparent_color = RGB(overlay->transparent_color.r >> 8,overlay->transparent_color.g >> 8,overlay->transparent_color.b >> 8); BitBlt( overlay->hPrebuildDC, 0, 0, overlay->width , overlay->height, overlay->hMemDC, 0, 0, SRCCOPY); h=overlay->height; w=overlay->width; if (w > gra_priv->width-overlay->p.x) w=gra_priv->width-overlay->p.x; if (h > gra_priv->height-overlay->p.y) h=gra_priv->height-overlay->p.y; for ( y = 0; y < h ;y++ ) { for ( x = 0; x < w; x++ ) { srcPixel = y*overlay->width+x; destPixel = ((overlay->p.y + y) * gra_priv->width) + (overlay->p.x + x); if ( overlay->pPixelData[srcPixel] == transparent_color ) { destPixel = ((overlay->p.y + y) * gra_priv->width) + (overlay->p.x + x); gra_priv->pPixelData[destPixel] = RGB ( ((65535 - overlay->transparent_color.a) * GetRValue(gra_priv->pPixelData[destPixel]) + overlay->transparent_color.a * GetRValue(overlay->pPixelData[srcPixel])) / 65535, ((65535 - overlay->transparent_color.a) * GetGValue(gra_priv->pPixelData[destPixel]) + overlay->transparent_color.a * GetGValue(overlay->pPixelData[srcPixel])) / 65535, ((65535 - overlay->transparent_color.a) * GetBValue(gra_priv->pPixelData[destPixel]) + overlay->transparent_color.a * GetBValue(overlay->pPixelData[srcPixel])) / 65535); } else { gra_priv->pPixelData[destPixel] = overlay->pPixelData[srcPixel]; } } } #endif } overlay = overlay->next; } #ifndef FAST_TRANSPARENCY hdc = BeginPaint(hwnd, &ps); BitBlt( hdc, 0, 0, gra_priv->width , gra_priv->height, gra_priv->hPrebuildDC, 0, 0, SRCCOPY ); #else HDC hdc = BeginPaint(hwnd, &ps); BitBlt( hdc, 0, 0, gra_priv->width , gra_priv->height, gra_priv->hMemDC, 0, 0, SRCCOPY ); overlay = gra_priv->overlays; while ( !gra_priv->disabled && overlay && !overlay->disabled ) { if ( overlay->p.x > 0 && overlay->p.y > 0 && overlay->p.x + overlay->width < gra_priv->width && overlay->p.y + overlay->height < gra_priv->height ) { BitBlt(hdc,overlay->p.x,overlay->p.y,overlay->width,overlay->height,overlay->hPrebuildDC,0,0,SRCAND); BitBlt(hdc,overlay->p.x,overlay->p.y,overlay->width,overlay->height,overlay->hMemDC,0,0,SRCPAINT); } overlay = overlay->next; } #endif EndPaint(hwnd, &ps); profile(0, "WM_PAINT\n"); }
static void resize_callback(int w, int h) { callback_list_call_attr_2(callbacks, attr_resize, GINT_TO_POINTER(1), GINT_TO_POINTER(1)); }