void CAboutDlg::OnPaint() { CPaintDC dc(this); if (m_pic) { CRect rect; GetClientRect(&rect); int sx = (rect.Width() - m_pic->GetWidth()) / 2; int sy = 0; CRect picRect(sx, sy, sx + m_pic->GetWidth(), sy + m_pic->GetHeight()); m_pic->Draw(dc, picRect); } }
//-------------------------------------------------------------------- void InterView::Draw(BRect updateRect) { BRect visi(Bounds()); if (curPicture != NULL) { BRect picRect(curPicture->Bounds()); BRect viewRect(visi); if (autoScale) { viewRect.right -= B_V_SCROLL_BAR_WIDTH; viewRect.bottom -= B_H_SCROLL_BAR_HEIGHT; float dx = picRect.right / viewRect.right; float dy = picRect.bottom / viewRect.bottom; if (dx > dy) { float old_height = viewRect.bottom; viewRect.bottom = (picRect.bottom / picRect.right) * viewRect.right; viewRect.OffsetBy(0., old_height/2 - viewRect.bottom/2); FillRect(BRect(0., 0., viewRect.right, viewRect.top-1)); FillRect(BRect(0., viewRect.bottom, viewRect.right, visi.bottom)); zoomFactor = 1./dx; SendZoomFactorModified(); } else { float old_width = viewRect.right; viewRect.right = (picRect.right / picRect.bottom) * viewRect.bottom; viewRect.OffsetBy(old_width/2 - viewRect.right/2, 0.); FillRect(BRect(0., viewRect.top, viewRect.left-1, viewRect.bottom)); FillRect(BRect(viewRect.right+1, viewRect.top, visi.right, viewRect.bottom)); zoomFactor = 1./dy; SendZoomFactorModified(); } DrawBitmap(curPicture, viewRect); } else { if (zoomFactor == 1.) { BPoint pos(viewRect.right/2 - picRect.right/2 - B_V_SCROLL_BAR_WIDTH/2, viewRect.bottom/2 - picRect.bottom/2 - B_H_SCROLL_BAR_HEIGHT/2); if (pos.x < 0.) pos.x = -xOffs; else xOffs = 0.; // pos.x = 0; if (pos.y < 0.) pos.y = -yOffs; else yOffs = 0.; // pos.y = 0; DrawBitmap(curPicture, pos); FillRect(BRect(0., 0., visi.right, pos.y-1)); FillRect(BRect(0., visi.bottom - pos.y - B_H_SCROLL_BAR_HEIGHT + 1, visi.right, visi.bottom)); FillRect(BRect(0., pos.y, pos.x-1, visi.bottom-pos.y)); FillRect(BRect(visi.right-pos.x-B_V_SCROLL_BAR_WIDTH+1, pos.y, visi.right, visi.bottom-pos.y)); } else { picRect.right *= zoomFactor; picRect.bottom *= zoomFactor; BRect srcR(curPicture->Bounds()); BRect dstR(viewRect.right/2 - picRect.right/2 - B_V_SCROLL_BAR_WIDTH/2, viewRect.bottom/2 - picRect.bottom/2 - B_H_SCROLL_BAR_HEIGHT/2, viewRect.right/2 + picRect.right/2 + B_V_SCROLL_BAR_WIDTH/2, viewRect.bottom/2 + picRect.bottom/2 + B_H_SCROLL_BAR_HEIGHT/2); if (dstR.left < 0.) // pic wider than view { dstR.left = 0.; dstR.right = visi.right - B_V_SCROLL_BAR_WIDTH; srcR.left = picRect.left + xOffs/zoomFactor; srcR.right = picRect.left + xOffs/zoomFactor + (visi.right - B_V_SCROLL_BAR_WIDTH)/zoomFactor; } else xOffs = 0.; if (dstR.top < 0.) // pic higher than view { dstR.top = 0.; dstR.bottom = visi.bottom - B_H_SCROLL_BAR_HEIGHT; srcR.top = picRect.top + yOffs/zoomFactor; srcR.bottom = picRect.top + yOffs/zoomFactor + (visi.bottom - B_H_SCROLL_BAR_HEIGHT)/zoomFactor; } else yOffs = 0.; DrawBitmap(curPicture, srcR, dstR); FillRect(BRect(0., 0., visi.right, dstR.top-1)); // top FillRect(BRect(0., dstR.bottom+1, visi.right, visi.bottom)); // bottom FillRect(BRect(0., dstR.top, dstR.left-1, dstR.bottom)); // left FillRect(BRect(dstR.right+1, dstR.top, visi.right, dstR.bottom)); // right } } } else FillRect(Bounds()); }