Add uiScrollView GTK implementation
This commit is contained in:
parent
fea45b2d5b
commit
7080e121c4
|
@ -19,6 +19,8 @@
|
|||
#define uiMultilineEntrySignature 0x4D6C6E45
|
||||
#define uiProgressBarSignature 0x50426172
|
||||
#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 uiSliderSignature 0x536C6964
|
||||
#define uiSpinboxSignature 0x5370696E
|
||||
|
|
|
@ -48,6 +48,9 @@ libui_examples = {
|
|||
'datetime': {
|
||||
'sources': ['datetime/main.c'],
|
||||
},
|
||||
'scrolling': {
|
||||
'sources': ['scrolling/main.c'],
|
||||
},
|
||||
}
|
||||
foreach name, args : libui_examples
|
||||
# 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 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 uiAreaHandler uiAreaHandler;
|
||||
typedef struct uiAreaDrawParams uiAreaDrawParams;
|
||||
|
|
|
@ -35,6 +35,7 @@ libui_sources += [
|
|||
'unix/opentype.c',
|
||||
'unix/progressbar.c',
|
||||
'unix/radiobuttons.c',
|
||||
'unix/scrollview.c',
|
||||
'unix/separator.c',
|
||||
'unix/slider.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