? 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 <string.h>
 #include <Pt.h>
 #include <photon/PhRender.h>
+#include "ut_vector.h"
 
 #include <ut_string.h>
 
@@ -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 */