glbackground.cpp

来自「ncbi源码」· C++ 代码 · 共 241 行

CPP
241
字号
/* * =========================================================================== * PRODUCTION $Log: glbackground.cpp,v $ * PRODUCTION Revision 1000.2  2004/06/01 20:50:23  gouriano * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.3 * PRODUCTION * =========================================================================== *//*  $Id: glbackground.cpp,v 1000.2 2004/06/01 20:50:23 gouriano Exp $ * =========================================================================== * *                            PUBLIC DOMAIN NOTICE *               National Center for Biotechnology Information * *  This software/database is a "United States Government Work" under the *  terms of the United States Copyright Act.  It was written as part of *  the author's official duties as a United States Government employee and *  thus cannot be copyrighted.  This software/database is freely available *  to the public for use. The National Library of Medicine and the U.S. *  Government have not placed any restriction on its use or reproduction. * *  Although all reasonable efforts have been taken to ensure the accuracy *  and reliability of the software and data, the NLM and the U.S. *  Government do not and cannot warrant the performance or results that *  may be obtained by using this software or data. The NLM and the U.S. *  Government disclaim all warranties, express or implied, including *  warranties of performance, merchantability or fitness for any particular *  purpose. * *  Please cite the author in any work or product based on this material. * * =========================================================================== * * Authors:  Mike DiCuccio * * File Description: * */#include <ncbi_pch.hpp>#include <gui/opengl/glbackground.hpp>BEGIN_NCBI_SCOPECGlBackground::CGlBackground()    : m_Type(eSolid),      m_LightColor(1.0f, 1.0f, 1.0f, 1.0f),      m_DarkColor(1.0f, 1.0f, 1.0f, 1.0f){}void CGlBackground::SetType(EType type){    m_Type = type;}void CGlBackground::SetTexture(CTexImage& image){    m_Texture.Reset(&image);}void CGlBackground::SetColor(const CGlColor& c){    SetLightColor(c);}void CGlBackground::SetLightColor(const CGlColor& c){    m_LightColor = c;}void CGlBackground::SetDarkColor(const CGlColor& c){    m_DarkColor = c;}void CGlBackground::SetDarkColor(void){    // we set the dark color as a fraction of the light color    m_DarkColor.SetRed(m_LightColor.GetRed() * 0.5f);    m_DarkColor.SetGreen(m_LightColor.GetGreen() * 0.5f);    m_DarkColor.SetBlue(m_LightColor.GetBlue() * 0.5f);    // this doesn't apply to the alpha!    m_DarkColor.SetAlpha(m_LightColor.GetAlpha());}void CGlBackground::Draw(const CGlRect<int>& vp){    glPushAttrib(GL_VIEWPORT_BIT);    glViewport(vp.Left(), vp.Bottom(), vp.Width(), vp.Height());    Draw();    glPopAttrib();}void CGlBackground::Draw(void){    //    // matrix set-up    // we use an orthographic view, and save all matrices    //    glMatrixMode(GL_PROJECTION);    glPushMatrix();    glLoadIdentity();    glOrtho(-1, 1, -1, 1, -1, 1);    glMatrixMode(GL_MODELVIEW);    glPushMatrix();    glLoadIdentity();    // we also save the enables, as we plan to enable/disable a lot of things    glPushAttrib(GL_ENABLE_BIT);    // disable the expensive tests    glDisable(GL_CULL_FACE);    glDisable(GL_DEPTH_TEST);    glDisable(GL_BLEND);    switch (m_Type) {    case eSolid:        // solid background        // we use only m_LightColor here        glDisable(GL_TEXTURE_2D);        glColor3fv(m_LightColor.GetGlColor());        glBegin(GL_QUADS);            glVertex2i( 1, -1);            glVertex2i( 1,  1);            glVertex2i(-1,  1);            glVertex2i(-1, -1);        glEnd();        break;    case eGradientDown:        // gradient from top->bottom, light->dark        // there is no requirement that light be brighter than dark        glDisable(GL_TEXTURE_2D);        glBegin(GL_QUADS);            glColor3fv(m_LightColor.GetGlColor());            glVertex2i(-1,  1);            glVertex2i( 1,  1);            glColor3fv(m_DarkColor.GetGlColor());            glVertex2i( 1, -1);            glVertex2i(-1, -1);        glEnd();        break;    case eGradientRight:        // gradient from top->bottom, light->dark        // there is no requirement that light be brighter than dark        glDisable(GL_TEXTURE_2D);        glBegin(GL_QUADS);            glColor3fv(m_LightColor.GetGlColor());            glVertex2i(-1,  1);            glVertex2i(-1, -1);            glColor3fv(m_DarkColor.GetGlColor());            glVertex2i( 1, -1);            glVertex2i( 1,  1);        glEnd();        break;    case eTexture:        // use a texture, if possible.  Otherwise, this is the same as a solid        // background        // make our texture current if it is available        if (m_Texture) {            glEnable(GL_TEXTURE_2D);            m_Texture->MakeCurrent();            // this is always rendered with a white background            glColor3f(1.0f, 1.0f, 1.0f);        } else {            glDisable(GL_TEXTURE_2D);            glColor3fv(m_LightColor.GetGlColor());        }        glBegin(GL_QUADS);            glTexCoord2f(0.0f, 0.0f);            glVertex2i(-1,  1);            glTexCoord2f(1.0f, 0.0f);            glVertex2i( 1,  1);            glTexCoord2f(1.0f, 1.0f);            glVertex2i( 1, -1);            glTexCoord2f(0.0f, 1.0f);            glVertex2i(-1, -1);        glEnd();        break;    }    //    // restore our states    // this is done so as to leave the modelview matrix as the last active    // matrix    //    glPopAttrib();    glMatrixMode (GL_PROJECTION);    glPopMatrix();    glMatrixMode (GL_MODELVIEW);    glPopMatrix();}END_NCBI_SCOPE/* * =========================================================================== * $Log: glbackground.cpp,v $ * Revision 1000.2  2004/06/01 20:50:23  gouriano * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.3 * * Revision 1.3  2004/05/21 22:27:44  gorelenk * Added PCH ncbi_pch.hpp * * Revision 1.2  2004/03/22 18:49:59  dicuccio * Added API to restrict drawing to an indicated viewport * * Revision 1.1  2003/06/09 19:22:13  dicuccio * Initial revision * * =========================================================================== */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?