diff options
27 files changed, 142 insertions, 55 deletions
diff --git a/libs/canvas/canvas/arc.h b/libs/canvas/canvas/arc.h index c8d7f8e44f..306a1acb7b 100644 --- a/libs/canvas/canvas/arc.h +++ b/libs/canvas/canvas/arc.h @@ -19,13 +19,14 @@ #ifndef __CANVAS_ARC_H__ #define __CANVAS_ARC_H__ +#include "canvas/visibility.h" #include "canvas/item.h" #include "canvas/outline.h" #include "canvas/fill.h" namespace ArdourCanvas { -class Arc : virtual public Item, public Outline, public Fill +class LIBCANVAS_API Arc : virtual public Item, public Outline, public Fill { public: Arc (Group *); diff --git a/libs/canvas/canvas/arrow.h b/libs/canvas/canvas/arrow.h index ed3a5bb384..beaed84c27 100644 --- a/libs/canvas/canvas/arrow.h +++ b/libs/canvas/canvas/arrow.h @@ -25,6 +25,8 @@ #ifndef __CANVAS_ARROW_H__ #define __CANVAS_ARROW_H__ +#include "canvas/visibility.h" + #include "canvas/group.h" namespace ArdourCanvas { @@ -43,7 +45,7 @@ class Polygon; * to draw lines at any angle. */ -class Arrow : public Group +class LIBCANVAS_API Arrow : public Group { public: Arrow (Group *); diff --git a/libs/canvas/canvas/canvas.h b/libs/canvas/canvas/canvas.h index c28fc36e19..616336409d 100644 --- a/libs/canvas/canvas/canvas.h +++ b/libs/canvas/canvas/canvas.h @@ -33,6 +33,9 @@ #include <cairomm/context.h> #include "pbd/signals.h" + +#include "canvas/visibility.h" + #include "canvas/root_group.h" namespace ArdourCanvas @@ -51,7 +54,7 @@ class Group; * rightwards and y increases downwards. */ -class Canvas +class LIBCANVAS_API Canvas { public: Canvas (); @@ -127,7 +130,7 @@ protected: }; /** A canvas which renders onto a GTK EventBox */ -class GtkCanvas : public Canvas, public Gtk::EventBox +class LIBCANVAS_API GtkCanvas : public Canvas, public Gtk::EventBox { public: GtkCanvas (); @@ -179,7 +182,7 @@ private: * This provides a GtkCanvas that can be scrolled. It does NOT implement the * Gtk::Scrollable interface. */ -class GtkCanvasViewport : public Gtk::Alignment +class LIBCANVAS_API GtkCanvasViewport : public Gtk::Alignment { public: GtkCanvasViewport (Gtk::Adjustment &, Gtk::Adjustment &); diff --git a/libs/canvas/canvas/circle.h b/libs/canvas/canvas/circle.h index 030e73312c..ee17208a1f 100644 --- a/libs/canvas/canvas/circle.h +++ b/libs/canvas/canvas/circle.h @@ -19,11 +19,13 @@ #ifndef __CANVAS_CIRCLE_H__ #define __CANVAS_CIRCLE_H__ +#include "canvas/visibility.h" + #include "canvas/arc.h" namespace ArdourCanvas { -class Circle : public Arc +class LIBCANVAS_API Circle : public Arc { public: Circle (Group *); diff --git a/libs/canvas/canvas/curve.h b/libs/canvas/canvas/curve.h index 2d60f0f6d7..93c14386dc 100644 --- a/libs/canvas/canvas/curve.h +++ b/libs/canvas/canvas/curve.h @@ -19,11 +19,13 @@ #ifndef __CANVAS_CURVE_H__ #define __CANVAS_CURVE_H__ +#include "canvas/visibility.h" + #include "canvas/poly_item.h" namespace ArdourCanvas { -class Curve : public PolyItem +class LIBCANVAS_API Curve : public PolyItem { public: Curve (Group *); diff --git a/libs/canvas/canvas/debug.h b/libs/canvas/canvas/debug.h index a025e605dc..09fa97789b 100644 --- a/libs/canvas/canvas/debug.h +++ b/libs/canvas/canvas/debug.h @@ -24,12 +24,14 @@ #include <map> #include "pbd/debug.h" +#include "canvas/visibility.h" + namespace PBD { namespace DEBUG { - extern uint64_t CanvasItems; - extern uint64_t CanvasItemsDirtied; - extern uint64_t CanvasEvents; - extern uint64_t CanvasRender; + LIBCANVAS_API extern uint64_t CanvasItems; + LIBCANVAS_API extern uint64_t CanvasItemsDirtied; + LIBCANVAS_API extern uint64_t CanvasEvents; + LIBCANVAS_API extern uint64_t CanvasRender; } } @@ -40,13 +42,13 @@ namespace PBD { #endif namespace ArdourCanvas { - extern struct timeval epoch; - extern std::map<std::string, struct timeval> last_time; - extern void checkpoint (std::string, std::string); - extern void set_epoch (); - extern int render_count; - extern int render_depth; - extern int dump_depth; + LIBCANVAS_API extern struct timeval epoch; + LIBCANVAS_API extern std::map<std::string, struct timeval> last_time; + LIBCANVAS_API extern void checkpoint (std::string, std::string); + LIBCANVAS_API extern void set_epoch (); + LIBCANVAS_API extern int render_count; + LIBCANVAS_API extern int render_depth; + LIBCANVAS_API extern int dump_depth; } #endif diff --git a/libs/canvas/canvas/fill.h b/libs/canvas/canvas/fill.h index f52260c571..23708e42e5 100644 --- a/libs/canvas/canvas/fill.h +++ b/libs/canvas/canvas/fill.h @@ -22,11 +22,13 @@ #include <vector> #include <stdint.h> + +#include "canvas/visibility.h" #include "canvas/item.h" namespace ArdourCanvas { -class Fill : virtual public Item +class LIBCANVAS_API Fill : virtual public Item { public: Fill (Group *); diff --git a/libs/canvas/canvas/flag.h b/libs/canvas/canvas/flag.h index fe14a63d96..0975d9373e 100644 --- a/libs/canvas/canvas/flag.h +++ b/libs/canvas/canvas/flag.h @@ -17,6 +17,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +#include "canvas/visibility.h" #include "canvas/group.h" #include "canvas/types.h" @@ -26,7 +27,7 @@ class Text; class Line; class Rectangle; -class Flag : public Group +class LIBCANVAS_API Flag : public Group { public: Flag (Group *, Distance, Color, Color, Duple); diff --git a/libs/canvas/canvas/group.h b/libs/canvas/canvas/group.h index 12319c615e..b89f1467ba 100644 --- a/libs/canvas/canvas/group.h +++ b/libs/canvas/canvas/group.h @@ -22,13 +22,15 @@ #include <list> #include <vector> + +#include "canvas/visibility.h" #include "canvas/item.h" #include "canvas/types.h" #include "canvas/lookup_table.h" namespace ArdourCanvas { -class Group : public Item +class LIBCANVAS_API Group : public Item { public: explicit Group (Group *); diff --git a/libs/canvas/canvas/image.h b/libs/canvas/canvas/image.h index 6134bb63b5..d54edd3827 100644 --- a/libs/canvas/canvas/image.h +++ b/libs/canvas/canvas/image.h @@ -23,6 +23,7 @@ #include <boost/shared_ptr.hpp> #include <boost/shared_array.hpp> +#include "canvas/visibility.h" #include "canvas/item.h" typedef void (*ImageReleaseCallback)(uint8_t *d, void *arg); @@ -30,7 +31,7 @@ typedef void (*ImageReleaseCallback)(uint8_t *d, void *arg); namespace ArdourCanvas { -class Image : public Item +class LIBCANVAS_API Image : public Item { public: Image (Group *, Cairo::Format, int width, int height); diff --git a/libs/canvas/canvas/item.h b/libs/canvas/canvas/item.h index 4ec1202644..da061f5bfc 100644 --- a/libs/canvas/canvas/item.h +++ b/libs/canvas/canvas/item.h @@ -28,6 +28,7 @@ #include "pbd/signals.h" +#include "canvas/visibility.h" #include "canvas/types.h" namespace ArdourCanvas @@ -48,7 +49,7 @@ class Rect; * and all except the `root group' have a pointer to their parent group. */ -class Item +class LIBCANVAS_API Item { public: Item (Canvas *); @@ -241,7 +242,7 @@ private: bool _ignore_events; }; -extern std::ostream& operator<< (std::ostream&, const ArdourCanvas::Item&); +extern LIBCANVAS_API std::ostream& operator<< (std::ostream&, const ArdourCanvas::Item&); } diff --git a/libs/canvas/canvas/line.h b/libs/canvas/canvas/line.h index c22ecafc80..85b1d41e15 100644 --- a/libs/canvas/canvas/line.h +++ b/libs/canvas/canvas/line.h @@ -20,13 +20,14 @@ #ifndef __CANVAS_LINE_H__ #define __CANVAS_LINE_H__ +#include "canvas/visibility.h" #include "canvas/item.h" #include "canvas/outline.h" #include "canvas/poly_line.h" namespace ArdourCanvas { -class Line : virtual public Item, public Outline +class LIBCANVAS_API Line : virtual public Item, public Outline { public: Line (Group *); diff --git a/libs/canvas/canvas/line_set.h b/libs/canvas/canvas/line_set.h index 8fd01825df..a9b13651d9 100644 --- a/libs/canvas/canvas/line_set.h +++ b/libs/canvas/canvas/line_set.h @@ -17,11 +17,12 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +#include "canvas/visibility.h" #include "canvas/item.h" namespace ArdourCanvas { -class LineSet : public Item +class LIBCANVAS_API LineSet : public Item { public: enum Orientation { diff --git a/libs/canvas/canvas/lookup_table.h b/libs/canvas/canvas/lookup_table.h index c9a1265051..5be33c1bca 100644 --- a/libs/canvas/canvas/lookup_table.h +++ b/libs/canvas/canvas/lookup_table.h @@ -22,6 +22,8 @@ #include <vector> #include <boost/multi_array.hpp> + +#include "canvas/visibility.h" #include "canvas/types.h" class OptimizingLookupTableTest; @@ -31,7 +33,7 @@ namespace ArdourCanvas { class Item; class Group; -class LookupTable +class LIBCANVAS_API LookupTable { public: LookupTable (Group const &); @@ -46,7 +48,7 @@ protected: Group const & _group; }; -class DumbLookupTable : public LookupTable +class LIBCANVAS_API DumbLookupTable : public LookupTable { public: DumbLookupTable (Group const &); @@ -56,7 +58,7 @@ public: bool has_item_at_point (Duple const & point) const; }; -class OptimizingLookupTable : public LookupTable +class LIBCANVAS_API OptimizingLookupTable : public LookupTable { public: OptimizingLookupTable (Group const &, int); diff --git a/libs/canvas/canvas/outline.h b/libs/canvas/canvas/outline.h index c315da874c..9272f81385 100644 --- a/libs/canvas/canvas/outline.h +++ b/libs/canvas/canvas/outline.h @@ -21,12 +21,14 @@ #define __CANVAS_OUTLINE_H__ #include <stdint.h> + +#include "canvas/visibility.h" #include "canvas/types.h" #include "canvas/item.h" namespace ArdourCanvas { -class Outline : virtual public Item +class LIBCANVAS_API Outline : virtual public Item { public: Outline (Group *); diff --git a/libs/canvas/canvas/pixbuf.h b/libs/canvas/canvas/pixbuf.h index ed1be5fe5c..3974b560a9 100644 --- a/libs/canvas/canvas/pixbuf.h +++ b/libs/canvas/canvas/pixbuf.h @@ -22,6 +22,7 @@ #include <glibmm/refptr.h> +#include "canvas/visibility.h" #include "canvas/item.h" namespace Gdk { @@ -30,7 +31,7 @@ namespace Gdk { namespace ArdourCanvas { -class Pixbuf : public Item +class LIBCANVAS_API Pixbuf : public Item { public: Pixbuf (Group *); diff --git a/libs/canvas/canvas/poly_item.h b/libs/canvas/canvas/poly_item.h index 10e41e9ca6..4745d24ab9 100644 --- a/libs/canvas/canvas/poly_item.h +++ b/libs/canvas/canvas/poly_item.h @@ -20,12 +20,13 @@ #ifndef __CANVAS_POLY_ITEM_H__ #define __CANVAS_POLY_ITEM_H__ +#include "canvas/visibility.h" #include "canvas/item.h" #include "canvas/outline.h" namespace ArdourCanvas { -class PolyItem : virtual public Item, public Outline +class LIBCANVAS_API PolyItem : virtual public Item, public Outline { public: PolyItem (Group *); diff --git a/libs/canvas/canvas/poly_line.h b/libs/canvas/canvas/poly_line.h index 830e76bae2..72c20e0674 100644 --- a/libs/canvas/canvas/poly_line.h +++ b/libs/canvas/canvas/poly_line.h @@ -20,12 +20,13 @@ #ifndef __CANVAS_POLY_LINE_H__ #define __CANVAS_POLY_LINE_H__ +#include "canvas/visibility.h" #include "canvas/poly_item.h" #include "canvas/outline.h" namespace ArdourCanvas { -class PolyLine : public PolyItem +class LIBCANVAS_API PolyLine : public PolyItem { public: PolyLine (Group *); diff --git a/libs/canvas/canvas/polygon.h b/libs/canvas/canvas/polygon.h index 48eb494ae8..917122a9a2 100644 --- a/libs/canvas/canvas/polygon.h +++ b/libs/canvas/canvas/polygon.h @@ -20,13 +20,14 @@ #ifndef __CANVAS_POLYGON_H__ #define __CANVAS_POLYGON_H__ +#include "canvas/visibility.h" #include "canvas/poly_item.h" #include "canvas/outline.h" #include "canvas/fill.h" namespace ArdourCanvas { -class Polygon : public PolyItem, public Fill +class LIBCANVAS_API Polygon : public PolyItem, public Fill { public: Polygon (Group *); diff --git a/libs/canvas/canvas/rectangle.h b/libs/canvas/canvas/rectangle.h index f93324b39e..ff2ff994b7 100644 --- a/libs/canvas/canvas/rectangle.h +++ b/libs/canvas/canvas/rectangle.h @@ -20,6 +20,7 @@ #ifndef __CANVAS_RECTANGLE_H__ #define __CANVAS_RECTANGLE_H__ +#include "canvas/visibility.h" #include "canvas/item.h" #include "canvas/types.h" #include "canvas/outline.h" @@ -28,7 +29,7 @@ namespace ArdourCanvas { -class Rectangle : virtual public Item, public Outline, public Fill +class LIBCANVAS_API Rectangle : virtual public Item, public Outline, public Fill { public: Rectangle (Group *); diff --git a/libs/canvas/canvas/root_group.h b/libs/canvas/canvas/root_group.h index 74cfbac29f..70c3e5b90b 100644 --- a/libs/canvas/canvas/root_group.h +++ b/libs/canvas/canvas/root_group.h @@ -20,11 +20,12 @@ #ifndef __CANVAS_ROOT_GROUP_H__ #define __CANVAS_ROOT_GROUP_H__ -#include "group.h" +#include "canvas/visibility.h" +#include "canvas/group.h" namespace ArdourCanvas { -class RootGroup : public Group +class LIBCANVAS_API RootGroup : public Group { private: friend class Canvas; diff --git a/libs/canvas/canvas/text.h b/libs/canvas/canvas/text.h index 4431cb9a80..79384ade96 100644 --- a/libs/canvas/canvas/text.h +++ b/libs/canvas/canvas/text.h @@ -23,11 +23,12 @@ #include <pangomm/fontdescription.h> #include <pangomm/layout.h> +#include "canvas/visibility.h" #include "canvas/item.h" namespace ArdourCanvas { -class Text : public Item +class LIBCANVAS_API Text : public Item { public: Text (Group *); diff --git a/libs/canvas/canvas/types.h b/libs/canvas/canvas/types.h index 33bb92ca58..77c148f3a0 100644 --- a/libs/canvas/canvas/types.h +++ b/libs/canvas/canvas/types.h @@ -27,6 +27,8 @@ #include <cairomm/refptr.h> +#include "canvas/visibility.h" + namespace Cairo { struct Context; } @@ -38,9 +40,9 @@ typedef double Coord; typedef double Distance; typedef uint32_t Color; -extern Coord const COORD_MAX; +extern LIBCANVAS_API Coord const COORD_MAX; -struct Duple +struct LIBCANVAS_API Duple { Duple () : x (0) @@ -59,14 +61,14 @@ struct Duple }; -extern Duple operator- (Duple const &); -extern Duple operator+ (Duple const &, Duple const &); -extern bool operator== (Duple const &, Duple const &); -extern Duple operator- (Duple const &, Duple const &); -extern Duple operator/ (Duple const &, double); -extern std::ostream & operator<< (std::ostream &, Duple const &); +extern LIBCANVAS_API Duple operator- (Duple const &); +extern LIBCANVAS_API Duple operator+ (Duple const &, Duple const &); +extern LIBCANVAS_API bool operator== (Duple const &, Duple const &); +extern LIBCANVAS_API Duple operator- (Duple const &, Duple const &); +extern LIBCANVAS_API Duple operator/ (Duple const &, double); +extern LIBCANVAS_API std::ostream & operator<< (std::ostream &, Duple const &); -struct Rect +struct LIBCANVAS_API Rect { Rect () : x0 (0) @@ -106,7 +108,7 @@ struct Rect } }; -extern std::ostream & operator<< (std::ostream &, Rect const &); +extern LIBCANVAS_API std::ostream & operator<< (std::ostream &, Rect const &); typedef std::vector<Duple> Points; diff --git a/libs/canvas/canvas/utils.h b/libs/canvas/canvas/utils.h index a3210543a6..cd9d884475 100644 --- a/libs/canvas/canvas/utils.h +++ b/libs/canvas/canvas/utils.h @@ -17,18 +17,19 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +#include "canvas/visibility.h" #include "canvas/types.h" namespace ArdourCanvas { - extern void color_to_hsv (Color color, double& h, double& s, double& v); - extern Color hsv_to_color (double h, double s, double v, double a); + extern LIBCANVAS_API void color_to_hsv (Color color, double& h, double& s, double& v); + extern LIBCANVAS_API Color hsv_to_color (double h, double s, double v, double a); - extern void color_to_rgba (Color, double& r, double& g, double& b, double& a); - extern Color rgba_to_color (double r, double g, double b, double a); + extern LIBCANVAS_API void color_to_rgba (Color, double& r, double& g, double& b, double& a); + extern LIBCANVAS_API Color rgba_to_color (double r, double g, double b, double a); - extern void set_source_rgba (Cairo::RefPtr<Cairo::Context>, Color); + extern LIBCANVAS_API void set_source_rgba (Cairo::RefPtr<Cairo::Context>, Color); - Distance distance_to_segment_squared (Duple const & p, Duple const & p1, Duple const & p2, double& t, Duple& at); + Distance LIBCANVAS_API distance_to_segment_squared (Duple const & p, Duple const & p1, Duple const & p2, double& t, Duple& at); } diff --git a/libs/canvas/canvas/visibility.h b/libs/canvas/canvas/visibility.h new file mode 100644 index 0000000000..e44fe86705 --- /dev/null +++ b/libs/canvas/canvas/visibility.h @@ -0,0 +1,45 @@ +/* + Copyright (C) 2013 Paul Davis + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#ifndef __libcanvas_visibility_h__ +#define __libcanvas_visibility_h__ + +#if defined(COMPILER_MSVC) + #define LIBCANVAS_DLL_IMPORT __declspec(dllimport) + #define LIBCANVAS_DLL_EXPORT __declspec(dllexport) + #define LIBCANVAS_DLL_LOCAL +#else + #define LIBCANVAS_DLL_IMPORT __attribute__ ((visibility ("default"))) + #define LIBCANVAS_DLL_EXPORT __attribute__ ((visibility ("default"))) + #define LIBCANVAS_DLL_LOCAL __attribute__ ((visibility ("hidden"))) +#endif + +#ifdef LIBCANVAS_STATIC // libcanvas is not a DLL +#define LIBCANVAS_API +#define LIBCANVAS_LOCAL +#else + #ifdef LIBCANVAS_DLL_EXPORTS // defined if we are building the libcanvas DLL (instead of using it) + #define LIBCANVAS_API LIBCANVAS_DLL_EXPORT + #else + #define LIBCANVAS_API LIBCANVAS_DLL_IMPORT + #endif + #define LIBCANVAS_LOCAL LIBCANVAS_DLL_LOCAL +#endif + +#endif /* __libcanvas_visibility_h__ */ diff --git a/libs/canvas/canvas/wave_view.h b/libs/canvas/canvas/wave_view.h index 05bd00f5ad..3272797e5a 100644 --- a/libs/canvas/canvas/wave_view.h +++ b/libs/canvas/canvas/wave_view.h @@ -28,6 +28,7 @@ #include <glibmm/refptr.h> +#include "canvas/visibility.h" #include "canvas/item.h" #include "canvas/fill.h" #include "canvas/outline.h" @@ -44,7 +45,7 @@ class WaveViewTest; namespace ArdourCanvas { -class WaveView : virtual public Item, public Outline, public Fill +class LIBCANVAS_API WaveView : virtual public Item, public Outline, public Fill { public: enum Shape { diff --git a/libs/canvas/wscript b/libs/canvas/wscript index d4b9ad4177..3052361feb 100644 --- a/libs/canvas/wscript +++ b/libs/canvas/wscript @@ -61,12 +61,18 @@ def options(opt): def configure(conf): conf.load ('compiler_cxx') autowaf.configure(conf) + autowaf.build_version_files(path_prefix+'canvas/version.h', path_prefix+'version.cc', + 'libcanvas', conf.env['MAJOR'], conf.env['MINOR'], 0, + 'LIBCANVAS_API', 'canvas/visibility.h') autowaf.check_pkg(conf, 'cairomm-1.0', uselib_store='CAIROMM', atleast_version='1.8.4') def build(bld): # Library if bld.is_defined ('INTERNAL_SHARED_LIBS'): obj = bld.shlib(features = 'cxx cxxshlib', source=canvas_sources) + obj.defines = [ 'LIBCANVAS_DLL_EXPORTS=1' ] + obj.cflags = [ '-fvisibility=hidden' ] + obj.cxxflags = [ '-fvisibility=hidden' ] else: obj = bld.stlib(features = 'cxx cxxstlib', source=canvas_sources) obj.cxxflags = [ '-fPIC' ] |