//----------------------------------------------------------------------------- // Copyright (C) 2001 Radical Entertainment Ltd. All rights reserved. // // marquee.cpp // // Description: // // Modification History: // + Created Jun 14, 2001 -- bkusy //----------------------------------------------------------------------------- //---------------------------------------- // System Includes //---------------------------------------- #include #include #include #include #include //---------------------------------------- // Project Includes //---------------------------------------- #include "overlaymarquee.h" //---------------------------------------- // Forward References //---------------------------------------- //---------------------------------------- // Define Owning Namespace //---------------------------------------- namespace GLObj { //---------------------------------------- // Constants, Typedefs and Statics //---------------------------------------- //----------------------------------------------------------------------------- // M a r q u e e // // Synopsis: Constructor // // Parameters: NONE // // Returns: NOTHING // // Constraints: NONE // //----------------------------------------------------------------------------- OverlayMarquee::OverlayMarquee() : m_xStart( 0 ), m_yStart( 0 ), m_xEnd( 0 ), m_yEnd( 0 ) { } //----------------------------------------------------------------------------- // ~ M a r q u e e // // Synopsis: Destructor // // Parameters: NONE // // Returns: NOTHING // // Constraints: NONE // //----------------------------------------------------------------------------- OverlayMarquee::~OverlayMarquee() { } //----------------------------------------------------------------------------- // B e g i n // // Synopsis: // // Parameters: NONE // // Returns: NOTHING // // Constraints: NONE // //----------------------------------------------------------------------------- void OverlayMarquee::Begin( M3dView& view, short xStart, short yStart ) { m_View = view; m_xStart = xStart; m_yStart = yStart; m_View.beginGL(); m_View.beginOverlayDrawing(); } //----------------------------------------------------------------------------- // D r a w // // Synopsis: Draw a marquee with the given coordinates. // // Parameters: NONE // // Returns: NOTHING // // Constraints: NONE // //----------------------------------------------------------------------------- void OverlayMarquee::Draw( short xEnd, short yEnd ) { glPushAttrib( GL_CURRENT_BIT | GL_LINE_BIT | GL_POLYGON_BIT ); m_xEnd = xEnd; m_yEnd = yEnd; // // Clearing the overlay plane doesn't seem to work, but swapping buffers does // so we'll use that instead. You've gotta luv Maya bugs -- embrace them // don't squash them. // m_View.clearOverlayPlane(); SwapBuffers( m_View.deviceContext() ); // // Setup the orthographic projection matrix. // glMatrixMode( GL_PROJECTION ); glLoadIdentity(); gluOrtho2D( 0.0, (GLdouble)m_View.portWidth(), 0.0, (GLdouble)m_View.portHeight() ); glMatrixMode( GL_MODELVIEW ); glLoadIdentity(); glTranslatef( 0.375, 0.375, 0.0 ); // // Retrieve GL State. // float lineWidth; unsigned char lineSmoothedFlag; glGetFloatv( GL_LINE_WIDTH, &lineWidth ); glGetBooleanv( GL_LINE_SMOOTH, &lineSmoothedFlag ); // // Set line style. // glLineStipple( 1, 0x5555 ); glLineWidth( 1.0 ); glEnable( GL_LINE_STIPPLE ); glEnable( GL_LINE_SMOOTH ); glIndexi( 2 ); // // Draw marquee. // glBegin( GL_LINES ); glVertex2i( m_xStart, m_yEnd ); // Left Side. glVertex2i( m_xStart, m_yStart ); glVertex2i( m_xStart, m_yStart );// Top glVertex2i( m_xEnd, m_yStart ); glVertex2i( m_xEnd, m_yStart ); // Right Side. glVertex2i( m_xEnd, m_yEnd ); glVertex2i( m_xEnd, m_yEnd ); // Bottom. glVertex2i( m_xStart, m_yEnd ); glEnd(); // // Don't swap the display buffers. A bug in Maya causes the display to be // cleared -- making the flicker worse. // //SwapBuffers( m_View.deviceContext() ); // // Instead just flush the GL buffers. // glFlush(); // // Restore GL state. glLineWidth( lineWidth ); if ( !lineSmoothedFlag ) glDisable( GL_LINE_SMOOTH ); glDisable( GL_LINE_STIPPLE ); glPopAttrib(); } //----------------------------------------------------------------------------- // R e d r a w // // Synopsis: Draw a marquee with the last given coordinates. // // Parameters: NONE // // Returns: NOTHING // // Constraints: NONE // //----------------------------------------------------------------------------- void OverlayMarquee::Redraw() { Draw( m_xEnd, m_yEnd ); } void OverlayMarquee::End() { m_View.endOverlayDrawing(); m_View.endGL(); // // Use the Maya bug to get rid of any drawing we have done. // SwapBuffers( m_View.deviceContext() ); } } // namespace GLObj