diff --git a/src/audacious.cc b/src/audacious.cc index aff8137..91eb642 100644 --- a/src/audacious.cc +++ b/src/audacious.cc @@ -48,11 +48,11 @@ static const char about_text[] = static const PreferencesWidget prefs_fps[] = { WidgetLabel ("Frames per second"), - WidgetSpin ("Max. :", WidgetInt (CFGID, "max_fps"), {1, 480, 1, "fps"}), + WidgetSpin ("Max. :", WidgetInt (CFGID, "max_fps"), {1, 960, 1, "fps"}), WidgetLabel ("How often change effect"), - WidgetSpin ("Every", WidgetInt (CFGID, "effect_time"), {1, 32000, 10, "frames"}), + WidgetSpin ("Every", WidgetInt (CFGID, "effect_time"), {1, 128000, 10, "frames"}), WidgetLabel ("How often change colors"), - WidgetSpin ("Every", WidgetInt (CFGID, "palette_time"), {25, 2000, 5, "frames"}), + WidgetSpin ("Every", WidgetInt (CFGID, "palette_time"), {25, 8000, 5, "frames"}), WidgetLabel ("Controls"), WidgetLabel ("Up/Down:\tup/down main volume"), diff --git a/src/compute.c b/src/compute.c index 187f6c0..987a12f 100644 --- a/src/compute.c +++ b/src/compute.c @@ -121,6 +121,21 @@ static inline t_complex fct(t_complex a, guint32 n, gint32 p1, gint32 p2) /* p b.x *= fact; b.y *= fact; break; + + case 7: //if there's 8 of them, this is the last one. it's indexed by 0. + if (b.x>100) + { + b.x = b.y; + b.y = 0; + } + else + { + b.x++; + b.y++; + circle_size = b.y; + } + break; + default: b.x = (gfloat)0.0; b.y = (gfloat)0.0; diff --git a/src/compute.h b/src/compute.h index 3849e29..cd2f720 100644 --- a/src/compute.h +++ b/src/compute.h @@ -19,9 +19,11 @@ #include #include "types.h" -#define NB_FCT 7 -#define PI 3.14159 -// how many sigfigs do we need here? #define PI 3.125 +// how many effects there are? +#define NB_FCT 8 + +// as close as C++ gets in a single constant float +#define PI 3.141592653589793 /* * Represents the interpollation information. diff --git a/src/display.c b/src/display.c index d532172..69cae33 100644 --- a/src/display.c +++ b/src/display.c @@ -28,6 +28,7 @@ #define VIDEO_FLAGS ((Uint32)(SDL_WINDOW_SHOWN|SDL_WINDOW_RESIZABLE)) + typedef struct sincos { gint32 i; gfloat *f; @@ -96,18 +97,68 @@ static gboolean sdl_init() return FALSE; } SDL_SetWindowTitle(window, "Infinity"); + + + // this is eventually going to be our icon from https://wiki.libsdl.org/SDL_SetWindowIcon + SDL_Surface *surface; // Declare an SDL_Surface to be filled in with pixel data from an image file + Uint16 pixels[16*16] = { // ...or with raw pixel data: + 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, + 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, + 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, + 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, + 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, + 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, + 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, + 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, + 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, + 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, + 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, + 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, + 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, + 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, + 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, + 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, + 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, + 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, + 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, + 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, + 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, + 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, + 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, + 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, + 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, + 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, + 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, + 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, + 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, + 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, + 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, + 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff + }; + surface = SDL_CreateRGBSurfaceFrom(pixels,16,16,16,16*2,0x0f00,0x00f0,0x000f,0xf000); + + // The icon is attached to the window pointer + SDL_SetWindowIcon(window, surface); + + // ...and the surface containing the icon pixel data is no longer required. + SDL_FreeSurface(surface); + return allocate_screen_and_texture(); } static void generate_colors() { gint32 i, k; - gfloat colors[NB_PALETTES][2][3] = { { { 1.0, 1.0, 1.0 }, { 1.0, 1.0, 1.0 } }, - { { 2.0, 1.5, 0.0 }, { 0.0, 0.5, 2.0 } }, - { { 0.0, 1.0, 2.0 }, { 0.0, 1.0, 0.0 } }, - { { 0.0, 2.0, 1.0 }, { 0.0, 0.0, 1.0 } }, - { { 2.0, 0.0, 0.0 }, { 0.0, 1.0, 1.0 } } }; + gfloat colors[NB_PALETTES][2][3] = { { { 1.0, 1.0, 1.0 }, { 1.0, 1.0, 1.0 } }, //white + white + { { 2.0, 1.5, 0.0 }, { 0.0, 0.5, 2.0 } }, //yellow + purple? + { { 0.0, 1.0, 2.0 }, { 0.0, 1.0, 0.0 } }, //yellow + green + { { 0.0, 2.0, 1.0 }, { 0.0, 0.0, 1.0 } }, //etc + { { 2.0, 0.0, 0.0 }, { 0.0, 1.0, 1.0 } }, + { { 0.0, 2.0, 0.0 }, { 0.0, 0.0, 0.0 } }, //matrix green + { { 0.0, 1.0, 0.0 }, { 1.0, 0.0, 1.0 } } + }; + //define lookup table for defining colours? for (k = 0; k < NB_PALETTES; k++) { for (i = 0; i < 128; i++) { color_table[k][i].r = (Uint8)(colors[k][0][0] * i); @@ -458,9 +509,16 @@ void display_toggle_fullscreen(void) SDL_ShowCursor(is_in_fullscreen()); } -void display_exit_fullscreen_if_needed(void) { - if (is_in_fullscreen()) - display_toggle_fullscreen(); +void set_windowdressing(int yesno) +{ + SDL_SetWindowBordered(window,yesno); +} + +int display_exit_fullscreen_if_needed(void) { + int was_it=is_in_fullscreen(); + if (was_it) + display_toggle_fullscreen(); + return was_it; } inline void display_save_effect(t_effect *effect) diff --git a/src/display.h b/src/display.h index 82b4972..d1dfdf8 100644 --- a/src/display.h +++ b/src/display.h @@ -22,7 +22,8 @@ #include "effects.h" #include "music-player.h" -#define NB_PALETTES 5 +/* number of palettes */ +#define NB_PALETTES 7 /* * Initializes the display related structures, including the SDL library. @@ -82,8 +83,9 @@ void curve(t_effect *current_effect); */ void display_toggle_fullscreen(void); -void display_exit_fullscreen_if_needed(void); +int display_exit_fullscreen_if_needed(void); +void set_windowdressing(int); void display_save_effect(t_effect *effect); void display_load_random_effect(t_effect *effect); diff --git a/src/infinity.c b/src/infinity.c index 99dfa09..3782c9b 100644 --- a/src/infinity.c +++ b/src/infinity.c @@ -44,6 +44,7 @@ static t_num_effect t_last_effect; static gboolean must_resize; static gboolean finished; +static gboolean display_border; static gboolean resizing; G_LOCK_DEFINE_STATIC(resizing); static gboolean initializing = FALSE; @@ -187,11 +188,14 @@ static void handle_window_event(SDL_Event *event) { case SDL_WINDOWEVENT_HIDDEN: visible = FALSE; break; - /*case SDL_WINDOWEVENT_MOVED: - SDL_Log("Window %d moved to %d,%d", +#ifdef INFINITY_DEBUG + case SDL_WINDOWEVENT_MOVED: + // SDL_Log + g_message("Window %d moved to %d,%d", event->window.windowID, event->window.data1, event->window.data2); - break;*/ + break; +#endif case SDL_WINDOWEVENT_RESIZED: G_LOCK(resizing); resizing = TRUE; @@ -264,8 +268,6 @@ static void check_events() player->next(); break; case SDLK_F11: display_toggle_fullscreen(); break; - case SDLK_ESCAPE: - display_exit_fullscreen_if_needed(); break; case SDLK_F12: if (t_last_color > 32) { t_last_color = 0; @@ -283,6 +285,28 @@ static void check_events() g_message("Infinity %s interactive mode", interactive_mode ? "entered" : "left"); break; #endif + case SDLK_TAB: + { +#ifdef INFINITY_DEBUG + g_message("tab detected...killing border! %d",display_border); +#endif + display_border=!display_border; + set_windowdressing(display_border); + break; + } + case SDLK_ESCAPE: + // seems like a sensible thing to do on escape +#ifdef INFINITY_DEBUG + g_message("escape detected"); +#endif + if (display_exit_fullscreen_if_needed()) break; + //should probably exit fullscreen, if not then exit entirely +#ifdef INFINITY_DEBUG + g_message("...and exit needed"); +#endif + player->disable_plugin(); + break; + default: break; }