Add uiScrollView GTK implementation

This commit is contained in:
swissChili 2021-09-09 10:20:46 -07:00
parent fea45b2d5b
commit 7080e121c4
7 changed files with 109 additions and 0 deletions

View File

@ -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

View File

@ -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

39
examples/scrolling/main.c Normal file
View File

@ -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;
}

BIN
examples/scrolling/unix.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

7
ui.h
View File

@ -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;

View File

@ -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',

57
unix/scrollview.c Normal file
View File

@ -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;
}