Skip to content

Commit

Permalink
Add FL_EXPORT to several classes to fix MS VC++ dll builds (STR #2632).
Browse files Browse the repository at this point in the history
Remove FL_EXPORT from fl_clip_region() since this is an inline function
on all platforms (and issued a warning when building fltkdll with MS VC++).


git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@8726 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
  • Loading branch information
Albrecht Schlosser committed May 23, 2011
1 parent ea020f0 commit 0c8f264
Show file tree
Hide file tree
Showing 10 changed files with 153 additions and 27 deletions.
13 changes: 9 additions & 4 deletions FL/Fl_Float_Input.H
Expand Up @@ -3,7 +3,7 @@
//
// Floating point input header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2010 by Bill Spitzak and others.
// Copyright 1998-2011 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
Expand Down Expand Up @@ -39,15 +39,20 @@
that only allows the user to type floating point numbers (sign,
digits, decimal point, more digits, 'E' or 'e', sign, digits).
*/
class Fl_Float_Input : public Fl_Input { // don't use FL_EXPORT here !
class FL_EXPORT Fl_Float_Input : public Fl_Input {
public:
/**
Creates a new Fl_Float_Input widget using the given position,
Creates a new Fl_Float_Input widget using the given position,
size, and label string. The default boxtype is FL_DOWN_BOX.
<P> Inherited destructor destroys the widget and any value associated with it
Inherited destructor destroys the widget and any value associated with it.
*/
#if defined(FL_DLL) // implementation in src/Fl_Input.cxx
Fl_Float_Input(int X,int Y,int W,int H,const char *l = 0);
#else
Fl_Float_Input(int X,int Y,int W,int H,const char *l = 0)
: Fl_Input(X,Y,W,H,l) {type(FL_FLOAT_INPUT);}
#endif
};

#endif
Expand Down
22 changes: 18 additions & 4 deletions FL/Fl_Hor_Slider.H
Expand Up @@ -3,7 +3,7 @@
//
// Horizontal slider header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2010 by Bill Spitzak and others.
// Copyright 1998-2011 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
Expand Down Expand Up @@ -33,10 +33,24 @@

#include "Fl_Slider.H"

class Fl_Hor_Slider : public Fl_Slider {
/** Horizontal Slider class.
\see class Fl_Slider.
*/
class FL_EXPORT Fl_Hor_Slider : public Fl_Slider {
public:
Fl_Hor_Slider(int X,int Y,int W,int H,const char *l=0)
: Fl_Slider(X,Y,W,H,l) {type(FL_HOR_SLIDER);}

/**
Creates a new Fl_Hor_Slider widget using the given position,
size, and label string.
*/

#if defined(FL_DLL) // implementation in src/Fl_Slider.cxx
Fl_Hor_Slider(int X,int Y,int W,int H,const char *l=0);
#else
Fl_Hor_Slider(int X,int Y,int W,int H,const char *l=0)
: Fl_Slider(X,Y,W,H,l) { type(FL_HOR_SLIDER); }
#endif
};

#endif
Expand Down
12 changes: 9 additions & 3 deletions FL/Fl_Int_Input.H
Expand Up @@ -34,18 +34,24 @@
#include "Fl_Input.H"

/**
The Fl_Int_Input class is a subclass of Fl_Input
that only allows the user to type decimal digits (or hex numbers of the form 0xaef).
The Fl_Int_Input class is a subclass of Fl_Input that only allows
the user to type decimal digits (or hex numbers of the form 0xaef).
*/
class FL_EXPORT Fl_Int_Input : public Fl_Input {
public:
/**
Creates a new Fl_Int_Input widget using the given position,
size, and label string. The default boxtype is FL_DOWN_BOX.
<P>Inherited destructor Destroys the widget and any value associated with it.
Inherited destructor destroys the widget and any value associated with it.
*/

#if defined(FL_DLL) // implementation in src/Fl_Input.cxx
Fl_Int_Input(int X,int Y,int W,int H,const char *l = 0);
#else
Fl_Int_Input(int X,int Y,int W,int H,const char *l = 0)
: Fl_Input(X,Y,W,H,l) {type(FL_INT_INPUT);}
#endif
};

#endif
Expand Down
9 changes: 7 additions & 2 deletions FL/Fl_Multiline_Input.H
Expand Up @@ -3,7 +3,7 @@
//
// Multiline input header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2010 by Bill Spitzak and others.
// Copyright 1998-2011 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
Expand Down Expand Up @@ -57,10 +57,15 @@ public:
/**
Creates a new Fl_Multiline_Input widget using the given
position, size, and label string. The default boxtype is FL_DOWN_BOX.
<P>Inherited destructor destroys the widget and any value associated with it.
Inherited destructor destroys the widget and any value associated with it.
*/
#if defined(FL_DLL) // implementation in src/Fl_Input.cxx
Fl_Multiline_Input(int X,int Y,int W,int H,const char *l = 0);
#else
Fl_Multiline_Input(int X,int Y,int W,int H,const char *l = 0)
: Fl_Input(X,Y,W,H,l) {type(FL_MULTILINE_INPUT);}
#endif
};

#endif
Expand Down
14 changes: 10 additions & 4 deletions FL/Fl_Multiline_Output.H
Expand Up @@ -3,7 +3,7 @@
//
// Multi line output header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2010 by Bill Spitzak and others.
// Copyright 1998-2011 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
Expand Down Expand Up @@ -48,13 +48,19 @@
*/
class FL_EXPORT Fl_Multiline_Output : public Fl_Output {
public:

/**
Creates a new Fl_Multiline_Output widget using the given
position, size, and label string. The default boxtype is FL_DOWN_BOX
<P> Inherited destructor destroys the widget and any value associated with it.
Creates a new Fl_Multiline_Output widget using the given position,
size, and label string. The default boxtype is FL_DOWN_BOX.
Inherited destructor destroys the widget and any value associated with it.
*/
#if defined(FL_DLL) // implementation in src/Fl_Input.cxx
Fl_Multiline_Output(int X,int Y,int W,int H,const char *l = 0);
#else
Fl_Multiline_Output(int X,int Y,int W,int H,const char *l = 0)
: Fl_Output(X,Y,W,H,l) {type(FL_MULTILINE_OUTPUT);}
#endif
};

#endif
Expand Down
9 changes: 7 additions & 2 deletions FL/Fl_Output.H
Expand Up @@ -53,16 +53,21 @@
and \\nnn notation for unprintable characters with the high bit set. It
assumes the font can draw any characters in the ISO-Latin1 character set.
*/
class Fl_Output : public Fl_Input { // don't use FL_EXPORT here !
class FL_EXPORT Fl_Output : public Fl_Input {
public:
/**
Creates a new Fl_Output widget using the given position,
size, and label string. The default boxtype is FL_DOWN_BOX.
Inherited destrucor destroys the widget and any value associated with it.
Inherited destructor destroys the widget and any value associated with it.
*/

#if defined(FL_DLL) // implementation in src/Fl_Input.cxx
Fl_Output(int X,int Y,int W,int H, const char *l = 0);
#else
Fl_Output(int X,int Y,int W,int H, const char *l = 0)
: Fl_Input(X, Y, W, H, l) {type(FL_NORMAL_OUTPUT);}
#endif
};

#endif
Expand Down
18 changes: 13 additions & 5 deletions FL/Fl_Secret_Input.H
Expand Up @@ -3,7 +3,7 @@
//
// Secret input header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2010 by Bill Spitzak and others.
// Copyright 1998-2011 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
Expand Down Expand Up @@ -34,19 +34,27 @@
#include "Fl_Input.H"

/**
The Fl_Secret_Input class is a subclass of Fl_Input
that displays its input as a string of asterisks. This subclass is
usually used to receive passwords and other "secret" information.
The Fl_Secret_Input class is a subclass of Fl_Input that displays its
input as a string of placeholders. Depending on the platform this
placeholder is either the asterisk ('*') or the Unicode bullet
character (U+2022).
This subclass is usually used to receive passwords and other "secret" information.
*/
class FL_EXPORT Fl_Secret_Input : public Fl_Input {
public:
/**
Creates a new Fl_Secret_Input widget using the given
position, size, and label string. The default boxtype is FL_DOWN_BOX.
<P>Inherited destructor destroys the widget and any value associated with it.
Inherited destructor destroys the widget and any value associated with it.
*/
#if defined(FL_DLL) // implementation in src/Fl_Input.cxx
Fl_Secret_Input(int X,int Y,int W,int H,const char *l = 0);
#else
Fl_Secret_Input(int X,int Y,int W,int H,const char *l = 0)
: Fl_Input(X,Y,W,H,l) {type(FL_SECRET_INPUT);}
#endif
};

#endif
Expand Down
2 changes: 1 addition & 1 deletion FL/win32.H
Expand Up @@ -110,7 +110,7 @@ FL_EXPORT Window fl_xid_(const Fl_Window* w);
#endif // FL_LIBRARY || FL_INTERNALS

FL_EXPORT Fl_Window* fl_find(Window xid);
FL_EXPORT void fl_clip_region(Fl_Region);
void fl_clip_region(Fl_Region);

// most recent fl_color() or fl_rgbcolor() points at one of these:
extern FL_EXPORT struct Fl_XMap {
Expand Down
56 changes: 55 additions & 1 deletion src/Fl_Input.cxx
Expand Up @@ -3,7 +3,7 @@
//
// Input widget for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2010 by Bill Spitzak and others.
// Copyright 1998-2011 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
Expand Down Expand Up @@ -40,6 +40,15 @@
#include <FL/fl_ask.H>
#include "flstring.h"

#if defined(FL_DLL) // really needed for c'tors for MS VC++ only
#include <FL/Fl_Float_Input.H>
#include <FL/Fl_Int_Input.H>
#include <FL/Fl_Multiline_Input.H>
#include <FL/Fl_Output.H>
#include <FL/Fl_Multiline_Output.H>
#include <FL/Fl_Secret_Input.H>
#endif

#ifdef HAVE_LOCALE_H
# include <locale.h>
#endif
Expand Down Expand Up @@ -763,6 +772,51 @@ Fl_Input::Fl_Input(int X, int Y, int W, int H, const char *l)
: Fl_Input_(X, Y, W, H, l) {
}

/*
The following constructors must not be in the header file(s) if we
build a shared object (DLL). Instead they are defined here to force
the constructor (and default destructor as well) to be defined in
the DLL and exported (STR #2632).
Note: if you change any of them, do the same changes in the specific
header file as well. This redundant definition was chosen to enable
inline constructors in the header files (for static linking) as well
as those here for dynamic linking (Windows DLL).
*/
#if defined(FL_DLL)

Fl_Float_Input::Fl_Float_Input(int X,int Y,int W,int H,const char *l)
: Fl_Input(X,Y,W,H,l) {
type(FL_FLOAT_INPUT);
}

Fl_Int_Input::Fl_Int_Input(int X,int Y,int W,int H,const char *l)
: Fl_Input(X,Y,W,H,l) {
type(FL_INT_INPUT);
}

Fl_Multiline_Input::Fl_Multiline_Input(int X,int Y,int W,int H,const char *l)
: Fl_Input(X,Y,W,H,l) {
type(FL_MULTILINE_INPUT);
}

Fl_Output::Fl_Output(int X,int Y,int W,int H, const char *l)
: Fl_Input(X, Y, W, H, l) {
type(FL_NORMAL_OUTPUT);
}

Fl_Multiline_Output::Fl_Multiline_Output(int X,int Y,int W,int H,const char *l)
: Fl_Output(X,Y,W,H,l) {
type(FL_MULTILINE_OUTPUT);
}

Fl_Secret_Input::Fl_Secret_Input(int X,int Y,int W,int H,const char *l)
: Fl_Input(X,Y,W,H,l) {
type(FL_SECRET_INPUT);
}

#endif // FL_DLL

//
// End of "$Id$".
//
25 changes: 24 additions & 1 deletion src/Fl_Slider.cxx
Expand Up @@ -3,7 +3,7 @@
//
// Slider widget for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2010 by Bill Spitzak and others.
// Copyright 1998-2011 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
Expand Down Expand Up @@ -31,6 +31,10 @@
#include <math.h>
#include "flstring.h"

#if defined(FL_DLL) // really needed for c'tors for MS VC++ only
#include <FL/Fl_Hor_Slider.H>
#endif

void Fl_Slider::_Fl_Slider() {
slider_size_ = 0;
slider_ = 0; // FL_UP_BOX;
Expand Down Expand Up @@ -364,6 +368,25 @@ int Fl_Slider::handle(int event) {
h()-Fl::box_dh(box()));
}

/*
The following constructor must not be in the header file if we
build a shared object (DLL). Instead it is defined here to force
the constructor (and default destructor as well) to be defined
in the DLL and exported (STR #2632).
Note: if you the ctor here, do the same changes in the specific
header file as well. This redundant definition was chosen to enable
inline constructors in the header files (for static linking) as well
as the one here for dynamic linking (Windows DLL).
*/

#if defined(FL_DLL)

Fl_Hor_Slider::Fl_Hor_Slider(int X,int Y,int W,int H,const char *l)
: Fl_Slider(X,Y,W,H,l) {type(FL_HOR_SLIDER);}

#endif // FL_DLL

//
// End of "$Id$".
//

0 comments on commit 0c8f264

Please sign in to comment.