gui_event.cpp
来自「ncbi源码」· C++ 代码 · 共 504 行 · 第 1/2 页
CPP
504 行
/* * =========================================================================== * PRODUCTION $Log: gui_event.cpp,v $ * PRODUCTION Revision 1000.1 2004/06/01 21:04:59 gouriano * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.6 * PRODUCTION * =========================================================================== *//* $Id: gui_event.cpp,v 1000.1 2004/06/01 21:04:59 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: * Generic FLTK utilities. */#include <ncbi_pch.hpp>#include <gui/utils/fltk_utils.hpp>#include <FL/Fl.H>#include <FL/fl_draw.H>#include <FL/Fl_Window.H>BEGIN_NCBI_SCOPECFltkEvent::TEvent CFltkEvent::GetEvent(void){ TEvent state = 0; // // raw state processing // if (Fl::event_button1()) { state |= fLeftMouse; } if (Fl::event_button2()) { state |= fMiddleMouse; } if (Fl::event_button3()) { state |= fRightMouse; } if (Fl::event_shift()) { state |= fShift; } if (Fl::event_ctrl()) { state |= fCtrl; } if (Fl::event_alt()) { state |= fAlt; } if ( (Fl::event_key() == FL_Meta_R && Fl::event_key(FL_Meta_R)) || (Fl::event_key() == FL_Meta_L && Fl::event_key(FL_Meta_L)) ) { state |= fMeta; } return state;}CFltkEvent::EEvent CFltkEvent::GetProcessedEvent(){ TEvent state = GetEvent(); TEventMap::const_iterator iter = sm_EventMap.find(state); if (iter != sm_EventMap.end()) { return iter->second; } return eNoState;}void CFltkEvent::SetState(EEvent state, TEvent key_combo){ sm_EventMap[key_combo] = state;}CFltkEvent::TEvent CFltkEvent::GetState(EEvent state){ ITERATE (TEventMap, iter, sm_EventMap) { if (iter->second == state) { return iter->first; } } return 0;}//// set our default interaction modes// this is operating-system dependent//void CFltkEvent::SetOSDefaults(){#if defined(NCBI_OS_MAC) || defined(NCBI_OS_DARWIN) CFltkEvent::SetState(CFltkEvent::eSelectState, CFltkEvent::fLeftMouse); CFltkEvent::SetState(CFltkEvent::eMultiSelectState, CFltkEvent::fShiftLeftMouse); CFltkEvent::SetState(CFltkEvent::ePopupState, CFltkEvent::fCtrlLeftMouse); CFltkEvent::SetState(CFltkEvent::ePanState, CFltkEvent::fMetaLeftMouse); CFltkEvent::SetState(CFltkEvent::eZoomState, CFltkEvent::fAltLeftMouse);#elif defined(NCBI_OS_UNIX) // select = left mouse click CFltkEvent::SetState(CFltkEvent::eSelectState, CFltkEvent::fLeftMouse); // multiple select = shift left mouse click CFltkEvent::SetState(CFltkEvent::eMultiSelectState, CFltkEvent::fShiftLeftMouse); // pop-up = right mouse button CFltkEvent::SetState(CFltkEvent::ePopupState, CFltkEvent::fRightMouse); // pan = middle mouse CFltkEvent::SetState(CFltkEvent::ePanState, CFltkEvent::fMiddleMouse); // zoom in = alt left mouse CFltkEvent::SetState(CFltkEvent::eZoomState, CFltkEvent::fCtrlLeftMouse);#elif defined(NCBI_OS_MSWIN) // select = left mouse click CFltkEvent::SetState(CFltkEvent::eSelectState, CFltkEvent::fLeftMouse); // multiple select = shift left mouse click CFltkEvent::SetState(CFltkEvent::eMultiSelectState, CFltkEvent::fShiftLeftMouse); // pop-up = right mouse button CFltkEvent::SetState(CFltkEvent::ePopupState, CFltkEvent::fRightMouse); // pan = control left mouse CFltkEvent::SetState(CFltkEvent::ePanState, CFltkEvent::fCtrlLeftMouse); // zoom in = alt left mouse CFltkEvent::SetState(CFltkEvent::eZoomState, CFltkEvent::fAltLeftMouse);#endif}CGUIEvent::CGUIEvent() : m_LastFLTKEvent(0), m_Modifiers(0){}int CGUIEvent::GetFLTKEvent() const{ return m_LastFLTKEvent;}void CGUIEvent::OnFLTKEvent(int event){ m_LastFLTKEvent = event; m_MouseEvent = eNone; m_GUISignal = eDefaultSignal; switch(event) { case FL_KEYDOWN: x_OnKeyPressed(); break; case FL_KEYUP: x_OnKeyReleased(); break; case FL_UNFOCUS: {{ m_stPressedKeys.clear(); m_Modifiers = 0; }} break; case FL_MOVE: m_MouseEvent = eMouseMove; break; case FL_PUSH: switch(Fl::event_button()) { case FL_LEFT_MOUSE: m_MouseEvent = eLeftMousePush; break; case FL_MIDDLE_MOUSE: m_MouseEvent = eMiddleMousePush; break; case FL_RIGHT_MOUSE: m_MouseEvent = eRightMousePush; break; } x_UpdateEventState(); // generate signal for requesting focus break; case FL_DRAG: switch(Fl::event_button()) { case FL_LEFT_MOUSE: m_MouseEvent = eLeftMouseDrag; break; case FL_MIDDLE_MOUSE: m_MouseEvent = eMiddleMouseDrag; break; case FL_RIGHT_MOUSE: m_MouseEvent = eRightMouseDrag; break; } x_UpdateEventState(); break; case FL_RELEASE: switch(Fl::event_button()) { case FL_LEFT_MOUSE: m_MouseEvent = eLeftMouseRelease; break; case FL_MIDDLE_MOUSE: m_MouseEvent = eMiddleMouseRelease; break; case FL_RIGHT_MOUSE: m_MouseEvent = eRightMouseRelease; break; } x_UpdateEventState(); break; //case FL_MOUSEWHEEL: res = x_HandleMouseWheel(event); break; default: break; }
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?