Made some tweaks for region, shape, and polygon support

git-svn-id: file:///srv/svn/repos/haiku/trunk/current@8990 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
DarkWyrm
2004-09-17 10:21:41 +00:00
parent f06ff64b1a
commit c33ef86b1d
+38 -1
View File
@@ -83,6 +83,8 @@
# define BVTRACE ; # define BVTRACE ;
#endif #endif
#define MAX_ATTACHMENT_SIZE 49152
inline rgb_color _get_rgb_color( uint32 color ); inline rgb_color _get_rgb_color( uint32 color );
inline uint32 _get_uint32_color( rgb_color c ); inline uint32 _get_uint32_color( rgb_color c );
inline rgb_color _set_static_rgb_color( uint8 r, uint8 g, uint8 b, uint8 a=255 ); inline rgb_color _set_static_rgb_color( uint8 r, uint8 g, uint8 b, uint8 a=255 );
@@ -2508,12 +2510,19 @@ void BView::StrokePolygon(const BPoint* ptArray, int32 numPts, BRect bounds,
BPolygon pol(ptArray,numPts); BPolygon pol(ptArray,numPts);
pol.MapTo(pol.Frame(),bounds); pol.MapTo(pol.Frame(),bounds);
if(pol.fCount * sizeof(BPoint) < MAX_ATTACHMENT_SIZE)
{
owner->fLink->StartMessage( AS_STROKE_POLYGON ); owner->fLink->StartMessage( AS_STROKE_POLYGON );
owner->fLink->Attach<BRect>(pol.Frame()); owner->fLink->Attach<BRect>(pol.Frame());
owner->fLink->Attach<int8>( closed ); owner->fLink->Attach<bool>( closed );
owner->fLink->Attach<int32>( pol.fCount ); owner->fLink->Attach<int32>( pol.fCount );
owner->fLink->Attach(pol.fPts,pol.fCount * sizeof(BPoint) ); owner->fLink->Attach(pol.fPts,pol.fCount * sizeof(BPoint) );
} }
else
{
// TODO: send via an area
}
}
} }
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
@@ -2533,10 +2542,17 @@ void BView::FillPolygon(const BPolygon* aPolygon,pattern p)
if ( _is_new_pattern( fState->patt, p ) ) if ( _is_new_pattern( fState->patt, p ) )
SetPattern( p ); SetPattern( p );
if(aPolygon->fCount * sizeof(BPoint) < MAX_ATTACHMENT_SIZE)
{
owner->fLink->StartMessage( AS_FILL_POLYGON ); owner->fLink->StartMessage( AS_FILL_POLYGON );
owner->fLink->Attach<int32>( aPolygon->fCount ); owner->fLink->Attach<int32>( aPolygon->fCount );
owner->fLink->Attach(aPolygon->fPts,aPolygon->fCount * sizeof(BPoint) ); owner->fLink->Attach(aPolygon->fPts,aPolygon->fCount * sizeof(BPoint) );
} }
else
{
// TODO: send via an area
}
}
} }
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
@@ -2648,12 +2664,19 @@ void BView::FillRegion(BRegion* a_region, pattern p)
int32 rectsNo = a_region->CountRects(); int32 rectsNo = a_region->CountRects();
if(rectsNo*sizeof(BRect) < MAX_ATTACHMENT_SIZE)
{
owner->fLink->StartMessage( AS_FILL_REGION ); owner->fLink->StartMessage( AS_FILL_REGION );
owner->fLink->Attach<int32>( rectsNo ); owner->fLink->Attach<int32>( rectsNo );
for (int32 i = 0; i<rectsNo; i++) for (int32 i = 0; i<rectsNo; i++)
owner->fLink->Attach<BRect>( a_region->RectAt(i) ); owner->fLink->Attach<BRect>( a_region->RectAt(i) );
} }
else
{
// TODO: send via area
}
}
} }
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
@@ -2821,6 +2844,8 @@ void BView::StrokeShape(BShape* shape, pattern p)
if ( _is_new_pattern( fState->patt, p ) ) if ( _is_new_pattern( fState->patt, p ) )
SetPattern( p ); SetPattern( p );
if( (sd->opCount*sizeof(uint32))+(sd->ptCount*sizeof(BPoint)) < MAX_ATTACHMENT_SIZE )
{
owner->fLink->StartMessage( AS_STROKE_SHAPE ); owner->fLink->StartMessage( AS_STROKE_SHAPE );
owner->fLink->Attach<BRect>( shape->Bounds() ); owner->fLink->Attach<BRect>( shape->Bounds() );
owner->fLink->Attach<int32>( sd->opCount ); owner->fLink->Attach<int32>( sd->opCount );
@@ -2828,6 +2853,11 @@ void BView::StrokeShape(BShape* shape, pattern p)
owner->fLink->Attach( sd->opList, sd->opCount ); owner->fLink->Attach( sd->opList, sd->opCount );
owner->fLink->Attach( sd->ptList, sd->ptCount ); owner->fLink->Attach( sd->ptList, sd->ptCount );
} }
else
{
// TODO: send via an area
}
}
} }
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
@@ -2848,6 +2878,8 @@ void BView::FillShape(BShape* shape, pattern p)
if ( _is_new_pattern( fState->patt, p ) ) if ( _is_new_pattern( fState->patt, p ) )
SetPattern( p ); SetPattern( p );
if( (sd->opCount*sizeof(uint32))+(sd->ptCount*sizeof(BPoint)) < MAX_ATTACHMENT_SIZE )
{
owner->fLink->StartMessage( AS_FILL_SHAPE ); owner->fLink->StartMessage( AS_FILL_SHAPE );
owner->fLink->Attach<BRect>( shape->Bounds() ); owner->fLink->Attach<BRect>( shape->Bounds() );
owner->fLink->Attach<int32>( sd->opCount ); owner->fLink->Attach<int32>( sd->opCount );
@@ -2855,6 +2887,11 @@ void BView::FillShape(BShape* shape, pattern p)
owner->fLink->Attach( sd->opList, sd->opCount ); owner->fLink->Attach( sd->opList, sd->opCount );
owner->fLink->Attach( sd->ptList, sd->ptCount ); owner->fLink->Attach( sd->ptList, sd->ptCount );
} }
else
{
// TODO: send via an area
}
}
} }
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------