flu_button.cpp

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

CPP
220
字号
/* * =========================================================================== * PRODUCTION $Log: Flu_Button.cpp,v $ * PRODUCTION Revision 1000.1  2004/06/01 21:05:29  gouriano * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.2 * PRODUCTION * =========================================================================== *//* * These files were imported into NCBI's CVS directly from FLU version 2.9.1. * Modifications to the source are listed below. * * ========================================================================== * $Log: Flu_Button.cpp,v $ * Revision 1000.1  2004/06/01 21:05:29  gouriano * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.2 * * Revision 1.2  2004/05/21 22:27:51  gorelenk * Added PCH ncbi_pch.hpp * * Revision 1.1  2004/03/11 13:51:39  dicuccio * Imported FLU version 2.9.1.  Altered export specifiers to match NCBI layout. * Altered include paths to match NCBI toolkit layout. * * ========================================================================== */// $Id: Flu_Button.cpp,v 1000.1 2004/06/01 21:05:29 gouriano Exp $/*************************************************************** *                FLU - FLTK Utility Widgets  *  Copyright (C) 2002 Ohio Supercomputer Center, Ohio State University * * This file and its content is protected by a software license. * You should have received a copy of this license with this file. * If not, please contact the Ohio Supercomputer Center immediately: * Attn: Jason Bryan Re: FLU 1224 Kinnear Rd, Columbus, Ohio 43212 *  ***************************************************************/#include <ncbi_pch.hpp>#include <FL/Fl.H>#include <gui/widgets/FLU/Flu_Button.h>#include <FL/fl_draw.H>// taken explicitly from Fl_Return_Button.cppstatic int flu_return_arrow(int x, int y, int w, int h){  int size = w; if (h<size) size = h;  int d = (size+2)/4; if (d<3) d = 3;  int t = (size+9)/12; if (t<1) t = 1;  int x0 = x+(w-2*d-2*t-1)/2;  int x1 = x0+d;  int y0 = y+h/2;  fl_color(FL_LIGHT3);  fl_line(x0, y0, x1, y0+d);  fl_yxline(x1, y0+d, y0+t, x1+d+2*t, y0-d);  fl_yxline(x1, y0-t, y0-d);  fl_color(fl_gray_ramp(0));  fl_line(x0, y0, x1, y0-d);  fl_color(FL_DARK3);  fl_xyline(x1+1, y0-t, x1+d, y0-d, x1+d+2*t);  return 1;}Flu_Button :: Flu_Button( int X,int Y,int W,int H,const char *l )  : Fl_Button( X,Y,W,H,l ){  inactiveImg = NULL;  color( FL_GRAY );  selection_color( FL_GRAY );  retBtn = linkBtn = false;  hover = false;  eBox = FL_NO_BOX;}Flu_Button :: ~Flu_Button(){  if( inactiveImg )    delete inactiveImg;}void Flu_Button :: checkLink(){  // change the cursor if the mouse is over the link  // the 'hover' variable reduces the number of times fl_cursor needs to be called (since it can be expensive)  if( linkBtn )    {      if( Fl::event_inside( x()+labelSize[0], y()+labelSize[1], labelSize[2], labelSize[3] ) )	{	  if( !hover )	    fl_cursor( FL_CURSOR_HAND );	  hover = true;	}      else	{	  if( hover )	    fl_cursor( FL_CURSOR_DEFAULT );	  hover = false;	}    }}int Flu_Button :: handle( int event ){  if( !active_r() )    return Fl_Button::handle( event );  switch( event )    {    case FL_MOVE:      {	checkLink();      }    case FL_ENTER:      {	if( active() )	  {	    Fl_Button::color( fl_lighter( col ) );	    Fl_Button::selection_color( fl_lighter( sCol ) );	  }	checkLink();	redraw();      }      break;    case FL_LEAVE:      {	Fl_Button::color( col );	Fl_Button::selection_color( sCol );      }      checkLink();      redraw();      break;    }  if( retBtn )    {      if( event == FL_SHORTCUT &&	  (Fl::event_key() == FL_Enter || Fl::event_key() == FL_KP_Enter))	{	  do_callback();	  return 1;	}    }  return Fl_Button::handle( event );}// modified explicitly from Fl_Return_Button.cppvoid Flu_Button :: draw(){  if( type() == FL_HIDDEN_BUTTON )    return;  if( !active() )    Fl_Button::color( col );  // draw the link text  if( linkBtn )    {      fl_draw_box( box(), x(), y(), w(), h(), color() );      labelSize[0] = labelSize[1] = labelSize[2] = labelSize[3] = 0;      fl_font( labelfont(), labelsize() );      fl_measure( label(), labelSize[2], labelSize[3], 1 );      labelSize[0] += 2;      labelSize[1] += h()/2 - labelsize()/2 - 2;      fl_color( labelcolor() );      fl_draw( label(), x()+labelSize[0], y()+labelSize[1],	       labelSize[2], labelSize[3], FL_ALIGN_LEFT );      if( !overLink || ( overLink && hover ) )	{	  fl_line_style( FL_SOLID );	  fl_line( x()+labelSize[0], y()+labelSize[1]+labelSize[3]-2,		   x()+labelSize[0]+labelSize[2], y()+labelSize[1]+labelSize[3]-2 );	  fl_line_style( 0 );	}      return;    }  const char *lbl = label();  if( retBtn )    label("");  if( eBox != FL_NO_BOX && Fl::belowmouse() == this && active() )    {      Fl_Boxtype oldbox = box();      box( eBox );      Fl_Button::draw();      box( oldbox );    }  else    Fl_Button::draw();  if( retBtn )    {      int W = h();      if (w()/3 < W) W = w()/3;      flu_return_arrow(x()+w()-W-4, y(), W, h());      label( lbl );      draw_label(x(), y(), w()-W+4, h());    }}void Flu_Button :: image( Fl_Image *i ){  if( inactiveImg )    delete inactiveImg;  inactiveImg = NULL;  if( i )    {      if( labeltype()!=FL_NORMAL_LABEL )	labeltype( FL_NORMAL_LABEL );      Fl_Button::image( i );      inactiveImg = Fl_Button::image()->copy();      inactiveImg->desaturate();      Fl_Button::deimage( inactiveImg );    }}

⌨️ 快捷键说明

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