[GME-commit] GMESRC/GME/Gme GMEView.cpp,1.128,1.129
gme-commit at list.isis.vanderbilt.edu
gme-commit at list.isis.vanderbilt.edu
Thu Mar 11 12:22:24 CST 2004
Update of /var/lib/gme/GMESRC/GME/Gme
In directory braindrain:/tmp/cvs-serv8618
Modified Files:
GMEView.cpp
Log Message:
zoom problem solved and enhanced
CVS User: bogyom
Index: GMEView.cpp
===================================================================
RCS file: /var/lib/gme/GMESRC/GME/Gme/GMEView.cpp,v
retrieving revision 1.128
retrieving revision 1.129
diff -C2 -d -r1.128 -r1.129
*** GMEView.cpp 9 Mar 2004 22:17:47 -0000 1.128
--- GMEView.cpp 11 Mar 2004 18:22:21 -0000 1.129
***************
*** 31,34 ****
--- 31,35 ----
static CViewList viewsToKill;
+ /*
int setZoomPercents[GME_ZOOM_LEVEL_NUM] = {
GME_ZOOM_LEVEL_0,
***************
*** 40,44 ****
GME_ZOOM_LEVEL_6,
GME_ZOOM_LEVEL_7
! };
#define END_SCROLL_OFFSET 50
--- 41,45 ----
GME_ZOOM_LEVEL_6,
GME_ZOOM_LEVEL_7
! };*/
#define END_SCROLL_OFFSET 50
***************
*** 377,380 ****
--- 378,383 ----
ON_COMMAND(ID_FILE_PRINT_DIRECT, CScrollZoomView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CScrollZoomView::OnFilePrintPreview)
+ ON_MESSAGE(WM_USER_ZOOM, OnZoom)
+
END_MESSAGE_MAP()
***************
*** 391,394 ****
--- 394,398 ----
m_prnpos = NULL;
m_lastPrnPage = 0;
+ m_zoomVal = ZOOM_NO;
initDone = false;
***************
*** 484,488 ****
}
! if(drawGrid && !pDC->IsPrinting() && !IsPreview() && zoomIdx >= GME_ZOOM_LEVEL_MED) {
CRect objext, annext, extent;
CGuiObject::GetExtent(children, objext);
--- 488,494 ----
}
! if(drawGrid && !pDC->IsPrinting() && !IsPreview() && /// zoomIdx >= GME_ZOOM_LEVEL_MED)
! m_zoomVal >= ZOOM_NO)
! {
CRect objext, annext, extent;
CGuiObject::GetExtent(children, objext);
***************
*** 664,669 ****
EnableToolTips(TRUE);
! zoomIdx = GME_ZOOM_LEVEL_MED;
! CMainFrame::theInstance->WriteStatusZoom(setZoomPercents[zoomIdx]);
CreateOffScreen(GetDC());
--- 670,678 ----
EnableToolTips(TRUE);
! // zoomIdx = GME_ZOOM_LEVEL_MED;
! m_zoomVal = ZOOM_NO;
! // sets the combo too
! frame->propBar.SetZoomVal(m_zoomVal);
! CMainFrame::theInstance->WriteStatusZoom(m_zoomVal); // setZoomPercents[zoomIdx]);
CreateOffScreen(GetDC());
***************
*** 854,858 ****
- // It doesn't work on the printer ??
CBitmap logo;
BOOL ret = logo.LoadBitmap(IDB_BITMAP_LOGO);
--- 863,866 ----
***************
*** 893,897 ****
BOOL CGMEView::OnPreparePrinting(CPrintInfo* pInfo)
{
- // Terge
// change the PrintDialog to a customized one
CGmePrintDialog *gpd = new CGmePrintDialog(this, guiMeta, FALSE);
--- 901,904 ----
***************
*** 990,1000 ****
devmode->dmOrientation = (short)DMORIENT_PORTRAIT;
BOOL ret2 = cdc.ResetDC(devmode); // done for the AttribDC
- // HDC hdc1 = ::ResetDC(pDC->m_hAttribDC, devmode);
- // HDC hdc2 = ::ResetDC(pDC->m_hDC, devmode);
- // do it for the other
- // CDC cd;
- // cd.Attach(pDC->m_hDC);
- // BOOL ret1 = cd.ResetDC(devmode);
- // cd.Detach();
cdc.Detach();
}
--- 997,1000 ----
***************
*** 1642,1658 ****
}
! void CGMEView::ZoomIn()
{
CGMEEventLogger::LogGMEEvent("CGMEView::ZoomIn() in "+path+name+"\r\n");
! zoomIdx = min(GME_ZOOM_LEVEL_NUM-1, zoomIdx+1);
! CMainFrame::theInstance->WriteStatusZoom(setZoomPercents[zoomIdx]);
}
! void CGMEView::ZoomOut()
{
CGMEEventLogger::LogGMEEvent("CGMEView::ZoomOut() in "+path+name+"\r\n");
! zoomIdx = max(0, zoomIdx-1);
! CMainFrame::theInstance->WriteStatusZoom(setZoomPercents[zoomIdx]);
}
--- 1642,1703 ----
}
+ void CGMEView::setZoomPoint(int curzoom, CPoint point)
+ {
+ CRect clientW(0,0,0,0);
+ GetClientRect(&clientW);
+ int w = clientW.Width();
+ int h = clientW.Height();
+ CPoint offset = CPoint(w,h);
+ {
+ CWindowDC dc(NULL);
+ dc.SetMapMode(MM_ISOTROPIC);
+ dc.SetWindowExt(100,100);
+ dc.SetViewportExt(curzoom, curzoom);
+ dc.DPtoLP((LPPOINT)&point);
+ }
+ {
+ CWindowDC dc(NULL);
+ dc.SetMapMode(MM_ISOTROPIC);
+ dc.SetWindowExt(100,100);
+ dc.SetViewportExt(m_zoomVal, m_zoomVal);
+ dc.DPtoLP((LPPOINT)&offset);
+ }
+ offset.x /= 2;
+ offset.y /= 2;
! CPoint scp = GetScrollPosition(); // upper corner of scrolling
! m_zoomP = scp+point-offset;
!
! m_zoomScroll = true;
! }
!
! void CGMEView::ZoomIn(CPoint point)
{
CGMEEventLogger::LogGMEEvent("CGMEView::ZoomIn() in "+path+name+"\r\n");
! // zoomIdx = min(GME_ZOOM_LEVEL_NUM-1, zoomIdx+1);
! int curzoom = m_zoomVal;
! frame->propBar.NextZoomVal(m_zoomVal);
! // CMainFrame::theInstance->WriteStatusZoom(setZoomPercents[zoomIdx]);
! CMainFrame::theInstance->WriteStatusZoom(m_zoomVal);
! m_zoomP.x = m_zoomP.y = 0;
! if (curzoom == m_zoomVal)
! return;
!
! setZoomPoint(curzoom, point);
}
! void CGMEView::ZoomOut(CPoint point)
{
CGMEEventLogger::LogGMEEvent("CGMEView::ZoomOut() in "+path+name+"\r\n");
! // zoomIdx = max(0, zoomIdx-1);
! int curzoom = m_zoomVal;
! frame->propBar.PrevZoomVal(m_zoomVal);
! // CMainFrame::theInstance->WriteStatusZoom(setZoomPercents[zoomIdx]);
! CMainFrame::theInstance->WriteStatusZoom(m_zoomVal);
! m_zoomP.x = m_zoomP.y = 0;
! if (curzoom == m_zoomVal)
! return;
!
! setZoomPoint(curzoom, point);
}
***************
*** 1843,1851 ****
s.cy = s.cy + END_SCROLL_OFFSET;
! if (setZoomPercents[zoomIdx] == 100) {
! SetScrollSizes(MM_TEXT,s, setZoomPercents[zoomIdx]);
}
else {
! SetScrollSizes(MM_ISOTROPIC,s, setZoomPercents[zoomIdx]);
}
}
--- 1888,1898 ----
s.cy = s.cy + END_SCROLL_OFFSET;
! // if (setZoomPercents[zoomIdx] == 100) {
! // terge - for what purpose, it makes it more complex
! if (m_zoomVal == ZOOM_NO) {
! SetScrollSizes(MM_TEXT,s, m_zoomVal); // setZoomPercents[zoomIdx]);
}
else {
! SetScrollSizes(MM_ISOTROPIC,s, m_zoomVal); // setZoomPercents[zoomIdx]);
}
}
***************
*** 3202,3205 ****
--- 3249,3253 ----
CPoint trackPoint = point;
+ CPoint ppoint = point;
CoordinateTransfer(point);
***************
*** 3481,3485 ****
{
CGMEEventLogger::LogGMEEvent(" mode=GME_ZOOM_MODE\r\n");
! ZoomIn();
Invalidate();
}
--- 3529,3533 ----
{
CGMEEventLogger::LogGMEEvent(" mode=GME_ZOOM_MODE\r\n");
! ZoomIn(ppoint);
Invalidate();
}
***************
*** 3622,3625 ****
--- 3670,3674 ----
CGMEEventLogger::LogGMEEvent("CGMEView::OnRButtonDown in "+path+name+"\r\n");
CPoint local = point;
+ CPoint ppoint = point;
CoordinateTransfer(local);
contextMenuLocation = local;
***************
*** 3676,3680 ****
{
CGMEEventLogger::LogGMEEvent(" mode=GME_ZOOM_MODE\r\n");
! ZoomOut();
Invalidate();
}
--- 3725,3729 ----
{
CGMEEventLogger::LogGMEEvent(" mode=GME_ZOOM_MODE\r\n");
! ZoomOut(ppoint);
Invalidate();
}
***************
*** 4009,4013 ****
void CGMEView::OnUpdateViewGrid(CCmdUI* pCmdUI)
{
! pCmdUI->Enable(zoomIdx >= GME_ZOOM_LEVEL_MED);
pCmdUI->SetCheck(drawGrid);
}
--- 4058,4063 ----
void CGMEView::OnUpdateViewGrid(CCmdUI* pCmdUI)
{
! // pCmdUI->Enable(zoomIdx >= GME_ZOOM_LEVEL_MED);
! pCmdUI->Enable(m_zoomVal >= ZOOM_NO);
pCmdUI->SetCheck(drawGrid);
}
***************
*** 5736,5738 ****
--- 5786,5845 ----
cDC.CloseEnhanced();
+ }
+
+ LRESULT CGMEView::OnZoom(WPARAM wParam, LPARAM lParam)
+ {
+ CGMEEventLogger::LogGMEEvent("CGMEView::OnZoom() in "+path+name+"\r\n");
+ BOOL userdef = (BOOL)wParam;
+ int zoom = (int)lParam;
+
+ // zoom it
+ if (zoom > 0)
+ {
+ int curzoom = m_zoomVal;
+ m_zoomVal = (zoom<ZOOM_MIN)? ZOOM_MIN: ((zoom>ZOOM_MAX)? ZOOM_MAX: zoom);
+ if (m_zoomVal != zoom)
+ frame->propBar.SetZoomVal(m_zoomVal);
+ CMainFrame::theInstance->WriteStatusZoom(m_zoomVal);
+ m_zoomP.x = m_zoomP.y = 0;
+ if (curzoom == m_zoomVal)
+ return 0;
+
+ CPoint point;
+ CRect client(0,0,0,0);
+ GetClientRect(&client);
+ point.x = client.Width()/2;
+ point.y = client.Height()/2;
+ setZoomPoint(curzoom, point);
+ Invalidate();
+ }
+ else
+ {
+ CRect rect;
+ GetClientRect(&rect);
+
+ CRect objext, annext, extent;
+ CGuiObject::GetExtent(children, objext);
+ CGuiAnnotator::GetExtent(annotators, annext);
+ extent.UnionRect(&objext, &annext);
+ CSize s(extent.right, extent.bottom);
+ s.cx = s.cx + END_SCROLL_OFFSET;
+ s.cy = s.cy + END_SCROLL_OFFSET;
+ switch (zoom)
+ {
+ case ZOOM_WIDTH:
+ m_zoomVal = 100*rect.Width()/s.cx;
+ break;
+ case ZOOM_HEIGHT:
+ m_zoomVal = 100*rect.Height()/s.cy;
+ break;
+ case ZOOM_ALL:
+ m_zoomVal = min(100*rect.Height()/s.cy, 100*rect.Width()/s.cx);
+ break;
+ }
+ frame->propBar.SetZoomVal(m_zoomVal);
+ CMainFrame::theInstance->WriteStatusZoom(m_zoomVal);
+ Invalidate();
+ }
+ return 0;
}
More information about the GME-commit
mailing list