# s3dw_button_new

    #include <s3dw.h>s3dw_button *s3dw_button_newconst s3dw_surface *surfaceconst char *textfloat posxfloat posy

Creates a new button on the surface, with "text" written on it and the upper left corner at (posx,posy) on the surface.

See s3dw_button for information about callbacks which may be defined.

## s3dw_label_new

    #include <s3dw.h>s3dw_label *s3dw_label_newconst s3dw_surface *surfaceconst char *textfloat posxfloat posy

Creates a new label on the surface, with "text" written on it and the upper left corner at (posx,posy) on the surface.

See s3dw_label for information about callbacks which may be defined.

## s3dw_input_new

    #include <s3dw.h>s3dw_input *s3dw_input_newconst s3dw_surface *surfacefloat widthfloat posxfloat posy

Creates a new input-box on the surface with a input width of "width", the upper left corner at (posx,posy) on the surface. The input-box is empty on creation and can be change with s3dw_input_change_text, and received with s3dw_input_gettext

See s3dw_input for information about callbacks which may be defined.

## s3dw_textbox_new

    #include <s3dw.h>s3dw_textbox *s3dw_textbox_newconst s3dw_surface *surfaceconst char *textfloat posxfloat posyfloat widthfloat height

Creates a new textbox on the surface, with "text" written on it and the upper left corner at (posx,posy) on the surface. Width and height define the size of the textbox including scrollbars which are rendered around the textfield.

See s3dw_textbox for information about callbacks which may be defined.

## s3dw_input_gettext

    #include <s3dw.h>char *s3dw_input_gettexts3dw_input *input

Returns the text which is currently entered in the referenced input-box.

## s3dw_input_change_text

    #include <s3dw.h>void s3dw_input_change_texts3dw_input *inputconst char *text

Change the text in the referenced input-box to the specified text.

## s3dw_label_change_text

    #include <s3dw.h>void s3dw_label_change_texts3dw_label *labelconst char *text

Change the text in the referenced label to the specified text.

## s3dw_surface_new

    #include <s3dw.h>s3dw_surface *s3dw_surface_newconst char *titlefloat widthfloat height

Creates a new surface (a new window) with title "title" and dimension "width" x "height".

See s3dw_surface for information about callbacks which may be defined.

## s3dw_getroot

    #include <s3dw.h>s3dw_widget *s3dw_getroot

Returns the root-widget, which holds all the surfaces. E.g. if you want to move all widgets at once, adjust the root-widgets x,y,z and use s3dw_moveit()

     s3dw_widget *root = s3dw_getroot();
     // move widget center to (0,5,0). upon creation, it's centered at (0,0,0),
     // so this might move it up
     root->x=0;
     root->y=5;
     root->z=0;
     s3dw_moveit(root);

## s3dw_moveit

    #include <s3dw.h>void s3dw_moveits3dw_widget *widget

Moves/translates the widget as you specified in it's private s3dw_widget structure. Should be casted with S3DWIDGET().

## s3dw_delete

    #include <s3dw.h>void s3dw_deletes3dw_widget *widget

Deletes any widget. Should be casted with S3DWIDGET().

## s3dw_show

    #include <s3dw.h>void s3dw_shows3dw_widget *widget

Switches a widget visible. Should be casted with S3DWIDGET().

## s3dw_focus

    #include <s3dw.h>void s3dw_focuss3dw_widget *focus

Gives focus to the widget, relative to its parent. That means you can focus a surface, and each surface can focus one of its element, e.g. an input field. Should be casted with S3DWIDGET().

## s3dw_textbox_scrollup

    #include <s3dw.h>void s3dw_textbox_scrollups3dw_textbox *textbox

Scrolls the text in the textbox up by one line, if possible.

## s3dw_textbox_scrolldown

    #include <s3dw.h>void s3dw_textbox_scrolldowns3dw_textbox *textbox

Scrolls the text in the textbox down by one line, if possible.

## s3dw_textbox_scrollleft

    #include <s3dw.h>void s3dw_textbox_scrolllefts3dw_textbox *textbox

Scrolls the text in the textbox to the left by one character, if possible.

## s3dw_textbox_scrollright

    #include <s3dw.h>void s3dw_textbox_scrollrights3dw_textbox *textbox

Scrolls the text in the textbox to the right by one character, if possible.

## s3dw_textbox_scrollto

    #include <s3dw.h>void s3dw_textbox_scrolltos3dw_textbox *textboxint xint y

Scrolls the text in the textbox so that the character in row y, column x is in the top left corner of the textbox.

## s3dw_textbox_change_text

    #include <s3dw.h>void s3dw_textbox_change_texts3dw_textbox *textboxconst char *text

Change the text in the referenced textbox to the specified text.

## s3dw_handle_click

    #include <s3dw.h>int s3dw_handle_clickconst struct s3d_evt *event

If you want your widgets on mouseclicks (believe me, you want that), you have to call this either in your clickhandler-function or specify it itself as the clickhandler.

     // way 1:
     s3d_set_callback(S3D_EVENT_OBJ_CLICK,s3dw_handle_click);

     // way 2:
     ...
     void click(struct s3d_evt *evt)
     {
             s3dw_handle_click(evt);
             ....
             // your own clickhandler code
             ...
     }
     ....
     s3d_set_callback(S3D_EVENT_OBJ_CLICK,click);

## s3dw_handle_key

    #include <s3dw.h>int s3dw_handle_keyconst struct s3d_evt *event

This is somehow useful to call in your keyhandler functions if you want to have input-boxes work. ;)

     // way 1:
     s3d_set_callback(S3D_EVENT_KEY,s3dw_handle_key);

     // way 2:
     ...
     void key(struct s3d_evt *evt)
     {
             s3dw_handle_key(evt);
             ....
             // your own keyhandler code
             ...
     }
     ....
     s3d_set_callback(S3D_EVENT_KEY,key);

## s3dw_object_info

    #include <s3dw.h>int s3dw_object_infostruct s3d_evt *event

This can be used to let s3dw handle S3D_EVENT_OBJ_INFO-events. With this, s3dw can consider the camera position and makes things like following the camera possible.

## s3dw_ani_mate

    #include <s3dw.h>void s3dw_ani_mate

Just call this in your mainloop if you want some nice window sliding animations. it's somewhat bloating, but you don't want to miss it ;)

     #include <time.h>   // nanosleep()
     static struct timespec t={0.33*1000*1000}; // 33 mili seconds
     void mainloop()
     {
             // keep this in your mainloop. this will do smooth animations for you ...
             s3dw_ani_mate();
             nanosleep(&t,NULL);
     }

     ....
     s3d_mainloop(mainloop);