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 + -
显示快捷键?