libui-ng
A portable GUI library for C
ui.h
Go to the documentation of this file.
1// 6 april 2015
2
3// TODO add a uiVerifyControlType() function that can be used by control implementations to verify controls
4
5// TODOs
6// - make getters that return whether something exists accept a NULL pointer to discard the value (and thus only return that the thing exists?)
7// - const-correct everything
8// - normalize documentation between typedefs and structs
9
20#ifndef __LIBUI_UI_H__
21#define __LIBUI_UI_H__
22
23#include <stddef.h>
24#include <stdint.h>
25
26#ifdef __cplusplus
27extern "C" {
28#endif
29
30// this macro is defined by the build system
31#ifdef libui_EXPORTS
32#ifdef _WIN32
33#define _UI_EXTERN __declspec(dllexport) extern
34#else
35#define _UI_EXTERN __attribute__((visibility("default"))) extern
36#endif
37#else
38// TODO add __declspec(dllimport) on windows, but only if not static
39#define _UI_EXTERN extern
40#endif
41
42// C++ is really really really really really really dumb about enums, so screw that and just make them anonymous
43// This has the advantage of being ABI-able should we ever need an ABI...
44#define _UI_ENUM(s) typedef unsigned int s; enum
45
46// This constant is provided because M_PI is nonstandard.
47// This comes from Go's math.Pi, which in turn comes from http://oeis.org/A000796.
48#define uiPi 3.14159265358979323846264338327950288419716939937510582097494459
49
50// TODO uiBool?
51
52// uiForEach represents the return value from one of libui's various ForEach functions.
56};
57
59
61 size_t Size;
62};
63
69_UI_EXTERN const char *uiVersion(void);
70
71_UI_EXTERN const char *uiInit(uiInitOptions *options);
73_UI_EXTERN void uiFreeInitError(const char *err);
74
75_UI_EXTERN void uiMain(void);
77_UI_EXTERN int uiMainStep(int wait);
78_UI_EXTERN void uiQuit(void);
79
80_UI_EXTERN void uiQueueMain(void (*f)(void *data), void *data);
81
82// uiTimer() must be called on the main UI thread after uiInit() and before uiUninit().
83// milliseconds must be greater than 0, and f must not be NULL.
84// Timer callbacks run on the main UI thread. Return 0 from f to stop the timer;
85// return non-zero to keep it running. uiUninit() cancels any active timers.
86// Timer timing, including granularity and the first tick, is OS-defined.
87// uiQueueMain() may be called from other threads. To quit from another thread,
88// queue uiQuit() with uiQueueMain() instead of calling uiQuit() directly.
89_UI_EXTERN void uiTimer(int milliseconds, int (*f)(void *data), void *data);
90
91_UI_EXTERN void uiOnShouldQuit(int (*f)(void *data), void *data);
92
93
105_UI_EXTERN void uiFreeText(char *text);
106
107
113typedef struct uiControl uiControl;
114struct uiControl {
115 uint32_t Signature;
116 uint32_t OSSignature;
118 void (*Destroy)(uiControl *);
119 uintptr_t (*Handle)(uiControl *);
120 uiControl *(*Parent)(uiControl *);
124 void (*Show)(uiControl *);
125 void (*Hide)(uiControl *);
127 void (*Enable)(uiControl *);
128 void (*Disable)(uiControl *);
129};
130// TODO add argument names to all arguments
131#define uiControl(this) ((uiControl *) (this))
132
149
165 void (*f)(uiControl *c, void *data), void *data);
166
175
184
194
203
212
220
229
240
248
256
277_UI_EXTERN void uiControlSetMinimumSize(uiControl *c, int width, int height);
278
288_UI_EXTERN uiControl *uiAllocControl(size_t n, uint32_t OSsig, uint32_t typesig, const char *typenamestr);
289
299
309
322
323// TODO Move this to private API? According to old/new.md this should be used by toplevel controls.
325
326
342typedef struct uiWindow uiWindow;
343#define uiWindow(this) ((uiWindow *) (this))
344
355
366_UI_EXTERN void uiWindowSetTitle(uiWindow *w, const char *title);
367
379_UI_EXTERN void uiWindowPosition(uiWindow *w, int *x, int *y);
380
393
408 void (*f)(uiWindow *sender, void *senderData), void *data);
409
419_UI_EXTERN void uiWindowContentSize(uiWindow *w, int *width, int *height);
420
431_UI_EXTERN void uiWindowSetContentSize(uiWindow *w, int width, int height);
432
441
451
466 void (*f)(uiWindow *sender, void *senderData), void *data);
467
484 int (*f)(uiWindow *sender, void *senderData), void *data);
485
499 void (*f)(uiWindow *sender, void *senderData), void *data);
500
509
518
528
537
546
557
566
576
589_UI_EXTERN uiWindow *uiNewWindow(const char *title, int width, int height, int hasMenubar);
590
591
599typedef struct uiButton uiButton;
600#define uiButton(this) ((uiButton *) (this))
601
612
622_UI_EXTERN void uiButtonSetText(uiButton *b, const char *text);
623
637 void (*f)(uiButton *sender, void *senderData), void *data);
638
648_UI_EXTERN uiButton *uiNewButton(const char *text);
649
650
663typedef struct uiBox uiBox;
664#define uiBox(this) ((uiBox *) (this))
665
677_UI_EXTERN void uiBoxAppend(uiBox *b, uiControl *child, int stretchy);
678
687
696_UI_EXTERN void uiBoxDelete(uiBox *b, int index);
697
708
719_UI_EXTERN void uiBoxSetPadded(uiBox *b, int padded);
720
730
740
741
749typedef struct uiCheckbox uiCheckbox;
750#define uiCheckbox(this) ((uiCheckbox *) (this))
751
762
772_UI_EXTERN void uiCheckboxSetText(uiCheckbox *c, const char *text);
773
788 void (*f)(uiCheckbox *sender, void *senderData), void *data);
789
798
807
818
819
827typedef struct uiEntry uiEntry;
828#define uiEntry(this) ((uiEntry *) (this))
829
840
850_UI_EXTERN void uiEntrySetText(uiEntry *e, const char *text);
851
865 void (*f)(uiEntry *sender, void *senderData), void *data);
866
875
883_UI_EXTERN void uiEntrySetReadOnly(uiEntry *e, int readonly);
884
892
902
913
914
922typedef struct uiLabel uiLabel;
923#define uiLabel(this) ((uiLabel *) (this))
924
935
945_UI_EXTERN void uiLabelSetText(uiLabel *l, const char *text);
946
956_UI_EXTERN uiLabel *uiNewLabel(const char *text);
957
958
969typedef struct uiTab uiTab;
970#define uiTab(this) ((uiTab *) (this))
971
980
991
1006 void (*f)(uiTab *sender, void *senderData), void *data);
1007
1018_UI_EXTERN void uiTabAppend(uiTab *t, const char *name, uiControl *c);
1019
1031_UI_EXTERN void uiTabInsertAt(uiTab *t, const char *name, int index, uiControl *c);
1032
1041_UI_EXTERN void uiTabDelete(uiTab *t, int index);
1042
1051
1060_UI_EXTERN int uiTabMargined(uiTab *t, int index);
1061
1072_UI_EXTERN void uiTabSetMargined(uiTab *t, int index, int margined);
1073
1081
1082
1096typedef struct uiGroup uiGroup;
1097#define uiGroup(this) ((uiGroup *) (this))
1098
1109
1119_UI_EXTERN void uiGroupSetTitle(uiGroup *g, const char *title);
1120
1129
1138
1149
1159_UI_EXTERN uiGroup *uiNewGroup(const char *title);
1160
1161
1177typedef struct uiSpinbox uiSpinbox;
1178#define uiSpinbox(this) ((uiSpinbox *) (this))
1179
1188
1198
1213 void (*f)(uiSpinbox *sender, void *senderData), void *data);
1214
1230
1231
1246typedef struct uiSlider uiSlider;
1247#define uiSlider(this) ((uiSlider *) (this))
1248
1257
1266
1275
1284
1299 void (*f)(uiSlider *sender, void *senderData), void *data);
1300
1314 void (*f)(uiSlider *sender, void *senderData), void *data);
1315
1327_UI_EXTERN void uiSliderSetRange(uiSlider *s, int min, int max);
1328
1344
1345
1356#define uiProgressBar(this) ((uiProgressBar *) (this))
1357
1366
1381
1389
1390
1399#define uiSeparator(this) ((uiSeparator *) (this))
1400
1408
1416
1417
1426typedef struct uiCombobox uiCombobox;
1427#define uiCombobox(this) ((uiCombobox *) (this))
1428
1438_UI_EXTERN void uiComboboxAppend(uiCombobox *c, const char *text);
1439
1450_UI_EXTERN void uiComboboxInsertAt(uiCombobox *c, int index, const char *text);
1451
1463
1471
1480
1489
1498
1514 void (*f)(uiCombobox *sender, void *senderData), void *data);
1515
1523
1524
1538#define uiEditableCombobox(this) ((uiEditableCombobox *) (this))
1539
1550
1564
1575
1576// TODO what do we call a function that sets the currently selected item and fills the text field with it?
1577// editable comboboxes have no consistent concept of selected item
1578
1593 void (*f)(uiEditableCombobox *sender, void *senderData), void *data);
1594
1602
1603
1612#define uiRadioButtons(this) ((uiRadioButtons *) (this))
1613
1624
1633
1642
1657 void (*f)(uiRadioButtons *sender, void *senderData), void *data);
1658
1666
1667struct tm;
1685#define uiDateTimePicker(this) ((uiDateTimePicker *) (this))
1686
1696
1707
1722 void (*f)(uiDateTimePicker *sender, void *senderData), void *data);
1723
1731
1739
1747
1748
1758#define uiMultilineEntry(this) ((uiMultilineEntry *) (this))
1759
1770
1781
1792
1808 void (*f)(uiMultilineEntry *sender, void *senderData), void *data);
1809
1818
1827
1835
1845
1846
1853typedef struct uiMenuItem uiMenuItem;
1854#define uiMenuItem(this) ((uiMenuItem *) (this))
1855
1863
1873
1888 void (*f)(uiMenuItem *sender, uiWindow *window, void *senderData), void *data);
1889
1900
1911
1940typedef struct uiMenu uiMenu;
1941#define uiMenu(this) ((uiMenu *) (this))
1942
1954
1966
1976
1986
1996
2004
2016_UI_EXTERN uiMenu *uiNewMenu(const char *name);
2017
2018
2031
2044
2060
2075_UI_EXTERN void uiMsgBox(uiWindow *parent, const char *title, const char *description);
2076
2092_UI_EXTERN void uiMsgBoxError(uiWindow *parent, const char *title, const char *description);
2093
2100typedef struct uiArea uiArea;
2105
2107
2110 // Resizing causes a full redraw for non-scrolling areas; redraw behavior
2111 // for scrolling areas is implementation-defined.
2113 // TODO document that on first show if the mouse is already in the uiArea then one gets sent with left=0
2114 // TODO what about when the area is hidden and then shown again?
2115 void (*MouseCrossed)(uiAreaHandler *, uiArea *, int left);
2118};
2119
2120// TODO RTL layouts?
2121// TODO reconcile edge and corner naming
2131 // TODO have one for keyboard resizes?
2132 // GDK doesn't seem to have any others, including for keyboards.
2133 // TODO way to bring up the system menu instead?
2134};
2135
2136#define uiArea(this) ((uiArea *) (this))
2137
2147_UI_EXTERN void uiAreaSetSize(uiArea *a, int width, int height);
2148
2156
2172_UI_EXTERN void uiAreaScrollTo(uiArea *a, double x, double y, double width, double height);
2173// These functions can only be called within MouseEvent callbacks with Down != 0.
2174// TODO should these be allowed on scrolling areas?
2175// TODO what happens to events after calling this up to and including the next mouse up?
2180
2183
2184 // These fields are only defined for non-scrolling areas.
2187
2188 double ClipX;
2189 double ClipY;
2192};
2193
2194typedef struct uiDrawPath uiDrawPath;
2198
2200
2206};
2207
2212};
2213
2218};
2219
2220// this is the default for botoh cairo and Direct2D (in the latter case, from the C++ helper functions)
2221// Core Graphics doesn't explicitly specify a default, but NSBezierPath allows you to choose one, and this is the initial value
2222// so we're good to use it too!
2223#define uiDrawDefaultMiterLimit 10.0
2224
2228};
2229
2231 double M11;
2232 double M12;
2233 double M21;
2234 double M22;
2235 double M31;
2236 double M32;
2237};
2238
2241
2242 // solid brushes
2243 double R;
2244 double G;
2245 double B;
2246 double A;
2247
2248 // gradient brushes
2249 double X0; // linear: start X, radial: start X
2250 double Y0; // linear: start Y, radial: start Y
2251 double X1; // linear: end X, radial: outer circle center X
2252 double Y1; // linear: end Y, radial: outer circle center Y
2253 double OuterRadius; // radial gradients only
2255 size_t NumStops;
2256 // TODO extend mode
2257 // cairo: none, repeat, reflect, pad; no individual control
2258 // Direct2D: repeat, reflect, pad; no individual control
2259 // Core Graphics: none, pad; before and after individually
2260 // TODO cairo documentation is inconsistent about pad
2261
2262 // TODO images
2263
2264 // TODO transforms
2265};
2266
2268 double Pos;
2269 double R;
2270 double G;
2271 double B;
2272 double A;
2273};
2274
2278 // must be greater than 0
2281 // must not be NULL if NumDashes is greater than 0
2282 double *Dashes;
2283 // TODO what if this is 1 on Direct2D?
2284 // TODO what if a dash is 0 on Cairo or Quartz?
2287};
2288
2291
2292_UI_EXTERN void uiDrawPathNewFigure(uiDrawPath *p, double x, double y);
2293_UI_EXTERN void uiDrawPathNewFigureWithArc(uiDrawPath *p, double xCenter, double yCenter, double radius, double startAngle, double sweep, int negative);
2294_UI_EXTERN void uiDrawPathLineTo(uiDrawPath *p, double x, double y);
2295// notes: angles are both relative to 0 and go counterclockwise
2296// TODO is the initial line segment on cairo and OS X a proper join?
2297// TODO what if sweep < 0?
2298_UI_EXTERN void uiDrawPathArcTo(uiDrawPath *p, double xCenter, double yCenter, double radius, double startAngle, double sweep, int negative);
2299_UI_EXTERN void uiDrawPathBezierTo(uiDrawPath *p, double c1x, double c1y, double c2x, double c2y, double endX, double endY);
2300// TODO quadratic bezier
2302
2303// TODO effect of these when a figure is already started
2304_UI_EXTERN void uiDrawPathAddRectangle(uiDrawPath *p, double x, double y, double width, double height);
2305
2308
2311
2312// TODO primitives:
2313// - rounded rectangles
2314// - elliptical arcs
2315// - quadratic bezier curves
2316
2318_UI_EXTERN void uiDrawMatrixTranslate(uiDrawMatrix *m, double x, double y);
2319_UI_EXTERN void uiDrawMatrixScale(uiDrawMatrix *m, double xCenter, double yCenter, double x, double y);
2320_UI_EXTERN void uiDrawMatrixRotate(uiDrawMatrix *m, double x, double y, double amount);
2321_UI_EXTERN void uiDrawMatrixSkew(uiDrawMatrix *m, double x, double y, double xamount, double yamount);
2327
2329
2330// TODO add a uiDrawPathStrokeToFill() or something like that
2332
2335
2336// uiAttribute stores information about an attribute in a
2337// uiAttributedString.
2338//
2339// You do not create uiAttributes directly; instead, you create a
2340// uiAttribute of a given type using the specialized constructor
2341// functions. For every Unicode codepoint in the uiAttributedString,
2342// at most one value of each attribute type can be applied.
2343//
2344// uiAttributes are immutable and the uiAttributedString takes
2345// ownership of the uiAttribute object once assigned, copying its
2346// contents as necessary.
2347// TODO define whether all this, for both uiTableValue and uiAttribute, is undefined behavior or a caught error
2349
2350// @role uiAttribute destructor
2351// uiFreeAttribute() frees a uiAttribute. You generally do not need to
2352// call this yourself, as uiAttributedString does this for you. In fact,
2353// it is an error to call this function on a uiAttribute that has been
2354// given to a uiAttributedString. You can call this, however, if you
2355// created a uiAttribute that you aren't going to use later.
2357
2358// uiAttributeType holds the possible uiAttribute types that may be
2359// returned by uiAttributeGetType(). Refer to the documentation for
2360// each type's constructor function for details on each type.
2372};
2373
2374// uiAttributeGetType() returns the type of a.
2375// TODO I don't like this name
2377
2378// uiNewFamilyAttribute() creates a new uiAttribute that changes the
2379// font family of the text it is applied to. family is copied; you do not
2380// need to keep it alive after uiNewFamilyAttribute() returns. Font
2381// family names are case-insensitive.
2383
2384// uiAttributeFamily() returns the font family stored in a. The
2385// returned string is owned by a. It is an error to call this on a
2386// uiAttribute that does not hold a font family.
2388
2389// uiNewSizeAttribute() creates a new uiAttribute that changes the
2390// size of the text it is applied to, in typographical points.
2392
2393// uiAttributeSize() returns the font size stored in a. It is an error to
2394// call this on a uiAttribute that does not hold a font size.
2396
2397// uiTextWeight represents possible text weights. These roughly
2398// map to the OS/2 text weight field of TrueType and OpenType
2399// fonts, or to CSS weight numbers. The named constants are
2400// nominal values; the actual values may vary by font and by OS,
2401// though this isn't particularly likely. Any value between
2402// uiTextWeightMinimum and uiTextWeightMaximum, inclusive,
2403// is allowed.
2404//
2405// Note that due to restrictions in early versions of Windows, some
2406// fonts have "special" weights be exposed in many programs as
2407// separate font families. This is perhaps most notable with
2408// Arial Black. libui does not do this, even on Windows (because the
2409// DirectWrite API libui uses on Windows does not do this); to
2410// specify Arial Black, use family Arial and weight uiTextWeightBlack.
2425};
2426
2427// uiNewWeightAttribute() creates a new uiAttribute that changes the
2428// weight of the text it is applied to. It is an error to specify a weight
2429// outside the range [uiTextWeightMinimum,
2430// uiTextWeightMaximum].
2432
2433// uiAttributeWeight() returns the font weight stored in a. It is an error
2434// to call this on a uiAttribute that does not hold a font weight.
2436
2437// uiTextItalic represents possible italic modes for a font. Italic
2438// represents "true" italics where the slanted glyphs have custom
2439// shapes, whereas oblique represents italics that are merely slanted
2440// versions of the normal glyphs. Most fonts usually have one or the
2441// other.
2446};
2447
2448// uiNewItalicAttribute() creates a new uiAttribute that changes the
2449// italic mode of the text it is applied to. It is an error to specify an
2450// italic mode not specified in uiTextItalic.
2452
2453// uiAttributeItalic() returns the font italic mode stored in a. It is an
2454// error to call this on a uiAttribute that does not hold a font italic
2455// mode.
2457
2458// uiTextStretch represents possible stretches (also called "widths")
2459// of a font.
2460//
2461// Note that due to restrictions in early versions of Windows, some
2462// fonts have "special" stretches be exposed in many programs as
2463// separate font families. This is perhaps most notable with
2464// Arial Condensed. libui does not do this, even on Windows (because
2465// the DirectWrite API libui uses on Windows does not do this); to
2466// specify Arial Condensed, use family Arial and stretch
2467// uiTextStretchCondensed.
2478};
2479
2480// uiNewStretchAttribute() creates a new uiAttribute that changes the
2481// stretch of the text it is applied to. It is an error to specify a strech
2482// not specified in uiTextStretch.
2484
2485// uiAttributeStretch() returns the font stretch stored in a. It is an
2486// error to call this on a uiAttribute that does not hold a font stretch.
2488
2489// uiNewColorAttribute() creates a new uiAttribute that changes the
2490// color of the text it is applied to. It is an error to specify an invalid
2491// color.
2492_UI_EXTERN uiAttribute *uiNewColorAttribute(double r, double g, double b, double a);
2493
2494// uiAttributeColor() returns the text color stored in a. It is an
2495// error to call this on a uiAttribute that does not hold a text color.
2496_UI_EXTERN void uiAttributeColor(const uiAttribute *a, double *r, double *g, double *b, double *alpha);
2497
2498// uiNewBackgroundAttribute() creates a new uiAttribute that
2499// changes the background color of the text it is applied to. It is an
2500// error to specify an invalid color.
2501_UI_EXTERN uiAttribute *uiNewBackgroundAttribute(double r, double g, double b, double a);
2502
2503// TODO reuse uiAttributeColor() for background colors, or make a new function...
2504
2505// uiUnderline specifies a type of underline to use on text.
2510 uiUnderlineSuggestion, // wavy or dotted underlines used for spelling/grammar checkers
2511};
2512
2513// uiNewUnderlineAttribute() creates a new uiAttribute that changes
2514// the type of underline on the text it is applied to. It is an error to
2515// specify an underline type not specified in uiUnderline.
2517
2518// uiAttributeUnderline() returns the underline type stored in a. It is
2519// an error to call this on a uiAttribute that does not hold an underline
2520// style.
2522
2523// uiUnderlineColor specifies the color of any underline on the text it
2524// is applied to, regardless of the type of underline. In addition to
2525// being able to specify a custom color, you can explicitly specify
2526// platform-specific colors for suggestion underlines; to use them
2527// correctly, pair them with uiUnderlineSuggestion (though they can
2528// be used on other types of underline as well).
2529//
2530// If an underline type is applied but no underline color is
2531// specified, the text color is used instead. If an underline color
2532// is specified without an underline type, the underline color
2533// attribute is ignored, but not removed from the uiAttributedString.
2538 uiUnderlineColorAuxiliary, // for instance, the color used by smart replacements on macOS or in Microsoft Office
2539};
2540
2541// uiNewUnderlineColorAttribute() creates a new uiAttribute that
2542// changes the color of the underline on the text it is applied to.
2543// It is an error to specify an underline color not specified in
2544// uiUnderlineColor.
2545//
2546// If the specified color type is uiUnderlineColorCustom, it is an
2547// error to specify an invalid color value. Otherwise, the color values
2548// are ignored and should be specified as zero.
2549_UI_EXTERN uiAttribute *uiNewUnderlineColorAttribute(uiUnderlineColor u, double r, double g, double b, double a);
2550
2551// uiAttributeUnderlineColor() returns the underline color stored in
2552// a. It is an error to call this on a uiAttribute that does not hold an
2553// underline color.
2554_UI_EXTERN void uiAttributeUnderlineColor(const uiAttribute *a, uiUnderlineColor *u, double *r, double *g, double *b, double *alpha);
2555
2556// uiOpenTypeFeatures represents a set of OpenType feature
2557// tag-value pairs, for applying OpenType features to text.
2558// OpenType feature tags are four-character codes defined by
2559// OpenType that cover things from design features like small
2560// caps and swashes to language-specific glyph shapes and
2561// beyond. Each tag may only appear once in any given
2562// uiOpenTypeFeatures instance. Each value is a 32-bit integer,
2563// often used as a Boolean flag, but sometimes as an index to choose
2564// a glyph shape to use.
2565//
2566// If a font does not support a certain feature, that feature will be
2567// ignored. (TODO verify this on all OSs)
2568//
2569// See the OpenType specification at
2570// https://www.microsoft.com/typography/otspec/featuretags.htm
2571// for the complete list of available features, information on specific
2572// features, and how to use them.
2573// TODO invalid features
2575
2576// uiOpenTypeFeaturesForEachFunc is the type of the function
2577// invoked by uiOpenTypeFeaturesForEach() for every OpenType
2578// feature in otf. Refer to that function's documentation for more
2579// details.
2580typedef uiForEach (*uiOpenTypeFeaturesForEachFunc)(const uiOpenTypeFeatures *otf, char a, char b, char c, char d, uint32_t value, void *data);
2581
2582// @role uiOpenTypeFeatures constructor
2583// uiNewOpenTypeFeatures() returns a new uiOpenTypeFeatures
2584// instance, with no tags yet added.
2586
2587// @role uiOpenTypeFeatures destructor
2588// uiFreeOpenTypeFeatures() frees otf.
2590
2591// uiOpenTypeFeaturesClone() makes a copy of otf and returns it.
2592// Changing one will not affect the other.
2594
2595// uiOpenTypeFeaturesAdd() adds the given feature tag and value
2596// to otf. The feature tag is specified by a, b, c, and d. If there is
2597// already a value associated with the specified tag in otf, the old
2598// value is removed.
2599_UI_EXTERN void uiOpenTypeFeaturesAdd(uiOpenTypeFeatures *otf, char a, char b, char c, char d, uint32_t value);
2600
2601// uiOpenTypeFeaturesRemove() removes the given feature tag
2602// and value from otf. If the tag is not present in otf,
2603// uiOpenTypeFeaturesRemove() does nothing.
2604_UI_EXTERN void uiOpenTypeFeaturesRemove(uiOpenTypeFeatures *otf, char a, char b, char c, char d);
2605
2606// uiOpenTypeFeaturesGet() determines whether the given feature
2607// tag is present in otf. If it is, *value is set to the tag's value and
2608// nonzero is returned. Otherwise, zero is returned.
2609//
2610// Note that if uiOpenTypeFeaturesGet() returns zero, value isn't
2611// changed. This is important: if a feature is not present in a
2612// uiOpenTypeFeatures, the feature is NOT treated as if its
2613// value was zero anyway. Script-specific font shaping rules and
2614// font-specific feature settings may use a different default value
2615// for a feature. You should likewise not treat a missing feature as
2616// having a value of zero either. Instead, a missing feature should
2617// be treated as having some unspecified default value.
2618_UI_EXTERN int uiOpenTypeFeaturesGet(const uiOpenTypeFeatures *otf, char a, char b, char c, char d, uint32_t *value);
2619
2620// uiOpenTypeFeaturesForEach() executes f for every tag-value
2621// pair in otf. The enumeration order is unspecified. You cannot
2622// modify otf while uiOpenTypeFeaturesForEach() is running.
2624
2625// uiNewFeaturesAttribute() creates a new uiAttribute that changes
2626// the font family of the text it is applied to. otf is copied; you may
2627// free it after uiNewFeaturesAttribute() returns.
2629
2630// uiAttributeFeatures() returns the OpenType features stored in a.
2631// The returned uiOpenTypeFeatures object is owned by a. It is an
2632// error to call this on a uiAttribute that does not hold OpenType
2633// features.
2635
2636// uiAttributedString represents a string of UTF-8 text that can
2637// optionally be embellished with formatting attributes. libui
2638// provides the list of formatting attributes, which cover common
2639// formatting traits like boldface and color as well as advanced
2640// typographical features provided by OpenType like superscripts
2641// and small caps. These attributes can be combined in a variety of
2642// ways.
2643//
2644// Attributes are applied to runs of Unicode codepoints in the string.
2645// Zero-length runs are elided. Consecutive runs that have the same
2646// attribute type and value are merged. Each attribute is independent
2647// of each other attribute; overlapping attributes of different types
2648// do not split each other apart, but different values of the same
2649// attribute type do.
2650//
2651// The empty string can also be represented by uiAttributedString,
2652// but because of the no-zero-length-attribute rule, it will not have
2653// attributes.
2654//
2655// A uiAttributedString takes ownership of all attributes given to
2656// it, as it may need to duplicate or delete uiAttribute objects at
2657// any time. By extension, when you free a uiAttributedString,
2658// all uiAttributes within will also be freed. Each method will
2659// describe its own rules in more details.
2660//
2661// In addition, uiAttributedString provides facilities for moving
2662// between grapheme clusters, which represent a character
2663// from the point of view of the end user. The cursor of a text editor
2664// is always placed on a grapheme boundary, so you can use these
2665// features to move the cursor left or right by one "character".
2666// TODO does uiAttributedString itself need this
2667//
2668// uiAttributedString does not provide enough information to be able
2669// to draw itself onto a uiDrawContext or respond to user actions.
2670// In order to do that, you'll need to use a uiDrawTextLayout, which
2671// is built from the combination of a uiAttributedString and a set of
2672// layout-specific properties.
2674
2675// uiAttributedStringForEachAttributeFunc is the type of the function
2676// invoked by uiAttributedStringForEachAttribute() for every
2677// attribute in s. Refer to that function's documentation for more
2678// details.
2679typedef uiForEach (*uiAttributedStringForEachAttributeFunc)(const uiAttributedString *s, const uiAttribute *a, size_t start, size_t end, void *data);
2680
2681// @role uiAttributedString constructor
2682// uiNewAttributedString() creates a new uiAttributedString from
2683// initialString. The string will be entirely unattributed.
2685
2686// @role uiAttributedString destructor
2687// uiFreeAttributedString() destroys the uiAttributedString s.
2688// It will also free all uiAttributes within.
2690
2691// uiAttributedStringString() returns the textual content of s as a
2692// '\0'-terminated UTF-8 string. The returned pointer is valid until
2693// the next change to the textual content of s.
2695
2696// uiAttributedStringLength() returns the number of UTF-8 bytes in
2697// the textual content of s, excluding the terminating '\0'.
2699
2700// uiAttributedStringAppendUnattributed() adds the '\0'-terminated
2701// UTF-8 string str to the end of s. The new substring will be
2702// unattributed.
2704
2705// uiAttributedStringInsertAtUnattributed() adds the '\0'-terminated
2706// UTF-8 string str to s at the byte position specified by at. The new
2707// substring will be unattributed; existing attributes will be moved
2708// along with their text.
2710
2711// TODO add the Append and InsertAtExtendingAttributes functions
2712// TODO and add functions that take a string + length
2713
2714// uiAttributedStringDelete() deletes the characters and attributes of
2715// s in the byte range [start, end).
2716_UI_EXTERN void uiAttributedStringDelete(uiAttributedString *s, size_t start, size_t end);
2717
2718// TODO add a function to uiAttributedString to get an attribute's value at a specific index or in a specific range, so we can edit
2719
2720// uiAttributedStringSetAttribute() sets a in the byte range [start, end)
2721// of s. Any existing attributes in that byte range of the same type are
2722// removed. s takes ownership of a; you should not use it after
2723// uiAttributedStringSetAttribute() returns.
2725
2726// uiAttributedStringForEachAttribute() enumerates all the
2727// uiAttributes in s in an unspecified order. It is an error to modify s
2728// in f. Within f, s still owns the attribute; you can neither free it nor
2729// save it for later use.
2730// TODO reword the above for consistency and clarify the intended meaning
2732
2733// TODO const correct this somehow (the implementation needs to mutate the structure)
2735
2736// TODO const correct this somehow (the implementation needs to mutate the structure)
2738
2739// TODO const correct this somehow (the implementation needs to mutate the structure)
2741
2742// uiFontDescriptor provides a complete description of a font where
2743// one is needed. Currently, this means as the default font of a
2744// uiDrawTextLayout and as the data returned by uiFontButton.
2745// All the members operate like the respective uiAttributes.
2747
2749 // TODO const-correct this or figure out how to deal with this when getting a value
2750 char *Family;
2751 double Size;
2755};
2756
2766
2782
2783// uiDrawTextLayout is a concrete representation of a
2784// uiAttributedString that can be displayed in a uiDrawContext.
2785// It includes information important for the drawing of a block of
2786// text, including the bounding box to wrap the text within, the
2787// alignment of lines of text within that box, areas to mark as
2788// being selected, and other things.
2789//
2790// Unlike uiAttributedString, the content of a uiDrawTextLayout is
2791// immutable once it has been created.
2792//
2793// TODO talk about OS-specific differences with text drawing that libui can't account for...
2795
2796// uiDrawTextAlign specifies the alignment of lines of text in a
2797// uiDrawTextLayout.
2798// TODO should this really have Draw in the name?
2803};
2804
2805// uiDrawTextLayoutParams describes a uiDrawTextLayout.
2806// DefaultFont is used to render any text that is not attributed
2807// sufficiently in String. Width determines the width of the bounding
2808// box of the text; the height is determined automatically.
2810
2811// TODO const-correct this somehow
2815 double Width;
2817};
2818
2819// @role uiDrawTextLayout constructor
2820// uiDrawNewTextLayout() creates a new uiDrawTextLayout from
2821// the given parameters.
2822//
2823// TODO
2824// - allow creating a layout out of a substring
2825// - allow marking compositon strings
2826// - allow marking selections, even after creation
2827// - add the following functions:
2828// - uiDrawTextLayoutHeightForWidth() (returns the height that a layout would need to be to display the entire string at a given width)
2829// - uiDrawTextLayoutRangeForSize() (returns what substring would fit in a given size)
2830// - uiDrawTextLayoutNewWithHeight() (limits amount of string used by the height)
2831// - some function to fix up a range (for text editing)
2833
2834// @role uiDrawFreeTextLayout destructor
2835// uiDrawFreeTextLayout() frees tl. The underlying
2836// uiAttributedString is not freed.
2838
2839// uiDrawText() draws tl in c with the top-left point of tl at (x, y).
2840_UI_EXTERN void uiDrawText(uiDrawContext *c, uiDrawTextLayout *tl, double x, double y);
2841
2842// uiDrawTextLayoutExtents() returns the width and height of tl
2843// in width and height. The returned width may be smaller than
2844// the width passed into uiDrawNewTextLayout() depending on
2845// how the text in tl is wrapped. Therefore, you can use this
2846// function to get the actual size of the text layout.
2847_UI_EXTERN void uiDrawTextLayoutExtents(uiDrawTextLayout *tl, double *width, double *height);
2848
2849// TODO metrics functions
2850
2851// TODO number of lines visible for clipping rect, range visible for clipping rect?
2852
2853
2865#define uiFontButton(this) ((uiFontButton *) (this))
2866
2878
2892 void (*f)(uiFontButton *sender, void *senderData), void *data);
2893
2903
2914
2924 uiModifierAlt = 1 << 1,
2927};
2928
2929// Mouse input is captured after a button press until all buttons are released.
2930// DragBroken is called if that capture is lost unexpectedly.
2932 // Coordinates in the area's drawing space, including the scroll offset for
2933 // scrolling areas.
2934 double X;
2935 double Y;
2936
2937 // These fields are only defined for non-scrolling areas.
2940
2941 int Down;
2942 int Up;
2943
2945
2947
2948 uint64_t Held1To64;
2949};
2950
2953 uiExtKeyInsert, // equivalent to "Help" on Apple keyboards
2963 uiExtKeyF1, // F1..F12 are guaranteed to be consecutive
2975 uiExtKeyN0, // numpad keys; independent of Num Lock state
2976 uiExtKeyN1, // N0..N9 are guaranteed to be consecutive
2991};
2992
2994 char Key;
2997
2999
3000 int Up;
3001};
3002
3003
3017#define uiColorButton(this) ((uiColorButton *) (this))
3018
3029_UI_EXTERN void uiColorButtonColor(uiColorButton *b, double *r, double *g, double *bl, double *a);
3030
3041_UI_EXTERN void uiColorButtonSetColor(uiColorButton *b, double r, double g, double bl, double a);
3042
3056 void (*f)(uiColorButton *sender, void *senderData), void *data);
3057
3065
3066
3082typedef struct uiForm uiForm;
3083#define uiForm(this) ((uiForm *) (this))
3084
3099_UI_EXTERN void uiFormAppend(uiForm *f, const char *label, uiControl *c, int stretchy);
3100
3108
3117_UI_EXTERN void uiFormDelete(uiForm *f, int index);
3118
3129
3140_UI_EXTERN void uiFormSetPadded(uiForm *f, int padded);
3141
3149
3150
3162};
3163
3175};
3176
3198typedef struct uiGrid uiGrid;
3199#define uiGrid(this) ((uiGrid *) (this))
3200
3216_UI_EXTERN void uiGridAppend(uiGrid *g, uiControl *c, int left, int top, int xspan, int yspan, int hexpand, uiAlign halign, int vexpand, uiAlign valign);
3217
3233_UI_EXTERN void uiGridInsertAt(uiGrid *g, uiControl *c, uiControl *existing, uiAt at, int xspan, int yspan, int hexpand, uiAlign halign, int vexpand, uiAlign valign);
3234
3243
3254
3265_UI_EXTERN void uiGridSetPadded(uiGrid *g, int padded);
3266
3274
3275
3296typedef struct uiImage uiImage;
3297
3311_UI_EXTERN uiImage *uiNewImage(double width, double height);
3312
3322
3338_UI_EXTERN void uiImageAppend(uiImage *i, const void *pixels, int pixelWidth, int pixelHeight, int byteStride);
3339
3389
3404
3417};
3418
3427
3438
3451
3468
3482
3496
3507
3518_UI_EXTERN uiTableValue *uiNewTableValueColor(double r, double g, double b, double a);
3519
3532_UI_EXTERN void uiTableValueColor(const uiTableValue *v, double *r, double *g, double *b, double *a);
3533
3534
3548
3571
3596
3604
3609
3622 uiTableValue *(*CellValue)(uiTableModelHandler *mh, uiTableModel *m, int row, int column);
3623
3637};
3638
3647
3659
3672
3684
3697// TODO reordering/moving
3698
3700#define uiTableModelColumnNeverEditable (-1)
3702#define uiTableModelColumnAlwaysEditable (-2)
3703
3721};
3722
3744};
3745
3767typedef struct uiTable uiTable;
3768#define uiTable(this) ((uiTable *) (this))
3769
3788 const char *name,
3789 int textModelColumn,
3790 int textEditableModelColumn,
3792
3808 const char *name,
3809 int imageModelColumn);
3810
3833 const char *name,
3834 int imageModelColumn,
3835 int textModelColumn,
3836 int textEditableModelColumn,
3838
3855 const char *name,
3856 int checkboxModelColumn,
3857 int checkboxEditableModelColumn);
3858
3883 const char *name,
3884 int checkboxModelColumn,
3885 int checkboxEditableModelColumn,
3886 int textModelColumn,
3887 int textEditableModelColumn,
3889
3906 const char *name,
3907 int progressModelColumn);
3908
3930 const char *name,
3931 int buttonModelColumn,
3932 int buttonClickableModelColumn);
3933
3942
3951
3960
3961
3976 void (*f)(uiTable *t, int row, void *data),
3977 void *data);
3978
3994 void (*f)(uiTable *t, int row, void *data),
3995 void *data);
3996
4010 int column,
4011 uiSortIndicator indicator);
4012
4022
4037 void (*f)(uiTable *sender, int column, void *senderData), void *data);
4038
4048
4066_UI_EXTERN void uiTableColumnSetWidth(uiTable *t, int column, int width);
4067
4091};
4092
4102
4114
4129_UI_EXTERN void uiTableOnSelectionChanged(uiTable *t, void (*f)(uiTable *t, void *data), void *data);
4130
4139{
4141 int *Rows;
4142};
4143
4155
4169
4177
4178#ifdef __cplusplus
4179}
4180#endif
4181
4182#endif
char * uiOpenFolder(uiWindow *parent)
Folder chooser dialog window to select a single folder.
char * uiSaveFile(uiWindow *parent)
Save file dialog window.
char * uiOpenFile(uiWindow *parent)
File chooser dialog window to select a single file.
void uiMsgBoxError(uiWindow *parent, const char *title, const char *description)
Error message box dialog window.
void uiMsgBox(uiWindow *parent, const char *title, const char *description)
Message box dialog window.
uiTableSelectionMode
Table selection modes.
Definition: ui.h:4080
uiSortIndicator
Sort indicators.
Definition: ui.h:3543
Definition: ui.h:2181
double AreaWidth
Definition: ui.h:2185
double ClipWidth
Definition: ui.h:2190
double ClipHeight
Definition: ui.h:2191
double AreaHeight
Definition: ui.h:2186
double ClipY
Definition: ui.h:2189
uiDrawContext * Context
Definition: ui.h:2182
double ClipX
Definition: ui.h:2188
Definition: ui.h:2108
void(* DragBroken)(uiAreaHandler *, uiArea *)
Definition: ui.h:2116
int(* KeyEvent)(uiAreaHandler *, uiArea *, uiAreaKeyEvent *)
Definition: ui.h:2117
void(* Draw)(uiAreaHandler *, uiArea *, uiAreaDrawParams *)
Definition: ui.h:2109
void(* MouseCrossed)(uiAreaHandler *, uiArea *, int left)
Definition: ui.h:2115
void(* MouseEvent)(uiAreaHandler *, uiArea *, uiAreaMouseEvent *)
Definition: ui.h:2112
Custom drawing control that receives drawing and input events through a uiAreaHandler.
void uiAreaQueueRedrawAll(uiArea *a)
Queues the entire area for redraw.
void uiAreaSetSize(uiArea *a, int width, int height)
Changes the size of a scrolling area's drawing space.
void uiAreaScrollTo(uiArea *a, double x, double y, double width, double height)
Scrolls the minimum distance needed to make a rectangle visible.
Definition: ui.h:2993
char Key
Definition: ui.h:2994
int Up
Definition: ui.h:3000
uiExtKey ExtKey
Definition: ui.h:2995
uiModifiers Modifier
Definition: ui.h:2996
uiModifiers Modifiers
Definition: ui.h:2998
Definition: ui.h:2931
int Count
Definition: ui.h:2944
double X
Definition: ui.h:2934
double AreaHeight
Definition: ui.h:2939
int Down
Definition: ui.h:2941
uint64_t Held1To64
Definition: ui.h:2948
int Up
Definition: ui.h:2942
uiModifiers Modifiers
Definition: ui.h:2946
double Y
Definition: ui.h:2935
double AreaWidth
Definition: ui.h:2938
A boxlike container that holds a group of controls.
void uiBoxDelete(uiBox *b, int index)
Removes the control at index from the box.
uiBox * uiNewHorizontalBox(void)
Creates a new horizontal box.
void uiBoxSetPadded(uiBox *b, int padded)
Sets whether or not controls within the box are padded.
int uiBoxNumChildren(uiBox *b)
Returns the number of controls contained within the box.
void uiBoxAppend(uiBox *b, uiControl *child, int stretchy)
Appends a control to the box.
uiBox * uiNewVerticalBox(void)
Creates a new vertical box.
int uiBoxPadded(uiBox *b)
Returns whether or not controls within the box are padded.
A control that visually represents a button to be clicked by the user to trigger an action.
char * uiButtonText(uiButton *b)
Returns the button label text.
void uiButtonOnClicked(uiButton *b, void(*f)(uiButton *sender, void *senderData), void *data)
Registers a callback for when the button is clicked.
void uiButtonSetText(uiButton *b, const char *text)
Sets the button label text.
uiButton * uiNewButton(const char *text)
Creates a new button.
A control with a user checkable box accompanied by a text label.
void uiCheckboxSetChecked(uiCheckbox *c, int checked)
Sets whether or not the checkbox is checked.
uiCheckbox * uiNewCheckbox(const char *text)
Creates a new checkbox.
char * uiCheckboxText(uiCheckbox *c)
Returns the checkbox label text.
int uiCheckboxChecked(uiCheckbox *c)
Returns whether or the checkbox is checked.
void uiCheckboxOnToggled(uiCheckbox *c, void(*f)(uiCheckbox *sender, void *senderData), void *data)
Registers a callback for when the checkbox is toggled by the user.
void uiCheckboxSetText(uiCheckbox *c, const char *text)
Sets the checkbox label text.
A control with a color indicator that opens a color chooser when clicked.
uiColorButton * uiNewColorButton(void)
Creates a new color button.
void uiColorButtonOnChanged(uiColorButton *b, void(*f)(uiColorButton *sender, void *senderData), void *data)
Registers a callback for when the color is changed.
void uiColorButtonColor(uiColorButton *b, double *r, double *g, double *bl, double *a)
Returns the color button color.
void uiColorButtonSetColor(uiColorButton *b, double r, double g, double bl, double a)
Sets the color button color.
A control to select one item from a predefined list of items via a drop down menu.
void uiComboboxInsertAt(uiCombobox *c, int index, const char *text)
Inserts an item at index to the combo box.
void uiComboboxDelete(uiCombobox *c, int index)
Deletes an item at index from the combo box.
void uiComboboxClear(uiCombobox *c)
Deletes all items from the combo box.
void uiComboboxOnSelected(uiCombobox *c, void(*f)(uiCombobox *sender, void *senderData), void *data)
Registers a callback for when a combo box item is selected.
void uiComboboxAppend(uiCombobox *c, const char *text)
Appends an item to the combo box.
uiCombobox * uiNewCombobox(void)
Creates a new combo box.
void uiComboboxSetSelected(uiCombobox *c, int index)
Sets the item selected.
int uiComboboxSelected(uiCombobox *c)
Returns the index of the item selected.
int uiComboboxNumItems(uiCombobox *c)
Returns the number of items contained within the combo box.
Base class for GUI controls providing common methods.
Definition: ui.h:114
int uiControlVisible(uiControl *c)
Returns whether or not the control is visible.
void uiControlSetMinimumSize(uiControl *c, int width, int height)
Overrides a control's minimum layout size.
void uiControlHide(uiControl *c)
Hides the control.
int(* Visible)(uiControl *)
Definition: ui.h:123
uint32_t OSSignature
Definition: ui.h:116
int(* Toplevel)(uiControl *)
Definition: ui.h:122
void(* SetParent)(uiControl *, uiControl *)
Definition: ui.h:121
void uiControlOnDestroyed(uiControl *c, void(*f)(uiControl *c, void *data), void *data)
Registers a function to be called when the control is destroyed.
int uiControlEnabledToUser(uiControl *c)
Returns whether or not the control can be interacted with by the user.
void uiControlDisable(uiControl *c)
Disables the control.
void uiControlDestroy(uiControl *c)
Dispose and free all allocated resources.
void uiControlEnable(uiControl *c)
Enables the control.
void(* Disable)(uiControl *)
Definition: ui.h:128
void(* Show)(uiControl *)
Definition: ui.h:124
void(* Destroy)(uiControl *)
Definition: ui.h:118
int uiControlEnabled(uiControl *c)
Returns whether or not the control is enabled.
uintptr_t uiControlHandle(uiControl *c)
Returns the control's OS-level handle.
void uiControlShow(uiControl *c)
Shows the control.
void uiFreeControl(uiControl *c)
Frees the memory associated with the control reference.
void uiControlVerifySetParent(uiControl *c, uiControl *parent)
Makes sure the control's parent can be set to parent.
int uiControlToplevel(uiControl *c)
Returns whether or not the control is a top level control.
void(* Hide)(uiControl *)
Definition: ui.h:125
void uiControlSetParent(uiControl *c, uiControl *parent)
Sets the control's parent.
uint32_t TypeSignature
Definition: ui.h:117
int(* Enabled)(uiControl *)
Definition: ui.h:126
uiControl * uiAllocControl(size_t n, uint32_t OSsig, uint32_t typesig, const char *typenamestr)
Allocates a uiControl.
uint32_t Signature
Definition: ui.h:115
uiControl * uiControlParent(uiControl *c)
Returns the parent control.
uintptr_t(* Handle)(uiControl *)
Definition: ui.h:119
void(* Enable)(uiControl *)
Definition: ui.h:127
A control to enter a date and/or time.
Definition: ui.h:1667
uiDateTimePicker * uiNewDateTimePicker(void)
Creates a new date picker.
void uiDateTimePickerOnChanged(uiDateTimePicker *d, void(*f)(uiDateTimePicker *sender, void *senderData), void *data)
Registers a callback for when the date time picker value is changed by the user.
void uiDateTimePickerSetTime(uiDateTimePicker *d, const struct tm *time)
Sets date and time of the data time picker.
uiDateTimePicker * uiNewTimePicker(void)
Creates a new date and time picker.
uiDateTimePicker * uiNewDatePicker(void)
Creates a new time picker.
void uiDateTimePickerTime(uiDateTimePicker *d, struct tm *time)
Returns date and time stored in the data time picker.
Definition: ui.h:2267
double R
Definition: ui.h:2269
double G
Definition: ui.h:2270
double Pos
Definition: ui.h:2268
double B
Definition: ui.h:2271
double A
Definition: ui.h:2272
Definition: ui.h:2239
double Y1
Definition: ui.h:2252
double B
Definition: ui.h:2245
size_t NumStops
Definition: ui.h:2255
double R
Definition: ui.h:2243
double Y0
Definition: ui.h:2250
double A
Definition: ui.h:2246
uiDrawBrushGradientStop * Stops
Definition: ui.h:2254
double X1
Definition: ui.h:2251
double X0
Definition: ui.h:2249
double OuterRadius
Definition: ui.h:2253
double G
Definition: ui.h:2244
uiDrawBrushType Type
Definition: ui.h:2240
Definition: ui.h:2230
double M32
Definition: ui.h:2236
double M11
Definition: ui.h:2231
double M22
Definition: ui.h:2234
double M31
Definition: ui.h:2235
double M21
Definition: ui.h:2233
double M12
Definition: ui.h:2232
Definition: ui.h:2275
size_t NumDashes
Definition: ui.h:2285
double DashPhase
Definition: ui.h:2286
double * Dashes
Definition: ui.h:2282
double Thickness
Definition: ui.h:2279
double MiterLimit
Definition: ui.h:2280
uiDrawLineJoin Join
Definition: ui.h:2277
uiDrawLineCap Cap
Definition: ui.h:2276
Definition: ui.h:2812
uiAttributedString * String
Definition: ui.h:2813
double Width
Definition: ui.h:2815
uiFontDescriptor * DefaultFont
Definition: ui.h:2814
uiDrawTextAlign Align
Definition: ui.h:2816
A control to select one item from a predefined list of items or enter ones own.
uiEditableCombobox * uiNewEditableCombobox(void)
Creates a new editable combo box.
void uiEditableComboboxOnChanged(uiEditableCombobox *c, void(*f)(uiEditableCombobox *sender, void *senderData), void *data)
Registers a callback for when an editable combo box item is selected or user text changed.
void uiEditableComboboxSetText(uiEditableCombobox *c, const char *text)
Sets the editable combo box text.
char * uiEditableComboboxText(uiEditableCombobox *c)
Returns the text of the editable combo box.
void uiEditableComboboxAppend(uiEditableCombobox *c, const char *text)
Appends an item to the editable combo box.
A control with a single line text entry field.
uiEntry * uiNewEntry(void)
Creates a new entry.
void uiEntryOnChanged(uiEntry *e, void(*f)(uiEntry *sender, void *senderData), void *data)
Registers a callback for when the user changes the entry's text.
char * uiEntryText(uiEntry *e)
Returns the entry's text.
void uiEntrySetText(uiEntry *e, const char *text)
Sets the entry's text.
uiEntry * uiNewPasswordEntry(void)
Creates a new entry suitable for sensitive inputs like passwords.
void uiEntrySetReadOnly(uiEntry *e, int readonly)
Sets whether or not the entry's text is read only.
uiEntry * uiNewSearchEntry(void)
Creates a new entry suitable for search.
int uiEntryReadOnly(uiEntry *e)
Returns whether or not the entry's text can be changed.
A button-like control that opens a font chooser when clicked.
void uiFontButtonOnChanged(uiFontButton *b, void(*f)(uiFontButton *sender, void *senderData), void *data)
Registers a callback for when the font is changed.
void uiFontButtonFont(uiFontButton *b, uiFontDescriptor *desc)
Returns the selected font.
uiFontButton * uiNewFontButton(void)
Creates a new font button.
void uiFreeFontButtonFont(uiFontDescriptor *desc)
Compatibility alias for uiFreeFontDescriptor().
Definition: ui.h:2748
uiTextItalic Italic
Definition: ui.h:2753
uiTextWeight Weight
Definition: ui.h:2752
char * Family
Definition: ui.h:2750
uiTextStretch Stretch
Definition: ui.h:2754
double Size
Definition: ui.h:2751
A container control to organize contained controls as labeled fields.
void uiFormSetPadded(uiForm *f, int padded)
Sets whether or not controls within the box are padded.
int uiFormPadded(uiForm *f)
Returns whether or not controls within the form are padded.
void uiFormDelete(uiForm *f, int index)
Removes the control at index from the form.
void uiFormAppend(uiForm *f, const char *label, uiControl *c, int stretchy)
Appends a control with a label to the form.
uiForm * uiNewForm(void)
Creates a new form.
int uiFormNumChildren(uiForm *f)
Returns the number of controls contained within the form.
A control container to arrange containing controls in a grid.
void uiGridSetPadded(uiGrid *g, int padded)
Sets whether or not controls within the grid are padded.
int uiGridPadded(uiGrid *g)
Returns whether or not controls within the grid are padded.
void uiGridAppend(uiGrid *g, uiControl *c, int left, int top, int xspan, int yspan, int hexpand, uiAlign halign, int vexpand, uiAlign valign)
Appends a control to the grid.
void uiGridDelete(uiGrid *g, uiControl *c)
Removes a control from the grid without destroying it.
uiGrid * uiNewGrid(void)
Creates a new grid.
void uiGridInsertAt(uiGrid *g, uiControl *c, uiControl *existing, uiAt at, int xspan, int yspan, int hexpand, uiAlign halign, int vexpand, uiAlign valign)
Inserts a control positioned in relation to another control within the grid.
A control container that adds a label to the contained child control.
void uiGroupSetTitle(uiGroup *g, const char *title)
Sets the group title.
uiGroup * uiNewGroup(const char *title)
Creates a new group.
void uiGroupSetChild(uiGroup *g, uiControl *c)
Sets the group's child.
char * uiGroupTitle(uiGroup *g)
Returns the group title.
void uiGroupSetMargined(uiGroup *g, int margined)
Sets whether or not the group has a margin.
int uiGroupMargined(uiGroup *g)
Returns whether or not the group has a margin.
A container for an image to be displayed on screen.
void uiImageAppend(uiImage *i, const void *pixels, int pixelWidth, int pixelHeight, int byteStride)
Appends a new image representation.
uiImage * uiNewImage(double width, double height)
Creates a new image container.
void uiFreeImage(uiImage *i)
Frees the image container and all associated resources.
Definition: ui.h:60
size_t Size
Definition: ui.h:61
A control that displays non interactive text.
char * uiLabelText(uiLabel *l)
Returns the label text.
uiLabel * uiNewLabel(const char *text)
Creates a new label.
void uiLabelSetText(uiLabel *l, const char *text)
Sets the label text.
An application level menu bar.
uiMenuItem * uiMenuAppendAboutItem(uiMenu *m)
Appends a new About menu item.
uiMenuItem * uiMenuAppendItem(uiMenu *m, const char *name)
Appends a generic menu item.
uiMenuItem * uiMenuAppendQuitItem(uiMenu *m)
Appends a new Quit menu item.
uiMenuItem * uiMenuAppendPreferencesItem(uiMenu *m)
Appends a new Preferences menu item.
void uiMenuAppendSeparator(uiMenu *m)
Appends a new separator.
uiMenuItem * uiMenuAppendCheckItem(uiMenu *m, const char *name)
Appends a generic menu item with a checkbox.
uiMenu * uiNewMenu(const char *name)
Creates a new menu.
A menu item used in conjunction with uiMenu.
void uiMenuItemDisable(uiMenuItem *m)
Disables the menu item.
int uiMenuItemChecked(uiMenuItem *m)
Returns whether or not the menu item's checkbox is checked.
void uiMenuItemOnClicked(uiMenuItem *m, void(*f)(uiMenuItem *sender, uiWindow *window, void *senderData), void *data)
Registers a callback for when the menu item is clicked.
void uiMenuItemEnable(uiMenuItem *m)
Enables the menu item.
void uiMenuItemSetChecked(uiMenuItem *m, int checked)
Sets whether or not the menu item's checkbox is checked.
A control with a multi line text entry field.
void uiMultilineEntryOnChanged(uiMultilineEntry *e, void(*f)(uiMultilineEntry *sender, void *senderData), void *data)
Registers a callback for when the user changes the multi line entry's text.
void uiMultilineEntryAppend(uiMultilineEntry *e, const char *text)
Appends text to the multi line entry's text.
void uiMultilineEntrySetReadOnly(uiMultilineEntry *e, int readonly)
Sets whether or not the multi line entry's text is read only.
uiMultilineEntry * uiNewMultilineEntry(void)
Creates a new multi line entry that visually wraps text when lines overflow.
void uiMultilineEntrySetText(uiMultilineEntry *e, const char *text)
Sets the multi line entry's text.
uiMultilineEntry * uiNewNonWrappingMultilineEntry(void)
Creates a new multi line entry that scrolls horizontally when lines overflow.
char * uiMultilineEntryText(uiMultilineEntry *e)
Returns the multi line entry's text.
int uiMultilineEntryReadOnly(uiMultilineEntry *e)
Returns whether or not the multi line entry's text can be changed.
A control that visualizes the progress of a task via the fill level of a horizontal bar.
uiProgressBar * uiNewProgressBar(void)
Creates a new progress bar.
void uiProgressBarSetValue(uiProgressBar *p, int n)
Sets the progress bar value.
int uiProgressBarValue(uiProgressBar *p)
Returns the progress bar value.
A multiple choice control of check buttons from which only one can be selected at a time.
void uiRadioButtonsSetSelected(uiRadioButtons *r, int index)
Sets the item selected.
void uiRadioButtonsAppend(uiRadioButtons *r, const char *text)
Appends a radio button.
int uiRadioButtonsSelected(uiRadioButtons *r)
Returns the index of the item selected.
void uiRadioButtonsOnSelected(uiRadioButtons *r, void(*f)(uiRadioButtons *sender, void *senderData), void *data)
Registers a callback for when radio button is selected.
uiRadioButtons * uiNewRadioButtons(void)
Creates a new radio buttons instance.
A control to visually separate controls, horizontally or vertically.
uiSeparator * uiNewHorizontalSeparator(void)
Creates a new horizontal separator to separate controls being stacked vertically.
uiSeparator * uiNewVerticalSeparator(void)
Creates a new vertical separator to separate controls being stacked horizontally.
A control to display and modify integer values via a user draggable slider.
void uiSliderOnReleased(uiSlider *s, void(*f)(uiSlider *sender, void *senderData), void *data)
Registers a callback for when the slider is released from dragging.
uiSlider * uiNewSlider(int min, int max)
Creates a new slider.
int uiSliderHasToolTip(uiSlider *s)
Returns whether or not the slider has a tool tip.
int uiSliderValue(uiSlider *s)
Returns the slider value.
void uiSliderSetValue(uiSlider *s, int value)
Sets the slider value.
void uiSliderOnChanged(uiSlider *s, void(*f)(uiSlider *sender, void *senderData), void *data)
Registers a callback for when the slider value is changed by the user.
void uiSliderSetHasToolTip(uiSlider *s, int hasToolTip)
Sets whether or not the slider has a tool tip.
void uiSliderSetRange(uiSlider *s, int min, int max)
Sets the slider range.
A control to display and modify integer values via a text field or +/- buttons.
void uiSpinboxOnChanged(uiSpinbox *s, void(*f)(uiSpinbox *sender, void *senderData), void *data)
Registers a callback for when the spinbox value is changed by the user.
void uiSpinboxSetValue(uiSpinbox *s, int value)
Sets the spinbox value.
uiSpinbox * uiNewSpinbox(int min, int max)
Creates a new spinbox.
int uiSpinboxValue(uiSpinbox *s)
Returns the spinbox value.
A multi page control interface that displays one page at a time.
void uiTabAppend(uiTab *t, const char *name, uiControl *c)
Appends a control in form of a page/tab with label.
void uiTabSetMargined(uiTab *t, int index, int margined)
Sets whether or not the page/tab at index has a margin.
void uiTabOnSelected(uiTab *t, void(*f)(uiTab *sender, void *senderData), void *data)
Registers a callback for when a tab is selected.
int uiTabNumPages(uiTab *t)
Returns the number of pages contained.
void uiTabSetSelected(uiTab *t, int index)
Sets the tab selected.
int uiTabMargined(uiTab *t, int index)
Returns whether or not the page/tab at index has a margin.
int uiTabSelected(uiTab *t)
Returns the index of the tab selected.
void uiTabInsertAt(uiTab *t, const char *name, int index, uiControl *c)
Inserts a control in form of a page/tab with label at index.
void uiTabDelete(uiTab *t, int index)
Removes the control at index.
uiTab * uiNewTab(void)
Creates a new tab container.
A control to display data in a tabular fashion.
void uiTableAppendButtonColumn(uiTable *t, const char *name, int buttonModelColumn, int buttonClickableModelColumn)
Appends a column to the table containing a button.
void uiTableOnRowDoubleClicked(uiTable *t, void(*f)(uiTable *t, int row, void *data), void *data)
Registers a callback for when the user double clicks a table row.
uiTableSelection * uiTableGetSelection(uiTable *t)
Returns the current table selection.
void uiTableOnRowClicked(uiTable *t, void(*f)(uiTable *t, int row, void *data), void *data)
Registers a callback for when the user single clicks a table row.
void uiTableColumnSetWidth(uiTable *t, int column, int width)
Sets the table column width.
uiSortIndicator uiTableHeaderSortIndicator(uiTable *t, int column)
Returns the column's sort indicator displayed in the table header.
int uiTableHeaderVisible(uiTable *t)
Returns whether or not the table header is visible.
void uiTableAppendImageTextColumn(uiTable *t, const char *name, int imageModelColumn, int textModelColumn, int textEditableModelColumn, uiTableTextColumnOptionalParams *textParams)
Appends a column to the table that displays both an image and text.
void uiTableAppendCheckboxTextColumn(uiTable *t, const char *name, int checkboxModelColumn, int checkboxEditableModelColumn, int textModelColumn, int textEditableModelColumn, uiTableTextColumnOptionalParams *textParams)
Appends a column to the table containing a checkbox and text.
int uiTableColumnWidth(uiTable *t, int column)
Returns the table column width.
void uiTableAppendTextColumn(uiTable *t, const char *name, int textModelColumn, int textEditableModelColumn, uiTableTextColumnOptionalParams *textParams)
Appends a text column to the table.
void uiTableSetSelectionMode(uiTable *t, uiTableSelectionMode mode)
Sets the table selection mode.
void uiTableSetSelection(uiTable *t, uiTableSelection *sel)
Sets the current table selection clearing any previous selection.
uiTable * uiNewTable(uiTableParams *params)
Creates a new table.
void uiTableOnSelectionChanged(uiTable *t, void(*f)(uiTable *t, void *data), void *data)
Registers a callback for when the table selection changed.
void uiTableHeaderOnClicked(uiTable *t, void(*f)(uiTable *sender, int column, void *senderData), void *data)
Registers a callback for when a table column header is clicked.
void uiTableAppendCheckboxColumn(uiTable *t, const char *name, int checkboxModelColumn, int checkboxEditableModelColumn)
Appends a column to the table containing a checkbox.
void uiTableHeaderSetSortIndicator(uiTable *t, int column, uiSortIndicator indicator)
Sets the column's sort indicator displayed in the table header.
uiTableSelectionMode uiTableGetSelectionMode(uiTable *t)
Returns the table selection mode.
void uiTableAppendImageColumn(uiTable *t, const char *name, int imageModelColumn)
Appends an image column to the table.
void uiTableHeaderSetVisible(uiTable *t, int visible)
Sets whether or not the table header is visible.
void uiTableAppendProgressBarColumn(uiTable *t, const char *name, int progressModelColumn)
Appends a column to the table containing a progress bar.
Developer defined methods for data retrieval and setting.
Definition: ui.h:3586
void(* SetCellValue)(uiTableModelHandler *, uiTableModel *, int, int, const uiTableValue *)
Sets the cell value for (row, column).
Definition: ui.h:3636
int(* NumColumns)(uiTableModelHandler *, uiTableModel *)
Returns the number of columns in the uiTableModel.
Definition: ui.h:3595
uiTableValueType(* ColumnType)(uiTableModelHandler *, uiTableModel *, int column)
Returns the column type in for of a uiTableValueType.
Definition: ui.h:3603
int(* NumRows)(uiTableModelHandler *, uiTableModel *)
Returns the number of rows in the uiTableModel.
Definition: ui.h:3608
Table model delegate to retrieve data and inform about model changes.
uiTableModel * uiNewTableModel(uiTableModelHandler *mh)
Creates a new table model.
void uiTableModelRowChanged(uiTableModel *m, int index)
Informs all associated uiTable views that a row has been changed.
void uiFreeTableModel(uiTableModel *m)
Frees the table model.
void uiTableModelRowInserted(uiTableModel *m, int newIndex)
Informs all associated uiTable views that a new row has been added.
void uiTableModelRowDeleted(uiTableModel *m, int oldIndex)
Informs all associated uiTable views that a row has been deleted.
Table parameters passed to uiNewTable().
Definition: ui.h:3730
int RowBackgroundColorModelColumn
uiTableModel column that defines background color for each row,
Definition: ui.h:3743
uiTableModel * Model
Model holding the data to be displayed.
Definition: ui.h:3734
Holds an array of selected row indices for a table.
Definition: ui.h:4139
void uiFreeTableSelection(uiTableSelection *s)
Frees the given uiTableSelection and all it's resources.
int * Rows
Array containing valid row indices, NULL on empty selection.
Definition: ui.h:4141
int NumRows
Non-negative number of selected rows.
Definition: ui.h:4140
Optional parameters to control the appearance of text columns.
Definition: ui.h:3711
int ColorModelColumn
uiTableModel column that defines the text color for each cell.
Definition: ui.h:3720
Container to store values used in container related methods.
int uiTableValueInt(const uiTableValue *v)
Returns the integer value held internally.
void uiTableValueColor(const uiTableValue *v, double *r, double *g, double *b, double *a)
Returns the color value held internally.
void uiFreeTableValue(uiTableValue *v)
Frees the uiTableValue.
uiTableValue * uiNewTableValueImage(uiImage *img)
Creates a new table value to store an image.
uiTableValueType uiTableValueGetType(const uiTableValue *v)
Gets the uiTableValue type.
uiTableValue * uiNewTableValueString(const char *str)
Creates a new table value to store a text string.
const char * uiTableValueString(const uiTableValue *v)
Returns the string value held internally.
uiTableValue * uiNewTableValueInt(int i)
Creates a new table value to store an integer.
uiTableValue * uiNewTableValueColor(double r, double g, double b, double a)
Creates a new table value to store a color in.
uiImage * uiTableValueImage(const uiTableValue *v)
Returns a reference to the image contained.
A control that represents a top-level window.
int uiWindowFocused(uiWindow *w)
Returns whether or not the window is focused.
void uiWindowPosition(uiWindow *w, int *x, int *y)
Gets the window position.
void uiWindowSetContentSize(uiWindow *w, int width, int height)
Sets the window content size.
void uiWindowSetResizeable(uiWindow *w, int resizeable)
Sets whether or not the window is user resizeable.
void uiWindowOnClosing(uiWindow *w, int(*f)(uiWindow *sender, void *senderData), void *data)
Registers a callback for when the window is to be closed.
int uiWindowBorderless(uiWindow *w)
Returns whether or not the window is borderless.
int uiWindowMargined(uiWindow *w)
Returns whether or not the window has a margin.
void uiWindowOnContentSizeChanged(uiWindow *w, void(*f)(uiWindow *sender, void *senderData), void *data)
Registers a callback for when the window content size is changed.
int uiWindowFullscreen(uiWindow *w)
Returns whether or not the window is full screen.
void uiWindowSetBorderless(uiWindow *w, int borderless)
Sets whether or not the window is borderless.
int uiWindowResizeable(uiWindow *w)
Returns whether or not the window is user resizeable.
char * uiWindowTitle(uiWindow *w)
Returns the window title.
void uiWindowSetTitle(uiWindow *w, const char *title)
Sets the window title.
void uiWindowSetChild(uiWindow *w, uiControl *child)
Sets the window's child.
void uiWindowSetFullscreen(uiWindow *w, int fullscreen)
Sets whether or not the window is full screen.
void uiWindowSetPosition(uiWindow *w, int x, int y)
Moves the window to the specified position.
void uiWindowOnPositionChanged(uiWindow *w, void(*f)(uiWindow *sender, void *senderData), void *data)
Registers a callback for when the window moved.
void uiWindowContentSize(uiWindow *w, int *width, int *height)
Gets the window content size.
void uiWindowOnFocusChanged(uiWindow *w, void(*f)(uiWindow *sender, void *senderData), void *data)
Registers a callback for when the window focus changes.
void uiWindowSetMargined(uiWindow *w, int margined)
Sets whether or not the window has a margin.
uiWindow * uiNewWindow(const char *title, int width, int height, int hasMenubar)
Creates a new uiWindow.
void uiDrawMatrixMultiply(uiDrawMatrix *dest, uiDrawMatrix *src)
uiAttribute * uiNewUnderlineAttribute(uiUnderline u)
void uiFreeAttributedString(uiAttributedString *s)
uiWindowResizeEdge
Definition: ui.h:2122
@ uiWindowResizeEdgeTop
Definition: ui.h:2124
@ uiWindowResizeEdgeBottom
Definition: ui.h:2126
@ uiWindowResizeEdgeBottomLeft
Definition: ui.h:2129
@ uiWindowResizeEdgeLeft
Definition: ui.h:2123
@ uiWindowResizeEdgeRight
Definition: ui.h:2125
@ uiWindowResizeEdgeTopLeft
Definition: ui.h:2127
@ uiWindowResizeEdgeBottomRight
Definition: ui.h:2130
@ uiWindowResizeEdgeTopRight
Definition: ui.h:2128
const uiOpenTypeFeatures * uiAttributeFeatures(const uiAttribute *a)
uiTableValueType
uiTableValue types.
Definition: ui.h:3412
@ uiTableValueTypeImage
Definition: ui.h:3414
@ uiTableValueTypeInt
Definition: ui.h:3415
@ uiTableValueTypeColor
Definition: ui.h:3416
@ uiTableValueTypeString
Definition: ui.h:3413
uiOpenTypeFeatures * uiNewOpenTypeFeatures(void)
#define _UI_ENUM(s)
Definition: ui.h:44
void uiDrawSave(uiDrawContext *c)
void uiDrawFreeTextLayout(uiDrawTextLayout *tl)
void uiOpenTypeFeaturesForEach(const uiOpenTypeFeatures *otf, uiOpenTypeFeaturesForEachFunc f, void *data)
uiAttributedString * uiNewAttributedString(const char *initialString)
uiAt
Placement specifier to define placement in relation to another control.
Definition: ui.h:3170
@ uiAtTop
Place above control.
Definition: ui.h:3172
@ uiAtLeading
Place before control.
Definition: ui.h:3171
@ uiAtBottom
Place below control.
Definition: ui.h:3174
@ uiAtTrailing
Place behind control.
Definition: ui.h:3173
void uiDrawPathNewFigureWithArc(uiDrawPath *p, double xCenter, double yCenter, double radius, double startAngle, double sweep, int negative)
struct uiAttributedString uiAttributedString
Definition: ui.h:2673
uiAttribute * uiNewSizeAttribute(double size)
void uiLoadControlFont(uiFontDescriptor *f)
Loads the platform's default control font.
const char * uiInit(uiInitOptions *options)
void uiDrawPathAddRectangle(uiDrawPath *p, double x, double y, double width, double height)
size_t uiAttributedStringByteIndexToGrapheme(uiAttributedString *s, size_t pos)
size_t uiAttributedStringGraphemeToByteIndex(uiAttributedString *s, size_t pos)
uiForEach(* uiAttributedStringForEachAttributeFunc)(const uiAttributedString *s, const uiAttribute *a, size_t start, size_t end, void *data)
Definition: ui.h:2679
void uiMainSteps(void)
void uiAttributedStringDelete(uiAttributedString *s, size_t start, size_t end)
void uiDrawFill(uiDrawContext *c, uiDrawPath *path, uiDrawBrush *b)
uiArea * uiNewScrollingArea(uiAreaHandler *ah, int width, int height)
void uiAttributeColor(const uiAttribute *a, double *r, double *g, double *b, double *alpha)
uiTextItalic
Definition: ui.h:2442
@ uiTextItalicOblique
Definition: ui.h:2444
@ uiTextItalicItalic
Definition: ui.h:2445
@ uiTextItalicNormal
Definition: ui.h:2443
void uiDrawPathLineTo(uiDrawPath *p, double x, double y)
void uiDrawFreePath(uiDrawPath *p)
uiModifiers
Keyboard modifier keys.
Definition: ui.h:2922
@ uiModifierAlt
Alternate/Option key.
Definition: ui.h:2924
@ uiModifierSuper
Super/Command/Windows key.
Definition: ui.h:2926
@ uiModifierShift
Shift key.
Definition: ui.h:2925
@ uiModifierCtrl
Control key.
Definition: ui.h:2923
void uiFreeText(char *text)
Frees a non-NULL string owned by the caller when the returning function specifies uiFreeText() as its...
void uiAttributeUnderlineColor(const uiAttribute *a, uiUnderlineColor *u, double *r, double *g, double *b, double *alpha)
uiOpenTypeFeatures * uiOpenTypeFeaturesClone(const uiOpenTypeFeatures *otf)
void uiTimer(int milliseconds, int(*f)(void *data), void *data)
void uiMain(void)
uiDrawTextAlign
Definition: ui.h:2799
@ uiDrawTextAlignCenter
Definition: ui.h:2801
@ uiDrawTextAlignLeft
Definition: ui.h:2800
@ uiDrawTextAlignRight
Definition: ui.h:2802
void uiFreeInitError(const char *err)
uiForEach(* uiOpenTypeFeaturesForEachFunc)(const uiOpenTypeFeatures *otf, char a, char b, char c, char d, uint32_t value, void *data)
Definition: ui.h:2580
struct uiAttribute uiAttribute
Definition: ui.h:2348
int uiOpenTypeFeaturesGet(const uiOpenTypeFeatures *otf, char a, char b, char c, char d, uint32_t *value)
struct uiDrawPath uiDrawPath
Definition: ui.h:2194
uiDrawTextLayout * uiDrawNewTextLayout(uiDrawTextLayoutParams *params)
uiAttributeType uiAttributeGetType(const uiAttribute *a)
uiTextWeight
Definition: ui.h:2411
@ uiTextWeightMaximum
Definition: ui.h:2424
@ uiTextWeightNormal
Definition: ui.h:2417
@ uiTextWeightBook
Definition: ui.h:2416
@ uiTextWeightMedium
Definition: ui.h:2418
@ uiTextWeightUltraLight
Definition: ui.h:2414
@ uiTextWeightBold
Definition: ui.h:2420
@ uiTextWeightUltraBold
Definition: ui.h:2421
@ uiTextWeightSemiBold
Definition: ui.h:2419
@ uiTextWeightUltraHeavy
Definition: ui.h:2423
@ uiTextWeightLight
Definition: ui.h:2415
@ uiTextWeightThin
Definition: ui.h:2413
@ uiTextWeightMinimum
Definition: ui.h:2412
@ uiTextWeightHeavy
Definition: ui.h:2422
struct uiDrawContext uiDrawContext
Definition: ui.h:2106
int uiDrawMatrixInvertible(uiDrawMatrix *m)
void uiQuit(void)
uiAttribute * uiNewFamilyAttribute(const char *family)
void uiUninit(void)
uiTextStretch uiAttributeStretch(const uiAttribute *a)
void uiAttributedStringAppendUnattributed(uiAttributedString *s, const char *str)
uiAttribute * uiNewColorAttribute(double r, double g, double b, double a)
void uiDrawMatrixTranslate(uiDrawMatrix *m, double x, double y)
const char * uiAttributedStringString(const uiAttributedString *s)
void uiDrawPathEnd(uiDrawPath *p)
void uiDrawText(uiDrawContext *c, uiDrawTextLayout *tl, double x, double y)
void uiOpenTypeFeaturesRemove(uiOpenTypeFeatures *otf, char a, char b, char c, char d)
void uiAttributedStringInsertAtUnattributed(uiAttributedString *s, const char *str, size_t at)
uiAttribute * uiNewFeaturesAttribute(const uiOpenTypeFeatures *otf)
void uiDrawClip(uiDrawContext *c, uiDrawPath *path)
uiUnderline uiAttributeUnderline(const uiAttribute *a)
void uiQueueMain(void(*f)(void *data), void *data)
uiTextWeight uiAttributeWeight(const uiAttribute *a)
double uiAttributeSize(const uiAttribute *a)
void uiDrawTransform(uiDrawContext *c, uiDrawMatrix *m)
uiAttribute * uiNewWeightAttribute(uiTextWeight weight)
uiAttribute * uiNewBackgroundAttribute(double r, double g, double b, double a)
uiAttributeType
Definition: ui.h:2361
@ uiAttributeTypeUnderline
Definition: ui.h:2369
@ uiAttributeTypeBackground
Definition: ui.h:2368
@ uiAttributeTypeFamily
Definition: ui.h:2362
@ uiAttributeTypeItalic
Definition: ui.h:2365
@ uiAttributeTypeColor
Definition: ui.h:2367
@ uiAttributeTypeUnderlineColor
Definition: ui.h:2370
@ uiAttributeTypeStretch
Definition: ui.h:2366
@ uiAttributeTypeSize
Definition: ui.h:2363
@ uiAttributeTypeFeatures
Definition: ui.h:2371
@ uiAttributeTypeWeight
Definition: ui.h:2364
void uiAreaBeginUserWindowMove(uiArea *a)
uiUnderline
Definition: ui.h:2506
@ uiUnderlineSuggestion
Definition: ui.h:2510
@ uiUnderlineSingle
Definition: ui.h:2508
@ uiUnderlineDouble
Definition: ui.h:2509
@ uiUnderlineNone
Definition: ui.h:2507
uiExtKey
Definition: ui.h:2951
@ uiExtKeyF8
Definition: ui.h:2970
@ uiExtKeyNSubtract
Definition: ui.h:2988
@ uiExtKeyF5
Definition: ui.h:2967
@ uiExtKeyF3
Definition: ui.h:2965
@ uiExtKeyN3
Definition: ui.h:2978
@ uiExtKeyPageUp
Definition: ui.h:2957
@ uiExtKeyF12
Definition: ui.h:2974
@ uiExtKeyF4
Definition: ui.h:2966
@ uiExtKeyRight
Definition: ui.h:2962
@ uiExtKeyNDot
Definition: ui.h:2985
@ uiExtKeyDelete
Definition: ui.h:2954
@ uiExtKeyNAdd
Definition: ui.h:2987
@ uiExtKeyN6
Definition: ui.h:2981
@ uiExtKeyNEnter
Definition: ui.h:2986
@ uiExtKeyDown
Definition: ui.h:2960
@ uiExtKeyF10
Definition: ui.h:2972
@ uiExtKeyN8
Definition: ui.h:2983
@ uiExtKeyN4
Definition: ui.h:2979
@ uiExtKeyInsert
Definition: ui.h:2953
@ uiExtKeyN0
Definition: ui.h:2975
@ uiExtKeyN5
Definition: ui.h:2980
@ uiExtKeyN1
Definition: ui.h:2976
@ uiExtKeyF11
Definition: ui.h:2973
@ uiExtKeyF1
Definition: ui.h:2963
@ uiExtKeyF2
Definition: ui.h:2964
@ uiExtKeyF6
Definition: ui.h:2968
@ uiExtKeyLeft
Definition: ui.h:2961
@ uiExtKeyUp
Definition: ui.h:2959
@ uiExtKeyEscape
Definition: ui.h:2952
@ uiExtKeyF7
Definition: ui.h:2969
@ uiExtKeyN7
Definition: ui.h:2982
@ uiExtKeyNDivide
Definition: ui.h:2990
@ uiExtKeyEnd
Definition: ui.h:2956
@ uiExtKeyN2
Definition: ui.h:2977
@ uiExtKeyHome
Definition: ui.h:2955
@ uiExtKeyF9
Definition: ui.h:2971
@ uiExtKeyPageDown
Definition: ui.h:2958
@ uiExtKeyN9
Definition: ui.h:2984
@ uiExtKeyNMultiply
Definition: ui.h:2989
#define _UI_EXTERN
Definition: ui.h:39
uiForEach
Definition: ui.h:53
@ uiForEachStop
Definition: ui.h:55
@ uiForEachContinue
Definition: ui.h:54
void uiAreaBeginUserWindowResize(uiArea *a, uiWindowResizeEdge edge)
void uiDrawTextLayoutExtents(uiDrawTextLayout *tl, double *width, double *height)
size_t uiAttributedStringLen(const uiAttributedString *s)
uiDrawPath * uiDrawNewPath(uiDrawFillMode fillMode)
uiAttribute * uiNewUnderlineColorAttribute(uiUnderlineColor u, double r, double g, double b, double a)
int uiDrawPathEnded(uiDrawPath *p)
void uiDrawPathNewFigure(uiDrawPath *p, double x, double y)
void uiDrawStroke(uiDrawContext *c, uiDrawPath *path, uiDrawBrush *b, uiDrawStrokeParams *p)
size_t uiAttributedStringNumGraphemes(uiAttributedString *s)
uiDrawLineJoin
Definition: ui.h:2214
@ uiDrawLineJoinRound
Definition: ui.h:2216
@ uiDrawLineJoinMiter
Definition: ui.h:2215
@ uiDrawLineJoinBevel
Definition: ui.h:2217
void uiFreeFontDescriptor(uiFontDescriptor *desc)
Frees resources owned by a uiFontDescriptor filled by libui.
const char * uiAttributeFamily(const uiAttribute *a)
void uiDrawPathArcTo(uiDrawPath *p, double xCenter, double yCenter, double radius, double startAngle, double sweep, int negative)
uiDrawFillMode
Definition: ui.h:2225
@ uiDrawFillModeWinding
Definition: ui.h:2226
@ uiDrawFillModeAlternate
Definition: ui.h:2227
uiDrawLineCap
Definition: ui.h:2208
@ uiDrawLineCapRound
Definition: ui.h:2210
@ uiDrawLineCapFlat
Definition: ui.h:2209
@ uiDrawLineCapSquare
Definition: ui.h:2211
void uiOpenTypeFeaturesAdd(uiOpenTypeFeatures *otf, char a, char b, char c, char d, uint32_t value)
void uiDrawMatrixTransformSize(uiDrawMatrix *m, double *x, double *y)
void uiFreeOpenTypeFeatures(uiOpenTypeFeatures *otf)
uiTextItalic uiAttributeItalic(const uiAttribute *a)
void uiDrawMatrixSetIdentity(uiDrawMatrix *m)
const char * uiVersion(void)
Returns the build's commit-* tag or Git hash, or unknown.
void uiDrawPathCloseFigure(uiDrawPath *p)
struct uiOpenTypeFeatures uiOpenTypeFeatures
Definition: ui.h:2574
void uiAttributedStringSetAttribute(uiAttributedString *s, uiAttribute *a, size_t start, size_t end)
void uiDrawMatrixRotate(uiDrawMatrix *m, double x, double y, double amount)
uiAttribute * uiNewItalicAttribute(uiTextItalic italic)
int uiDrawMatrixInvert(uiDrawMatrix *m)
void uiUserBugCannotSetParentOnToplevel(const char *type)
struct uiDrawTextLayout uiDrawTextLayout
Definition: ui.h:2794
uiUnderlineColor
Definition: ui.h:2534
@ uiUnderlineColorCustom
Definition: ui.h:2535
@ uiUnderlineColorAuxiliary
Definition: ui.h:2538
@ uiUnderlineColorGrammar
Definition: ui.h:2537
@ uiUnderlineColorSpelling
Definition: ui.h:2536
void uiDrawMatrixScale(uiDrawMatrix *m, double xCenter, double yCenter, double x, double y)
uiAlign
Alignment specifiers to define placement within the reserved area.
Definition: ui.h:3157
@ uiAlignStart
Place at start.
Definition: ui.h:3159
@ uiAlignEnd
Place at end.
Definition: ui.h:3161
@ uiAlignFill
Fill area.
Definition: ui.h:3158
@ uiAlignCenter
Place in center.
Definition: ui.h:3160
uiDrawBrushType
Definition: ui.h:2201
@ uiDrawBrushTypeImage
Definition: ui.h:2205
@ uiDrawBrushTypeSolid
Definition: ui.h:2202
@ uiDrawBrushTypeLinearGradient
Definition: ui.h:2203
@ uiDrawBrushTypeRadialGradient
Definition: ui.h:2204
void uiOnShouldQuit(int(*f)(void *data), void *data)
uiArea * uiNewArea(uiAreaHandler *ah)
void uiDrawRestore(uiDrawContext *c)
void uiDrawMatrixTransformPoint(uiDrawMatrix *m, double *x, double *y)
void uiAttributedStringForEachAttribute(const uiAttributedString *s, uiAttributedStringForEachAttributeFunc f, void *data)
void uiDrawPathBezierTo(uiDrawPath *p, double c1x, double c1y, double c2x, double c2y, double endX, double endY)
uiTextStretch
Definition: ui.h:2468
@ uiTextStretchSemiCondensed
Definition: ui.h:2472
@ uiTextStretchExpanded
Definition: ui.h:2475
@ uiTextStretchExtraExpanded
Definition: ui.h:2476
@ uiTextStretchUltraExpanded
Definition: ui.h:2477
@ uiTextStretchExtraCondensed
Definition: ui.h:2470
@ uiTextStretchCondensed
Definition: ui.h:2471
@ uiTextStretchSemiExpanded
Definition: ui.h:2474
@ uiTextStretchNormal
Definition: ui.h:2473
@ uiTextStretchUltraCondensed
Definition: ui.h:2469
void uiDrawMatrixSkew(uiDrawMatrix *m, double x, double y, double xamount, double yamount)
void uiFreeAttribute(uiAttribute *a)
uiAttribute * uiNewStretchAttribute(uiTextStretch stretch)
int uiMainStep(int wait)
@ uiTableSelectionModeZeroOrMany
Allow zero or many (multiple) rows to be selected.
Definition: ui.h:4090
@ uiTableSelectionModeZeroOrOne
Allow zero or one row to be selected.
Definition: ui.h:4088
@ uiTableSelectionModeNone
Allow no row selection.
Definition: ui.h:4087
@ uiTableSelectionModeOne
Allow for exactly one row to be selected.
Definition: ui.h:4089
@ uiSortIndicatorNone
Definition: ui.h:3544
@ uiSortIndicatorDescending
Definition: ui.h:3546
@ uiSortIndicatorAscending
Definition: ui.h:3545