// **************************************************************************** // // Function Name: RSingleSelection::Render( ) // // Description: Draws the selection rect and handles // // Returns: Nothing // // Exceptions: Memory // // **************************************************************************** // void RSingleSelection::Render( RDrawingSurface& drawingSurface, const R2dTransform& transform, const RIntRect& rcRender, BOOLEAN fRenderIfLocked ) const { // Get the component attributes const RComponentAttributes& componentAttributes = m_pSelectedObject->GetComponentAttributes( ); BOOLEAN fIsLocked = componentAttributes.IsLocked( ); if( fRenderIfLocked || !fIsLocked ) { // Set surface attributes drawingSurface.SetPenWidth( kSelectionOutlineWidth ); drawingSurface.SetPenStyle( kSolidPen ); RRealRect resizeHandleRect; // Draw the resize handles if( componentAttributes.IsResizable( FALSE ) ) { RArray<RRealRect> rectList; RRealSize scaleFactor( kDummyScale, kDummyScale ); scaleFactor = m_pSelectedObject->ApplyResizeConstraint( scaleFactor ); GetResizeSelectionHandle( resizeHandleRect, transform, kTopLeftResizeHandle, TRUE ); rectList.InsertAtEnd( resizeHandleRect ); GetResizeSelectionHandle( resizeHandleRect, transform, kTopRightResizeHandle, TRUE ); rectList.InsertAtEnd( resizeHandleRect ); GetResizeSelectionHandle( resizeHandleRect, transform, kBottomRightResizeHandle, TRUE ); rectList.InsertAtEnd( resizeHandleRect ); GetResizeSelectionHandle( resizeHandleRect, transform, kBottomLeftResizeHandle, TRUE ); rectList.InsertAtEnd( resizeHandleRect ); if ( !AreFloatsEqual( scaleFactor.m_dy, kConstrainedScale ) ) { GetResizeSelectionHandle( resizeHandleRect, transform, kBottomResizeHandle, TRUE ); rectList.InsertAtEnd( resizeHandleRect ); GetResizeSelectionHandle( resizeHandleRect, transform, kTopResizeHandle, TRUE ); rectList.InsertAtEnd( resizeHandleRect ); } if ( !AreFloatsEqual( scaleFactor.m_dx, kConstrainedScale ) ) { GetResizeSelectionHandle( resizeHandleRect, transform, kRightResizeHandle, TRUE ); rectList.InsertAtEnd( resizeHandleRect ); GetResizeSelectionHandle( resizeHandleRect, transform, kLeftResizeHandle, TRUE ); rectList.InsertAtEnd( resizeHandleRect ); } RArray<RRealRect>::YIterator iterator = rectList.Start( ); RArray<RRealRect>::YIterator iteratorEnd = rectList.End( ); if( fIsLocked ) { while ( iterator != iteratorEnd ) drawingSurface.FrameRectangle( *iterator++ ); } else { while ( iterator != iteratorEnd ) drawingSurface.FillRectangle( *iterator++ ); } } // Draw the rotate line and handle if( componentAttributes.IsRotatable( ) ) DrawRotateHandle( drawingSurface, transform, rcRender ); // Draw the selection frame m_pSelectedObject->DrawSelectionFrame( drawingSurface, transform ); } }