示例#1
0
// ****************************************************************************
//
//  Function Name:	RCompositeSelection::Render( )
//
//  Description:		Draws the selection rect and handles
//
//  Returns:			Nothing
//
//  Exceptions:		Memory
//
// ****************************************************************************
//
void RCompositeSelection::Render( RDrawingSurface& drawingSurface, const R2dTransform& transform, const RIntRect& rcRender, BOOLEAN fRenderIfLocked ) const
{
    // Only do if the selection is visible or we have a deferred render pending
    if( !m_fSelectionHidden && m_fSelectionVisible )
    {
        // Dont bother rendering if there are no selected objects
        if( m_SelectionCollection.Count( ) != 0 )
        {
            drawingSurface.RestoreDefaults( );

            // Setup the drawing surface for rendering feedback
            RSolidColor color;
            YDrawMode drawMode;
            m_pView->GetFeedbackSettings( color, drawMode );
            drawingSurface.SetForegroundMode( drawMode );
            drawingSurface.SetPenColor( color );
            drawingSurface.SetFillColor( color );

            // Go through our selection collection and render each selection
            YSelectionCollectionIterator iterator = m_SelectionCollection.Start( );
            for( ; iterator != m_SelectionCollection.End( ); ++iterator )
                ( *iterator )->Render( drawingSurface, transform, rcRender, fRenderIfLocked );
        }
    }
}
示例#2
0
void	RRotateDialog::RotateDisplay( int iPos )
{
	if ( iPos == m_iPrevPos )
		return;

	// We need to use the RBitmap::Rotate() function, so to do that, convert to
	// Renaissance types.
	CClientDC			clientDC( &m_staticDisplay );
	HDC					hClientDC = clientDC.GetSafeHdc();

	RDcDrawingSurface	drawSurface;
	drawSurface.Initialize( hClientDC, hClientDC );

	R2dTransform transform;

	// Prepare the image on an offscreen DC
	RAutoDrawingSurface	drawSurfaceOffscreen;
	RRealRect				rRealStaticRect(m_rectStaticDisplay);
	BOOLEAN					fPrepared = drawSurfaceOffscreen.Prepare( &drawSurface, transform, rRealStaticRect );
	RDrawingSurface*		pSurface	= ( (fPrepared)? &drawSurfaceOffscreen : &drawSurface );

	// Paint the offscreen DC white
	RColor rColor = RSolidColor( kWhite );
	pSurface->SetFillColor( rColor );
	pSurface->SetPenColor( rColor );
	pSurface->FillRectangle( m_rectStaticDisplay );

	YAngle	flRadiansRotation = ::DegreesToRadians( YFloatType( iPos ) );

	// The rotation leaves a black background, so blit with a mask.  The mask
	// has to be created the same size as the original (not rotated) bitmap
	// size, so create it and then rotate it.
	RBitmapImage		bmpRotated;
	RBitmapImage		bmpMaskRotated;
	RImageLibrary rLibrary;
	rLibrary.Rotate( m_rBitmapImage, bmpRotated, bmpMaskRotated, flRadiansRotation );

	RIntSize				sizeBmpRotated;
	sizeBmpRotated.m_dx = bmpRotated.GetWidthInPixels();
	sizeBmpRotated.m_dy = bmpRotated.GetHeightInPixels();

	RIntRect				rectSource;
	RIntRect				rectDest;
	DeriveSourceAndDestinationRects( sizeBmpRotated, rectSource, rectDest );

	bmpRotated.RenderWithMask( *pSurface, bmpMaskRotated, rectSource, rectDest );

	if ( fPrepared )
		drawSurfaceOffscreen.Release();
	drawSurface.DetachDCs();

	m_iPrevPos = iPos;
}
示例#3
0
// ****************************************************************************
//
//  Function Name:	RCompositeSelection::SetupRender( )
//
//  Description:		Prepares the given drawing surface and transform for
//							rendering.
//
//  Returns:			Nothing
//
//  Exceptions:		Memory
//
// ****************************************************************************
//
void RCompositeSelection::SetupRender( RDrawingSurface& drawingSurface, R2dTransform& transform ) const
{
    drawingSurface.RestoreDefaults( );

    // Setup the drawing surface for rendering feedback
    RSolidColor color;
    YDrawMode drawMode;
    m_pView->GetFeedbackSettings( color, drawMode );
    drawingSurface.SetForegroundMode( drawMode );
    drawingSurface.SetPenColor( color );
    drawingSurface.SetFillColor( color );

    m_pView->GetViewTransform( transform, drawingSurface, TRUE );
    //
    //	We can't set the clipping here for the components could
    //	lie outside of the view bounds
    //m_pView->SetClipRegion( drawingSurface, transform );
}