summaryrefslogblamecommitdiffstats
path: root/tools/globalcode/utility/overlaymarquee.cpp
blob: 7d97b7739b1be831ff09bbfcf7fae4724d24d7ec (plain) (tree)





























































































































































































































                                                                                        
//-----------------------------------------------------------------------------
// Copyright (C) 2001 Radical Entertainment Ltd.  All rights reserved.
//
// marquee.cpp
//
// Description: 
//
// Modification History:
//  + Created Jun 14, 2001 -- bkusy 
//-----------------------------------------------------------------------------

//----------------------------------------
// System Includes
//----------------------------------------
#include <windows.h>
#include <assert.h>

#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glaux.h>

//----------------------------------------
// 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