diff --git a/contrib/C_Layer/EXAMPLE/boxlib/Makefile b/contrib/C_Layer/EXAMPLE/boxlib/Makefile new file mode 100755 index 0000000000..062869d2ec --- /dev/null +++ b/contrib/C_Layer/EXAMPLE/boxlib/Makefile @@ -0,0 +1,32 @@ +NAME = boxlib +CC = kos32-gcc +LD = kos32-ld + +SDK_DIR = $(abspath ../../../sdk) +CLAYER = $(abspath ../../) + +LDFLAGS = -static -S -nostdlib -T $(SDK_DIR)/sources/newlib/app.lds \ + --image-base 0 + +CFLAGS = -g -U_Win32 -U_WIN32 -U__MINGW32__ + +INCLUDES = -I. -I$(SDK_DIR)/sources/newlib/libc/include +LIBPATH = -L $(SDK_DIR)/lib -L /home/autobuild/tools/win32/mingw32/lib + +OBJPATH = $(CLAYER)/OBJ + +SOURCES = boxlib.c + +OBJECTS = $(patsubst %.c, %.o, $(SOURCES)) + +all:$(NAME) + +$(NAME): $(OBJECTS) Makefile + $(LD) $(LIBPATH) --subsystem native -o $@ $(OBJECTS) $(OBJPATH)/loadboxlib.obj $(LDFLAGS) -lc -lgcc -lc.dll + kos32-objcopy $@ -O binary + +%.o : %.c Makefile + $(CC) -c $(INCLUDES) $(CFLAGS) -o $@ $< + +clean: + -rm -f *.o *.map diff --git a/contrib/C_Layer/EXAMPLE/boxlib/boxlib.c b/contrib/C_Layer/EXAMPLE/boxlib/boxlib.c new file mode 100755 index 0000000000..24418c525f --- /dev/null +++ b/contrib/C_Layer/EXAMPLE/boxlib/boxlib.c @@ -0,0 +1,152 @@ +// BOXLIB example (scrollbar, progressbar) +// ! without kolibri_gui ! +// Writed by maxcodehack +// TCC version is in /programs/develop/ktcc/trunk/samples +#include +#include + +/// BOXLIB +// Modified from C_Layer +// C_Layer variant I don't like +extern int kolibri_boxlib_init(void); +typedef struct __attribute__ ((__packed__)) { + uint16_t xsize; + uint16_t xpos; + uint16_t ysize; + uint16_t ypos; + uint32_t btn_height; + uint32_t type; + uint32_t max_area; + uint32_t cur_area; + uint32_t position; + uint32_t back_color; + uint32_t front_color; + uint32_t line_color; + uint32_t redraw; + uint16_t delta; + uint16_t delta2; + uint16_t r_size_x; + uint16_t r_start_x; + uint16_t r_size_y; + uint16_t r_start_y; + uint32_t m_pos; + uint32_t m_pos2; + uint32_t m_keys; + uint32_t run_size; + uint32_t position2; + uint32_t work_size; + uint32_t all_redraw; + uint32_t ar_offset; +} scrollbar; + +extern void (*scrollbar_h_draw)(scrollbar*) __attribute__((__stdcall__)); +extern void (*scrollbar_h_mouse)(scrollbar*) __attribute__((__stdcall__)); +extern void (*scrollbar_v_draw)(scrollbar*) __attribute__((__stdcall__)); +extern void (*scrollbar_v_mouse)(scrollbar*) __attribute__((__stdcall__)); + +typedef struct { + unsigned int value; + unsigned int left; + unsigned int top; + unsigned int width; + unsigned int height; + unsigned int style; + unsigned int min; + unsigned int max; + unsigned int back_color; + unsigned int progress_color; + unsigned int frame_color; +} progressbar; + +extern void (*progressbar_draw)(progressbar *) __attribute__((__stdcall__)); +extern void (*progressbar_progress)(progressbar *) __attribute__((__stdcall__)); +/// BOXLIB + + +#define evReDraw 1 +#define evKey 2 +#define evButton 3 +#define evExit 4 +#define evDesktop 5 +#define evMouse 6 +#define evIPC 7 +#define evNetwork 8 +#define evDebug 9 + +#define WIN_W 640 +#define WIN_H 563 + +uint32_t wheels; +char* title = "Boxlib example"; +int win_bg_color = 0x858585; +scrollbar scroll = {15, WIN_W - 26, WIN_H - 29, 0, 0, 2, 215, 15, 0,0x707070,0xD2CED0,0x555555,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1}; +progressbar pg = {0, 10, 10, 270, 35, 1, 0, 200, 0xB4B4B4, 0x2728FF, 0xA9A9A9}; + +void draw_window(){ + BeginDraw(); + DrawWindow(215,100,WIN_W,WIN_H,title,win_bg_color,0x34); + scrollbar_v_draw(&scroll); + progressbar_draw(&pg); + EndDraw(); +} + +//// EVENTMASK +#define EVM_REDRAW 1 +#define EVM_KEY 2 +#define EVM_BUTTON 4 +#define EVM_EXIT 8 +#define EVM_BACKGROUND 16 +#define EVM_MOUSE 32 +#define EVM_IPC 64 +#define EVM_STACK 128 +#define EVM_DEBUG 256 +#define EVM_STACK2 512 +#define EVM_MOUSE_FILTER 0x80000000 +#define EVM_CURSOR_FILTER 0x40000000 +//// EVENTMASK + + +int main() +{ + kolibri_boxlib_init(); + + set_wanted_events_mask(EVM_REDRAW + EVM_KEY + EVM_BUTTON + EVM_MOUSE + EVM_MOUSE_FILTER); + while(1) + { + switch(GetOsEvent()) + { + case evButton: + if (get_os_button() == 1) exit(0); + break; + + case evKey: + get_key(); + break; + + case evReDraw: + draw_window(); + break; + case evMouse: + scrollbar_v_mouse(&scroll); + + // Wheel scrolling + // Quite unstable + /* + int scroll_strong = 40; + wheels = GetMouseWheels(); + if(wheels & 0xFFFF) + { + if((short)wheels > 0 && scroll.position < scroll.max_area - scroll_strong) + scroll.position += scroll_strong; + else if((short)wheels < 0 && scroll.position > 0) + scroll.position -= scroll_strong; + + scrollbar_v_draw(&scroll); + } + */ + pg.value = scroll.position; + progressbar_draw(&pg); + break; + } + } +}