目次 - SDL 3.0 API(機能別) - マウス - SDL_CreateColorCursor

SDL_CreateColorCursor

色つきのマウスカーソルを生成する

ヘッダ

SDL3/SDL_mouse.h

構文

SDL_Cursor * SDL_CreateColorCursor(SDL_Surface *surface, int hot_x, int hot_y);

引数

SDL_Surface *surfaceカーソルの画像のSDL_Surface
inthot_xカーソルの照準のX座標
inthot_yカーソルの照準のY座標

戻り値

(SDL_Cursor *) 成功のとき新しく生成されたカーソル, 失敗のときNULLを戻す. SDL_GetError()で詳細を知ることができる.

詳細

この関数にSDL_AddSurfaceAlternateImage()で別バージョンのサーフェイスを追加したサーフェイスを渡した場合, SDL_HINT_MOUSE_DPI_SCALE_CURSORSが有効ならば, サーフェイスの画像はディスプレイの拡大率が100%の場合に使用され, 別バージョンのサーフェースは高DPIの場合に使用される. 例えば, 元のサーフェイスが32×32の場合, macOSの2倍やWindowsの200%ならば, 可能ならば64×64の画像が使用される. 合う画像がない場合は, 代わりに可能ならば最も近い大きな画像を縮小して使用する. それがなければ, 最も近い小さな画像を拡大して使用する.

スレッドセーフ

この関数を呼べるのはメインスレッドのみである.

バージョン

SDL 3.2.0以降

サンプルコード

#include 

int
main(int argc, char *argv[])
{
    SDL_Window *window = NULL;
    SDL_Renderer *renderer = NULL;
    SDL_Surface *surface = NULL;
    SDL_Cursor *cursor = NULL;
    bool error = true;

    if (!SDL_Init(SDL_INIT_VIDEO)) {
        goto exit;
    }
    if (!SDL_CreateWindowAndRenderer("Hello SDL", 640, 480, 0, &window, &renderer)) {
        goto exit;
    }
    surface = SDL_LoadBMP((1 < argc) ? argv[1] : "cursor.bmp");
    if (!surface) {
        goto exit;
    }
    cursor = SDL_CreateColorCursor(surface, 0, 0);
    if (!cursor) {
        goto exit;
    }

    SDL_SetCursor(cursor);
    SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255);
    while (true) {
        SDL_Event event;
        while (SDL_PollEvent(&event)) {
            switch (event.type) {
            case SDL_EVENT_MOUSE_BUTTON_UP:
            case SDL_EVENT_QUIT:
                error = false;
                goto exit;
            }
        }
        SDL_RenderClear(renderer);
        SDL_RenderPresent(renderer);
    }

exit:
    if (error) {
        SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "%s", SDL_GetError());
    }
    if (cursor) {
        SDL_DestroyCursor(cursor);
    }
    if (surface) {
        SDL_DestroySurface(surface);
    }
    if (renderer) {
        SDL_DestroyRenderer(renderer);
    }
    if (window) {
        SDL_DestroyWindow(window);
    }
    SDL_Quit();
    return error;
}

関連項目

SDL Wikiへのリンク

SDL_CreateColorCursor - SDL Wiki