diff options
Diffstat (limited to 'vstgui/vstgui.h')
-rw-r--r-- | vstgui/vstgui.h | 1117 |
1 files changed, 0 insertions, 1117 deletions
diff --git a/vstgui/vstgui.h b/vstgui/vstgui.h deleted file mode 100644 index 43789e4..0000000 --- a/vstgui/vstgui.h +++ /dev/null @@ -1,1117 +0,0 @@ -/* ---------------------------------------------------------------------------- - * VSTGUI for X11/LV2/PNG - * Author: David Robillard - * Released under the revised BSD license, as below - * ---------------------------------------------------------------------------- - * - * Based on: - * ---------------------------------------------------------------------------- - * VSTGUIL: Graphical User Interface Framework for VST plugins on LINUX - * Version: 0.1, Date: 2007/01/21 - * Author: kRAkEn/gORe - * - * Which was based on: - * ---------------------------------------------------------------------------- - * VSTGUI: Graphical User Interface Framework for VST plugins - * Version 3.0 $Date: 2005/08/12 12:45:00 $ - * ---------------------------------------------------------------------------- - * VSTGUI LICENSE - * 2004, Steinberg Media Technologies, All Rights Reserved - * ---------------------------------------------------------------------------- - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the Steinberg Media Technologies nor the names of - * its contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, - * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF - * THE POSSIBILITY OF SUCH DAMAGE. - * ---------------------------------------------------------------------------- - */ - -#ifndef __vstgui__ -#define __vstgui__ - -// define global defines -#define MOTIF 1 -#define PNG 1 - -#include "audioeffectx.h" -#include <X11/Xlib.h> -#include <X11/extensions/Xdbe.h> -#include <png.h> -#include <string> - -// VSTGUI Version -#define VSTGUI_VERSION_MAJOR 3 -#define VSTGUI_VERSION_MINOR 0 - -struct ERect { - VstInt16 left; - VstInt16 top; - VstInt16 right; - VstInt16 bottom; -}; - -/** Table of PNG resources (by filename). - * This is ugly and weird, but designed to allow for easy porting - * from "motif" ported plugins (via simple search/replacing). - */ -struct CResTableEntry { - int id; ///< Resource ID (same as motif) - const char* path; ///< Filename (was char** xpmdata for motif) -}; - -typedef CResTableEntry CResTable[]; -extern CResTable pngResources; - -//---------------------------------------------------- -//---------------------------------------------------- -namespace VSTGUI { - -extern char* bundlePath; -void setBundlePath(const char* path); - - - -class CFrame; -class CDrawContext; -class COffscreenContext; -class CControl; -class CBitmap; - -} // namespace VSTGUI - -class AudioEffect; - -#ifndef __aeffeditor__ -#include "AEffEditor.hpp" -#endif - -//----------------------------------------------------------------------------- -// AEffGUIEditor Declaration -//----------------------------------------------------------------------------- -class AEffGUIEditor : public AEffEditor -{ -public: -//----------------------------------------------------------------------------- - AEffGUIEditor (AudioEffect* effect); - ~AEffGUIEditor (); - - // get the CFrame object - VSTGUI::CFrame* getFrame () { return frame; } - - virtual void setParameter (VstInt32 index, float value); - virtual void beginEdit (VstInt32 index); - virtual void endEdit (VstInt32 index); - - // feedback to application - virtual void doIdleStuff (); - - // wait (in ms) - void wait (unsigned int ms); - - // get the current time (in ms) - unsigned int getTicks (); - - // get version of this VSTGUI - static int getVstGuiVersion () { return (VSTGUI_VERSION_MAJOR << 16) + VSTGUI_VERSION_MINOR; } - - // get the knob mode - static VstInt32 getKnobMode () { return knobMode; } - - long getRect (ERect** rect); - void idle (); - void update (); - -#if VST_2_1_EXTENSIONS - long onKeyDown (VstKeyCode& keyCode); - long onKeyUp (VstKeyCode& keyCode); - bool onWheel (float distance); - long setKnobMode (VstInt32 val); -#endif -//----------------------------------------------------------------------------- -protected: - ERect rect; - unsigned int lLastTicks; - bool inIdleStuff; - static VstInt32 knobMode; - friend class VSTGUI::CFrame; - VSTGUI::CFrame* frame; -}; - -//---------------------------------------------------- -#include <sys/time.h> -#include <unistd.h> -#include <X11/Xlib.h> -#include <X11/Xutil.h> -#include <X11/Intrinsic.h> - -inline unsigned int _getTicks () -{ - // gettimeofday is not what we need here, checkout API for hw time - struct timeval tv; - struct timezone tz; - gettimeofday (&tv, &tz); - return tv.tv_sec * 1000 + tv.tv_usec / 1000; -} - -struct VstKeyCode; - -namespace VSTGUI { - -struct CPoint; - -#define CLASS_METHODS(name, parent) \ - virtual bool isTypeOf (const char* s) const \ - { return (!strcmp (s, (#name))) ? true : parent::isTypeOf (s); }\ - -#ifdef VSTGUI_FLOAT_COORDINATES - typedef float CCoord; -#else - typedef long CCoord; -#endif - -//----------------------------------------------------------------------------- -// Structure CRect -//----------------------------------------------------------------------------- -struct CRect -{ - CRect (CCoord l = 0, CCoord t = 0, CCoord r = 0, CCoord b = 0) - : left (l), top (t), right (r), bottom (b) {} - CRect (const CRect& r) - : left (r.left), top (r.top), right (r.right), bottom (r.bottom) {} - CRect& operator () (CCoord l, CCoord t, CCoord r, CCoord b) - { - if (l < r) - this->left = l, this->right = r; - else - this->left = r, this->right = l; - if (top < bottom) - this->top = t, this->bottom = b; - else - this->top = b, this->bottom = t; - return *this; - } - - bool operator != (const CRect& other) const - { return (left != other.left || right != other.right || - top != other.top || bottom != other.bottom); } - - bool operator == (const CRect& other) const - { return (left == other.left && right == other.right && - top == other.top && bottom == other.bottom); } - - inline CCoord width () const { return right - left; } - inline CCoord height () const { return bottom - top; } - - inline CCoord getWidth () const { return right - left; } - inline CCoord getHeight () const { return bottom - top; } - - inline void setWidth (CCoord w) { right = left + w; } - inline void setHeight (CCoord h) { bottom = top + h; } - - CRect &offset (CCoord off_x, CCoord off_y) - { left += off_x; right += off_x; top += off_y; bottom += off_y; return *this; } - - CRect &inset (CCoord deltaX, CCoord deltaY) - { left += deltaX; right -= deltaX; top += deltaY; bottom -= deltaY; - return *this; } - - CRect &moveTo (CCoord dest_x, CCoord dest_y) - { CCoord vDiff = dest_y - top; CCoord hDiff = dest_x - left; - top += vDiff; bottom += vDiff; left += hDiff; right += hDiff; - return *this; } - - bool pointInside (const CPoint& where) const; // Checks if point is inside this rect - bool isEmpty () const; - - bool rectOverlap (const CRect& rect) const - { - if (right < rect.left) return false; - if (left > rect.right) return false; - if (bottom < rect.top) return false; - if (top > rect.bottom) return false; - return true; - } - - void bound (const CRect& rect); - - union - { CCoord left; CCoord x;}; - - union - { CCoord top; CCoord y;}; - - union - { CCoord right; CCoord x2;}; - - union - { CCoord bottom; CCoord y2;}; -}; - -//----------------------------------------------------------------------------- -// Structure CPoint -//----------------------------------------------------------------------------- -struct CPoint -{ - CPoint (CCoord a_h = 0, CCoord a_v = 0) : h (a_h), v (a_v) {} - CPoint& operator () (CCoord a_h, CCoord a_v) - { this->h = a_h; this->v = a_v; return *this; } - - bool isInside (CRect& r) const - { return h >= r.left && h <= r.right && v >= r.top && v <= r.bottom; } - - bool operator != (const CPoint &other) const - { return (h != other.h || v != other.v); } - - bool operator == (const CPoint &other) const - { return (h == other.h && v == other.v); } - - CPoint &offset (CCoord off_h, CCoord off_v) - { this->h += off_h; this->v += off_v; return *this; } - - union - { CCoord h; CCoord x;}; - - union - { CCoord v; CCoord y;}; -}; - -//----------------------------------------------------------------------------- -// Structure CColor -//----------------------------------------------------------------------------- -struct CColor -{ - CColor& operator () (unsigned char red, - unsigned char green, - unsigned char blue, - unsigned char alpha) - { - this->red = red; - this->green = green; - this->blue = blue; - this->alpha = alpha; - return *this; - } - - CColor& operator = (const CColor& newColor) - { - red = newColor.red; - green = newColor.green; - blue = newColor.blue; - alpha = newColor.alpha; - return *this; - } - - CColor operator ~ () - { - CColor c; - c.red = ~red; - c.green = ~green; - c.blue = ~blue; - c.alpha = ~alpha; - return c; - } - - bool operator != (const CColor &other) const - { return (red != other.red || green != other.green || blue != other.blue || alpha != other.alpha); } - - bool operator == (const CColor &other) const - { return (red == other.red && green == other.green && blue == other.blue && alpha == other.alpha); } - - unsigned char red; - unsigned char green; - unsigned char blue; - unsigned char alpha; -}; - -// define some basic colors -extern CColor kTransparentCColor; -extern CColor kBlackCColor; -extern CColor kWhiteCColor; -extern CColor kGreyCColor; -extern CColor kRedCColor; -extern CColor kGreenCColor; -extern CColor kBlueCColor; -extern CColor kYellowCColor; -extern CColor kCyanCColor; -extern CColor kMagentaCColor; - - -//----------------------------------------------------------------------------- -// Definitions of special characters in a platform independent way - -#define kDegreeSymbol "\xB0" -#define kInfiniteSymbol "oo" -#define kCopyrightSymbol "\xA9" -#define kTrademarkSymbol "\x99" -#define kRegisteredSymbol "\xAE" -#define kMicroSymbol "\x85" -#define kPerthousandSymbol "\x89" - -class CDragContainer; -class CCView; -class CAttributeListEntry; - -//----------------------------------------------------------------------------- -typedef intptr_t CViewAttributeID; -//----------------------------------------------------------------------------- -// Attributes -// all attributes where the first letter is lowercase are reserved for the vstgui lib - -extern const CViewAttributeID kCViewAttributeReferencePointer; // 'cvrp' - -//----------------------------------------------------------------------------- -//----------- -// Font Type -//----------- -enum CFont -{ - kSystemFont = 0, - kNormalFontVeryBig, - kNormalFontBig, - kNormalFont, - kNormalFontSmall, - kNormalFontSmaller, - kNormalFontVerySmall, - kSymbolFont, - - kNumStandardFonts -}; - -//----------- -// Text Face -//----------- -enum CTxtFace -{ - kNormalFace = 0, - kBoldFace = 1, - kItalicFace = 2, - kUnderlineFace = 4 -}; - -//----------- -// Line Style -//----------- -enum CLineStyle -{ - kLineSolid = 0, - kLineOnOffDash -}; - -//----------- -// Draw Mode -//----------- -enum CDrawMode -{ - kCopyMode = 0, - kOrMode, - kXorMode, - kAntialias -}; - -//---------------------------- -// Text Alignment (Horizontal) -//---------------------------- -enum CHoriTxtAlign -{ - kLeftText = 0, - kCenterText, - kRightText -}; - -//---------------------------- -// Buttons Type (+modifiers) -//---------------------------- -enum CButton -{ - kLButton = 1, - kMButton = 2, - kRButton = 4, - kShift = 8, - kControl = 16, - kAlt = 32, - kApple = 64 -}; - -//---------------------------- -// Cursor Type -//---------------------------- -enum CCursorType -{ - kCursorDefault = 0, - kCursorWait, - kCursorHSize, - kCursorVSize, - kCursorSizeAll, - kCursorNESWSize, - kCursorNWSESize, - kCursorCopy, - kCursorNotAllowed, - kCursorHand -}; - -//---------------------------- -// Knob Mode -//---------------------------- -enum CKnobMode -{ - kCircularMode = 0, - kRelativCircularMode, - kLinearMode -}; - -//---------------------------- -// Draw Style -//---------------------------- -enum CDrawStyle -{ - kDrawStroked = 0, - kDrawFilled, - kDrawFilledAndStroked -}; - -enum CMouseWheelAxis -{ - kMouseWheelAxisX = 0, - kMouseWheelAxisY -}; - -//----------------------------------------------------------------------------- -// CReferenceCounter Declaration (Reference Counting) -//----------------------------------------------------------------------------- -class CReferenceCounter -{ -public: - CReferenceCounter () : nbReference (1) {} - virtual ~CReferenceCounter () {} - - virtual void forget () { nbReference--; if (nbReference == 0) delete this; } - virtual void remember () { nbReference++; } - long getNbReference () const { return nbReference; } - -private: - long nbReference; -}; - -//----------------------------------------------------------------------------- -// CDrawContext Declaration -//! A drawing context encapsulates the drawing context of the underlying OS. It implements the drawing functions. -//----------------------------------------------------------------------------- -class CDrawContext : public CReferenceCounter -{ -public: - CDrawContext (CFrame *pFrame, void *pSystemContext, void *pWindow = 0); - virtual ~CDrawContext (); - - void moveTo (const CPoint &point); ///< move line position to point - void lineTo (const CPoint &point); ///< draw a line from current position to point - void drawLines (const CPoint* points, const long& numberOfLines); ///< draw multiple lines at once - - void drawPolygon (const CPoint *pPoints, long numberOfPoints, const CDrawStyle drawStyle = kDrawStroked); ///< draw a polygon - void polyLine (const CPoint *pPoint, long numberOfPoints); ///< draw a stroked polygon - void fillPolygon (const CPoint *pPoint, long numberOfPoints); ///< draw a filled polygon - - void drawRect (const CRect &rect, const CDrawStyle drawStyle = kDrawStroked); ///< draw a stroked rect - void fillRect (const CRect &rect); ///< draw a filled rect - - void drawArc (const CRect &rect, const float startAngle1, const float endAngle2, const CDrawStyle drawStyle = kDrawStroked); ///< draw a stroked arc, where the angles are in degree - void drawArc (const CRect &rect, const CPoint &point1, const CPoint &point2); ///< draw a stroked arc between point1 and point2 - void fillArc (const CRect &rect, const CPoint &point1, const CPoint &point2); ///< draw a filled arc between point1 and point2 - - void drawEllipse (const CRect &rect, const CDrawStyle drawStyle = kDrawStroked); ///< draw an ellipse - void fillEllipse (const CRect &rect); ///< draw a filled ellipse - - void drawPoint (const CPoint &point, CColor color); ///< draw a point - CColor getPoint (const CPoint& point); ///< \deprecated - - void floodFill (const CPoint& start); ///< \deprecated - - void setLineStyle (CLineStyle style); ///< set the current line style - CLineStyle getLineStyle () const { return lineStyle; } ///< get the current line style - - void setLineWidth (CCoord width); ///< set the current line width - CCoord getLineWidth () const { return frameWidth; } ///< get the current line width - - void setDrawMode (CDrawMode mode); ///< set the current draw mode, see CDrawMode - CDrawMode getDrawMode () const { return drawMode; } ///< get the current draw mode, see CDrawMode - - void setClipRect (const CRect &clip); ///< set the current clip - CRect &getClipRect (CRect &clip) const { clip = clipRect; clip.offset (-offset.h, -offset.v); return clip; } ///< get the current clip - void resetClipRect (); ///< reset the clip to the default state - - void setFillColor (const CColor color); ///< set current fill color - CColor getFillColor () const { return fillColor; } ///< get current fill color - - void setFrameColor (const CColor color); ///< set current stroke color - CColor getFrameColor () const { return frameColor; } ///< get current stroke color - - void setFontColor (const CColor color); ///< set current font color - CColor getFontColor () const { return fontColor; } ///< get current font color - void setFont (CFont fontID, const long size = 0, long style = 0); ///< set current font - CFont getFont () const { return fontId; } ///< get current font - long getFontSize () const { return fontSize; } ///< get current font size - - CCoord getStringWidth (const char* pStr); ///< get the width of a string - - void drawString (const char *pString, const CRect &rect, const short opaque = false, - const CHoriTxtAlign hAlign = kCenterText); ///< draw a string - - long getMouseButtons (); ///< get current mouse buttons - void getMouseLocation (CPoint &point); ///< get current mouse location. should not be used, see CView::getMouseLocation - bool waitDoubleClick (); ///< check if another mouse click occurs in the near future - bool waitDrag (); ///< check if the mouse will be dragged - -#if MOTIF - long getIndexColor (CColor color); - Colormap getColormap (); - Visual *getVisual (); - unsigned int getDepth (); - static long nbNewColor; -#endif - - void *getWindow () { return pWindow; } - void setWindow (void *ptr) { pWindow = ptr; } - void getLoc (CPoint &where) const { where = penLoc; } - CFrame* getFrame () const { return pFrame; } - - CPoint offsetScreen; - CPoint offset; - - void *getSystemContext () const { return pSystemContext; } - - virtual void forget (); - - //------------------------------------------- -protected: - - friend class CBitmap; - friend class COffscreenContext; - - void *pSystemContext; - void *pWindow; - CFrame *pFrame; - - long fontSize; - long fontStyle; - CFont fontId; - CColor fontColor; - CPoint penLoc; - - CCoord frameWidth; - CColor frameColor; - CColor fillColor; - CLineStyle lineStyle; - CDrawMode drawMode; - CRect clipRect; - -#if MOTIF - XFontStruct *pFontInfoStruct; -#endif -}; - - -//----------------------------------------------------------------------------- -// COffscreenContext Declaration -//! A drawing device which uses a pixmap as its drawing surface. -//----------------------------------------------------------------------------- -class COffscreenContext : public CDrawContext -{ -public: - COffscreenContext (CDrawContext *pContext, CBitmap *pBitmap, bool drawInBitmap = false); - COffscreenContext (CFrame *pFrame, long width, long height, const CColor backgroundColor = kBlackCColor); - - virtual ~COffscreenContext (); - - void copyFrom (CDrawContext *pContext, CRect destRect, CPoint srcOffset = CPoint (0, 0)); ///< copy from offscreen to pContext - void copyTo (CDrawContext* pContext, CRect& srcRect, CPoint destOffset = CPoint (0, 0)); ///< copy to offscreen from pContext - - inline CCoord getWidth () const { return width; } - inline CCoord getHeight () const { return height; } - - //------------------------------------------- -protected: - CBitmap *pBitmap; - CBitmap *pBitmapBg; - CCoord height; - CCoord width; - bool bDestroyPixmap; - - CColor backgroundColor; - -#if MOTIF - Display *pXdisplay; -#endif -}; - - -//----------------------------------------------------------------------------- -// CBitmap Declaration -//! Encapsulates various platform depended kinds of bitmaps. -//----------------------------------------------------------------------------- -class CBitmap : public CReferenceCounter -{ -public: - CBitmap (long resourceID); ///< Create from a filename - CBitmap (CFrame &frame, CCoord width, CCoord height); ///< Create a pixmap with a given size. - virtual ~CBitmap (); - - virtual void draw (CDrawContext *pContext, CRect &rect, const CPoint &offset = CPoint (0, 0)); ///< Draw the pixmap using a given rect as output position and a given offset of its source pixmap. - virtual void drawTransparent (CDrawContext *pContext, CRect &rect, const CPoint &offset = CPoint (0, 0)); - virtual void drawAlphaBlend (CDrawContext *pContext, CRect &rect, const CPoint &offset = CPoint (0, 0), unsigned char alpha = 128); ///< Same as CBitmap::draw except that it uses the alpha value to draw the bitmap alpha blended. - - inline CCoord getWidth () const { return width; } - inline CCoord getHeight () const { return height; } - - bool isLoaded () const; - void *getHandle () const; - - void setTransparentColor (const CColor color); - CColor getTransparentColor () const { return transparentCColor; } - void setTransparencyMask (CDrawContext* pContext, const CPoint& offset = CPoint (0, 0)); - - void setNoAlpha (bool state) { noAlpha = state; } - bool getNoAlpha () const { return noAlpha; } - - //------------------------------------------- -protected: - CBitmap (); - - virtual void dispose (); - virtual bool loadFromResource (long resourceID); - virtual bool loadFromPath (const void* platformPath); // platformPath is a C string - - long resourceID; - CCoord width; - CCoord height; - - CColor transparentCColor; - bool noAlpha; - -#if PNG - void *createPixmapFromPng (CDrawContext *pContext); - bool openPng (const char* path); - bool closePng (); - std::string pngPath; - png_structp pngRead; - png_infop pngInfo; - FILE* pngFp; -#endif -#if MOTIF - void *createPixmapFromXpm (CDrawContext *pContext); - - char **ppDataXpm; - void *pHandle; - void *pMask; -#endif -}; - -enum { - kMessageUnknown = 0, - kMessageNotified = 1 -}; - -//----------------------------------------------------------------------------- -// CView Declaration -//----------------------------------------------------------------------------- -class CView : public CReferenceCounter -{ -public: - CView (const CRect &size); - virtual ~CView (); - - virtual void draw (CDrawContext *pContext); ///< called if the view should draw itself - virtual void drawRect (CDrawContext *pContext, const CRect& updateRect) { draw (pContext); } ///< called if the view should draw itself - virtual bool checkUpdate (CRect& updateRect) const { return updateRect.rectOverlap (size); } - virtual void mouse (CDrawContext *pContext, CPoint &where, long buttons = -1); ///< called if a mouse click event occurs - - virtual void setBackground (CBitmap *background); ///< set the background image of this view - virtual CBitmap *getBackground () const { return pBackground; } ///< get the background image of this view - - virtual long onKeyDown (VstKeyCode& keyCode); ///< called if a key down event occurs and this view has focus - virtual long onKeyUp (VstKeyCode& keyCode); ///< called if a key up event occurs and this view has focus - - virtual bool onWheel (CDrawContext *pContext, const CPoint &where, float distance); ///< called if a mouse wheel event is happening over this view - virtual bool onWheel (CDrawContext *pContext, const CPoint &where, const CMouseWheelAxis axis, float distance); ///< called if a mouse wheel event is happening over this view - - virtual bool onDrop (CDrawContext* context, CDragContainer* drag, const CPoint& where) { return false; } ///< called if a drag is dropped onto this view - virtual void onDragEnter (CDrawContext* context, CDragContainer* drag, const CPoint& where) {} ///< called if a drag is entering this view - virtual void onDragLeave (CDrawContext* context, CDragContainer* drag, const CPoint& where) {} ///< called if a drag is leaving this view - virtual void onDragMove (CDrawContext* context, CDragContainer* drag, const CPoint& where) {} ///< called if a drag is current moved over this view - - virtual void looseFocus (CDrawContext *pContext = 0); ///< called if view should loose focus - virtual void takeFocus (CDrawContext *pContext = 0); ///< called if view should take focus - - virtual bool isDirty () const { return bDirty; } ///< check if view is dirty - virtual void setDirty (const bool val = true) { bDirty = val; } ///< set the view to dirty so that it is redrawn in the next idle. Thread Safe ! - - virtual bool isVisible () const { return bVisible; } ///< check if view is dirty - virtual void setVisible (const bool val = true) { bVisible = val; } ///< set the view to dirty so that it is redrawn in the next idle. Thread Safe ! - - virtual void setMouseEnabled (const bool bEnable = true) { bMouseEnabled = bEnable; } ///< turn on/off mouse usage for this view - virtual bool getMouseEnabled () const { return bMouseEnabled; } ///< get the state of wheather this view uses the mouse or not - - virtual void setMouseableArea (const CRect &rect) { mouseableArea = rect; } ///< set the area in which the view reacts to the mouse - virtual CRect &getMouseableArea (CRect &rect) const { rect = mouseableArea; return rect;} ///< get the area in which the view reacts to the mouse - - virtual bool hitTest (const CPoint& where, const long buttons = -1) { return where.isInside (mouseableArea); } ///< check if where hits this view - - virtual void setTransparency (bool val) { bTransparencyEnabled = val; } ///< set views transparent state - virtual bool getTransparency () const { return bTransparencyEnabled; } ///< is view transparent ? - - CCoord getHeight () const { return size.height (); } ///< get the height of the view - CCoord getWidth () const { return size.width (); } ///< get the width of the view - - virtual void setViewSize (CRect &rect); ///< set views size - virtual CRect &getViewSize (CRect &rect) const { rect = size; return rect; } ///< returns the current view size - virtual const CRect &getViewSize () const { return size; } ///< returns the current view size - - virtual bool removed (CView* parent) { return true; } ///< view is removed from parent view - virtual bool attached (CView* view) { return true; } ///< view is attached to a parent view - - virtual void getMouseLocation (CDrawContext* context, CPoint &point); ///< get current mouse location in local view coordinates - - virtual CPoint& frameToLocal (CPoint& point) const; ///< conversion from frame coordinates to local view coordinates - virtual CPoint& localToFrame (CPoint& point) const; ///< conversion from local view coordinates to frame coordinates - - bool getAttributeSize (const CViewAttributeID id, long& outSize) const; ///< get the size of an attribute - bool getAttribute (const CViewAttributeID id, const long inSize, void* outData, long& outSize) const; ///< get an attribute - bool setAttribute (const CViewAttributeID id, const long inSize, void* inData); ///< set an attribute - - CView *getParentView () const { return pParentView; } - CFrame *getParent () const { return pParentFrame; } - CFrame *getFrame () const { return pParentFrame; } - virtual void *getEditor () const; - - virtual long notify (CView* sender, const char* message); - void redraw (); - virtual void redrawRect (CDrawContext* context, const CRect& rect); - - virtual bool wantsFocus () const { return bWantsFocus; } ///< check if view supports focus - virtual void setWantsFocus (bool state) { bWantsFocus = state; } ///< set focus support on/off - -#if DEBUG - virtual void dumpInfo (); -#endif - - virtual bool isTypeOf (const char* s) const - { return (!strcmp (s, "CView")); } - - virtual void update (CDrawContext *pContext); // don't call this !!! - - //------------------------------------------- -protected: - friend class CControl; - friend class CFrame; - friend class CViewContainer; - - CRect size; - CRect mouseableArea; - - CFrame *pParentFrame; - CView *pParentView; - - bool bDirty; - bool bMouseEnabled; - bool bTransparencyEnabled; - bool bWantsFocus; - bool bVisible; - - CBitmap* pBackground; - CAttributeListEntry* pAttributeList; -}; - -// Message to check if View is a CViewContainer -const extern char* kMsgCheckIfViewContainer; - -//----------------------------------------------------------------------------- -// CViewContainer Declaration -//! Container Class of CView objects. -//----------------------------------------------------------------------------- -class CViewContainer : public CView -{ -public: - CViewContainer (const CRect &size, CFrame *pParent, CBitmap *pBackground = 0); - virtual ~CViewContainer (); - - virtual void addView (CView *pView); ///< add a child view - virtual void addView (CView *pView, CRect &mouseableArea, bool mouseEnabled = true); ///< add a child view - virtual void removeView (CView *pView, const bool &withForget = true); ///< remove a child view - virtual void removeAll (const bool &withForget = true); ///< remove all child views - virtual bool isChild (CView *pView) const; ///< check if pView is a child view of this container - virtual long getNbViews () const; ///< get the number of child views - virtual CView *getView (long index) const; ///< get the child view at index - - virtual void setBackgroundColor (const CColor color); ///< set the background color (will only be drawn if this container is not set to transparent and does not have a background bitmap) - virtual CColor getBackgroundColor () const { return backgroundColor; } ///< get the background color - virtual void setBackgroundOffset (const CPoint &p) { backgroundOffset = p; } ///< set the offset of the background bitmap - virtual const CPoint& getBackgroundOffset () const { return backgroundOffset; } ///< get the offset of the background bitmap - - virtual void drawBackgroundRect (CDrawContext *pContext, CRect& _updateRect); ///< draw the background - - enum { - kNormalUpdate = 0, ///< this mode redraws the whole container if something is dirty - kOnlyDirtyUpdate ///< this mode only redraws the views which are dirty - }; - - virtual void setMode (long val) { mode = val; } ///< set the update mode - virtual long getMode () const { return mode; } ///< get the update mode - - virtual void useOffscreen (bool b); ///< turn on/off using an offscreen - - virtual CView *getCurrentView () const; ///< get the current view under the mouse - virtual CView *getViewAt (const CPoint& where, bool deep = false) const; ///< get the view at point where - - void modifyDrawContext (CCoord save[4], CDrawContext* pContext); - void restoreDrawContext (CDrawContext* pContext, CCoord save[4]); - - // CView - virtual void draw (CDrawContext *pContext); - virtual void drawRect (CDrawContext *pContext, const CRect& updateRect); - virtual void mouse (CDrawContext *pContext, CPoint &where, long buttons = -1); - virtual bool onWheel (CDrawContext *pContext, const CPoint &where, float distance); - virtual bool onWheel (CDrawContext *pContext, const CPoint &where, const CMouseWheelAxis axis, float distance); - virtual void update (CDrawContext *pContext); - virtual bool hitTest (const CPoint& where, const long buttons = -1); - virtual long onKeyDown (VstKeyCode& keyCode); - virtual long onKeyUp (VstKeyCode& keyCode); - virtual long notify (CView* sender, const char* message); - - virtual bool onDrop (CDrawContext* context, CDragContainer* drag, const CPoint& where); - virtual void onDragEnter (CDrawContext* context, CDragContainer* drag, const CPoint& where); - virtual void onDragLeave (CDrawContext* context, CDragContainer* drag, const CPoint& where); - virtual void onDragMove (CDrawContext* context, CDragContainer* drag, const CPoint& where); - - virtual void looseFocus (CDrawContext *pContext = 0); - virtual void takeFocus (CDrawContext *pContext = 0); - virtual bool advanceNextFocusView (CView* oldFocus, bool reverse = false); - - virtual bool isDirty () const; - - virtual void setViewSize (CRect &rect); - - virtual bool removed (CView* parent); - virtual bool attached (CView* view); - - virtual CPoint& frameToLocal (CPoint& point) const; - virtual CPoint& localToFrame (CPoint& point) const; - - virtual void redrawRect (CDrawContext* context, const CRect& rect); - - CLASS_METHODS(CViewContainer, CView) - -#if DEBUG - virtual void dumpInfo (); - virtual void dumpHierarchy (); -#endif - - //------------------------------------------- -protected: - bool hitTestSubViews (const CPoint& where, const long buttons = -1); - - CCView *pFirstView; - CCView *pLastView; - long mode; - COffscreenContext *pOffscreenContext; - CColor backgroundColor; - CPoint backgroundOffset; - bool bDrawInOffscreen; - - CView* currentDragView; -}; - -//----------------------------------------------------------------------------- -// CFrame Declaration -//! The CFrame is the parent container of all views. -//----------------------------------------------------------------------------- -class CFrame : public CViewContainer -{ -public: - CFrame (const CRect &size, void *pSystemWindow, void *pEditor); - - virtual ~CFrame (); - - virtual bool open (); - virtual bool close (); - virtual bool isOpen () const { return bOpenFlag; } - - virtual void idle (); - virtual void doIdleStuff (); - - virtual unsigned long getTicks () const; ///< get the current time (in ms) - virtual long getKnobMode () const; ///< get hosts knob mode - - virtual bool setPosition (CCoord x, CCoord y); - virtual bool getPosition (CCoord &x, CCoord &y) const; - - virtual bool setSize (CCoord width, CCoord height); - virtual bool getSize (CRect *pSize) const; - virtual bool getSize (CRect &pSize) const; - - virtual long setModalView (CView *pView); - virtual CView *getModalView () const { return pModalView; } - - virtual void beginEdit (long index); - virtual void endEdit (long index); - - virtual bool getCurrentLocation (CPoint &where); - virtual void setCursor (CCursorType type); - - virtual void setFocusView (CView *pView); - virtual CView *getFocusView () const { return pFocusView; } - virtual bool advanceNextFocusView (CView* oldFocus, bool reverse = false); - - virtual bool setDropActive (bool val); - virtual bool isDropActive () const { return bDropActive; }; - - CDrawContext* createDrawContext (); - - virtual void setOpenFlag (bool val) { bOpenFlag = val;}; - virtual bool getOpenFlag () const { return bOpenFlag; }; - - virtual void invalidate (const CRect &rect); - - virtual bool updatesDisabled () const { return bUpdatesDisabled; } - virtual bool updatesDisabled (bool state) { bool before = bUpdatesDisabled; bUpdatesDisabled = state; return before; } - - void *getSystemWindow () const { return (void*)pSystemWindow; } - void *getParentSystemWindow () const { return (void*)pSystemWindow; } - void setParentSystemWindow (void *val) { pSystemWindow = (XdbeBackBuffer)val; } - - // CView - virtual void draw (CDrawContext *pContext); - virtual void drawRect (CDrawContext *pContext, const CRect& updateRect); - virtual void draw (CView *pView = 0); - virtual void mouse (CDrawContext *pContext, CPoint &where, long buttons = -1); - virtual bool onWheel (CDrawContext *pContext, const CPoint &where, float distance); - virtual bool onWheel (CDrawContext *pContext, const CPoint &where, const CMouseWheelAxis axis, float distance); - virtual long onKeyDown (VstKeyCode& keyCode); - virtual long onKeyUp (VstKeyCode& keyCode); - virtual void update (CDrawContext *pContext); - virtual void setViewSize (CRect& inRect); - virtual CView *getCurrentView () const; - - virtual void *getEditor () const { return pEditor; } - -#if MOTIF - Colormap getColormap () const { return colormap; } - Visual *getVisual () const { return pVisual; } - unsigned int getDepth () const { return depth; } - Window getWindow () const { return window; } - Drawable getBackBuffer () const { return backBuffer; } - void freeGc (); - - Region region; - - GC gc; - GC getGC () const { return gc; } -#endif - -#if DEBUG - virtual void dumpHierarchy (); -#endif - - CLASS_METHODS(CFrame, CViewContainer) - - //------------------------------------------- -protected: - bool initFrame (void *pSystemWin); - - void *pEditor; - - CView *pModalView; - CView *pFocusView; - - bool bFirstDraw; - bool bOpenFlag; - bool bDropActive; - bool bUpdatesDisabled; - -#if MOTIF - Colormap colormap; - Visual *pVisual; - Window window; - unsigned int depth; - XdbeBackBuffer backBuffer; - Window pSystemWindow; -#endif - - //------------------------------------------- -private: - CDrawContext *pFrameContext; - bool bAddedWindow; - void *defaultCursor; -}; - -//----------------------------------------------------------------------------- -// CDragContainer Declaration -//----------------------------------------------------------------------------- -class CDragContainer : public CReferenceCounter -{ -public: - CDragContainer (void* platformDrag); - ~CDragContainer (); - - void* first (long& size, long& type); ///< returns pointer on a char array if type is known - void* next (long& size, long& type); ///< returns pointer on a char array if type is known - - long getType (long idx) const; - long getCount () const { return nbItems; } - - enum { - kFile = 0, - kText, - - kUnknown = -1 - }; - -protected: - void* platformDrag; - long nbItems; - - long iterator; - void* lastItem; -}; - -//----------------------------------------------------------------------------- -// CCView Declaration -//----------------------------------------------------------------------------- -class CCView -{ -public: - CCView (CView *pView); - ~CCView (); - - CView *pView; - CCView *pNext; - CCView *pPrevious; -}; - -} // namespace VSTGUI - -// include the control objects -#ifndef __vstcontrols__ -#include "vstcontrols.h" -#endif - -#ifndef USE_NAMESPACE -using namespace VSTGUI; -#endif - -#endif // __vstgui__ |