/* * Copyright 2016-2023 by Bill Spitzak and others. * * This library is free software. Distribution and use rights are outlined in * the file "COPYING" which should have been included with this file. If this * file is missing or damaged, see the license at: * * https://www.fltk.org/COPYING.php * * Please see the following page on how to report bugs and issues: * * https://www.fltk.org/bugs.php */ #ifndef Fl_Platform_Types_H #define Fl_Platform_Types_H /** \file Definitions of platform-dependent types. The exact nature of these types varies with the platform. Therefore, portable FLTK applications should not assume these types have a specific size, or that they are pointers. */ #ifdef FL_DOXYGEN /** An integral type large enough to store a pointer or a long value. A pointer value can be safely cast to fl_intptr_t, and later cast back to its initial pointer type without change to the pointer value. A variable of type fl_intptr_t can also store a long int value. */ typedef opaque fl_intptr_t; /** An unsigned integral type large enough to store a pointer or an unsigned long value. A pointer value can be safely cast to fl_uintptr_t, and later cast back to its initial pointer type without change to the pointer value. A variable of type fl_uintptr_t can also store an unsigned long int value. */ typedef opaque fl_uintptr_t; /** Platform-specific value representing an offscreen drawing buffer. \note This value can be safely cast to Pixmap on X11. */ typedef opaque Fl_Offscreen; /** Pointer to a platform-specific structure representing a collection of rectangles. \note This pointer can be safely cast to Region as defined by X11. */ typedef struct opaque *Fl_Region; typedef opaque FL_SOCKET; /**< socket or file descriptor */ /** Pointer to a platform-specific structure representing the window's OpenGL rendering context. \note This pointer can be safely cast to GLXContext on X11. */ typedef struct opaque *GLContext; /** Platform-specific point in time, used for delta time calculation. \note This type may be a struct. sizeof(Fl_Timestamp) may be different on different platforms. Fl_Timestamp may change with future ABI changes. */ typedef opaque Fl_Timestamp; # define FL_COMMAND opaque /**< An alias for FL_CTRL on X11 */ # define FL_CONTROL opaque /**< An alias for FL_META on X11 */ #else /* FL_DOXYGEN */ #ifndef FL_PLATFORM_TYPES_H #define FL_PLATFORM_TYPES_H #include #include // for time_t /* Platform-dependent types are defined here. These types must be defined by any platform: FL_SOCKET, struct dirent, fl_intptr_t, fl_uintptr_t NOTE: *FIXME* AlbrechtS 13 Apr 2016 (concerning FL_SOCKET) ---------------------------------------------------------- The Fl::add_fd() API is partially inconsistent because some of the methods explicitly use 'int', but the callback typedefs use FL_SOCKET. With the definition of FL_SOCKET below we can have different data sizes and different signedness of socket numbers on *some* platforms. */ typedef long fl_intptr_t; typedef unsigned long fl_uintptr_t; typedef void *GLContext; typedef void *Fl_Region; typedef fl_uintptr_t Fl_Offscreen; #include typedef int FL_SOCKET; #include extern FL_EXPORT int fl_command_modifier(); extern FL_EXPORT int fl_control_modifier(); # define FL_COMMAND fl_command_modifier() # define FL_CONTROL fl_control_modifier() #endif /* FL_PLATFORM_TYPES_H */ /* This is currently the same for all platforms but may change in the future */ struct Fl_Timestamp_t { time_t sec; int usec; }; typedef struct Fl_Timestamp_t Fl_Timestamp; #endif /* FL_DOXYGEN */ #endif /* Fl_Platform_Types_H */