Add uiScrollView GTK implementation
This commit is contained in:
parent
fea45b2d5b
commit
7080e121c4
|
@ -19,6 +19,8 @@
|
||||||
#define uiMultilineEntrySignature 0x4D6C6E45
|
#define uiMultilineEntrySignature 0x4D6C6E45
|
||||||
#define uiProgressBarSignature 0x50426172
|
#define uiProgressBarSignature 0x50426172
|
||||||
#define uiRadioButtonsSignature 0x5264696F
|
#define uiRadioButtonsSignature 0x5264696F
|
||||||
|
// I don't know how these should be generated, so here's the md5sum of "uiScrollView"
|
||||||
|
#define uiScrollViewSignature 0x5dcd9b83
|
||||||
#define uiSeparatorSignature 0x53657061
|
#define uiSeparatorSignature 0x53657061
|
||||||
#define uiSliderSignature 0x536C6964
|
#define uiSliderSignature 0x536C6964
|
||||||
#define uiSpinboxSignature 0x5370696E
|
#define uiSpinboxSignature 0x5370696E
|
||||||
|
|
|
@ -48,6 +48,9 @@ libui_examples = {
|
||||||
'datetime': {
|
'datetime': {
|
||||||
'sources': ['datetime/main.c'],
|
'sources': ['datetime/main.c'],
|
||||||
},
|
},
|
||||||
|
'scrolling': {
|
||||||
|
'sources': ['scrolling/main.c'],
|
||||||
|
},
|
||||||
}
|
}
|
||||||
foreach name, args : libui_examples
|
foreach name, args : libui_examples
|
||||||
# TODO once we upgrade to 0.49.0, add pie: true
|
# TODO once we upgrade to 0.49.0, add pie: true
|
||||||
|
|
|
@ -0,0 +1,39 @@
|
||||||
|
#include "../../ui.h"
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
int onClosing(uiWindow *w, void *data)
|
||||||
|
{
|
||||||
|
uiQuit();
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
uiInitOptions o;
|
||||||
|
uiWindow *w;
|
||||||
|
uiScrollView *s;
|
||||||
|
uiBox *box;
|
||||||
|
|
||||||
|
memset(&o, 0, sizeof (uiInitOptions));
|
||||||
|
if (uiInit(&o) != NULL)
|
||||||
|
abort();
|
||||||
|
|
||||||
|
w = uiNewWindow("Scrolling", 320, 240, 0);
|
||||||
|
s = uiNewScrollView();
|
||||||
|
box = uiNewVerticalBox();
|
||||||
|
uiScrollViewSetChild(s, uiControl(box));
|
||||||
|
uiScrollViewSetMargined(s, 1);
|
||||||
|
uiBoxSetPadded(box, 1);
|
||||||
|
|
||||||
|
for (int i = 0; i < 32; i++) {
|
||||||
|
uiButton *btn = uiNewButton("Button");
|
||||||
|
uiBoxAppend(box, uiControl(btn), 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
uiWindowOnClosing(w, onClosing, NULL);
|
||||||
|
uiWindowSetChild(w, uiControl(s));
|
||||||
|
uiControlShow(uiControl(w));
|
||||||
|
uiMain();
|
||||||
|
return 0;
|
||||||
|
}
|
Binary file not shown.
After Width: | Height: | Size: 20 KiB |
7
ui.h
7
ui.h
|
@ -297,6 +297,13 @@ _UI_EXTERN char *uiSaveFile(uiWindow *parent);
|
||||||
_UI_EXTERN void uiMsgBox(uiWindow *parent, const char *title, const char *description);
|
_UI_EXTERN void uiMsgBox(uiWindow *parent, const char *title, const char *description);
|
||||||
_UI_EXTERN void uiMsgBoxError(uiWindow *parent, const char *title, const char *description);
|
_UI_EXTERN void uiMsgBoxError(uiWindow *parent, const char *title, const char *description);
|
||||||
|
|
||||||
|
typedef struct uiScrollView uiScrollView;
|
||||||
|
#define uiScrollView(this) ((uiScrollView *) (this))
|
||||||
|
_UI_EXTERN uiScrollView *uiNewScrollView();
|
||||||
|
_UI_EXTERN void uiScrollViewSetChild(uiScrollView *v, uiControl *child);
|
||||||
|
_UI_EXTERN int uiScrollViewMargined(uiScrollView *v);
|
||||||
|
_UI_EXTERN void uiScrollViewSetMargined(uiScrollView *v, int margined);
|
||||||
|
|
||||||
typedef struct uiArea uiArea;
|
typedef struct uiArea uiArea;
|
||||||
typedef struct uiAreaHandler uiAreaHandler;
|
typedef struct uiAreaHandler uiAreaHandler;
|
||||||
typedef struct uiAreaDrawParams uiAreaDrawParams;
|
typedef struct uiAreaDrawParams uiAreaDrawParams;
|
||||||
|
|
|
@ -35,6 +35,7 @@ libui_sources += [
|
||||||
'unix/opentype.c',
|
'unix/opentype.c',
|
||||||
'unix/progressbar.c',
|
'unix/progressbar.c',
|
||||||
'unix/radiobuttons.c',
|
'unix/radiobuttons.c',
|
||||||
|
'unix/scrollview.c',
|
||||||
'unix/separator.c',
|
'unix/separator.c',
|
||||||
'unix/slider.c',
|
'unix/slider.c',
|
||||||
'unix/spinbox.c',
|
'unix/spinbox.c',
|
||||||
|
|
|
@ -0,0 +1,57 @@
|
||||||
|
// 9 september 2021
|
||||||
|
|
||||||
|
#include "uipriv_unix.h"
|
||||||
|
|
||||||
|
struct uiScrollView {
|
||||||
|
uiUnixControl c;
|
||||||
|
GtkWidget *widget;
|
||||||
|
GtkScrolledWindow *scroll;
|
||||||
|
GtkContainer *container;
|
||||||
|
|
||||||
|
uiprivChild *child;
|
||||||
|
|
||||||
|
int margined;
|
||||||
|
};
|
||||||
|
|
||||||
|
uiUnixControlAllDefaultsExceptDestroy(uiScrollView)
|
||||||
|
|
||||||
|
void uiScrollViewDestroy(uiControl *c)
|
||||||
|
{
|
||||||
|
uiScrollView *v = uiScrollView(c);
|
||||||
|
|
||||||
|
if (v->child != NULL)
|
||||||
|
uiprivChildDestroy(v->child);
|
||||||
|
g_object_unref(v->widget);
|
||||||
|
uiFreeControl(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
void uiScrollViewSetChild(uiScrollView *v, uiControl *child)
|
||||||
|
{
|
||||||
|
if (v->child != NULL)
|
||||||
|
uiprivChildRemove(v->child);
|
||||||
|
v->child = uiprivNewChildWithBox(child, uiControl(v), v->container, v->margined);
|
||||||
|
}
|
||||||
|
|
||||||
|
int uiScrollViewMargined(uiScrollView *v)
|
||||||
|
{
|
||||||
|
return v->margined;
|
||||||
|
}
|
||||||
|
|
||||||
|
void uiScrollViewSetMargined(uiScrollView *v, int margined)
|
||||||
|
{
|
||||||
|
v->margined = margined;
|
||||||
|
if (v->child != NULL)
|
||||||
|
uiprivChildSetMargined(v->child, v->margined);
|
||||||
|
}
|
||||||
|
|
||||||
|
uiScrollView *uiNewScrollView(void)
|
||||||
|
{
|
||||||
|
uiScrollView *v;
|
||||||
|
|
||||||
|
uiUnixNewControl(uiScrollView, v);
|
||||||
|
v->widget = gtk_scrolled_window_new(NULL, NULL);
|
||||||
|
v->scroll = GTK_SCROLLED_WINDOW(v->widget);
|
||||||
|
v->container = GTK_CONTAINER(v->widget);
|
||||||
|
|
||||||
|
return v;
|
||||||
|
}
|
Loading…
Reference in New Issue