glbackground.cpp
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:6k
源码类别:

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: glbackground.cpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/06/01 20:50:23  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.3
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: glbackground.cpp,v 1000.2 2004/06/01 20:50:23 gouriano Exp $
  10.  * ===========================================================================
  11.  *
  12.  *                            PUBLIC DOMAIN NOTICE
  13.  *               National Center for Biotechnology Information
  14.  *
  15.  *  This software/database is a "United States Government Work" under the
  16.  *  terms of the United States Copyright Act.  It was written as part of
  17.  *  the author's official duties as a United States Government employee and
  18.  *  thus cannot be copyrighted.  This software/database is freely available
  19.  *  to the public for use. The National Library of Medicine and the U.S.
  20.  *  Government have not placed any restriction on its use or reproduction.
  21.  *
  22.  *  Although all reasonable efforts have been taken to ensure the accuracy
  23.  *  and reliability of the software and data, the NLM and the U.S.
  24.  *  Government do not and cannot warrant the performance or results that
  25.  *  may be obtained by using this software or data. The NLM and the U.S.
  26.  *  Government disclaim all warranties, express or implied, including
  27.  *  warranties of performance, merchantability or fitness for any particular
  28.  *  purpose.
  29.  *
  30.  *  Please cite the author in any work or product based on this material.
  31.  *
  32.  * ===========================================================================
  33.  *
  34.  * Authors:  Mike DiCuccio
  35.  *
  36.  * File Description:
  37.  *
  38.  */
  39. #include <ncbi_pch.hpp>
  40. #include <gui/opengl/glbackground.hpp>
  41. BEGIN_NCBI_SCOPE
  42. CGlBackground::CGlBackground()
  43.     : m_Type(eSolid),
  44.       m_LightColor(1.0f, 1.0f, 1.0f, 1.0f),
  45.       m_DarkColor(1.0f, 1.0f, 1.0f, 1.0f)
  46. {
  47. }
  48. void CGlBackground::SetType(EType type)
  49. {
  50.     m_Type = type;
  51. }
  52. void CGlBackground::SetTexture(CTexImage& image)
  53. {
  54.     m_Texture.Reset(&image);
  55. }
  56. void CGlBackground::SetColor(const CGlColor& c)
  57. {
  58.     SetLightColor(c);
  59. }
  60. void CGlBackground::SetLightColor(const CGlColor& c)
  61. {
  62.     m_LightColor = c;
  63. }
  64. void CGlBackground::SetDarkColor(const CGlColor& c)
  65. {
  66.     m_DarkColor = c;
  67. }
  68. void CGlBackground::SetDarkColor(void)
  69. {
  70.     // we set the dark color as a fraction of the light color
  71.     m_DarkColor.SetRed(m_LightColor.GetRed() * 0.5f);
  72.     m_DarkColor.SetGreen(m_LightColor.GetGreen() * 0.5f);
  73.     m_DarkColor.SetBlue(m_LightColor.GetBlue() * 0.5f);
  74.     // this doesn't apply to the alpha!
  75.     m_DarkColor.SetAlpha(m_LightColor.GetAlpha());
  76. }
  77. void CGlBackground::Draw(const CGlRect<int>& vp)
  78. {
  79.     glPushAttrib(GL_VIEWPORT_BIT);
  80.     glViewport(vp.Left(), vp.Bottom(), vp.Width(), vp.Height());
  81.     Draw();
  82.     glPopAttrib();
  83. }
  84. void CGlBackground::Draw(void)
  85. {
  86.     //
  87.     // matrix set-up
  88.     // we use an orthographic view, and save all matrices
  89.     //
  90.     glMatrixMode(GL_PROJECTION);
  91.     glPushMatrix();
  92.     glLoadIdentity();
  93.     glOrtho(-1, 1, -1, 1, -1, 1);
  94.     glMatrixMode(GL_MODELVIEW);
  95.     glPushMatrix();
  96.     glLoadIdentity();
  97.     // we also save the enables, as we plan to enable/disable a lot of things
  98.     glPushAttrib(GL_ENABLE_BIT);
  99.     // disable the expensive tests
  100.     glDisable(GL_CULL_FACE);
  101.     glDisable(GL_DEPTH_TEST);
  102.     glDisable(GL_BLEND);
  103.     switch (m_Type) {
  104.     case eSolid:
  105.         // solid background
  106.         // we use only m_LightColor here
  107.         glDisable(GL_TEXTURE_2D);
  108.         glColor3fv(m_LightColor.GetGlColor());
  109.         glBegin(GL_QUADS);
  110.             glVertex2i( 1, -1);
  111.             glVertex2i( 1,  1);
  112.             glVertex2i(-1,  1);
  113.             glVertex2i(-1, -1);
  114.         glEnd();
  115.         break;
  116.     case eGradientDown:
  117.         // gradient from top->bottom, light->dark
  118.         // there is no requirement that light be brighter than dark
  119.         glDisable(GL_TEXTURE_2D);
  120.         glBegin(GL_QUADS);
  121.             glColor3fv(m_LightColor.GetGlColor());
  122.             glVertex2i(-1,  1);
  123.             glVertex2i( 1,  1);
  124.             glColor3fv(m_DarkColor.GetGlColor());
  125.             glVertex2i( 1, -1);
  126.             glVertex2i(-1, -1);
  127.         glEnd();
  128.         break;
  129.     case eGradientRight:
  130.         // gradient from top->bottom, light->dark
  131.         // there is no requirement that light be brighter than dark
  132.         glDisable(GL_TEXTURE_2D);
  133.         glBegin(GL_QUADS);
  134.             glColor3fv(m_LightColor.GetGlColor());
  135.             glVertex2i(-1,  1);
  136.             glVertex2i(-1, -1);
  137.             glColor3fv(m_DarkColor.GetGlColor());
  138.             glVertex2i( 1, -1);
  139.             glVertex2i( 1,  1);
  140.         glEnd();
  141.         break;
  142.     case eTexture:
  143.         // use a texture, if possible.  Otherwise, this is the same as a solid
  144.         // background
  145.         // make our texture current if it is available
  146.         if (m_Texture) {
  147.             glEnable(GL_TEXTURE_2D);
  148.             m_Texture->MakeCurrent();
  149.             // this is always rendered with a white background
  150.             glColor3f(1.0f, 1.0f, 1.0f);
  151.         } else {
  152.             glDisable(GL_TEXTURE_2D);
  153.             glColor3fv(m_LightColor.GetGlColor());
  154.         }
  155.         glBegin(GL_QUADS);
  156.             glTexCoord2f(0.0f, 0.0f);
  157.             glVertex2i(-1,  1);
  158.             glTexCoord2f(1.0f, 0.0f);
  159.             glVertex2i( 1,  1);
  160.             glTexCoord2f(1.0f, 1.0f);
  161.             glVertex2i( 1, -1);
  162.             glTexCoord2f(0.0f, 1.0f);
  163.             glVertex2i(-1, -1);
  164.         glEnd();
  165.         break;
  166.     }
  167.     //
  168.     // restore our states
  169.     // this is done so as to leave the modelview matrix as the last active
  170.     // matrix
  171.     //
  172.     glPopAttrib();
  173.     glMatrixMode (GL_PROJECTION);
  174.     glPopMatrix();
  175.     glMatrixMode (GL_MODELVIEW);
  176.     glPopMatrix();
  177. }
  178. END_NCBI_SCOPE
  179. /*
  180.  * ===========================================================================
  181.  * $Log: glbackground.cpp,v $
  182.  * Revision 1000.2  2004/06/01 20:50:23  gouriano
  183.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.3
  184.  *
  185.  * Revision 1.3  2004/05/21 22:27:44  gorelenk
  186.  * Added PCH ncbi_pch.hpp
  187.  *
  188.  * Revision 1.2  2004/03/22 18:49:59  dicuccio
  189.  * Added API to restrict drawing to an indicated viewport
  190.  *
  191.  * Revision 1.1  2003/06/09 19:22:13  dicuccio
  192.  * Initial revision
  193.  *
  194.  * ===========================================================================
  195.  */