2015-05-14 08:43:25 -05:00
// 6 april 2015
2016-12-03 10:31:11 -06:00
2017-01-20 02:24:06 -06:00
// this must go outside other extern "C" blocks, otherwise we'll get double-declaration errors
# include "utf.h"
2015-11-17 18:18:55 -06:00
# ifdef __cplusplus
extern " C " {
# endif
2016-05-13 19:20:15 -05:00
# include <stdarg.h>
2017-01-17 12:05:40 -06:00
# include <string.h>
2016-04-24 14:46:29 -05:00
# include "controlsigs.h"
2015-05-14 08:43:25 -05:00
extern uiInitOptions options ;
extern void * uiAlloc ( size_t , const char * ) ;
# define uiNew(T) ((T *) uiAlloc(sizeof (T), #T))
extern void * uiRealloc ( void * , size_t , const char * ) ;
extern void uiFree ( void * ) ;
2016-05-13 22:29:41 -05:00
// ugh, this was only introduced in MSVC 2015...
# ifdef _MSC_VER
# define __func__ __FUNCTION__
# endif
2016-05-13 19:20:15 -05:00
extern void realbug ( const char * file , const char * line , const char * func , const char * prefix , const char * format , va_list ap ) ;
2016-05-13 19:14:46 -05:00
# define _ns2(s) #s
# define _ns(s) _ns2(s)
2016-05-13 17:27:08 -05:00
extern void _implbug ( const char * file , const char * line , const char * func , const char * format , . . . ) ;
2016-05-13 19:14:46 -05:00
# define implbug(...) _implbug(__FILE__, _ns(__LINE__), __func__, __VA_ARGS__)
2016-05-13 17:27:08 -05:00
extern void _userbug ( const char * file , const char * line , const char * func , const char * format , . . . ) ;
2016-05-13 20:00:12 -05:00
# define userbug(...) _userbug(__FILE__, _ns(__LINE__), __func__, __VA_ARGS__)
2015-05-14 08:43:25 -05:00
2016-04-24 15:14:19 -05:00
// control.c
2016-04-24 16:38:48 -05:00
extern uiControl * newControl ( size_t size , uint32_t OSsig , uint32_t typesig , const char * typenamestr ) ;
2016-04-24 15:14:19 -05:00
2015-05-14 08:43:25 -05:00
// shouldquit.c
2015-05-29 13:56:11 -05:00
extern int shouldQuit ( void ) ;
2015-10-08 17:24:09 -05:00
// areaevents.c
typedef struct clickCounter clickCounter ;
// you should call Reset() to zero-initialize a new instance
// it doesn't matter that all the non-count fields are zero: the first click will fail the curButton test straightaway, so it'll return 1 and set the rest of the structure accordingly
struct clickCounter {
2016-06-13 20:37:50 -05:00
int curButton ;
int rectX0 ;
int rectY0 ;
int rectX1 ;
int rectY1 ;
2015-10-08 17:24:09 -05:00
uintptr_t prevTime ;
2016-06-13 20:37:50 -05:00
int count ;
2015-10-08 17:24:09 -05:00
} ;
2016-06-13 20:38:48 -05:00
int clickCounterClick ( clickCounter * c , int button , int x , int y , uintptr_t time , uintptr_t maxTime , int32_t xdist , int32_t ydist ) ;
2015-10-08 17:24:09 -05:00
extern void clickCounterReset ( clickCounter * ) ;
extern int fromScancode ( uintptr_t , uiAreaKeyEvent * ) ;
2015-10-11 10:13:01 -05:00
// matrix.c
2015-10-12 06:58:07 -05:00
extern void fallbackSkew ( uiDrawMatrix * , double , double , double , double ) ;
2015-10-12 00:43:12 -05:00
extern void scaleCenter ( double , double , double * , double * ) ;
2015-10-11 11:36:48 -05:00
extern void fallbackTransformSize ( uiDrawMatrix * , double * , double * ) ;
2015-11-17 18:18:55 -06:00
2016-12-03 17:34:06 -06:00
// for attrstr.c
struct graphemes {
size_t len ;
size_t * pointsToGraphemes ;
size_t * graphemesToPoints ;
} ;
extern int graphemesTakesUTF16 ( void ) ;
extern struct graphemes * graphemes ( void * s , size_t len ) ;
2017-01-07 19:09:44 -06:00
// TODO split these into a separate header file?
2017-01-02 22:53:31 -06:00
// attrstr.c
extern const uint16_t * attrstrUTF16 ( uiAttributedString * s ) ;
2017-01-17 12:05:40 -06:00
extern size_t attrstrUTF16Len ( uiAttributedString * s ) ;
2017-01-07 19:09:44 -06:00
extern size_t attrstrUTF8ToUTF16 ( uiAttributedString * s , size_t n ) ;
2017-02-05 19:42:52 -06:00
extern size_t * attrstrCopyUTF8ToUTF16 ( uiAttributedString * s , size_t * n ) ;
2017-01-07 19:09:44 -06:00
extern size_t * attrstrCopyUTF16ToUTF8 ( uiAttributedString * s , size_t * n ) ;
2017-01-02 22:53:31 -06:00
2016-12-22 23:31:11 -06:00
// attrlist.c
struct attrlist ;
extern void attrlistInsertAttribute ( struct attrlist * alist , uiAttribute type , uintptr_t val , size_t start , size_t end ) ;
extern void attrlistInsertCharactersUnattributed ( struct attrlist * alist , size_t start , size_t count ) ;
extern void attrlistInsertCharactersExtendingAttributes ( struct attrlist * alist , size_t start , size_t count ) ;
extern void attrlistRemoveAttribute ( struct attrlist * alist , uiAttribute type , size_t start , size_t end ) ;
extern void attrlistRemoveAttributes ( struct attrlist * alist , size_t start , size_t end ) ;
2017-01-17 12:05:40 -06:00
extern void attrlistRemoveCharacters ( struct attrlist * alist , size_t start , size_t end ) ;
extern void attrlistForEach ( struct attrlist * alist , uiAttributedString * s , uiAttributedStringForEachAttributeFunc f , void * data ) ;
2016-12-22 23:31:11 -06:00
// TODO move these to the top like everythng else
extern struct attrlist * attrlistNew ( void ) ;
extern void attrlistFree ( struct attrlist * alist ) ;
2015-11-17 18:18:55 -06:00
# ifdef __cplusplus
}
# endif