aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Haberkorn <robin.haberkorn@googlemail.com>2012-08-14 19:47:25 +0200
committerRobin Haberkorn <robin.haberkorn@googlemail.com>2012-08-14 19:47:25 +0200
commitb3e98162b847a2cb7f096b3c6d0b9234b41daac1 (patch)
treef8348e2d869ca8c7b0043d10944af32ff1520464
parent8055b7b049647cba359b545ce5229819615d409e (diff)
downloadosc-graphics-b3e98162b847a2cb7f096b3c6d0b9234b41daac1.tar.gz
changing of background image and color possible
-rw-r--r--effect-pad.c140
1 files changed, 97 insertions, 43 deletions
diff --git a/effect-pad.c b/effect-pad.c
index a8da9f1..3a108b9 100644
--- a/effect-pad.c
+++ b/effect-pad.c
@@ -291,6 +291,45 @@ effect_blops_update(void)
}
}
+static SDL_Surface *image_surface = NULL;
+
+static void
+effect_image_change(const char *file)
+{
+ if (image_surface != NULL)
+ SDL_FreeSurface(image_surface);
+
+ if (file == NULL) {
+ image_surface = NULL;
+ return;
+ }
+
+ image_surface = IMG_Load(file);
+ if (image_surface == NULL) {
+ SDL_IMAGE_ERROR("IMG_Load");
+ exit(EXIT_FAILURE);
+ }
+
+ if (image_surface->w != screen->w || image_surface->h != screen->h) {
+ SDL_Surface *new;
+
+ new = zoomSurface(image_surface,
+ (double)screen->w/image_surface->w,
+ (double)screen->h/image_surface->h,
+ SMOOTHING_ON);
+ SDL_FreeSurface(image_surface);
+ image_surface = new;
+ }
+}
+
+static SDL_Color effect_bg_color = {0, 0, 0};
+
+static inline void
+effect_bg_change(SDL_Color color)
+{
+ effect_bg_color = color;
+}
+
static inline void
process_events(void)
{
@@ -299,30 +338,59 @@ process_events(void)
while (SDL_PollEvent(&event)) {
switch (event.type) {
case SDL_KEYDOWN:
- switch (event.key.keysym.sym) {
- case SDLK_F11:
- if (!SDL_WM_ToggleFullScreen(screen)) {
- SDL_ERROR("SDL_WM_ToggleFullScreen");
- exit(EXIT_FAILURE);
+ if (event.key.keysym.mod & KMOD_LALT) {
+ switch (event.key.keysym.sym) {
+ case SDLK_0:
+ effect_bg_change((SDL_Color){0, 0, 0});
+ break;
+ case SDLK_1:
+ effect_bg_change((SDL_Color){255, 0, 0});
+ break;
+ case SDLK_2:
+ effect_bg_change((SDL_Color){0, 255, 0});
+ break;
+ case SDLK_3:
+ effect_bg_change((SDL_Color){0, 0, 255});
+ break;
+ default:
+ break;
+ }
+ } else {
+ switch (event.key.keysym.sym) {
+ case SDLK_F11:
+ if (!SDL_WM_ToggleFullScreen(screen)) {
+ SDL_ERROR("SDL_WM_ToggleFullScreen");
+ exit(EXIT_FAILURE);
+ }
+ break;
+
+ case SDLK_F10:
+ SDL_ShowCursor(!SDL_ShowCursor(SDL_QUERY));
+ break;
+
+ case SDLK_ESCAPE:
+ exit(EXIT_SUCCESS);
+
+ case SDLK_0:
+ effect_image_change(NULL);
+ break;
+ case SDLK_1:
+ effect_image_change("image_1.jpg");
+ break;
+ case SDLK_2:
+ effect_image_change("image_2.png");
+ break;
+
+ case SDLK_f:
+ currentEffect = EFFECT_FIRE;
+ break;
+ case SDLK_b:
+ currentEffect = EFFECT_BLOPS;
+ break;
+
+ default:
+ break;
}
- break;
-
- case SDLK_m:
- SDL_ShowCursor(!SDL_ShowCursor(SDL_QUERY));
- break;
-
- case SDLK_ESCAPE:
- exit(EXIT_SUCCESS);
-
- case SDLK_f:
- currentEffect = EFFECT_FIRE;
- break;
- case SDLK_b:
- currentEffect = EFFECT_BLOPS;
- break;
-
- default:
- break;
}
break;
@@ -357,7 +425,6 @@ main(int argc, char **argv)
FPSmanager fpsm;
SDL_Surface *fire_surface;
- SDL_Surface *image_surface;
if (SDL_Init(SDL_INIT_VIDEO)) {
SDL_ERROR("SDL_Init");
@@ -377,32 +444,19 @@ main(int argc, char **argv)
SDL_initFramerate(&fpsm);
SDL_setFramerate(&fpsm, FRAMERATE);
- image_surface = IMG_Load("image_1.jpg");
- if (image_surface == NULL) {
- SDL_IMAGE_ERROR("IMG_Load");
- return EXIT_FAILURE;
- }
-
- if (image_surface->w != screen->w || image_surface->h != screen->h) {
- SDL_Surface *new;
-
- new = zoomSurface(image_surface,
- (double)screen->w/image_surface->w,
- (double)screen->h/image_surface->h,
- SMOOTHING_ON);
- SDL_FreeSurface(image_surface);
- image_surface = new;
- }
-
fire_surface = effect_fire_init();
for (;;) {
process_events();
SDL_FillRect(screen, NULL,
- SDL_MapRGB(screen->format, 0, 0, 0));
+ SDL_MapRGB(screen->format,
+ effect_bg_color.r,
+ effect_bg_color.g,
+ effect_bg_color.b));
- SDL_BlitSurface(image_surface, NULL, screen, NULL);
+ if (image_surface != NULL)
+ SDL_BlitSurface(image_surface, NULL, screen, NULL);
effect_fire_update(fire_surface);
SDL_BlitSurface(fire_surface, NULL, screen, NULL);