hello all, here my first contribution:

ap_StatusBar.cpp.diff
fix for bug #4135 Status bar doesn't resize.

gr_Win32Graphics.cpp.diff
gr_Win32Graphics.h.diff
getCoverage(), saveRectangle(), restoreRectangle() implemented

Thanx,
------
RFJ Vring. // ArVee


_________________________________________________________________
Join the world�s largest e-mail service with MSN Hotmail. http://www.hotmail.com
Index: cvs/abi/src/wp/ap/xp/ap_StatusBar.cpp
===================================================================
RCS file: /cvsroot/abi/src/wp/ap/xp/ap_StatusBar.cpp,v
retrieving revision 1.26
diff -u -r1.26 ap_StatusBar.cpp
--- cvs/abi/src/wp/ap/xp/ap_StatusBar.cpp 23 Sep 2002 08:14:57 -0000 1.26
+++ cvs/abi/src/wp/ap/xp/ap_StatusBar.cpp 11 Oct 2002 12:35:47 -0000
@@ -143,7 +143,7 @@
if (!m_iDesiredWidth)
{
char buf[AP_MAX_MESSAGE_FIELD];
- sprintf(buf,m_szFormat,999,999);
+ sprintf(buf,m_szFormat,9999,9999);
UT_uint32 len = strlen(buf);
UT_UCSChar bufUCS[AP_MAX_MESSAGE_FIELD];
UT_GrowBufElement charWidths[AP_MAX_MESSAGE_FIELD];
@@ -232,6 +232,7 @@

void setStatusProgressType(int start, int end, int flags);
void setStatusProgressValue(int value);
+ void setDesiredWidth(UT_uint32 set);

UT_sint32 m_ProgressStart;
UT_sint32 m_ProgressEnd;
@@ -239,6 +240,7 @@
UT_sint32 m_ProgressStartPoint;
UT_uint32 m_ProgressFlags;
UT_Timer *m_ProgressTimer;
+ UT_uint32 m_DesiredWidth;

};

@@ -248,6 +250,7 @@
m_ProgressStartPoint = 0;
m_ProgressFlags = 0;
m_ProgressTimer = NULL;
+ m_DesiredWidth = _UL(450);
}

ap_sb_Field_StatusMessage::~ap_sb_Field_StatusMessage(void)
@@ -256,7 +259,11 @@

UT_uint32 ap_sb_Field_StatusMessage::getDesiredWidth(void)
{
- return _UL(450); // TODO define this somewhere
+ return m_DesiredWidth;
+}
+void ap_sb_Field_StatusMessage::setDesiredWidth(UT_uint32 set)
+{
+ m_DesiredWidth = set;
}

void ap_sb_Field_StatusMessage::draw(void)
@@ -465,7 +472,7 @@
{
if (!m_iDesiredWidth)
{
- char * szBuf = "MMMMMMMM";
+ char * szBuf = "MMMMMMMMMMM";
UT_uint32 len = strlen(szBuf);
UT_UCSChar bufUCS[AP_MAX_MESSAGE_FIELD];
UT_GrowBufElement charWidths[AP_MAX_MESSAGE_FIELD];
@@ -654,15 +661,10 @@

if (!m_bInitFields)
{
- UT_uint32 xOrigin = _UL(3);
- UT_uint32 xGap = _UL(6);
-
#define DclField(type,var) \
type * var = new type(this); \
UT_ASSERT((var)); \
- m_vecFields.addItem((var)); \
- (var)->setLeftOrigin(xOrigin); \
- xOrigin += (var)->getDesiredWidth() + xGap
+ m_vecFields.addItem((var));

DclField(ap_sb_Field_PageInfo, pf1);
DclField(ap_sb_Field_StatusMessage, pf2);
@@ -677,6 +679,7 @@

#undef DclField
m_bInitFields = true;
+ setWidth(m_iWidth);
}

// force a full notify of all fields so that they all
@@ -700,6 +703,46 @@
void AP_StatusBar::setWidth(UT_uint32 iWidth)
{
m_iWidth = iWidth;
+
+ // nothing to do yet...
+ if (m_pStatusMessageField == NULL) {
+ return;
+ }
+
+ // determine width of all fields minus the status field
+ UT_uint32 xOrigin = _UL(3);
+ UT_uint32 xGap = _UL(6);
+ UT_uint32 fieldwidth = (3 * xGap + 2 * xOrigin);
+ UT_uint32 kLimit = m_vecFields.getItemCount();
+ UT_uint32 k = 0;
+ ap_sb_Field * pf = NULL;
+
+ for (k = 0; k < kLimit; k++) {
+ if (NULL != (pf = (ap_sb_Field *)m_vecFields.getNthItem(k))) {
+ if (pf != m_pStatusMessageField) {
+ fieldwidth += pf->getDesiredWidth();
+ }
+ }
+ }
+
+ // resulting field width not too small ?
+ if (iWidth - fieldwidth > 100) {
+ iWidth -= fieldwidth;
+ }
+
+ // update status field width
+ ((ap_sb_Field_StatusMessage *)m_pStatusMessageField)->setDesiredWidth(iWidth);
+
+ // reformat field positions
+ for (k = 0; k < kLimit; k++) {
+ if (NULL != (pf = (ap_sb_Field *)m_vecFields.getNthItem(k))) {
+ pf->setLeftOrigin(xOrigin);
+ xOrigin += pf->getDesiredWidth() + xGap;
+ }
+ }
+
+ // paint
+ draw();
}

UT_uint32 AP_StatusBar::getWidth(void) const

Index: cvs/abi/src/af/gr/win/gr_Win32Graphics.cpp
===================================================================
RCS file: /cvsroot/abi/src/af/gr/win/gr_Win32Graphics.cpp,v
retrieving revision 1.104
diff -u -r1.104 gr_Win32Graphics.cpp
--- cvs/abi/src/af/gr/win/gr_Win32Graphics.cpp 23 Sep 2002 08:14:43 -0000 1.104
+++ cvs/abi/src/af/gr/win/gr_Win32Graphics.cpp 11 Oct 2002 12:38:57 -0000
@@ -158,6 +158,8 @@
#ifndef USE_LAYOUT_UNITS
s_iInstanceCount++;
#endif
+ m_saveRect = NULL;
+ m_saveRectBuf = NULL;
}

GR_Win32Graphics::GR_Win32Graphics(HDC hdc, HWND hwnd, XAP_App * app)
@@ -177,6 +179,9 @@

GR_Win32Graphics::~GR_Win32Graphics()
{
+
+ DELETEP(m_saveRect);
+ DELETEP(m_saveRectBuf);
DELETEP(m_pFontGUI);
if (m_hXorPen) {
DeleteObject(m_hXorPen);
@@ -573,7 +578,9 @@

void GR_Win32Graphics::getCoverage(UT_Vector& coverage)
{
- UT_ASSERT(UT_TODO);
+ coverage.clear();
+ coverage.push_back((void*) ' ');
+ coverage.push_back((void*) (255 - ' '));
}

UT_uint32 GR_Win32Graphics::measureUnRemappedChar(const UT_UCSChar c)
@@ -1453,6 +1460,45 @@
return true;
#endif
}
+
+void GR_Win32Graphics::saveRectangle(UT_Rect & r) {
+
+ static UT_Rect prevRect;
+
+ if (m_saveRect &&
+ prevRect.left == r.left &&
+ prevRect.top == r.top &&
+ prevRect.width == r.width &&
+ prevRect.height == r.height) {
+ return;
+ }
+
+ prevRect = r;
+
+ DELETEP(m_saveRect);
+ m_saveRect = new UT_Rect(r);
+
+ DELETEP(m_saveRectBuf);
+ m_saveRectBuf = new COLORREF[r.width * r.height];
+
+ COLORREF *p = m_saveRectBuf;
+ for (int x = 0; x < r.width; x++) {
+ for (int y = 0; y < r.height; y++) {
+ *(p++) = GetPixel(m_hdc, r.left + x, r.top + y);
+ }
+ }
+ }
+
+void GR_Win32Graphics::restoreRectangle() {
+ if (m_saveRect && m_saveRectBuf) {
+ COLORREF *p = m_saveRectBuf;
+ for (int x = 0; x < m_saveRect->width; x++) {
+ for (int y = 0; y < m_saveRect->height; y++) {
+ SetPixel(m_hdc, m_saveRect->left + x, m_saveRect->top + y, *(p++));
+ }
+ }
+ }
+ }

#ifdef GR_WIN32_REDEF_UNITS
#undef _UUL

Index: cvs/abi/src/af/gr/win/gr_Win32Graphics.h
===================================================================
RCS file: /cvsroot/abi/src/af/gr/win/gr_Win32Graphics.h,v
retrieving revision 1.53
diff -u -r1.53 gr_Win32Graphics.h
--- cvs/abi/src/af/gr/win/gr_Win32Graphics.h 18 Sep 2002 03:34:51 -0000 1.53
+++ cvs/abi/src/af/gr/win/gr_Win32Graphics.h 11 Oct 2002 12:38:42 -0000
@@ -162,7 +162,8 @@
virtual UT_uint32 getFontDescent(GR_Font *);
virtual UT_uint32 getFontHeight(GR_Font *);
virtual UT_sint32 getScreenResolution(void){return s_iScreenResolution;};
-
+ virtual void saveRectangle(UT_Rect & r);
+ virtual void restoreRectangle();
protected:
virtual UT_uint32 _getResolution(void) const;
void _setColor(DWORD clrRef);
@@ -211,6 +212,8 @@
#endif

UT_RGBColor m_curColor;
+ UT_Rect * m_saveRect;
+ COLORREF * m_saveRectBuf;
};

#endif /* GR_WIN32GRAPHICS_H */

Reply via email to