? qnx_caret.diff Index: gr_QNXGraphics.cpp =================================================================== RCS file: /cvsroot/abi/src/af/gr/qnx/gr_QNXGraphics.cpp,v retrieving revision 1.87 diff -u -r1.87 gr_QNXGraphics.cpp --- gr_QNXGraphics.cpp 13 Jan 2003 04:13:48 -0000 1.87 +++ gr_QNXGraphics.cpp 16 Jan 2003 16:47:16 -0000 @@ -130,8 +130,6 @@ m_iLineWidth = 1; m_currentColor = Pg_BLACK; m_pPrintContext = NULL; - m_pImg=NULL; - m_saveRect=NULL; m_iAscentCache = m_iDescentCache = -1; m_cs = GR_Graphics::GR_COLORSPACE_COLOR; @@ -143,6 +141,12 @@ GR_QNXGraphics::~GR_QNXGraphics() { DELETEP(m_pFontGUI); + UT_VECTOR_PURGEALL(UT_Rect*, m_vSaveRect); + + for (UT_uint32 i = 0; i < m_vSaveRectBuf.size (); i++) { + PhImage_t * pImg = (PhImage_t *)m_vSaveRectBuf.getNthItem (i); + PgShmemDestroy(pImg); + } } /*** @@ -1062,44 +1066,59 @@ return false; } -void GR_QNXGraphics::saveRectangle(UT_Rect &r) -{ -PhRect_t rect; -short int x,y; - -if(m_pImg) +void GR_QNXGraphics::saveRectangle(UT_Rect &r, UT_uint32 iIndx) { -PgShmemDestroy(m_pImg); -m_pImg=NULL; -} -DELETEP(m_saveRect); - -PtGetAbsPosition(m_pDraw,&x,&y); -rect.ul.x=x + r.left; -rect.ul.y=y + r.top; -rect.lr.x= rect.ul.x + r.width; -rect.lr.y= rect.ul.y + r.height; -m_pImg =PgReadScreen(&rect,NULL); - -m_saveRect = new UT_Rect(r); -return; -} + PhRect_t rect; + short int x,y; -void GR_QNXGraphics::restoreRectangle() -{ -if((m_saveRect && m_pImg)) -{ -PhPoint_t pos; - -DRAW_START - -pos.x=m_saveRect->left; -pos.y=m_saveRect->top; - -PgDrawPhImage(&pos,m_pImg,0); - -DRAW_END -} -return; + if (m_vSaveRect.getItemCount()>iIndx && m_vSaveRect.getNthItem(iIndx) && + ((UT_Rect *)(m_vSaveRect.getNthItem(iIndx)))->left == r.left && + ((UT_Rect *)(m_vSaveRect.getNthItem(iIndx)))->top == r.top && + ((UT_Rect *)(m_vSaveRect.getNthItem(iIndx)))->width == r.width && + ((UT_Rect *)(m_vSaveRect.getNthItem(iIndx)))->height == r.height) { + return; + } + + void * oldR = NULL; + m_vSaveRect.setNthItem(iIndx, (void*)new UT_Rect(r),&oldR); + if(oldR) + delete (UT_Rect*)oldR; + + PhImage_t *pImg; + + PtGetAbsPosition(m_pDraw,&x,&y); + rect.ul.x=x + r.left; + rect.ul.y=y + r.top; + rect.lr.x= rect.ul.x + r.width; + rect.lr.y= rect.ul.y + r.height; + pImg =PgReadScreen(&rect,NULL); + + void * oldC = NULL; + m_vSaveRectBuf.setNthItem(iIndx, (void*) pImg, &oldC); + if(oldC) + PgShmemDestroy((PhImage_t *)oldC); + + return; +} + +void GR_QNXGraphics::restoreRectangle(UT_uint32 iIndx) +{ + UT_Rect * r = (UT_Rect*)m_vSaveRect.getNthItem(iIndx); + PhImage_t *pImg = (PhImage_t*)m_vSaveRectBuf.getNthItem(iIndx); + + if((r && pImg)) + { + PhPoint_t pos; + + DRAW_START + + pos.x=r->left; + pos.y=r->top; + + PgDrawPhImage(&pos,pImg,0); + + DRAW_END + } + return; } Index: gr_QNXGraphics.h =================================================================== RCS file: /cvsroot/abi/src/af/gr/qnx/gr_QNXGraphics.h,v retrieving revision 1.24 diff -u -r1.24 gr_QNXGraphics.h --- gr_QNXGraphics.h 3 Nov 2002 17:06:39 -0000 1.24 +++ gr_QNXGraphics.h 16 Jan 2003 16:47:16 -0000 @@ -26,6 +26,7 @@ #include #include #include +#include "ut_vector.h" #include @@ -159,11 +160,13 @@ PpPrintContext_t * m_pPrintContext; private: virtual bool _setTransform(const GR_Transform & tr); - virtual void saveRectangle(UT_Rect &r); - UT_Rect *m_saveRect; - PhImage_t *m_pImg; - virtual void restoreRectangle(); + virtual void saveRectangle(UT_Rect &r, UT_uint32 iIndx); + virtual void restoreRectangle(UT_uint32 iIndx); + UT_Vector m_vSaveRect; + UT_Vector m_vSaveRectBuf; + //UT_Rect *m_saveRect; + //PhImage_t *m_pImg; }; #endif /* GR_QNXGRAPHICS_H */