diff --git a/src/tauon/__main__.py b/src/tauon/__main__.py index 77119c0b3..97022ed37 100755 --- a/src/tauon/__main__.py +++ b/src/tauon/__main__.py @@ -20,47 +20,11 @@ import os import pickle import sys -from ctypes import c_int, pointer +from ctypes import c_int, pointer, c_float, byref from pathlib import Path from gi.repository import GLib -from sdl2 import ( - SDL_BLENDMODE_BLEND, - SDL_HINT_MOUSE_FOCUS_CLICKTHROUGH, - SDL_HINT_RENDER_SCALE_QUALITY, - SDL_HINT_VIDEO_ALLOW_SCREENSAVER, - SDL_HINT_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR, - SDL_INIT_VIDEO, - SDL_MESSAGEBOX_ERROR, - SDL_RENDERER_ACCELERATED, - SDL_RENDERER_PRESENTVSYNC, - SDL_WINDOW_ALLOW_HIGHDPI, - SDL_WINDOW_BORDERLESS, - SDL_WINDOW_FULLSCREEN_DESKTOP, - SDL_WINDOW_HIDDEN, - SDL_WINDOW_RESIZABLE, - SDL_WINDOWPOS_UNDEFINED, - SDL_CreateRenderer, - SDL_CreateTextureFromSurface, - SDL_CreateWindow, - SDL_DestroyTexture, - SDL_FreeSurface, - SDL_GetError, - SDL_GetWindowSize, - SDL_GL_GetDrawableSize, - SDL_Init, - SDL_MaximizeWindow, - SDL_Rect, - SDL_RenderClear, - SDL_RenderCopy, - SDL_RenderPresent, - SDL_SetHint, - SDL_SetRenderDrawBlendMode, - SDL_SetRenderDrawColor, - SDL_SetWindowOpacity, - SDL_ShowSimpleMessageBox, -) -from sdl2.sdlimage import IMG_Load +import sdl3 install_directory: Path = Path(__file__).resolve().parent sys.path.append(str(install_directory.parent)) @@ -276,11 +240,10 @@ def transfer_args_and_exit() -> None: if sys.platform == "win32" and sys.getwindowsversion().major < 10 or Path(user_directory / "nohidpi").is_file(): allow_hidpi = False -SDL_SetHint(SDL_HINT_VIDEO_ALLOW_SCREENSAVER, b"1") -SDL_SetHint(SDL_HINT_MOUSE_FOCUS_CLICKTHROUGH, b"1") -SDL_SetHint(SDL_HINT_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR, b"0") -SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "best".encode()) -# SDL_SetHint(b"SDL_VIDEO_WAYLAND_ALLOW_LIBDECOR", b"0") +sdl3.SDL_SetHint(sdl3.SDL_HINT_VIDEO_ALLOW_SCREENSAVER.encode(), b"1") +sdl3.SDL_SetHint(sdl3.SDL_HINT_MOUSE_FOCUS_CLICKTHROUGH.encode(), b"1") +sdl3.SDL_SetHint(sdl3.SDL_HINT_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR.encode(), b"0") +# sdl3.SDL_SetHint(b"SDL_VIDEO_WAYLAND_ALLOW_LIBDECOR", b"0") draw_border = True w = 1120 @@ -347,45 +310,43 @@ def transfer_args_and_exit() -> None: if Path(user_directory / "x11").exists(): os.environ["SDL_VIDEODRIVER"] = "x11" -SDL_Init(SDL_INIT_VIDEO) -err = SDL_GetError() + +sdl3.SDL_Init(sdl3.SDL_INIT_VIDEO) +err = sdl3.SDL_GetError() if err and "GLX" in err.decode(): logging.error(f"SDL init error: {err.decode()}") - SDL_ShowSimpleMessageBox( - SDL_MESSAGEBOX_ERROR, b"Tauon Music Box failed to start :(", + sdl3.SDL_ShowSimpleMessageBox( + sdl3.SDL_MESSAGEBOX_ERROR, b"Tauon Music Box failed to start :(", b"Error: " + err + b".\n If you're using Flatpak, try run `$ flatpak update`", None) sys.exit(1) window_title = t_title window_title = window_title.encode("utf-8") -flags = SDL_WINDOW_RESIZABLE - -if allow_hidpi: - flags |= SDL_WINDOW_ALLOW_HIGHDPI +flags = sdl3.SDL_WINDOW_RESIZABLE | sdl3.SDL_WINDOW_TRANSPARENT if draw_border and not fs_mode: - flags |= SDL_WINDOW_BORDERLESS + flags |= sdl3.SDL_WINDOW_BORDERLESS if fs_mode: - flags |= SDL_WINDOW_FULLSCREEN_DESKTOP + flags |= sdl3.SDL_WINDOW_FULLSCREEN_DESKTOP if old_window_position is None: - o_x = SDL_WINDOWPOS_UNDEFINED - o_y = SDL_WINDOWPOS_UNDEFINED + o_x = sdl3.SDL_WINDOWPOS_UNDEFINED + o_y = sdl3.SDL_WINDOWPOS_UNDEFINED else: o_x = old_window_position[0] o_y = old_window_position[1] if "--tray" in sys.argv: - flags |= SDL_WINDOW_HIDDEN + flags |= sdl3.SDL_WINDOW_HIDDEN -t_window = SDL_CreateWindow( +t_window = sdl3.SDL_CreateWindow( # todo use SDL_CreateWindowAndRenderer() window_title, - o_x, o_y, + # o_x, o_y, logical_size[0], logical_size[1], - flags) # | SDL_WINDOW_FULLSCREEN) + flags) if not t_window: logging.error("ERROR CREATING WINDOW!") @@ -395,32 +356,44 @@ def transfer_args_and_exit() -> None: logging.error(f"Size 0: {logical_size[0]}") logging.error(f"Size 1: {logical_size[1]}") logging.error(f"Flags: {flags}") - logging.error(f"SDL Error: {SDL_GetError()}") + logging.error(f"SDL Error: {sdl3.SDL_GetError()}") sys.exit(1) if maximized: - SDL_MaximizeWindow(t_window) + sdl3.SDL_MaximizeWindow(t_window) + +drivers = [] +i = 0 +while True: + x = sdl3.SDL_GetRenderDriver(i) + i += 1 + if x is None: + break + drivers.append(x) + +logging.debug(f"SDL availiable drivers: {drivers}") -renderer = SDL_CreateRenderer(t_window, 0, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC) +renderer = sdl3.SDL_CreateRenderer(t_window, b"opengl") # sdl3.SDL_RENDERER_PRESENTVSYNC if not renderer: logging.error("ERROR CREATING RENDERER!") sys.exit(1) -SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_BLEND) -SDL_SetWindowOpacity(t_window, window_opacity) +sdl3.SDL_SetRenderDrawBlendMode(renderer, sdl3.SDL_BLENDMODE_BLEND) +sdl3.SDL_SetWindowOpacity(t_window, window_opacity) -SDL_SetRenderDrawColor(renderer, 7, 7, 7, 255) -SDL_RenderClear(renderer) +sdl3.SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0) +sdl3.SDL_RenderClear(renderer) +logging.info(f"SDL window system: {sdl3.SDL_GetCurrentVideoDriver().decode()}") i_x = pointer(c_int(0)) i_y = pointer(c_int(0)) -SDL_GL_GetDrawableSize(t_window, i_x, i_y) +sdl3.SDL_GetWindowSizeInPixels(t_window, i_x, i_y) window_size[0] = i_x.contents.value window_size[1] = i_y.contents.value -SDL_GetWindowSize(t_window, i_x, i_y) +sdl3.SDL_GetWindowSize(t_window, i_x, i_y) logical_size[0] = i_x.contents.value logical_size[1] = i_y.contents.value @@ -434,18 +407,26 @@ def transfer_args_and_exit() -> None: img_path = img_path2 del img_path2 -raw_image = IMG_Load(str(img_path).encode()) -sdl_texture = SDL_CreateTextureFromSurface(renderer, raw_image) -w = raw_image.contents.w -h = raw_image.contents.h -rect = SDL_Rect(window_size[0] // 2 - w // 2, window_size[1] // 2 - h // 2, w, h) +sdl3.SDL_SetRenderDrawColor(renderer, 7, 7, 7, 255) +sdl3.SDL_RenderFillRect(renderer, None) -SDL_RenderCopy(renderer, sdl_texture, None, rect) +raw_image = sdl3.IMG_Load(str(img_path).encode()) +texture = sdl3.SDL_CreateTextureFromSurface(renderer, raw_image) +i_x = c_float(0.0) +i_y = c_float(0.0) +sdl3.SDL_GetTextureSize(texture, byref(i_x), byref(i_y)) +w = i_x.value +h = i_y.value +rect = sdl3.SDL_FRect(window_size[0] // 2 - w // 2, window_size[1] // 2 - h // 2, w, h) +sdl3.SDL_RenderTexture(renderer, texture, None, rect) -SDL_RenderPresent(renderer) -SDL_FreeSurface(raw_image) -SDL_DestroyTexture(sdl_texture) + + +sdl3.SDL_RenderPresent(renderer) + +sdl3.SDL_DestroySurface(raw_image) +sdl3.SDL_DestroyTexture(texture) holder = t_bootstrap.holder holder.t_window = t_window @@ -474,13 +455,19 @@ def transfer_args_and_exit() -> None: holder.log = log del raw_image -del sdl_texture +del texture del w del h del rect del flags del img_path + +# todo temporary, remove me +import time +time.sleep(3) +exit() + from tauon.t_modules import t_main # if pyinstaller_mode or sys.platform == "darwin" or install_mode: diff --git a/src/tauon/t_modules/t_draw.py b/src/tauon/t_modules/t_draw.py index d5b564f6e..7e143c6ef 100644 --- a/src/tauon/t_modules/t_draw.py +++ b/src/tauon/t_modules/t_draw.py @@ -27,33 +27,7 @@ from typing import TYPE_CHECKING from PIL import Image -from sdl2 import ( - SDL_BLENDFACTOR_ONE, - SDL_BLENDFACTOR_ONE_MINUS_SRC_ALPHA, - SDL_BLENDOPERATION_ADD, - SDL_FLIP_VERTICAL, - SDL_PIXELFORMAT_ARGB8888, - SDL_PIXELFORMAT_BGR24, - SDL_PIXELFORMAT_RGB888, - SDL_ComposeCustomBlendMode, - SDL_CreateRGBSurfaceWithFormatFrom, - SDL_CreateTextureFromSurface, - SDL_DestroyTexture, - SDL_FreeSurface, - SDL_MapRGB, - SDL_QueryTexture, - SDL_Rect, - SDL_RenderCopy, - SDL_RenderCopyEx, - SDL_RenderDrawLine, - SDL_RenderFillRect, - SDL_RenderReadPixels, - SDL_SetColorKey, - SDL_SetRenderDrawColor, - SDL_SetTextureBlendMode, - rw_from_object, -) -from sdl2.sdlimage import IMG_Load_RW +import sdl3 from tauon.t_modules.t_extra import Timer, alpha_blend, coll_rect diff --git a/src/tauon/t_modules/t_main.py b/src/tauon/t_modules/t_main.py index ed13d1835..7b4c2f639 100644 --- a/src/tauon/t_modules/t_main.py +++ b/src/tauon/t_modules/t_main.py @@ -46,6 +46,7 @@ import platform import random import re +import sdl3 import secrets import shlex import shutil @@ -73,184 +74,7 @@ import requests from bs4 import BeautifulSoup from PIL import Image, ImageDraw, ImageEnhance, ImageFilter -from sdl2 import ( - SDL_BLENDMODE_BLEND, - SDL_BLENDMODE_NONE, - SDL_BUTTON_LEFT, - SDL_BUTTON_MIDDLE, - SDL_BUTTON_RIGHT, - SDL_BUTTON_X1, - SDL_BUTTON_X2, - SDL_CONTROLLER_AXIS_LEFTY, - SDL_CONTROLLER_AXIS_RIGHTX, - SDL_CONTROLLER_AXIS_RIGHTY, - SDL_CONTROLLER_AXIS_TRIGGERLEFT, - SDL_CONTROLLER_BUTTON_A, - SDL_CONTROLLER_BUTTON_B, - SDL_CONTROLLER_BUTTON_DPAD_DOWN, - SDL_CONTROLLER_BUTTON_DPAD_LEFT, - SDL_CONTROLLER_BUTTON_DPAD_RIGHT, - SDL_CONTROLLER_BUTTON_DPAD_UP, - SDL_CONTROLLER_BUTTON_LEFTSHOULDER, - SDL_CONTROLLER_BUTTON_RIGHTSHOULDER, - SDL_CONTROLLER_BUTTON_X, - SDL_CONTROLLER_BUTTON_Y, - SDL_CONTROLLERAXISMOTION, - SDL_CONTROLLERBUTTONDOWN, - SDL_CONTROLLERDEVICEADDED, - SDL_DROPFILE, - SDL_DROPTEXT, - SDL_FALSE, - SDL_HITTEST_DRAGGABLE, - SDL_HITTEST_NORMAL, - SDL_HITTEST_RESIZE_BOTTOM, - SDL_HITTEST_RESIZE_BOTTOMLEFT, - SDL_HITTEST_RESIZE_BOTTOMRIGHT, - SDL_HITTEST_RESIZE_LEFT, - SDL_HITTEST_RESIZE_RIGHT, - SDL_HITTEST_RESIZE_TOPLEFT, - SDL_HITTEST_RESIZE_TOPRIGHT, - SDL_INIT_EVERYTHING, - SDL_INIT_GAMECONTROLLER, - SDL_KEYDOWN, - SDL_KEYUP, - SDL_MOUSEBUTTONDOWN, - SDL_MOUSEBUTTONUP, - SDL_MOUSEMOTION, - SDL_MOUSEWHEEL, - SDL_PIXELFORMAT_ARGB8888, - SDL_QUIT, - SDL_RENDER_TARGETS_RESET, - SDL_SCANCODE_A, - SDL_SCANCODE_C, - SDL_SCANCODE_V, - SDL_SCANCODE_X, - SDL_SCANCODE_Z, - SDL_SYSTEM_CURSOR_ARROW, - SDL_SYSTEM_CURSOR_HAND, - SDL_SYSTEM_CURSOR_IBEAM, - SDL_SYSTEM_CURSOR_SIZENS, - SDL_SYSTEM_CURSOR_SIZENWSE, - SDL_SYSTEM_CURSOR_SIZEWE, - SDL_SYSWM_COCOA, - SDL_SYSWM_UNKNOWN, - SDL_SYSWM_WAYLAND, - SDL_SYSWM_X11, - SDL_TEXTEDITING, - SDL_TEXTINPUT, - SDL_TEXTUREACCESS_TARGET, - SDL_TRUE, - SDL_WINDOW_FULLSCREEN_DESKTOP, - SDL_WINDOW_INPUT_FOCUS, - SDL_WINDOWEVENT, - SDL_WINDOWEVENT_DISPLAY_CHANGED, - SDL_WINDOWEVENT_ENTER, - SDL_WINDOWEVENT_EXPOSED, - SDL_WINDOWEVENT_FOCUS_GAINED, - SDL_WINDOWEVENT_FOCUS_LOST, - SDL_WINDOWEVENT_LEAVE, - SDL_WINDOWEVENT_MAXIMIZED, - SDL_WINDOWEVENT_MINIMIZED, - SDL_WINDOWEVENT_RESIZED, - SDL_WINDOWEVENT_RESTORED, - SDL_WINDOWEVENT_SHOWN, - SDLK_BACKSPACE, - SDLK_DELETE, - SDLK_DOWN, - SDLK_END, - SDLK_HOME, - SDLK_KP_ENTER, - SDLK_LALT, - SDLK_LCTRL, - SDLK_LEFT, - SDLK_LGUI, - SDLK_LSHIFT, - SDLK_RALT, - SDLK_RCTRL, - SDLK_RETURN, - SDLK_RETURN2, - SDLK_RIGHT, - SDLK_RSHIFT, - SDLK_TAB, - SDLK_UP, - SDL_CaptureMouse, - SDL_CreateColorCursor, - SDL_CreateRGBSurfaceWithFormatFrom, - SDL_CreateSystemCursor, - SDL_CreateTexture, - SDL_CreateTextureFromSurface, - SDL_Delay, - SDL_DestroyTexture, - SDL_DestroyWindow, - SDL_Event, - SDL_FreeSurface, - SDL_GameControllerNameForIndex, - SDL_GameControllerOpen, - SDL_GetClipboardText, - SDL_GetCurrentVideoDriver, - SDL_GetGlobalMouseState, - SDL_GetKeyFromName, - SDL_GetMouseState, - SDL_GetScancodeFromName, - SDL_GetVersion, - SDL_GetWindowFlags, - SDL_GetWindowPosition, - SDL_GetWindowSize, - SDL_GetWindowWMInfo, - SDL_GL_GetDrawableSize, - SDL_HasClipboardText, - SDL_HideWindow, - SDL_HitTest, - SDL_InitSubSystem, - SDL_IsGameController, - SDL_MaximizeWindow, - SDL_MinimizeWindow, - SDL_PollEvent, - SDL_PumpEvents, - SDL_PushEvent, - SDL_QueryTexture, - SDL_Quit, - SDL_QuitSubSystem, - SDL_RaiseWindow, - SDL_Rect, - SDL_RenderClear, - SDL_RenderCopy, - SDL_RenderFillRect, - SDL_RenderPresent, - SDL_RestoreWindow, - SDL_SetClipboardText, - SDL_SetCursor, - SDL_SetRenderDrawBlendMode, - SDL_SetRenderDrawColor, - SDL_SetRenderTarget, - SDL_SetTextInputRect, - SDL_SetTextureAlphaMod, - SDL_SetTextureBlendMode, - SDL_SetTextureColorMod, - SDL_SetWindowAlwaysOnTop, - SDL_SetWindowBordered, - SDL_SetWindowFullscreen, - SDL_SetWindowHitTest, - SDL_SetWindowIcon, - SDL_SetWindowMinimumSize, - SDL_SetWindowOpacity, - SDL_SetWindowPosition, - SDL_SetWindowResizable, - SDL_SetWindowSize, - SDL_SetWindowTitle, - SDL_ShowWindow, - SDL_StartTextInput, - SDL_SysWMinfo, - SDL_version, - SDL_WaitEventTimeout, - SDLK_a, - SDLK_c, - SDLK_v, - SDLK_x, - SDLK_z, - rw_from_object, -) -from sdl2.sdlimage import IMG_Load, IMG_Load_RW, IMG_Quit + from send2trash import send2trash from unidecode import unidecode