= $rect['x'] && $x <= $rect['x'] + $rect['w'] && $y >= $rect['y'] && $y <= $rect['y'] + $rect['h']; } // Zeichnet einen Button function draw_button($renderer, $button, $text_texture, $text_size) { // Button-Hintergrund (grün wenn hovered, blau sonst) if ($button['hovered']) { sdl_rounded_box($renderer, $button['x'], $button['y'], $button['x'] + $button['w'], $button['y'] + $button['h'], 15, 60, 180, 60, 255 ); } else { sdl_rounded_box($renderer, $button['x'], $button['y'], $button['x'] + $button['w'], $button['y'] + $button['h'], 15, 70, 130, 180, 255 ); } // Text zentriert auf Button rendern $text_x = $button['x'] + ($button['w'] - $text_size['w']) / 2; $text_y = $button['y'] + ($button['h'] - $text_size['h']) / 2; sdl_render_texture($renderer, $text_texture, [ 'x' => (int)$text_x, 'y' => (int)$text_y, 'w' => $text_size['w'], 'h' => $text_size['h'] ]); } // Button-Eigenschaften Hauptfenster $main_button = [ 'x' => 200, 'y' => 200, 'w' => 240, 'h' => 80, 'hovered' => false ]; // Button-Eigenschaften zweites Fenster $second_button = [ 'x' => 100, 'y' => 150, 'w' => 200, 'h' => 80, 'hovered' => false ]; echo "Multi-Window Beispiel läuft!\n"; echo "Hauptfenster: Klicke auf 'Fenster öffnen' um ein zweites Fenster zu öffnen.\n"; echo "Zweites Fenster: Klicke auf 'Schließen' um es zu schließen.\n"; // Hauptschleife $main_running = true; $second_running = false; while ($main_running) { // Events verarbeiten while ($event = sdl_poll_event()) { // Quit-Event schließt alle Fenster if ($event['type'] === SDL_EVENT_QUIT) { $main_running = false; $second_running = false; } // Window Close Event - prüfe welches Fenster if ($event['type'] === SDL_EVENT_WINDOW_CLOSE_REQUESTED) { if (isset($event['window_id'])) { if ($event['window_id'] === $main_window_id) { echo "Hauptfenster schließen-Anfrage\n"; $main_running = false; $second_running = false; } elseif ($second_running && $event['window_id'] === $second_window_id) { echo "Zweites Fenster schließen-Anfrage\n"; $second_running = false; $second_window = null; $second_window_id = null; $second_renderer = null; $second_text_texture = null; $second_button['hovered'] = false; } } } // Maus-Bewegung if ($event['type'] === SDL_EVENT_MOUSE_MOTION) { if (isset($event['window_id'])) { // Hauptfenster if ($event['window_id'] === $main_window_id) { $main_button['hovered'] = point_in_rect($event['x'], $event['y'], $main_button); } // Zweites Fenster elseif ($second_running && $event['window_id'] === $second_window_id) { $second_button['hovered'] = point_in_rect($event['x'], $event['y'], $second_button); } } } // Maus-Klick if ($event['type'] === SDL_EVENT_MOUSE_BUTTON_DOWN) { if ($event['button'] === SDL_BUTTON_LEFT && isset($event['window_id'])) { // Hauptfenster-Button: Öffne zweites Fenster if ($event['window_id'] === $main_window_id && point_in_rect($event['x'], $event['y'], $main_button)) { if (!$second_running) { echo "Öffne zweites Fenster...\n"; $second_window = sdl_create_window('Zweites Fenster', 400, 300); if ($second_window) { $second_window_id = sdl_get_window_id($second_window); $second_renderer = sdl_create_renderer($second_window); if ($second_renderer) { $second_text_texture = create_text_texture($second_renderer, $font, 'Schließen'); $second_text_size = ttf_size_text($font, 'Schließen'); $second_running = true; } } } } // Zweites Fenster-Button: Schließe zweites Fenster if ($second_running && $event['window_id'] === $second_window_id && point_in_rect($event['x'], $event['y'], $second_button)) { echo "Schließe zweites Fenster...\n"; $second_running = false; $second_window = null; $second_window_id = null; $second_renderer = null; $second_text_texture = null; $second_button['hovered'] = false; } } } } // Hauptfenster rendern sdl_set_render_draw_color($main_renderer, 45, 45, 48, 255); sdl_render_clear($main_renderer); draw_button($main_renderer, $main_button, $main_text_texture, $main_text_size); // Info-Text (weißes Rechteck als Platzhalter) sdl_set_render_draw_color($main_renderer, 80, 80, 80, 255); sdl_render_fill_rect($main_renderer, ['x' => 50, 'y' => 50, 'w' => 540, 'h' => 100]); sdl_render_present($main_renderer); // Zweites Fenster rendern (wenn offen) if ($second_running && $second_renderer) { sdl_set_render_draw_color($second_renderer, 60, 60, 65, 255); sdl_render_clear($second_renderer); draw_button($second_renderer, $second_button, $second_text_texture, $second_text_size); // Info-Text sdl_set_render_draw_color($second_renderer, 100, 100, 100, 255); sdl_render_fill_rect($second_renderer, ['x' => 50, 'y' => 50, 'w' => 300, 'h' => 60]); sdl_render_present($second_renderer); } // CPU schonen sdl_delay(16); // ~60 FPS } echo "Programm beendet.\n"; sdl_quit();