Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void vgui_setup(void *fillrect, void *draw_text, void *mouse_pos, void *mouse_status) {
- g_controllers.fillrect = fillrect;
- g_controllers.draw_text = draw_text;
- g_controllers.get_mouse_pos = mouse_pos;
- g_controllers.get_mouse_button_status = mouse_status;
- g_vwindow_firts = NULL;
- g_vwindow_last = NULL;
- }
- /*int vgui_load_bmp_32pp(const char *path, vgui_bmp *vbmp) {
- vgui_bmp_header file_header = {0};
- vgui_bmp_infohdr file_hdrinfo = {0};
- FILE *fp_bitmap = NULL;
- if ((fp_bitmap = fopen(path, "rb")) == NULL)
- return VGUI_BMP_ERR_FILE_NO_FOUND;
- fread(&file_header, sizeof(file_header), 1, fp_bitmap);
- if (file_header.type != VGUI_HEADER_BMP_SIGNATURE)
- return VGUI_BMP_ERR_IS_NOT_BMP;
- fread(&file_hdrinfo, sizeof(file_hdrinfo), 1, fp_bitmap);
- if (file_hdrinfo.compression != 0 )
- return VGUI_BMP_ERR_IS_NOT_IMPLEMENTED;
- fseek(fp_bitmap, file_header.offbitmap, SEEK_SET);
- vbmp->bmp_array = malloc(file_hdrinfo.sizeofimage+1);
- memset(vbmp->bmp_array, 0, file_hdrinfo.sizeofimage+1);
- if (vbmp->bmp_array == NULL)
- return VGUI_BMP_ERR_IS_NOT_ALLOC_MEMORY;
- fread(vbmp->bmp_array, file_hdrinfo.sizeofimage, 1, fp_bitmap);
- vbmp->width = file_hdrinfo.width;
- vbmp->height = file_hdrinfo.height;
- vbmp->sizearray = file_hdrinfo.sizeofimage/4;
- fclose(fp_bitmap);
- return VGUI_BMP_OK;
- }*/
- void vgui_set_rect(int x, int y, int h, int w, vgui_rect *rect) {
- rect->x = x;
- rect->y = y;
- rect->h = h;
- rect->w = w;
- }
- void vgui_set_rect_relative(vgui_container *container, vgui_rect *relative) {
- if (container->is_relative == true && container->root->have_container == true) {
- relative->x = container->root->rect_container.x+(container->rect.x-container->root->rect.x);
- relative->y = container->root->rect_container.y+(container->rect.y-container->root->rect.y);
- } else {
- relative->x = container->rect.x;
- relative->y = container->rect.y;
- }
- relative->h = container->rect.h;
- relative->w = container->rect.w;
- }
- void vgui_callback_close_window(vgui_window *window) {
- vgui_set_visible((hvgui) window, false);
- }
- // printf(0, 0, "%rgbHola, que tal%rgb", 0xFFFFFF, 0xFFFF12);
- //void vgui_draw_text(int x, int y, const char *, ...) {
- //
- //}
- hvgui vgui_create_button(hvgui hwindow, const char *text, int x, int y, int h, int w, void *fn_callback, bool relative) {
- vgui_window *window = (vgui_window *) hwindow;
- vgui_container *container = malloc(sizeof(vgui_container));
- if (container == NULL)
- return 0;
- memset(container, 0, sizeof(vgui_container));
- strncpy(container->text, text, sizeof(container->text));
- vgui_set_rect(x+window->rect.x, y+window->rect.y, h, w, &(container->rect));
- container->fn_callback = fn_callback;
- container->type = VGUI_BUTTON;
- container->root = window;
- container->is_relative = relative;
- if (window->container_firts == NULL) window->container_firts = window->container_last = container;
- else window->container_last = window->container_last->next = container;
- return (hvgui) container;
- }
- hvgui vgui_create_checkbox(hvgui hwindow, int x, int y, bool default_status) {
- vgui_window *window = (vgui_window *) hwindow;
- vgui_container *container = malloc(sizeof(vgui_container));
- if (container == NULL)
- return 0;
- container->is_press = default_status;
- vgui_set_rect(x+window->rect.x, y+window->rect.y, 20, 20, &(container->rect));
- container->type = VGUI_CHECKBOX;
- container->root = window;
- container->is_relative = true;
- if (window->container_firts == NULL) window->container_firts = window->container_last = container;
- else window->container_last = window->container_last->next = container;
- return (hvgui) window;
- }
- hvgui vgui_create_window(const char *title, int x, int y, int h, int w, const char withcontainer) {
- vgui_window *window = malloc(sizeof(vgui_window));
- if (window == NULL)
- return 0;
- memset(window, 0, sizeof(vgui_window));
- strncpy(window->title, title, sizeof(window->title));
- x = (x == VGUI_CENTER_SCREEN_X && w != 0) ? 960/2-w/2 : x;
- y = (y == VGUI_CENTER_SCREEN_X && h != 0) ? 600/2-h/2 : x;
- vgui_set_rect(x, y, h, w, &(window->rect));
- if ((window->have_container = withcontainer) == true)
- vgui_set_rect(window->rect.x+10, window->rect.y+40, window->rect.h-50, window->rect.w-20, &(window->rect_container));
- window->is_visible = false;
- window->is_active = true;
- window->container_firts = window->container_last = NULL;
- window->next = window->last = NULL;
- vgui_create_button((hvgui) window, "X", window->rect.w-30, 8, 20, 20, vgui_callback_close_window, false);
- if (!g_vwindow_firts) g_vwindow_firts = g_vwindow_last = window;
- else {
- g_vwindow_last->is_active = false;
- window->last = g_vwindow_last;
- g_vwindow_last = g_vwindow_last->next = window;
- }
- return (hvgui) window;
- }
- void vgui_set_visible(hvgui hwindow, bool option) {
- vgui_window *window = (vgui_window *) hwindow;
- window->is_visible = option;
- }
- void vgui_set_active(hvgui hwindow) {
- vgui_window *window = (vgui_window *) hwindow;
- if (g_vwindow_last == NULL || window == g_vwindow_last)
- return;
- g_vwindow_last->next = window;
- if (window->last != NULL) window->last->next = window->next;
- if (window->next->last != NULL) window->next->last = window->last;
- window->last = g_vwindow_last;
- window->next = NULL;
- g_vwindow_last = window;
- }
- void vgui_draw_box (vgui_rect *rect, uint8_t r, uint8_t g, uint8_t b) {
- //if ( rect->x+rect->w > )
- g_controllers.fillrect(rect->x, rect->y, rect->h, rect->w, r, g, b, 255); /*box*/
- g_controllers.fillrect(rect->x, rect->y-1, 1, rect->w, 0, 0, 0, 255); /*border up*/
- g_controllers.fillrect(rect->x-1, rect->y, rect->h, 1, 0, 0, 0, 255); /*border left*/
- g_controllers.fillrect(rect->x, rect->y+rect->h, 1, rect->w, 0, 0, 0, 255); /*border buttom*/
- g_controllers.fillrect(rect->x+rect->w, rect->y, rect->h, 1, 0, 0, 0, 255); /*border right*/
- }
- void vgui_draw_triangle() {
- }
- unsigned int vgui_mouse_in_container(vgui_rect *rect) {
- int x = 0, y = 0;
- static bool last = false;
- bool actual;
- actual = g_controllers.get_mouse_button_status(VK_LBUTTON);
- g_controllers.get_mouse_pos(&x, &y);
- if (x > rect->x && x < rect->x+rect->w && y > rect->y && y < rect->y+rect->h) {
- if (last == true && actual == false) return VGUI_MOUSE_TOGGLE;
- return VGUI_MOUSE_HOVER;
- }
- return VGUI_MOUSE_NO_AREA;
- }
- void vgui_draw_button(vgui_container *container) {
- unsigned int mouse_event;
- vgui_rect rect_relative = {0};
- vgui_set_rect_relative(container, &rect_relative);
- mouse_event = vgui_mouse_in_container(&rect_relative);
- if (mouse_event == VGUI_MOUSE_TOGGLE) {
- vgui_draw_box(&rect_relative, 19, 19, 19);
- if ( container->fn_callback != NULL ) container->fn_callback(container->root);
- }
- else if (mouse_event == VGUI_MOUSE_HOVER) vgui_draw_box(&rect_relative, 23, 23, 23);
- else vgui_draw_box(&rect_relative, 19, 19, 19);
- g_controllers.draw_text(rect_relative.x, rect_relative.y, container->text);
- }
- void vgui_draw_checkbox(vgui_container *container) {
- unsigned int mouse_event = 0;
- vgui_rect rect_relative = {0};
- vgui_set_rect_relative(container, &rect_relative);
- mouse_event = vgui_mouse_in_container(&rect_relative);
- if (mouse_event == VGUI_MOUSE_TOGGLE) {
- if (container->is_press == true) container->is_press = false;
- else if (container->is_press == false) container->is_press = true;
- }
- if (container->is_press == false) vgui_draw_box(&rect_relative, 30, 30, 30);
- else vgui_draw_box(&rect_relative, 15, 15, 15);
- }
- void vgui_move_window(vgui_window *window) {
- int x = 0, y = 0;
- static int x_last = 0, y_last = 0;
- vgui_rect rect = {0};
- vgui_set_rect(window->rect.x, window->rect.y, 20 /*padding*/, window->rect.w, &rect);
- g_controllers.get_mouse_pos(&x, &y);
- if (vgui_mouse_in_container(&rect) == VGUI_MOUSE_HOVER) {
- int nx = x - x_last, ny = y - y_last;
- window->rect.x += nx;
- window->rect.y += ny;
- window->rect_container.x += nx;
- window->rect_container.y += ny;
- }
- x_last = x;
- y_last = y;
- }
- void vgui_draw_window(vgui_window *window) {
- vgui_container *containers = window->container_firts;
- vgui_draw_box(&(window->rect), 16, 16, 18);
- vgui_draw_box(&(window->rect_container), 23, 23, 23);
- /*vgui_move_window(window);*/
- while (containers != NULL) {
- switch (containers->type) {
- case VGUI_BUTTON: vgui_draw_button(containers); break;
- case VGUI_CHECKBOX: vgui_draw_checkbox(containers); break;
- }
- containers = containers->next;
- }
- g_controllers.draw_text(window->rect.x+10, window->rect.y+10, window->title);
- /*g_draw_tex(window->rect.x, window->rect.y, window->title);*/
- }
- void vgui_paint_all() {
- vgui_window *windows = g_vwindow_firts;
- if (windows == NULL)
- return;
- while (windows) {
- if (windows->is_visible == true) vgui_draw_window(windows);
- windows = windows->next;
- }
- /* ... */
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement