Make sure to take account of hidden bands during layout.
This commit is contained in:
parent
9a3647a303
commit
464e59f6a4
|
@ -213,6 +213,8 @@ typedef struct
|
||||||
#define DRAW_BOTTOMSEP 0x00000020
|
#define DRAW_BOTTOMSEP 0x00000020
|
||||||
#define DRAW_CHEVRONHOT 0x00000040
|
#define DRAW_CHEVRONHOT 0x00000040
|
||||||
#define DRAW_CHEVRONPUSHED 0x00000080
|
#define DRAW_CHEVRONPUSHED 0x00000080
|
||||||
|
#define DRAW_LAST_IN_ROW 0x00000100
|
||||||
|
#define DRAW_FIRST_IN_ROW 0x00000200
|
||||||
#define NTF_INVALIDATE 0x01000000
|
#define NTF_INVALIDATE 0x01000000
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
|
@ -1753,8 +1755,29 @@ REBAR_Layout (REBAR_INFO *infoPtr, LPRECT lpRect, BOOL notify, BOOL resetclient)
|
||||||
/* ******* End Phase 2 - split rows till adjustment height full ******* */
|
/* ******* End Phase 2 - split rows till adjustment height full ******* */
|
||||||
|
|
||||||
|
|
||||||
/* ******* End Phase 2a - create array of start and end ******* */
|
/* ******* Start Phase 2a - mark first and last band in each ******* */
|
||||||
/* indexes by row */
|
|
||||||
|
prevBand = NULL;
|
||||||
|
for (i = 0; i < infoPtr->uNumBands; i++) {
|
||||||
|
lpBand = &infoPtr->bands[i];
|
||||||
|
if (HIDDENBAND(lpBand))
|
||||||
|
continue;
|
||||||
|
if( !prevBand ) {
|
||||||
|
lpBand->fDraw |= DRAW_FIRST_IN_ROW;
|
||||||
|
prevBand = lpBand;
|
||||||
|
}
|
||||||
|
else if( prevBand->iRow == lpBand->iRow )
|
||||||
|
prevBand = lpBand;
|
||||||
|
else {
|
||||||
|
prevBand->fDraw |= DRAW_LAST_IN_ROW;
|
||||||
|
lpBand->fDraw |= DRAW_FIRST_IN_ROW;
|
||||||
|
prevBand = lpBand;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if( prevBand )
|
||||||
|
prevBand->fDraw |= DRAW_LAST_IN_ROW;
|
||||||
|
|
||||||
|
/* ******* End Phase 2a - mark first and last band in each ******* */
|
||||||
|
|
||||||
|
|
||||||
/* ******* Start Phase 2b - adjust all bands for height full ******* */
|
/* ******* Start Phase 2b - adjust all bands for height full ******* */
|
||||||
|
@ -1770,21 +1793,16 @@ REBAR_Layout (REBAR_INFO *infoPtr, LPRECT lpRect, BOOL notify, BOOL resetclient)
|
||||||
diff = (infoPtr->dwStyle & CCS_VERT) ? clientcx - x : clientcy - y;
|
diff = (infoPtr->dwStyle & CCS_VERT) ? clientcx - x : clientcy - y;
|
||||||
|
|
||||||
/* iterate backwards thru the rows */
|
/* iterate backwards thru the rows */
|
||||||
for (i = infoPtr->uNumBands-1; i>0; i--) {
|
for (i = infoPtr->uNumBands-1; i>=0; i--) {
|
||||||
lpBand = &infoPtr->bands[i];
|
lpBand = &infoPtr->bands[i];
|
||||||
|
if(HIDDENBAND(lpBand)) continue;
|
||||||
|
|
||||||
/* if row has more than 1 band, ignore it */
|
/* if row has more than 1 band, ignore it */
|
||||||
|
if( !(lpBand->fDraw&DRAW_FIRST_IN_ROW) )
|
||||||
/* row is same as previous */
|
continue;
|
||||||
if( lpBand->iRow == infoPtr->bands[i-1].iRow )
|
if( !(lpBand->fDraw&DRAW_LAST_IN_ROW) )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
/* row is same as next */
|
|
||||||
if( (i != (infoPtr->uNumBands-1)) &&
|
|
||||||
(lpBand->iRow == infoPtr->bands[i+1].iRow ) )
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if(HIDDENBAND(lpBand)) continue;
|
|
||||||
if (lpBand->fMask & RBBS_VARIABLEHEIGHT) continue;
|
if (lpBand->fMask & RBBS_VARIABLEHEIGHT) continue;
|
||||||
if (((INT)lpBand->cyMaxChild < 1) ||
|
if (((INT)lpBand->cyMaxChild < 1) ||
|
||||||
((INT)lpBand->cyIntegral < 1)) {
|
((INT)lpBand->cyIntegral < 1)) {
|
||||||
|
@ -1839,12 +1857,11 @@ REBAR_Layout (REBAR_INFO *infoPtr, LPRECT lpRect, BOOL notify, BOOL resetclient)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
/* not righthand bands */
|
/* not righthand bands */
|
||||||
if( (i!=(infoPtr->uNumBands - 1) ) &&
|
if( !(lpBand->fDraw & DRAW_LAST_IN_ROW) )
|
||||||
(lpBand->iRow != infoPtr->bands[i+1].iRow ) )
|
|
||||||
lpBand->fDraw |= DRAW_RIGHTSEP;
|
lpBand->fDraw |= DRAW_RIGHTSEP;
|
||||||
|
|
||||||
/* not the last row */
|
/* not the last row */
|
||||||
if( lpBand->iRow != infoPtr->bands[infoPtr->uNumBands-1].iRow )
|
if( lpBand->iRow != infoPtr->uNumRows )
|
||||||
lpBand->fDraw |= DRAW_BOTTOMSEP;
|
lpBand->fDraw |= DRAW_BOTTOMSEP;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1852,27 +1869,30 @@ REBAR_Layout (REBAR_INFO *infoPtr, LPRECT lpRect, BOOL notify, BOOL resetclient)
|
||||||
/* Distribute the extra space on the horizontal and adjust */
|
/* Distribute the extra space on the horizontal and adjust */
|
||||||
/* all bands in row to same height. */
|
/* all bands in row to same height. */
|
||||||
mcy = 0;
|
mcy = 0;
|
||||||
row = 1;
|
startband = -1;
|
||||||
startband = 0;
|
|
||||||
for (i=0; i<infoPtr->uNumBands; i++) {
|
for (i=0; i<infoPtr->uNumBands; i++) {
|
||||||
|
|
||||||
lpBand = &infoPtr->bands[i];
|
lpBand = &infoPtr->bands[i];
|
||||||
if (HIDDENBAND(lpBand)) continue;
|
|
||||||
if (mcy < ircBw(lpBand))
|
if( lpBand->fDraw & DRAW_FIRST_IN_ROW )
|
||||||
|
{
|
||||||
|
startband = i;
|
||||||
|
mcy = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( (mcy < ircBw(lpBand)) && !HIDDENBAND(lpBand) )
|
||||||
mcy = ircBw(lpBand);
|
mcy = ircBw(lpBand);
|
||||||
|
|
||||||
if( (i==(infoPtr->uNumBands-1)) ||
|
if( lpBand->fDraw & DRAW_LAST_IN_ROW )
|
||||||
(infoPtr->bands[i+1].iRow != lpBand->iRow ) )
|
|
||||||
{
|
{
|
||||||
TRACE("P3 processing row %d, starting band %d, ending band %d\n",
|
TRACE("P3 processing row %d, starting band %d, ending band %d\n",
|
||||||
row, startband, i);
|
lpBand->iRow, startband, i);
|
||||||
|
if( startband < 0 )
|
||||||
|
ERR("Last band %d with no first, row %d\n", i, lpBand->iRow);
|
||||||
|
|
||||||
REBAR_AdjustBands (infoPtr, startband, i,
|
REBAR_AdjustBands (infoPtr, startband, i,
|
||||||
(infoPtr->dwStyle & CCS_VERT) ?
|
(infoPtr->dwStyle & CCS_VERT) ?
|
||||||
clientcy : clientcx, mcy);
|
clientcy : clientcx, mcy);
|
||||||
startband = i+1;
|
|
||||||
mcy = 0;
|
|
||||||
row ++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue