⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 logo.c

📁 some animation source files ..
💻 C
📖 第 1 页 / 共 2 页
字号:
    {    case GDK_a:      toggle_animation (widget);      break;    case GDK_i:      init_logo_view (widget);      break;    case GDK_Escape:      gtk_main_quit ();      break;    default:      return TRUE;    }  return TRUE;}static gbooleantimeout (GtkWidget *widget){  /* Invalidate the whole window. */  gdk_window_invalidate_rect (widget->window, &widget->allocation, FALSE);  /* Update synchronously. */  gdk_window_process_updates (widget->window, FALSE);  return TRUE;}static guint timeout_id = 0;static voidtimeout_add (GtkWidget *widget){  if (timeout_id == 0)    {      timeout_id = gtk_timeout_add (TIMEOUT_INTERVAL,                                    (GtkFunction) timeout,                                    widget);    }}static voidtimeout_remove (GtkWidget *widget){  if (timeout_id != 0)    {      gtk_timeout_remove (timeout_id);      timeout_id = 0;    }}static gbooleanmap_event (GtkWidget   *widget,	   GdkEventAny *event,	   gpointer     data){  if (animate)    timeout_add (widget);  return TRUE;}static gbooleanunmap_event (GtkWidget   *widget,	     GdkEventAny *event,	     gpointer     data){  timeout_remove (widget);  return TRUE;}static gbooleanvisibility_notify_event (GtkWidget          *widget,			 GdkEventVisibility *event,			 gpointer            data){  if (animate)    {      if (event->state == GDK_VISIBILITY_FULLY_OBSCURED)	timeout_remove (widget);      else	timeout_add (widget);    }  return TRUE;}static voidtoggle_animation (GtkWidget *widget){  animate = !animate;  if (animate)    {      timeout_add (widget);    }  else    {      timeout_remove (widget);      gdk_window_invalidate_rect (widget->window, &widget->allocation, FALSE);    }}static voidinit_logo_view (GtkWidget *widget){  init_logo_quat ();  init_view ();  mode = 0;  counter = 0;  if (!animate)    gdk_window_invalidate_rect (widget->window, &widget->allocation, FALSE);}/* For popup menu. */static gbooleanbutton_press_event_popup_menu (GtkWidget      *widget,			       GdkEventButton *event,			       gpointer        data){  if (event->button == 3)    {      /* Popup menu. */      gtk_menu_popup (GTK_MENU (widget), NULL, NULL, NULL, NULL,		      event->button, event->time);      return TRUE;    }  return FALSE;}/* Creates the popup menu.*/static GtkWidget *create_popup_menu (GtkWidget *drawing_area){  GtkWidget *menu;  GtkWidget *menu_item;  menu = gtk_menu_new ();  /* Toggle animation */  menu_item = gtk_menu_item_new_with_label ("Toggle Animation");  gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);  g_signal_connect_swapped (G_OBJECT (menu_item), "activate",			    G_CALLBACK (toggle_animation), drawing_area);  gtk_widget_show (menu_item);  /* Init orientation */  menu_item = gtk_menu_item_new_with_label ("Initialize");  gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);  g_signal_connect_swapped (G_OBJECT (menu_item), "activate",			    G_CALLBACK (init_logo_view), drawing_area);  gtk_widget_show (menu_item);  /* Quit */  menu_item = gtk_menu_item_new_with_label ("Quit");  gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);  g_signal_connect (G_OBJECT (menu_item), "activate",		    G_CALLBACK (gtk_main_quit), NULL);  gtk_widget_show (menu_item);	  return menu;}static voidprint_gl_config_attrib (GdkGLConfig *glconfig,                        const gchar *attrib_str,                        int          attrib,                        gboolean     is_boolean){  int value;  g_print ("%s = ", attrib_str);  if (gdk_gl_config_get_attrib (glconfig, attrib, &value))    {      if (is_boolean)        g_print ("%s\n", value == TRUE ? "TRUE" : "FALSE");      else        g_print ("%d\n", value);    }  else    g_print ("*** Cannot get %s attribute value\n", attrib_str);}static voidexamine_gl_config_attrib (GdkGLConfig *glconfig){  g_print ("\nOpenGL visual configurations :\n\n");  g_print ("gdk_gl_config_is_rgba (glconfig) = %s\n",           gdk_gl_config_is_rgba (glconfig) ? "TRUE" : "FALSE");  g_print ("gdk_gl_config_is_double_buffered (glconfig) = %s\n",           gdk_gl_config_is_double_buffered (glconfig) ? "TRUE" : "FALSE");  g_print ("gdk_gl_config_is_stereo (glconfig) = %s\n",           gdk_gl_config_is_stereo (glconfig) ? "TRUE" : "FALSE");  g_print ("gdk_gl_config_has_alpha (glconfig) = %s\n",           gdk_gl_config_has_alpha (glconfig) ? "TRUE" : "FALSE");  g_print ("gdk_gl_config_has_depth_buffer (glconfig) = %s\n",           gdk_gl_config_has_depth_buffer (glconfig) ? "TRUE" : "FALSE");  g_print ("gdk_gl_config_has_stencil_buffer (glconfig) = %s\n",           gdk_gl_config_has_stencil_buffer (glconfig) ? "TRUE" : "FALSE");  g_print ("gdk_gl_config_has_accum_buffer (glconfig) = %s\n",           gdk_gl_config_has_accum_buffer (glconfig) ? "TRUE" : "FALSE");  g_print ("\n");  print_gl_config_attrib (glconfig, "GDK_GL_USE_GL",           GDK_GL_USE_GL,           TRUE);  print_gl_config_attrib (glconfig, "GDK_GL_BUFFER_SIZE",      GDK_GL_BUFFER_SIZE,      FALSE);  print_gl_config_attrib (glconfig, "GDK_GL_LEVEL",            GDK_GL_LEVEL,            FALSE);  print_gl_config_attrib (glconfig, "GDK_GL_RGBA",             GDK_GL_RGBA,             TRUE);  print_gl_config_attrib (glconfig, "GDK_GL_DOUBLEBUFFER",     GDK_GL_DOUBLEBUFFER,     TRUE);  print_gl_config_attrib (glconfig, "GDK_GL_STEREO",           GDK_GL_STEREO,           TRUE);  print_gl_config_attrib (glconfig, "GDK_GL_AUX_BUFFERS",      GDK_GL_AUX_BUFFERS,      FALSE);  print_gl_config_attrib (glconfig, "GDK_GL_RED_SIZE",         GDK_GL_RED_SIZE,         FALSE);  print_gl_config_attrib (glconfig, "GDK_GL_GREEN_SIZE",       GDK_GL_GREEN_SIZE,       FALSE);  print_gl_config_attrib (glconfig, "GDK_GL_BLUE_SIZE",        GDK_GL_BLUE_SIZE,        FALSE);  print_gl_config_attrib (glconfig, "GDK_GL_ALPHA_SIZE",       GDK_GL_ALPHA_SIZE,       FALSE);  print_gl_config_attrib (glconfig, "GDK_GL_DEPTH_SIZE",       GDK_GL_DEPTH_SIZE,       FALSE);  print_gl_config_attrib (glconfig, "GDK_GL_STENCIL_SIZE",     GDK_GL_STENCIL_SIZE,     FALSE);  print_gl_config_attrib (glconfig, "GDK_GL_ACCUM_RED_SIZE",   GDK_GL_ACCUM_RED_SIZE,   FALSE);  print_gl_config_attrib (glconfig, "GDK_GL_ACCUM_GREEN_SIZE", GDK_GL_ACCUM_GREEN_SIZE, FALSE);  print_gl_config_attrib (glconfig, "GDK_GL_ACCUM_BLUE_SIZE",  GDK_GL_ACCUM_BLUE_SIZE,  FALSE);  print_gl_config_attrib (glconfig, "GDK_GL_ACCUM_ALPHA_SIZE", GDK_GL_ACCUM_ALPHA_SIZE, FALSE);  g_print ("\n");}intmain(int   argc,     char *argv[]){  GdkGLConfig *glconfig;  gint major, minor;  GtkWidget *window;  GtkWidget *vbox;  GtkWidget *drawing_area;  GtkWidget *menu;  GtkWidget *button;  int i;  gboolean arg_count = FALSE;  /*   * Init GTK.   */  gtk_init (&argc, &argv);  /*   * Init GtkGLExt.   */  gtk_gl_init (&argc, &argv);  /*   * Parse arguments.   */  for (i = 1; i < argc; i++)    {      if (arg_count)	rot_count = atoi (argv[i]);      if (strcmp (argv[i], "--help") == 0 ||	  strcmp (argv[i], "-h") == 0)	{	  g_print ("Usage: %s [--count num] [--no-anim] [--help]\n", argv[0]);	  exit (0);	}      if (strcmp (argv[i], "--count") == 0)	arg_count = TRUE;      if (strcmp (argv[i], "--no-anim") == 0)	animate = FALSE;    }  /*   * Query OpenGL extension version.   */  gdk_gl_query_version (&major, &minor);  g_print ("\nOpenGL extension version - %d.%d\n",           major, minor);  /*   * Configure OpenGL-capable visual.   */  /* Try double-buffered visual */  glconfig = gdk_gl_config_new_by_mode (GDK_GL_MODE_RGB    |					GDK_GL_MODE_DEPTH  |					GDK_GL_MODE_DOUBLE);  if (glconfig == NULL)    {      g_print ("*** Cannot find the double-buffered visual.\n");      g_print ("*** Trying single-buffered visual.\n");      /* Try single-buffered visual */      glconfig = gdk_gl_config_new_by_mode (GDK_GL_MODE_RGB   |					    GDK_GL_MODE_DEPTH);      if (glconfig == NULL)	{	  g_print ("*** No appropriate OpenGL-capable visual found.\n");	  exit (1);	}    }  examine_gl_config_attrib (glconfig);  /*   * Top-level window.   */  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);  gtk_window_set_title (GTK_WINDOW (window), "logo");  /* Get automatically redrawn if any of their children changed allocation. */  gtk_container_set_reallocate_redraws (GTK_CONTAINER (window), TRUE);  g_signal_connect (G_OBJECT (window), "delete_event",		    G_CALLBACK (gtk_main_quit), NULL);  /*   * VBox.   */  vbox = gtk_vbox_new (FALSE, 0);  gtk_container_add (GTK_CONTAINER (window), vbox);  gtk_widget_show (vbox);  /*   * Drawing area for drawing OpenGL scene.   */  drawing_area = gtk_drawing_area_new ();  gtk_widget_set_size_request (drawing_area, 300, 300);  /* Set OpenGL-capability to the widget. */  gtk_widget_set_gl_capability (drawing_area,				glconfig,				NULL,				TRUE,				GDK_GL_RGBA_TYPE);  gtk_widget_add_events (drawing_area,			 GDK_BUTTON1_MOTION_MASK    |			 GDK_BUTTON2_MOTION_MASK    |			 GDK_BUTTON_PRESS_MASK      |			 GDK_VISIBILITY_NOTIFY_MASK);  g_signal_connect_after (G_OBJECT (drawing_area), "realize",                          G_CALLBACK (realize), NULL);  g_signal_connect (G_OBJECT (drawing_area), "configure_event",		    G_CALLBACK (configure_event), NULL);  g_signal_connect (G_OBJECT (drawing_area), "expose_event",		    G_CALLBACK (expose_event), NULL);  g_signal_connect (G_OBJECT (drawing_area), "button_press_event",		    G_CALLBACK (button_press_event), NULL);  g_signal_connect (G_OBJECT (drawing_area), "motion_notify_event",		    G_CALLBACK (motion_notify_event), NULL);  g_signal_connect (G_OBJECT (drawing_area), "map_event",		    G_CALLBACK (map_event), NULL);  g_signal_connect (G_OBJECT (drawing_area), "unmap_event",		    G_CALLBACK (unmap_event), NULL);  g_signal_connect (G_OBJECT (drawing_area), "visibility_notify_event",		    G_CALLBACK (visibility_notify_event), NULL);  g_signal_connect_swapped (G_OBJECT (window), "key_press_event",			    G_CALLBACK (key_press_event), drawing_area);  gtk_box_pack_start (GTK_BOX (vbox), drawing_area, TRUE, TRUE, 0);  gtk_widget_show (drawing_area);  /*   * Popup menu.   */  menu = create_popup_menu (drawing_area);  /* Signal handler */  g_signal_connect_swapped (G_OBJECT (drawing_area), "button_press_event",                            G_CALLBACK (button_press_event_popup_menu), menu);  /*   * Simple quit button.   */  button = gtk_button_new_with_label ("Quit");  g_signal_connect (G_OBJECT (button), "clicked",                    G_CALLBACK (gtk_main_quit), NULL);  gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);  gtk_widget_show (button);  /*   * Show window.   */  gtk_widget_show (window);  /*   * Main loop.   */  gtk_main ();  return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -