mirror of
https://github.com/elasota/Aerofoil.git
synced 2025-12-14 03:59:36 +00:00
Refactor color cursor loading
This commit is contained in:
@@ -10,6 +10,8 @@
|
|||||||
#include "PLBigEndian.h"
|
#include "PLBigEndian.h"
|
||||||
#include "Externs.h"
|
#include "Externs.h"
|
||||||
#include "Environ.h"
|
#include "Environ.h"
|
||||||
|
#include "HostDisplayDriver.h"
|
||||||
|
#include "IGpColorCursor.h"
|
||||||
|
|
||||||
|
|
||||||
#define rAcurID 128
|
#define rAcurID 128
|
||||||
@@ -33,7 +35,7 @@ typedef struct
|
|||||||
{
|
{
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
THandle<CCursor> cursorHdl;
|
IGpColorCursor *hwCursor;
|
||||||
} frame[1];
|
} frame[1];
|
||||||
} compiledAcurRec;
|
} compiledAcurRec;
|
||||||
|
|
||||||
@@ -46,7 +48,6 @@ void InitAnimatedCursor (acurHandle);
|
|||||||
|
|
||||||
acurHandle animCursorH = nil;
|
acurHandle animCursorH = nil;
|
||||||
compiledAcurHandle compiledAnimCursorH = nil;
|
compiledAcurHandle compiledAnimCursorH = nil;
|
||||||
Boolean useColorCursor = false;
|
|
||||||
|
|
||||||
|
|
||||||
//============================================================== Functions
|
//============================================================== Functions
|
||||||
@@ -58,7 +59,7 @@ Boolean useColorCursor = false;
|
|||||||
Boolean GetColorCursors (acurHandle ballCursH, compiledAcurHandle compiledBallCursH)
|
Boolean GetColorCursors (acurHandle ballCursH, compiledAcurHandle compiledBallCursH)
|
||||||
{
|
{
|
||||||
short i, j;
|
short i, j;
|
||||||
CCrsrHandle cursHdl;
|
IGpColorCursor *hwCursor;
|
||||||
Boolean result = true;
|
Boolean result = true;
|
||||||
|
|
||||||
if (ballCursH)
|
if (ballCursH)
|
||||||
@@ -67,18 +68,18 @@ Boolean GetColorCursors (acurHandle ballCursH, compiledAcurHandle compiledBallCu
|
|||||||
HideCursor(); // Hide the cursor
|
HideCursor(); // Hide the cursor
|
||||||
for (i = 0; i < j; i++) // Walk through the acur resource
|
for (i = 0; i < j; i++) // Walk through the acur resource
|
||||||
{
|
{
|
||||||
cursHdl = GetCCursor((*ballCursH)->frame[i].resID); // Get the cursor
|
hwCursor = PortabilityLayer::HostDisplayDriver::GetInstance()->LoadColorCursor((*ballCursH)->frame[i].resID); // Get the cursor
|
||||||
if (cursHdl == nil) // Make sure a real cursor was returned
|
if (hwCursor == nil) // Make sure a real cursor was returned
|
||||||
{ // If not, trash all cursors loaded
|
{ // If not, trash all cursors loaded
|
||||||
for (j = 0; j < i; j++)
|
for (j = 0; j < i; j++)
|
||||||
DisposeCCursor((CCrsrHandle)(*compiledBallCursH)->frame[j].cursorHdl);
|
(*compiledBallCursH)->frame[j].hwCursor->Destroy();
|
||||||
result = false; // Tell calling proc we failed
|
result = false; // Tell calling proc we failed
|
||||||
break; // And break out of the loop
|
break; // And break out of the loop
|
||||||
}
|
}
|
||||||
else // But, if the cursor loaded ok
|
else // But, if the cursor loaded ok
|
||||||
{ // add it to our list or cursor handles
|
{ // add it to our list or cursor handles
|
||||||
(*compiledBallCursH)->frame[i].cursorHdl = cursHdl;
|
(*compiledBallCursH)->frame[i].hwCursor = hwCursor;
|
||||||
SetCCursor((CCrsrHandle)(*compiledBallCursH)->frame[i].cursorHdl);
|
PortabilityLayer::HostDisplayDriver::GetInstance()->SetColorCursor(hwCursor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
InitCursor(); // Show the cursor again (as arrow)
|
InitCursor(); // Show the cursor again (as arrow)
|
||||||
@@ -92,10 +93,8 @@ Boolean GetColorCursors (acurHandle ballCursH, compiledAcurHandle compiledBallCu
|
|||||||
|
|
||||||
void InitAnimatedCursor (acurHandle ballCursH)
|
void InitAnimatedCursor (acurHandle ballCursH)
|
||||||
{
|
{
|
||||||
Boolean useColor;
|
|
||||||
compiledAcurHandle compiledBallCursorH;
|
compiledAcurHandle compiledBallCursorH;
|
||||||
|
|
||||||
useColor = thisMac.hasColor;
|
|
||||||
if (ballCursH == nil)
|
if (ballCursH == nil)
|
||||||
ballCursH = GetResource('acur', 128).StaticCast<acurRec>();
|
ballCursH = GetResource('acur', 128).StaticCast<acurRec>();
|
||||||
if (ballCursH && ballCursH != animCursorH)
|
if (ballCursH && ballCursH != animCursorH)
|
||||||
@@ -104,13 +103,11 @@ void InitAnimatedCursor (acurHandle ballCursH)
|
|||||||
if (!compiledBallCursorH)
|
if (!compiledBallCursorH)
|
||||||
RedAlert(kErrFailedResourceLoad);
|
RedAlert(kErrFailedResourceLoad);
|
||||||
|
|
||||||
if (useColor)
|
GetColorCursors(ballCursH, compiledBallCursorH);
|
||||||
useColor = GetColorCursors(ballCursH, compiledBallCursorH);
|
|
||||||
DisposCursors();
|
DisposCursors();
|
||||||
|
|
||||||
animCursorH = ballCursH;
|
animCursorH = ballCursH;
|
||||||
compiledAnimCursorH = compiledBallCursorH;
|
compiledAnimCursorH = compiledBallCursorH;
|
||||||
useColorCursor = useColor;
|
|
||||||
(*ballCursH)->index = 0;
|
(*ballCursH)->index = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -138,22 +135,13 @@ void DisposCursors (void)
|
|||||||
if (compiledAnimCursorH != nil)
|
if (compiledAnimCursorH != nil)
|
||||||
{
|
{
|
||||||
j = (*animCursorH)->n;
|
j = (*animCursorH)->n;
|
||||||
if (useColorCursor)
|
|
||||||
{
|
|
||||||
for (i = 0; i < j; i++)
|
for (i = 0; i < j; i++)
|
||||||
{
|
{
|
||||||
if ((*compiledAnimCursorH)->frame[i].cursorHdl != nil)
|
if ((*compiledAnimCursorH)->frame[i].hwCursor != nil)
|
||||||
DisposeCCursor((CCrsrHandle)(*compiledAnimCursorH)->frame[i].cursorHdl);
|
(*compiledAnimCursorH)->frame[i].hwCursor->Destroy();
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
for (i = 0; i < j; i++)
|
|
||||||
{
|
|
||||||
if ((*compiledAnimCursorH)->frame[i].cursorHdl != nil)
|
|
||||||
(*compiledAnimCursorH)->frame[i].cursorHdl.Dispose();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
compiledAnimCursorH.Dispose();
|
compiledAnimCursorH.Dispose();
|
||||||
compiledAnimCursorH = nil;
|
compiledAnimCursorH = nil;
|
||||||
}
|
}
|
||||||
@@ -177,16 +165,8 @@ void IncrementCursor (void)
|
|||||||
{
|
{
|
||||||
(*animCursorH)->index++;
|
(*animCursorH)->index++;
|
||||||
(*animCursorH)->index %= (*animCursorH)->n;
|
(*animCursorH)->index %= (*animCursorH)->n;
|
||||||
if (useColorCursor)
|
|
||||||
{
|
PortabilityLayer::HostDisplayDriver::GetInstance()->SetColorCursor((*compiledAnimCursorH)->frame[(*animCursorH)->index].hwCursor);
|
||||||
SetCCursor((CCrsrHandle)(*compiledAnimCursorH)->
|
|
||||||
frame[(*animCursorH)->index].cursorHdl);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
SetCursor((CursPtr)*(*compiledAnimCursorH)->
|
|
||||||
frame[(*animCursorH)->index].cursorHdl);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
SetBuiltinCursor(watchCursor);
|
SetBuiltinCursor(watchCursor);
|
||||||
@@ -205,16 +185,8 @@ void DecrementCursor (void)
|
|||||||
(*animCursorH)->index--;
|
(*animCursorH)->index--;
|
||||||
if (((*animCursorH)->index) < 0)
|
if (((*animCursorH)->index) < 0)
|
||||||
(*animCursorH)->index = ((*animCursorH)->n) - 1;
|
(*animCursorH)->index = ((*animCursorH)->n) - 1;
|
||||||
if (useColorCursor)
|
|
||||||
{
|
PortabilityLayer::HostDisplayDriver::GetInstance()->SetColorCursor((*compiledAnimCursorH)->frame[(*animCursorH)->index].hwCursor);
|
||||||
SetCCursor((CCrsrHandle)(*compiledAnimCursorH)->
|
|
||||||
frame[(*animCursorH)->index].cursorHdl);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
SetCursor((CursPtr)*(*compiledAnimCursorH)->
|
|
||||||
frame[(*animCursorH)->index].cursorHdl);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
SetBuiltinCursor(watchCursor);
|
SetBuiltinCursor(watchCursor);
|
||||||
|
|||||||
@@ -89,33 +89,6 @@ CursHandle GetCursor(int cursorID)
|
|||||||
return GetResource('CURS', cursorID).ReinterpretCast<Cursor>();
|
return GetResource('CURS', cursorID).ReinterpretCast<Cursor>();
|
||||||
}
|
}
|
||||||
|
|
||||||
CCrsrHandle GetCCursor(int cursorID)
|
|
||||||
{
|
|
||||||
PortabilityLayer::HostDisplayDriver *driver = PortabilityLayer::HostDisplayDriver::GetInstance();
|
|
||||||
IGpColorCursor *hwCursor = driver->LoadColorCursor(cursorID);
|
|
||||||
|
|
||||||
if (!hwCursor)
|
|
||||||
return nullptr;
|
|
||||||
|
|
||||||
CCrsrHandle hdl = PortabilityLayer::MemoryManager::GetInstance()->NewHandle<CCursor>();
|
|
||||||
if (!hdl)
|
|
||||||
{
|
|
||||||
hwCursor->Destroy();
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
CCursor *ccursor = *hdl;
|
|
||||||
ccursor->hwCursor = hwCursor;
|
|
||||||
|
|
||||||
return hdl;
|
|
||||||
}
|
|
||||||
|
|
||||||
void SetCCursor(CCrsrHandle handle)
|
|
||||||
{
|
|
||||||
assert(handle);
|
|
||||||
PortabilityLayer::HostDisplayDriver::GetInstance()->SetColorCursor((*handle)->hwCursor);
|
|
||||||
}
|
|
||||||
|
|
||||||
void HideCursor()
|
void HideCursor()
|
||||||
{
|
{
|
||||||
PortabilityLayer::HostDisplayDriver::GetInstance()->SetStandardCursor(EGpStandardCursors::kHidden);
|
PortabilityLayer::HostDisplayDriver::GetInstance()->SetStandardCursor(EGpStandardCursors::kHidden);
|
||||||
@@ -131,13 +104,6 @@ void SetBuiltinCursor(int builtinCursor)
|
|||||||
PL_NotYetImplemented();
|
PL_NotYetImplemented();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DisposeCCursor(CCrsrHandle handle)
|
|
||||||
{
|
|
||||||
(*handle)->hwCursor->Destroy();
|
|
||||||
|
|
||||||
PortabilityLayer::MemoryManager::GetInstance()->ReleaseHandle(handle.MMBlock());
|
|
||||||
}
|
|
||||||
|
|
||||||
void Delay(int ticks, UInt32 *endTickCount)
|
void Delay(int ticks, UInt32 *endTickCount)
|
||||||
{
|
{
|
||||||
PLSysCalls::Sleep(ticks);
|
PLSysCalls::Sleep(ticks);
|
||||||
|
|||||||
@@ -96,11 +96,6 @@ struct Cursor
|
|||||||
{
|
{
|
||||||
};
|
};
|
||||||
|
|
||||||
struct CCursor
|
|
||||||
{
|
|
||||||
IGpColorCursor *hwCursor;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct Window
|
struct Window
|
||||||
{
|
{
|
||||||
Window();
|
Window();
|
||||||
@@ -186,13 +181,11 @@ struct EventRecord
|
|||||||
|
|
||||||
typedef Window *WindowPtr;
|
typedef Window *WindowPtr;
|
||||||
typedef Cursor *CursPtr;
|
typedef Cursor *CursPtr;
|
||||||
typedef CCursor *CCrsrPtr;
|
|
||||||
typedef Menu *MenuPtr;
|
typedef Menu *MenuPtr;
|
||||||
typedef CInfoPBRec *CInfoPBPtr;
|
typedef CInfoPBRec *CInfoPBPtr;
|
||||||
typedef VersionRecord *VersRecPtr;
|
typedef VersionRecord *VersRecPtr;
|
||||||
|
|
||||||
typedef THandle<Cursor> CursHandle;
|
typedef THandle<Cursor> CursHandle;
|
||||||
typedef THandle<CCursor> CCrsrHandle;
|
|
||||||
typedef THandle<Menu> MenuHandle;
|
typedef THandle<Menu> MenuHandle;
|
||||||
typedef THandle<VersionRecord> VersRecHndl;
|
typedef THandle<VersionRecord> VersRecHndl;
|
||||||
|
|
||||||
@@ -262,15 +255,11 @@ static const int nullEvent = 0;
|
|||||||
|
|
||||||
void InitCursor();
|
void InitCursor();
|
||||||
CursHandle GetCursor(int cursorID);
|
CursHandle GetCursor(int cursorID);
|
||||||
CCrsrHandle GetCCursor(int cursorID);
|
|
||||||
void SetCCursor(CCrsrHandle handle);
|
|
||||||
void HideCursor();
|
void HideCursor();
|
||||||
|
|
||||||
void SetCursor(CursPtr cursor);
|
void SetCursor(CursPtr cursor);
|
||||||
void SetBuiltinCursor(int builtinCursor);
|
void SetBuiltinCursor(int builtinCursor);
|
||||||
|
|
||||||
void DisposeCCursor(CCrsrHandle handle);
|
|
||||||
|
|
||||||
void Delay(int ticks, UInt32 *endTickCount);
|
void Delay(int ticks, UInt32 *endTickCount);
|
||||||
short Alert(int dialogID, void *unknown);
|
short Alert(int dialogID, void *unknown);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user