Cairo group arguments are stored in a union.

This commit is contained in:
Maciej Suminski 2016-04-14 17:22:58 +02:00
parent 8f924ed125
commit 660e4ca9d4
2 changed files with 38 additions and 36 deletions

View File

@ -318,7 +318,7 @@ void CAIRO_GAL::SetIsFill( bool aIsFillEnabled )
{ {
GROUP_ELEMENT groupElement; GROUP_ELEMENT groupElement;
groupElement.command = CMD_SET_FILL; groupElement.command = CMD_SET_FILL;
groupElement.boolArgument = aIsFillEnabled; groupElement.argument.boolArg = aIsFillEnabled;
currentGroup->push_back( groupElement ); currentGroup->push_back( groupElement );
} }
} }
@ -333,7 +333,7 @@ void CAIRO_GAL::SetIsStroke( bool aIsStrokeEnabled )
{ {
GROUP_ELEMENT groupElement; GROUP_ELEMENT groupElement;
groupElement.command = CMD_SET_STROKE; groupElement.command = CMD_SET_STROKE;
groupElement.boolArgument = aIsStrokeEnabled; groupElement.argument.boolArg = aIsStrokeEnabled;
currentGroup->push_back( groupElement ); currentGroup->push_back( groupElement );
} }
} }
@ -348,10 +348,10 @@ void CAIRO_GAL::SetStrokeColor( const COLOR4D& aColor )
{ {
GROUP_ELEMENT groupElement; GROUP_ELEMENT groupElement;
groupElement.command = CMD_SET_STROKECOLOR; groupElement.command = CMD_SET_STROKECOLOR;
groupElement.arguments[0] = strokeColor.r; groupElement.argument.dblArg[0] = strokeColor.r;
groupElement.arguments[1] = strokeColor.g; groupElement.argument.dblArg[1] = strokeColor.g;
groupElement.arguments[2] = strokeColor.b; groupElement.argument.dblArg[2] = strokeColor.b;
groupElement.arguments[3] = strokeColor.a; groupElement.argument.dblArg[3] = strokeColor.a;
currentGroup->push_back( groupElement ); currentGroup->push_back( groupElement );
} }
} }
@ -366,10 +366,10 @@ void CAIRO_GAL::SetFillColor( const COLOR4D& aColor )
{ {
GROUP_ELEMENT groupElement; GROUP_ELEMENT groupElement;
groupElement.command = CMD_SET_FILLCOLOR; groupElement.command = CMD_SET_FILLCOLOR;
groupElement.arguments[0] = fillColor.r; groupElement.argument.dblArg[0] = fillColor.r;
groupElement.arguments[1] = fillColor.g; groupElement.argument.dblArg[1] = fillColor.g;
groupElement.arguments[2] = fillColor.b; groupElement.argument.dblArg[2] = fillColor.b;
groupElement.arguments[3] = fillColor.a; groupElement.argument.dblArg[3] = fillColor.a;
currentGroup->push_back( groupElement ); currentGroup->push_back( groupElement );
} }
} }
@ -385,7 +385,7 @@ void CAIRO_GAL::SetLineWidth( double aLineWidth )
{ {
GROUP_ELEMENT groupElement; GROUP_ELEMENT groupElement;
groupElement.command = CMD_SET_LINE_WIDTH; groupElement.command = CMD_SET_LINE_WIDTH;
groupElement.arguments[0] = aLineWidth; groupElement.argument.dblArg[0] = aLineWidth;
currentGroup->push_back( groupElement ); currentGroup->push_back( groupElement );
} }
else else
@ -432,7 +432,7 @@ void CAIRO_GAL::Rotate( double aAngle )
{ {
GROUP_ELEMENT groupElement; GROUP_ELEMENT groupElement;
groupElement.command = CMD_ROTATE; groupElement.command = CMD_ROTATE;
groupElement.arguments[0] = aAngle; groupElement.argument.dblArg[0] = aAngle;
currentGroup->push_back( groupElement ); currentGroup->push_back( groupElement );
} }
else else
@ -450,8 +450,8 @@ void CAIRO_GAL::Translate( const VECTOR2D& aTranslation )
{ {
GROUP_ELEMENT groupElement; GROUP_ELEMENT groupElement;
groupElement.command = CMD_TRANSLATE; groupElement.command = CMD_TRANSLATE;
groupElement.arguments[0] = aTranslation.x; groupElement.argument.dblArg[0] = aTranslation.x;
groupElement.arguments[1] = aTranslation.y; groupElement.argument.dblArg[1] = aTranslation.y;
currentGroup->push_back( groupElement ); currentGroup->push_back( groupElement );
} }
else else
@ -469,8 +469,8 @@ void CAIRO_GAL::Scale( const VECTOR2D& aScale )
{ {
GROUP_ELEMENT groupElement; GROUP_ELEMENT groupElement;
groupElement.command = CMD_SCALE; groupElement.command = CMD_SCALE;
groupElement.arguments[0] = aScale.x; groupElement.argument.dblArg[0] = aScale.x;
groupElement.arguments[1] = aScale.y; groupElement.argument.dblArg[1] = aScale.y;
currentGroup->push_back( groupElement ); currentGroup->push_back( groupElement );
} }
else else
@ -554,21 +554,21 @@ void CAIRO_GAL::DrawGroup( int aGroupNumber )
switch( it->command ) switch( it->command )
{ {
case CMD_SET_FILL: case CMD_SET_FILL:
isFillEnabled = it->boolArgument; isFillEnabled = it->argument.boolArg;
break; break;
case CMD_SET_STROKE: case CMD_SET_STROKE:
isStrokeEnabled = it->boolArgument; isStrokeEnabled = it->argument.boolArg;
break; break;
case CMD_SET_FILLCOLOR: case CMD_SET_FILLCOLOR:
fillColor = COLOR4D( it->arguments[0], it->arguments[1], it->arguments[2], fillColor = COLOR4D( it->argument.dblArg[0], it->argument.dblArg[1], it->argument.dblArg[2],
it->arguments[3] ); it->argument.dblArg[3] );
break; break;
case CMD_SET_STROKECOLOR: case CMD_SET_STROKECOLOR:
strokeColor = COLOR4D( it->arguments[0], it->arguments[1], it->arguments[2], strokeColor = COLOR4D( it->argument.dblArg[0], it->argument.dblArg[1], it->argument.dblArg[2],
it->arguments[3] ); it->argument.dblArg[3] );
break; break;
case CMD_SET_LINE_WIDTH: case CMD_SET_LINE_WIDTH:
@ -577,7 +577,7 @@ void CAIRO_GAL::DrawGroup( int aGroupNumber )
double x = 1.0, y = 1.0; double x = 1.0, y = 1.0;
cairo_device_to_user_distance( currentContext, &x, &y ); cairo_device_to_user_distance( currentContext, &x, &y );
double minWidth = std::min( fabs( x ), fabs( y ) ); double minWidth = std::min( fabs( x ), fabs( y ) );
cairo_set_line_width( currentContext, std::max( it->arguments[0], minWidth ) ); cairo_set_line_width( currentContext, std::max( it->argument.dblArg[0], minWidth ) );
} }
break; break;
@ -596,21 +596,21 @@ void CAIRO_GAL::DrawGroup( int aGroupNumber )
case CMD_TRANSFORM: case CMD_TRANSFORM:
cairo_matrix_t matrix; cairo_matrix_t matrix;
cairo_matrix_init( &matrix, it->arguments[0], it->arguments[1], it->arguments[2], cairo_matrix_init( &matrix, it->argument.dblArg[0], it->argument.dblArg[1], it->argument.dblArg[2],
it->arguments[3], it->arguments[4], it->arguments[5] ); it->argument.dblArg[3], it->argument.dblArg[4], it->argument.dblArg[5] );
cairo_transform( currentContext, &matrix ); cairo_transform( currentContext, &matrix );
break; break;
case CMD_ROTATE: case CMD_ROTATE:
cairo_rotate( currentContext, it->arguments[0] ); cairo_rotate( currentContext, it->argument.dblArg[0] );
break; break;
case CMD_TRANSLATE: case CMD_TRANSLATE:
cairo_translate( currentContext, it->arguments[0], it->arguments[1] ); cairo_translate( currentContext, it->argument.dblArg[0], it->argument.dblArg[1] );
break; break;
case CMD_SCALE: case CMD_SCALE:
cairo_scale( currentContext, it->arguments[0], it->arguments[1] ); cairo_scale( currentContext, it->argument.dblArg[0], it->argument.dblArg[1] );
break; break;
case CMD_SAVE: case CMD_SAVE:
@ -622,7 +622,7 @@ void CAIRO_GAL::DrawGroup( int aGroupNumber )
break; break;
case CMD_CALL_GROUP: case CMD_CALL_GROUP:
DrawGroup( it->intArgument ); DrawGroup( it->argument.intArg );
break; break;
} }
} }
@ -638,10 +638,10 @@ void CAIRO_GAL::ChangeGroupColor( int aGroupNumber, const COLOR4D& aNewColor )
{ {
if( it->command == CMD_SET_FILLCOLOR || it->command == CMD_SET_STROKECOLOR ) if( it->command == CMD_SET_FILLCOLOR || it->command == CMD_SET_STROKECOLOR )
{ {
it->arguments[0] = aNewColor.r; it->argument.dblArg[0] = aNewColor.r;
it->arguments[1] = aNewColor.g; it->argument.dblArg[1] = aNewColor.g;
it->arguments[2] = aNewColor.b; it->argument.dblArg[2] = aNewColor.b;
it->arguments[3] = aNewColor.a; it->argument.dblArg[3] = aNewColor.a;
} }
} }
} }

View File

@ -321,9 +321,11 @@ private:
typedef struct typedef struct
{ {
GRAPHICS_COMMAND command; ///< Command to execute GRAPHICS_COMMAND command; ///< Command to execute
double arguments[MAX_CAIRO_ARGUMENTS]; ///< Arguments for Cairo commands union {
bool boolArgument; ///< A bool argument double dblArg[MAX_CAIRO_ARGUMENTS]; ///< Arguments for Cairo commands
int intArgument; ///< An int argument bool boolArg; ///< A bool argument
int intArg; ///< An int argument
} argument;
cairo_path_t* cairoPath; ///< Pointer to a Cairo path cairo_path_t* cairoPath; ///< Pointer to a Cairo path
} GROUP_ELEMENT; } GROUP_ELEMENT;