⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ruler.h

📁 Audacity是一款用於錄音和編輯聲音的、免費的開放源碼軟體。它可以執行於Mac OS X、Microsoft Windows、GNU/Linux和其它作業系統
💻 H
字号:
/**********************************************************************  Audacity: A Digital Audio Editor  Ruler.h  Dominic Mazzoni  This is a generic class which can be used to display just about  any kind of ruler.  In addition to the Ruler class, which  draws onto any wxDC, this file also contains a simple  RulerPanel class, which allows you to work with a Ruler like  any other wxWindow.  At a minimum, the user must specify the dimensions of the  ruler, its orientation (horizontal or vertical), and the  values displayed at the two ends of the ruler (min and max).  By default, this class will display tick marks at reasonable  round numbers and fractions, for example, 100, 50, 10, 5, 1,  0.5, 0.1, etc.  The class is designed to display a small handful of  labeled Major ticks, and a few Minor ticks between each of  these.  Minor ticks are labeled if there is enough space.  Labels will never run into each other.  In addition to Real numbers, the Ruler currently supports  two other formats for its display:  Integer - never shows tick marks for fractions of an integer    Time - Assumes values represent seconds, and labels the tick         marks in "HH:MM:SS" format, e.g. 4000 seconds becomes         "1:06:40", for example.  Will display fractions of         a second, and tick marks are all reasonable round         numbers for time (i.e. 15 seconds, 30 seconds, etc.)**********************************************************************/#ifndef __AUDACITY_RULER__#define __AUDACITY_RULER__#include <wx/dc.h>#include <wx/event.h>#include <wx/font.h>#include <wx/panel.h>#include <wx/window.h>#include "../Envelope.h"struct ViewInfo;class Ruler { public:   enum RulerFormat {      IntFormat,      RealFormat,      TimeFormat,      LinearDBFormat,   };   //   // Constructor / Destructor   //   Ruler();   ~Ruler();   //   // Required Ruler Parameters   //   void SetBounds(int left, int top, int right, int bottom);   // wxHORIZONTAL || wxVERTICAL   void SetOrientation(int orient);   // min is the value at (x, y)   // max is the value at (x+width, y+height)   // (at the center of the pixel, in both cases)   void SetRange(double min, double max);   //   // Optional Ruler Parameters   //   // IntFormat, RealFormat, or TimeFormat   void SetFormat(RulerFormat format);   // Specify the name of the units (like "dB") if you   // want numbers like "1.6" formatted as "1.6 dB".   void SetUnits(wxString units);   // Logarithmic   void SetLog(bool log);   // Minimum number of pixels between labels   void SetSpacing(int spacing);   // If this is true, the edges of the ruler will always   // receive a label.  If not, the nearest round number is   // labeled (which may or may not be the edge).   void SetLabelEdges(bool labelEdges);   // Makes a vertical ruler hug the left side (instead of right)   // and a horizontal ruler hug the top (instead of bottom)   void SetFlip(bool flip);   // Good defaults are provided, but you can override here   void SetFonts(const wxFont &minorFont, const wxFont &majorFont);   // The ruler will not draw text within this (pixel) range.   // Use this if you have another graphic object obscuring part   // of the ruler's area.  The values start and end are interpreted   // relative to the Ruler's local coordinates.   void OfflimitsPixels(int start, int end);   //   // Drawing   //   // Note that it will not erase for you...   void Draw(wxDC& dc);   void Draw(wxDC& dc, Envelope *speedEnv, long minSpeed, long maxSpeed); private:   void Invalidate();   void Update();   void Update(Envelope *speedEnv, long minSpeed, long maxSpeed);   void FindTickSizes();   void FindLinearTickSizes(double UPP);   wxString LabelString(double d, bool major);   void Tick(int pos, double d, bool major); private:   int          mLeft, mTop, mRight, mBottom;   int          mLength;   wxDC        *mDC;   wxFont      *mMinorFont, *mMajorFont;   double       mMin, mMax;   double       mMajor;   double       mMinor;   int          mDigits;   int         *mUserBits;   int         *mBits;   int          mUserBitLen;   bool         mValid;   struct Label {      int pos;      int lx, ly;      wxString text;   };      int          mNumMajor;   Label       *mMajorLabels;   int          mNumMinor;   Label       *mMinorLabels;      int          mOrientation;   int          mSpacing;   bool         mHasSetSpacing;   bool         mLabelEdges;   RulerFormat  mFormat;   bool         mLog;   bool         mFlip;   wxString     mUnits;};class RulerPanel : public wxPanel {   DECLARE_DYNAMIC_CLASS(RulerPanel) public:   RulerPanel(wxWindow* parent, wxWindowID id,              const wxPoint& pos = wxDefaultPosition,              const wxSize& size = wxDefaultSize);   ~RulerPanel();   void OnPaint(wxPaintEvent &evt);   void OnSize(wxSizeEvent &evt); public:   Ruler  ruler;private:    DECLARE_EVENT_TABLE()};// This is an Audacity Specific ruler panel which additionally// has border, selection markers, play marker.// Once TrackPanel uses wxSizers, we will derive it from some // wxWindow and the GetSize and SetSize functions// will then be wxWindows functions instead.//class AdornedRulerPanel : public RulerPanel {class AdornedRulerPanel { public://   AdornedRulerPanel(wxWindow* parent, wxWindowID id,//              const wxPoint& pos = wxDefaultPosition,//              const wxSize& size = wxDefaultSize);    AdornedRulerPanel();   ~AdornedRulerPanel();public:   void DrawAdornedRuler(wxDC * dc, ViewInfo * pViewInfo,       bool text, bool indicator, bool bRecording);   static int GetRulerHeight() { return 22;}   void SetSize( const wxRect & r );   void GetSize( int * width, int * height );   void SetLeftOffset( int offset ){ leftOffset = offset;}   double indicatorPos;public:   Ruler  ruler;private:   wxRect mRect;   ViewInfo * mViewInfo;   int leftOffset;  // Number of pixels before we hit the 'zero position'.   int GetLeftOffset() { return leftOffset;}   void DrawBorder(wxDC * dc, wxRect & r);   void DrawSelection(wxDC * dc,  const wxRect r);   void DrawMarks(wxDC * dc, const wxRect r, bool /*text */ );   void DrawIndicator(wxDC * dc, bool bRecording);};#endif //define __AUDACITY_RULER__// Indentation settings for Vim and Emacs and unique identifier for Arch, a// version control system. Please do not modify past this point.//// Local Variables:// c-basic-offset: 3// indent-tabs-mode: nil// End://// vim: et sts=3 sw=3// arch-tag: 420f6c32-664f-4614-b922-307d9027432c

⌨️ 快捷键说明

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