mirror of
https://github.com/seekrs/MacroLibX.git
synced 2026-09-03 01:20:00 +02:00
Added mlx_set_window_icon
This commit is contained in:
@@ -90,18 +90,30 @@ extern "C"
|
||||
|
||||
void mlx_set_window_title(mlx_context mlx, mlx_window win, const char* title)
|
||||
{
|
||||
MLX_CHECK_APPLICATION_POINTER(mlx);
|
||||
if (title == nullptr)
|
||||
{
|
||||
mlx::Error("invalid window title (NULL)");
|
||||
return;
|
||||
}
|
||||
MLX_CHECK_APPLICATION_POINTER(mlx);
|
||||
mlx::NonOwningPtr<mlx::GraphicsSupport> gs = mlx->app->GetGraphicsSupport(win);
|
||||
if(!gs && !gs->HasWindow())
|
||||
return;
|
||||
gs->GetWindow()->SetTitle(title);
|
||||
}
|
||||
|
||||
void mlx_set_window_icon(mlx_context mlx, mlx_window win, mlx_image image)
|
||||
{
|
||||
MLX_CHECK_APPLICATION_POINTER(mlx);
|
||||
mlx::NonOwningPtr<mlx::GraphicsSupport> gs = mlx->app->GetGraphicsSupport(win);
|
||||
if(!gs && !gs->HasWindow())
|
||||
return;
|
||||
mlx::NonOwningPtr<mlx::Texture> texture = mlx->app->GetTexture(image);
|
||||
if(!texture)
|
||||
return;
|
||||
gs->GetWindow()->SetIcon(texture);
|
||||
}
|
||||
|
||||
void mlx_set_window_fullscreen(mlx_context mlx, mlx_window win, bool enable)
|
||||
{
|
||||
MLX_CHECK_APPLICATION_POINTER(mlx);
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
#include "Utils/Buffer.h"
|
||||
#include "mlx.h"
|
||||
#include <PreCompiled.h>
|
||||
#include <Core/SDLManager.h>
|
||||
@@ -57,7 +58,12 @@ namespace mlx
|
||||
infos->window = SDL_CreateWindow(info->title, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, info->width, info->height, flags);
|
||||
if(!infos->window)
|
||||
FatalError("SDL: unable to open a new window; %", SDL_GetError());
|
||||
infos->icon = SDL_CreateRGBSurfaceFrom(static_cast<void*>(logo_mlx), logo_mlx_width, logo_mlx_height, 32, 4 * logo_mlx_width, Rmask(), Gmask(), Bmask(), Amask());
|
||||
|
||||
mlx_color* buffer = new mlx_color[logo_mlx_size];
|
||||
std::memcpy(buffer, logo_mlx, logo_mlx_size);
|
||||
infos->icon = SDL_CreateRGBSurfaceFrom(buffer, logo_mlx_width, logo_mlx_height, 32, logo_mlx_width * 4, Rmask(), Gmask(), Bmask(), Amask());
|
||||
if(!infos->icon)
|
||||
FatalError("SDL: unable to create a window icon; %", SDL_GetError());
|
||||
SDL_SetWindowIcon(infos->window, infos->icon);
|
||||
|
||||
m_windows_registry.insert(infos);
|
||||
@@ -75,7 +81,10 @@ namespace mlx
|
||||
if(infos->window != nullptr)
|
||||
SDL_DestroyWindow(infos->window);
|
||||
if(infos->icon != nullptr)
|
||||
{
|
||||
delete[] (mlx_color*)infos->icon->pixels;
|
||||
SDL_FreeSurface(infos->icon);
|
||||
}
|
||||
|
||||
m_windows_registry.erase(infos);
|
||||
delete infos;
|
||||
@@ -153,6 +162,21 @@ namespace mlx
|
||||
SDL_SetWindowTitle(static_cast<Internal::WindowInfos*>(window)->window, title.data());
|
||||
}
|
||||
|
||||
void SDLManager::SetWindowIcon(Handle window, NonOwningPtr<Texture> texture) const noexcept
|
||||
{
|
||||
Internal::WindowInfos* infos = static_cast<Internal::WindowInfos*>(window);
|
||||
if(infos->icon != nullptr)
|
||||
{
|
||||
delete[] (mlx_color*)infos->icon->pixels;
|
||||
SDL_FreeSurface(infos->icon);
|
||||
}
|
||||
|
||||
int width = texture->GetWidth(), height = texture->GetHeight();
|
||||
|
||||
infos->icon = SDL_CreateRGBSurfaceFrom(texture->GetBufferCopy(), width, height, 32, width * 4, Rmask(), Gmask(), Bmask(), Amask());
|
||||
SDL_SetWindowIcon(infos->window, infos->icon);
|
||||
}
|
||||
|
||||
void SDLManager::SetWindowFullscreen(Handle window, bool enable) const noexcept
|
||||
{
|
||||
SDL_SetWindowFullscreen(static_cast<Internal::WindowInfos*>(window)->window, (enable ? SDL_WINDOW_FULLSCREEN_DESKTOP : 0));
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
#include "Utils/Buffer.h"
|
||||
#include "mlx.h"
|
||||
#include <PreCompiled.h>
|
||||
#include <Renderer/Image.h>
|
||||
#include <Maths/Vec4.h>
|
||||
@@ -349,6 +351,17 @@ namespace mlx
|
||||
m_has_been_modified = false;
|
||||
}
|
||||
|
||||
mlx_color* Texture::GetBufferCopy() noexcept
|
||||
{
|
||||
MLX_PROFILE_FUNCTION();
|
||||
if(!m_staging_buffer.has_value())
|
||||
OpenCPUBuffer();
|
||||
|
||||
mlx_color* dst = new mlx_color[m_width * m_height];
|
||||
std::memcpy(dst, m_staging_buffer->GetMap<mlx_color*>(), m_width * m_height * sizeof(mlx_color));
|
||||
return dst;
|
||||
}
|
||||
|
||||
void Texture::OpenCPUBuffer()
|
||||
{
|
||||
MLX_PROFILE_FUNCTION();
|
||||
|
||||
Reference in New Issue
Block a user