MCPcopy Create free account
hub / github.com/OpenDUNE/OpenDUNE / Sprites_SetMouseSprite

Function Sprites_SetMouseSprite

src/sprites.c:359–426  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

357}
358
359void Sprites_SetMouseSprite(uint16 hotSpotX, uint16 hotSpotY, const uint8 *sprite)
360{
361 uint16 size;
362
363 if (sprite == NULL || g_mouseDisabled != 0) return;
364
365 while (g_mouseLock != 0) sleepIdle();
366
367 g_mouseLock++;
368
369 GUI_Mouse_Hide();
370
371 size = GFX_GetSize(READ_LE_UINT16(sprite + 3) + 16, sprite[5]);
372
373 if (s_mouseSpriteBufferSize < size) {
374 g_mouseSpriteBuffer = realloc(g_mouseSpriteBuffer, size);
375 s_mouseSpriteBufferSize = size;
376 }
377
378 size = READ_LE_UINT16(sprite + 8) + 10;
379 if ((*sprite & 0x1) != 0) size += 16;
380
381 if (s_mouseSpriteSize < size) {
382 g_mouseSprite = realloc(g_mouseSprite, size);
383 s_mouseSpriteSize = size;
384 }
385
386 if ((*sprite & 0x2) != 0) {
387 memcpy(g_mouseSprite, sprite, READ_LE_UINT16(sprite + 6));
388 } else {
389 uint8 *dst = (uint8 *)g_mouseSprite;
390 uint8 flags = sprite[0] | 0x2;
391
392 dst[0] = flags;
393 dst[1] = sprite[1];
394 dst += 2;
395 sprite += 2;
396
397 memcpy(dst, sprite, 6);
398 dst += 6;
399 sprite += 6;
400
401 size = READ_LE_UINT16(sprite);
402 dst[0] = sprite[0];
403 dst[1] = sprite[1];
404 dst += 2;
405 sprite += 2;
406
407 if ((flags & 0x1) != 0) {
408 memcpy(dst, sprite, 16);
409 dst += 16;
410 sprite += 16;
411 }
412
413 Format80_Decode(dst, sprite, size);
414 }
415
416 g_mouseSpriteHotspotX = hotSpotX;

Callers 7

GameLoop_LevelEndFunction · 0.85
GameLoop_MainFunction · 0.85
GUI_ChangeSelectionTypeFunction · 0.85
GUI_Widget_Mentat_ClickFunction · 0.85
GUI_Widget_Cancel_ClickFunction · 0.85
GUI_Widget_Options_ClickFunction · 0.85

Calls 4

GUI_Mouse_HideFunction · 0.85
GFX_GetSizeFunction · 0.85
Format80_DecodeFunction · 0.85
GUI_Mouse_ShowFunction · 0.85

Tested by

no test coverage detected