Advertisement
Guest User

Untitled

a guest
Apr 11th, 2022
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.65 KB | None | 0 0
  1. #include <gtk/gtk.h>
  2. #include <math.h>
  3. #include <cairo.h>
  4. #include <stdio.h>
  5.  
  6. int fd;
  7. int acclX, acclY, acclZ;
  8. int gyroX, gyroY, gyroZ;
  9. double acclX_scaled, acclY_scaled, acclZ_scaled;
  10. double gyroX_scaled, gyroY_scaled, gyroZ_scaled;
  11. GtkLabel *levelValue;
  12. guint width, height;
  13. GtkStyleContext *context;
  14. GtkWidget *window, *rotationCircle;
  15. GtkButton *buttonClose;
  16. GtkBuilder *builder;
  17. cairo_t *cr;
  18. double DegreesToRadians( int degrees );
  19. gdouble rotation = 0;
  20.  
  21. void closeMainWindow (GtkButton* button, gpointer user_data)
  22. {
  23.   gtk_main_quit();
  24. }
  25.  
  26. double DegreesToRadians( int degrees )
  27. {
  28.     return((double)((double)degrees * ( M_PI/180 )));
  29. }
  30.  
  31. gboolean drawCircle (GtkWidget *widget, cairo_t *cr, gpointer data)
  32. {
  33.     int radius;
  34.     context = gtk_widget_get_style_context (rotationCircle);
  35.     width = gtk_widget_get_allocated_width (rotationCircle);
  36.     height = gtk_widget_get_allocated_height (rotationCircle);
  37.  
  38.     cairo_set_source_rgba (cr, 0, 0, 0, 0.3);
  39.     cairo_set_line_width (cr, 5);
  40.  
  41.     if (width < height)
  42.     {
  43.       radius = width/2 - 4;
  44.     }
  45.     else
  46.     {
  47.       radius = height/2 - 4;
  48.     }
  49.  
  50.     cairo_arc (cr, width / 2, height / 2, radius, 0, 2 * M_PI);
  51.     cairo_stroke_preserve(cr);
  52.  
  53.     cairo_set_source_rgba (cr, 255, 255, 255, 0.6);
  54.     cairo_fill (cr);
  55.    
  56.     cairo_rotate(cr, rotation);
  57.  
  58.     cairo_set_source_rgba (cr, 1, 0.2, 0.2, 0.6);
  59.     cairo_set_line_width (cr, 6.0);
  60.     cairo_line_to (cr, width / 2 - radius, height / 2);
  61.     cairo_line_to (cr, width / 2 + radius, height / 2);
  62.     cairo_stroke (cr);
  63.  
  64.     return FALSE;
  65. }
  66.  
  67. gboolean updateRotation(GtkWidget *widget)
  68. {
  69.     rotation += DegreesToRadians(1);
  70.  
  71.     gtk_widget_queue_draw(widget);
  72.  
  73.    return TRUE;
  74. }
  75.  
  76. gboolean updateLevel(GtkWidget *widget)
  77. {
  78.     gchar tmpbuf[100];
  79.     sprintf(tmpbuf , "%.2d",rand());
  80.     gtk_label_set_text (GTK_LABEL(levelValue), tmpbuf);
  81.  
  82.    return TRUE;
  83. }
  84.  
  85. int main(int argc, char *argv[])
  86. {
  87.   gtk_init (&argc, &argv);
  88.  
  89.   builder = gtk_builder_new ();
  90.   gtk_builder_add_from_file (builder, "Main.glade", NULL);
  91.  
  92.   window = GTK_WIDGET(gtk_builder_get_object (builder, "mainWindow"));
  93.   buttonClose = GTK_BUTTON(gtk_builder_get_object (builder, "buttonClose"));
  94.   levelValue = GTK_LABEL(gtk_builder_get_object (builder, "levelValue"));
  95.   rotationCircle = GTK_WIDGET(gtk_builder_get_object (builder, "draw"));
  96.  
  97.   gtk_builder_connect_signals (builder, NULL);
  98.   gtk_window_maximize (GTK_WINDOW(window));
  99.  
  100.   g_timeout_add(1000, (GSourceFunc) updateRotation, rotationCircle);
  101.   g_timeout_add(500, (GSourceFunc) updateLevel, NULL);
  102.  
  103.   gtk_widget_show (window);
  104.  
  105.   gtk_main ();      
  106.   return 0;
  107. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement