2016 ソフトウェア設計及び演習用の班Wiki

16::gr11::image-viewer.c

#include <stdlib.h>
#include <gtk/gtk.h>
#include <SDL.h>
#include <SDL_mixer.h>
#include "gui.h"

static Mix_Music    *music;        // BGM
static Mix_Chunk   *se1, *se2;     // 効果音

/*startボタンがクリックされたときに呼び出される関数*/
static void
cb_button_clicked (int argc, char **argv)
{
  GtkWidget *window;

  
  /* GTK+の初期化およびオプション解析 */
  gtk_init (&argc, &argv);
  /* ウィンドウの作成 */  
  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  /* ウィンドウの大きさの設定 */    
  gtk_widget_set_size_request (window, 350, 350);  
  {
    GtkWidget *vbox;

    /* 縦にウィジェットを配置するボックスの作成 */
    vbox = gtk_vbox_new (FALSE, 3);
    /* ボックスをウィンドウに配置 */    
    gtk_container_add (GTK_CONTAINER (window), vbox);
    {
      GtkWidget *image;
      GtkWidget *button;
      GtkWidget *button2;

      image = gtk_image_new_from_file ("/home/h26j/h26j103/images/bgcolor.png");
      gtk_box_pack_start (GTK_BOX (vbox) , image, TRUE ,TRUE, 0);


  music = Mix_LoadMUS("BB.mp3");   // 曲ファイルをロード
  se1 = Mix_LoadWAV("shotgun.wav");      // 効果音ファイル1をロード
  se2 = Mix_LoadWAV("ball.wav");         // 効果音ファイル2をロード

  Mix_AllocateChannels(16);        // 同時発声数を設定

  Mix_PlayMusic( music, -1 );      // BGMの再生スタート(無限ループ)

    }
  }

  /* ウィンドウの表示 */  
  gtk_widget_show_all (window);
  /* メインループ */
  gtk_main ();

  //
  Mix_FadeOutMusic(3000);          // フェードアウト(3000ms)
  SDL_Delay(3000);

  Mix_HaltMusic();                 // 曲の再生停止

  Mix_FreeMusic(music);            // ロードした曲を開放
  Mix_FreeChunk(se1);              // ロードした効果音1を開放
  Mix_FreeChunk(se2);              // ロードした効果音2を開放

  Mix_CloseAudio();                // SDL_Mixerクローズ
  SDL_Quit();                      // SDL使用終了
  //

  return 0;
}

/* quitボタン押した時の関数*/
static void
cb_button2_clicked (GtkWidget *button2, gpointer user_data)
{

 
  gtk_app_t* gtk_app = g_slice_new(gtk_app_t);
  init_gui(gtk_app);
 
  /* メインループを終了 */  
  //gtk_main_quit ();
}
/*
  メイン関数
*/
int
main (int argc, char **argv)
{
  GtkWidget *window;

  
  /* GTK+の初期化およびオプション解析 */
  gtk_init (&argc, &argv);

  gtk_app_t* gtk_app = g_slice_new(gtk_app_t);
  init_gui(gtk_app);
 

  //
  SDL_Init( SDL_INIT_AUDIO  );     // SDL初期化

  Mix_OpenAudio(MIX_DEFAULT_FREQUENCY,
		      MIX_DEFAULT_FORMAT, 2, 1024);

  music = Mix_LoadMUS("AA.mp3");   // 曲ファイルをロード
  se1 = Mix_LoadWAV("shotgun.wav");      // 効果音ファイル1をロード
  se2 = Mix_LoadWAV("ball.wav");         // 効果音ファイル2をロード

  Mix_AllocateChannels(16);        // 同時発声数を設定

  Mix_PlayMusic( music, -1 );      // BGMの再生スタート(無限ループ)
  //

  /* ウィンドウの作成 */  
  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  /* ウィンドウの大きさの設定 */    
  gtk_widget_set_size_request (window, 350, 350);  
  {
    GtkWidget *vbox;

    /* 縦にウィジェットを配置するボックスの作成 */
    vbox = gtk_vbox_new (FALSE, 3);
    /* ボックスをウィンドウに配置 */    
    gtk_container_add (GTK_CONTAINER (window), vbox);
    {
      GtkWidget *image;
      GtkWidget *button;
      GtkWidget *button2;

      image = gtk_image_new_from_file ("/home/h26j/h26j103/images/123.jpg");
      gtk_box_pack_start (GTK_BOX (vbox) , image, TRUE ,TRUE, 0);
      /* ボタンの作成 */
      button = gtk_button_new_with_label ("Music Start");
      /* ボタンをボックスに配置 */      
      gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
      /* ボタンがクリックされたときに呼び出される関数の設定 */      
      g_signal_connect (G_OBJECT (button), "clicked",
			G_CALLBACK (cb_button_clicked), NULL);
      /* ボタンの作成 */
      button2 = gtk_button_new_with_label ("Game Start");
      /* ボタンをボックスに配置 */      
      gtk_box_pack_start (GTK_BOX (vbox), button2, FALSE, FALSE, 0);
      /* ボタンがクリックされたときに呼び出される関数の設定 */      
      g_signal_connect (G_OBJECT (button2), "clicked",
			G_CALLBACK (cb_button2_clicked), NULL);
    }
  }


  /* ウィンドウの表示 */  
  gtk_widget_show_all (window);
  /* メインループ */
  gtk_main ();

  return 0;
}


最終更新日:2016/07/29 13:51:06