static int test_factory_family_object(char *output, size_t sz) { int ii; struct widget *widget1 = 0; struct widget_factory_motif motif; struct widget_factory_windows windows; widget_factory_motif_init(&motif); widget_factory_windows_init(&windows); for (ii=0; ii < 4; ++ii) { switch (ii) { case 0: widget1 = widget_factory_create_button(&motif.factory); break; case 1: widget1 = widget_factory_create_menu(&motif.factory); break; case 2: widget1 = widget_factory_create_button(&windows.factory); break; case 3: widget1 = widget_factory_create_menu(&windows.factory); break; } if (!widget1) return -1; widget_draw(widget1); //@TODO add virtual method 'free' to class widget } return 0; }
static void box_draw ( widget *wid, cairo_t *draw ) { box *b = (box *) wid; for ( GList *iter = g_list_first ( b->children ); iter != NULL; iter = g_list_next ( iter ) ) { widget * child = (widget *) iter->data; widget_draw ( child, draw ); } }
void gui_draw(void) { widget_draw(widget_root); long long delta_time, this_time = sys_time(); delta_time = this_time - last_time; last_time = this_time; // double DeltaTime = (double)delta_time / (double)sys_ticksecond; frame_number++; if(frame_number>=MAX_FRAMES) frame_number=0; frame_time[frame_number] = (long)delta_time; long fps_sum = 0; for(int i=0; i<MAX_FRAMES; i++) fps_sum += frame_time[i]; double fps = (double)MAX_FRAMES / ((double)fps_sum / (double)sys_ticksecond); glColor4f(1,1,1,1); sth_begin_draw(stash); char tempstr[50]; sprintf(tempstr, "%4.1fHz", fps); sth_draw_text(stash, 3, 30, vid_width-90, -26, tempstr, 0); #ifndef __APPLE__ int i; for(i=0; i< nvml_device_count; i++) { sprintf(tempstr, "%d°C", nvml_gputemp[i]); sth_draw_text(stash, 3, 30, vid_width-70, -(50+i*50), tempstr, 0); } for(int j=0; j< adl_device_count; j++) { sprintf(tempstr, "%d°C", adl_gputemp[j]); sth_draw_text(stash, 3, 30, vid_width-70, -(50+(i+j)*50), tempstr, 0); } #endif sth_end_draw(stash); gui_http_draw(); }
static void listview_draw ( widget *wid, cairo_t *draw ) { unsigned int offset = 0; listview *lv = (listview *) wid; if ( lv->scroll_type == LISTVIEW_SCROLL_CONTINIOUS ) { offset = scroll_continious ( lv ); } else { offset = scroll_per_page ( lv ); } // Set these all together to make sure they update consistently. scrollbar_set_max_value ( lv->scrollbar, lv->req_elements ); scrollbar_set_handle_length ( lv->scrollbar, lv->cur_columns * lv->max_rows ); if ( lv->reverse ) { scrollbar_set_handle ( lv->scrollbar, lv->req_elements - lv->selected - 1 ); } else { scrollbar_set_handle ( lv->scrollbar, lv->selected ); } lv->last_offset = offset; int spacing_vert = distance_get_pixel ( lv->spacing, ORIENTATION_VERTICAL ); int spacing_hori = distance_get_pixel ( lv->spacing, ORIENTATION_HORIZONTAL ); int left_offset = widget_padding_get_left ( wid ); int top_offset = widget_padding_get_top ( wid ); if ( lv->scrollbar->widget.index == 0 ) { left_offset += spacing_hori + lv->scrollbar->widget.w; } if ( lv->cur_elements > 0 && lv->max_rows > 0 ) { // Set new x/y possition. unsigned int max = MIN ( lv->cur_elements, lv->req_elements - offset ); if ( lv->rchanged ) { unsigned int width = lv->widget.w - spacing_hori * ( lv->cur_columns - 1 ); width -= widget_padding_get_padding_width ( wid ); if ( widget_enabled ( WIDGET ( lv->scrollbar ) ) ) { width -= spacing_hori; width -= widget_get_width ( WIDGET ( lv->scrollbar ) ); } unsigned int element_width = ( width ) / lv->cur_columns; for ( unsigned int i = 0; i < max; i++ ) { unsigned int ex = left_offset + ( ( i ) / lv->max_rows ) * ( element_width + spacing_hori ); if ( lv->reverse ) { unsigned int ey = wid->h - ( widget_padding_get_bottom ( wid ) + ( ( i ) % lv->max_rows ) * ( lv->element_height + spacing_vert ) ) - lv->element_height; textbox_moveresize ( lv->boxes[i], ex, ey, element_width, lv->element_height ); } else { unsigned int ey = top_offset + ( ( i ) % lv->max_rows ) * ( lv->element_height + spacing_vert ); textbox_moveresize ( lv->boxes[i], ex, ey, element_width, lv->element_height ); } update_element ( lv, i, i + offset, TRUE ); widget_draw ( WIDGET ( lv->boxes[i] ), draw ); } lv->rchanged = FALSE; } else { for ( unsigned int i = 0; i < max; i++ ) { update_element ( lv, i, i + offset, FALSE ); widget_draw ( WIDGET ( lv->boxes[i] ), draw ); } } } widget_draw ( WIDGET ( lv->scrollbar ), draw ); }
int main ( G_GNUC_UNUSED int argc, G_GNUC_UNUSED char **argv ) { // box 20 by 40 widget *wid= (widget*)g_malloc0(sizeof(widget)); widget_resize ( wid, 20, 40); widget_move ( wid, 10, 10); // Getter, setter x pos // TASSERT( widget_get_x_pos ( wid ) == 10 ); TASSERT( widget_get_y_pos ( wid ) == 10 ); // Left of box TASSERT ( widget_intersect ( wid, 0, 0) == 0 ); TASSERT ( widget_intersect ( wid, 0, 10) == 0 ); TASSERT ( widget_intersect ( wid, 0, 25) == 0 ); TASSERT ( widget_intersect ( wid, 0, 40) == 0 ); TASSERT ( widget_intersect ( wid, 0, 50) == 0 ); TASSERT ( widget_intersect ( wid, 9, 0) == 0 ); TASSERT ( widget_intersect ( wid, 9, 10) == 0 ); TASSERT ( widget_intersect ( wid, 9, 25) == 0 ); TASSERT ( widget_intersect ( wid, 9, 40) == 0 ); TASSERT ( widget_intersect ( wid, 9, 50) == 0 ); TASSERT ( widget_intersect ( wid, 10, 0) == 0 ); TASSERT ( widget_intersect ( wid, 10, 10) == 1 ); TASSERT ( widget_intersect ( wid, 10, 25) == 1 ); TASSERT ( widget_intersect ( wid, 10, 40) == 1 ); TASSERT ( widget_intersect ( wid, 10, 50) == 0 ); // Middle TASSERT ( widget_intersect ( wid, 25, 0) == 0 ); TASSERT ( widget_intersect ( wid, 25, 10) == 1 ); TASSERT ( widget_intersect ( wid, 25, 25) == 1 ); TASSERT ( widget_intersect ( wid, 25, 40) == 1 ); TASSERT ( widget_intersect ( wid, 25, 50) == 0 ); // Right TASSERT ( widget_intersect ( wid, 29, 0) == 0 ); TASSERT ( widget_intersect ( wid, 29, 10) == 1 ); TASSERT ( widget_intersect ( wid, 29, 25) == 1 ); TASSERT ( widget_intersect ( wid, 29, 40) == 1 ); TASSERT ( widget_intersect ( wid, 29, 50) == 0 ); TASSERT ( widget_intersect ( wid, 30, 0) == 0 ); TASSERT ( widget_intersect ( wid, 30, 10) == 0 ); TASSERT ( widget_intersect ( wid, 30, 25) == 0 ); TASSERT ( widget_intersect ( wid, 30, 40) == 0 ); TASSERT ( widget_intersect ( wid, 30, 50) == 0 ); widget_move ( wid, 30, 30); // Left of box TASSERT ( widget_intersect ( wid, 10, 20) == 0 ); TASSERT ( widget_intersect ( wid, 10, 30) == 0 ); TASSERT ( widget_intersect ( wid, 10, 45) == 0 ); TASSERT ( widget_intersect ( wid, 10, 60) == 0 ); TASSERT ( widget_intersect ( wid, 10, 70) == 0 ); TASSERT ( widget_intersect ( wid, 19, 20) == 0 ); TASSERT ( widget_intersect ( wid, 19, 30) == 0 ); TASSERT ( widget_intersect ( wid, 19, 45) == 0 ); TASSERT ( widget_intersect ( wid, 19, 60) == 0 ); TASSERT ( widget_intersect ( wid, 19, 70) == 0 ); TASSERT ( widget_intersect ( wid, 30, 20) == 0 ); TASSERT ( widget_intersect ( wid, 30, 30) == 1 ); TASSERT ( widget_intersect ( wid, 30, 45) == 1 ); TASSERT ( widget_intersect ( wid, 30, 60) == 1 ); TASSERT ( widget_intersect ( wid, 30, 70) == 0 ); // Middle TASSERT ( widget_intersect ( wid, 20+25,20+ 0) == 0 ); TASSERT ( widget_intersect ( wid, 20+25,20+ 10) == 1 ); TASSERT ( widget_intersect ( wid, 20+25,20+ 25) == 1 ); TASSERT ( widget_intersect ( wid, 20+25,20+ 40) == 1 ); TASSERT ( widget_intersect ( wid, 20+25,20+ 50) == 0 ); TASSERT ( widget_intersect ( wid, 20+29, 20+0) == 0 ); TASSERT ( widget_intersect ( wid, 20+29, 20+10) == 1 ); TASSERT ( widget_intersect ( wid, 20+29, 20+25) == 1 ); TASSERT ( widget_intersect ( wid, 20+29, 20+40) == 1 ); TASSERT ( widget_intersect ( wid, 20+29, 20+50) == 0 ); TASSERT ( widget_intersect ( wid, 20+30, 20+0) == 0 ); TASSERT ( widget_intersect ( wid, 20+30, 20+10) == 0 ); TASSERT ( widget_intersect ( wid, 20+30, 20+25) == 0 ); TASSERT ( widget_intersect ( wid, 20+30, 20+40) == 0 ); TASSERT ( widget_intersect ( wid, 20+30, 20+50) == 0 ); // Right TASSERT ( widget_intersect ( wid, 20+29, 20+0) == 0 ); TASSERT ( widget_intersect ( wid, 20+29, 20+10) == 1 ); TASSERT ( widget_intersect ( wid, 20+29, 20+25) == 1 ); TASSERT ( widget_intersect ( wid, 20+29, 20+40) == 1 ); TASSERT ( widget_intersect ( wid, 20+29, 20+50) == 0 ); TASSERT ( widget_intersect ( wid, 20+30, 20+0) == 0 ); TASSERT ( widget_intersect ( wid, 20+30, 20+10) == 0 ); TASSERT ( widget_intersect ( wid, 20+30, 20+25) == 0 ); TASSERT ( widget_intersect ( wid, 20+30, 20+40) == 0 ); TASSERT ( widget_intersect ( wid, 20+30, 20+50) == 0 ); TASSERT ( widget_intersect ( wid, -100, -100) == 0); TASSERT ( widget_intersect ( wid, INT_MIN, INT_MIN) == 0); TASSERT ( widget_intersect ( wid, INT_MAX, INT_MAX) == 0); // Other wrappers. TASSERT ( widget_get_height ( wid ) == wid->h); TASSERT ( widget_get_width ( wid ) == wid->w); TASSERT ( widget_enabled ( wid ) == FALSE ); widget_enable ( wid ); TASSERT ( widget_enabled ( wid ) == TRUE ); widget_disable ( wid ); TASSERT ( widget_enabled ( wid ) == FALSE ); // Null pointer tests. TASSERT ( widget_intersect ( NULL, 0, 0) == 0 ); widget_move ( NULL, 0, 0 ); TASSERT ( widget_get_height ( NULL ) == 0); TASSERT ( widget_get_width ( NULL ) == 0); TASSERT ( widget_enabled ( NULL ) == 0); widget_disable ( NULL ); widget_enable ( NULL ); widget_draw ( NULL, NULL ); widget_free ( NULL ); widget_resize ( NULL, 0, 0); widget_update ( NULL ); widget_queue_redraw ( NULL ); TASSERT (widget_need_redraw ( NULL ) == FALSE); widget_clicked ( NULL, NULL ); widget_set_clicked_handler ( NULL, NULL, NULL ); g_free(wid); }