Wrapped C enum raw values in explicit width conversions throughout the PlayDate binding target.

This commit is contained in:
2026-07-25 10:10:43 +02:00
parent 29619720f7
commit 69813b2a76
11 changed files with 47 additions and 47 deletions
+5 -5
View File
@@ -27,15 +27,15 @@ extension File {
public init(rawValue: UInt32) { self.rawValue = rawValue }
/// Read from the game pdx, then the Data directory.
public static let read = Options(rawValue: kFileRead.rawValue)
public static let read = Options(rawValue: UInt32(kFileRead.rawValue))
/// Read from the Data directory only.
public static let readData = Options(rawValue: kFileReadData.rawValue)
public static let readData = Options(rawValue: UInt32(kFileReadData.rawValue))
/// Write to the Data directory, truncating an existing file.
public static let write = Options(rawValue: kFileWrite.rawValue)
public static let write = Options(rawValue: UInt32(kFileWrite.rawValue))
/// Write to the Data directory, appending to an existing file.
public static let append = Options(rawValue: kFileAppend.rawValue)
public static let append = Options(rawValue: UInt32(kFileAppend.rawValue))
var cValue: FileOptions { FileOptions(rawValue) }
var cValue: FileOptions { FileOptions(FileOptions.RawValue(rawValue)) }
}
/// Information about a file or directory, mirroring `FileStat`.
+11 -11
View File
@@ -73,8 +73,8 @@ extension Graphics {
case clear = 2
case xor = 3
init(_ color: LCDSolidColor) { self = SolidColor(rawValue: color.rawValue) ?? .clear }
var cValue: LCDSolidColor { LCDSolidColor(rawValue) }
init(_ color: LCDSolidColor) { self = SolidColor(rawValue: UInt32(color.rawValue)) ?? .clear }
var cValue: LCDSolidColor { LCDSolidColor(LCDSolidColor.RawValue(rawValue)) }
}
/// How source pixels combine with the destination when drawing.
@@ -88,8 +88,8 @@ extension Graphics {
case nxor = 6
case inverted = 7
init(_ mode: LCDBitmapDrawMode) { self = DrawMode(rawValue: mode.rawValue) ?? .copy }
var cValue: LCDBitmapDrawMode { LCDBitmapDrawMode(rawValue) }
init(_ mode: LCDBitmapDrawMode) { self = DrawMode(rawValue: UInt32(mode.rawValue)) ?? .copy }
var cValue: LCDBitmapDrawMode { LCDBitmapDrawMode(LCDBitmapDrawMode.RawValue(rawValue)) }
}
/// Mirroring applied when drawing a bitmap.
@@ -99,8 +99,8 @@ extension Graphics {
case flippedY = 2
case flippedXY = 3
init(_ flip: LCDBitmapFlip) { self = BitmapFlip(rawValue: flip.rawValue) ?? .unflipped }
var cValue: LCDBitmapFlip { LCDBitmapFlip(rawValue) }
init(_ flip: LCDBitmapFlip) { self = BitmapFlip(rawValue: UInt32(flip.rawValue)) ?? .unflipped }
var cValue: LCDBitmapFlip { LCDBitmapFlip(LCDBitmapFlip.RawValue(rawValue)) }
}
/// The end cap style used when drawing lines.
@@ -109,7 +109,7 @@ extension Graphics {
case square = 1
case round = 2
var cValue: LCDLineCapStyle { LCDLineCapStyle(rawValue) }
var cValue: LCDLineCapStyle { LCDLineCapStyle(LCDLineCapStyle.RawValue(rawValue)) }
}
/// The encoding of text passed to the text functions.
@@ -118,7 +118,7 @@ extension Graphics {
case utf8 = 1
case utf16LittleEndian = 2
var cValue: PDStringEncoding { PDStringEncoding(rawValue) }
var cValue: PDStringEncoding { PDStringEncoding(PDStringEncoding.RawValue(rawValue)) }
}
/// The winding rule used by `fillPolygon`.
@@ -126,7 +126,7 @@ extension Graphics {
case nonZero = 0
case evenOdd = 1
var cValue: LCDPolygonFillRule { LCDPolygonFillRule(rawValue) }
var cValue: LCDPolygonFillRule { LCDPolygonFillRule(LCDPolygonFillRule.RawValue(rawValue)) }
}
/// How text wraps in `drawText(in:)`.
@@ -135,7 +135,7 @@ extension Graphics {
case character = 1
case word = 2
var cValue: PDTextWrappingMode { PDTextWrappingMode(rawValue) }
var cValue: PDTextWrappingMode { PDTextWrappingMode(PDTextWrappingMode.RawValue(rawValue)) }
}
/// Horizontal alignment for `drawText(in:)`.
@@ -144,7 +144,7 @@ extension Graphics {
case center = 1
case right = 2
var cValue: PDTextAlignment { PDTextAlignment(rawValue) }
var cValue: PDTextAlignment { PDTextAlignment(PDTextAlignment.RawValue(rawValue)) }
}
/// An integer rectangle mirroring `LCDRect`. `right` and `bottom` are
+6 -6
View File
@@ -57,12 +57,12 @@ extension JSON {
/// Converts a C `json_value`, consuming any container box it references.
private static func convert(_ value: json_value) -> Value {
switch UInt32(bitPattern: Int32(value.type)) {
case kJSONTrue.rawValue: return .bool(true)
case kJSONFalse.rawValue: return .bool(false)
case kJSONInteger.rawValue: return .int(Int(value.data.intval))
case kJSONFloat.rawValue: return .float(value.data.floatval)
case kJSONString.rawValue: return .string(String(playdateCString: value.data.stringval) ?? "")
case kJSONArray.rawValue, kJSONTable.rawValue:
case UInt32(kJSONTrue.rawValue): return .bool(true)
case UInt32(kJSONFalse.rawValue): return .bool(false)
case UInt32(kJSONInteger.rawValue): return .int(Int(value.data.intval))
case UInt32(kJSONFloat.rawValue): return .float(value.data.floatval)
case UInt32(kJSONString.rawValue): return .string(String(playdateCString: value.data.stringval) ?? "")
case UInt32(kJSONArray.rawValue), UInt32(kJSONTable.rawValue):
guard let pointer = value.data.arrayval else { return .null }
return Unmanaged<ValueBox>.fromOpaque(pointer).takeRetainedValue().value
default: return .null
+1 -1
View File
@@ -32,7 +32,7 @@ extension Lua {
case thread = 7
case object = 8
init(_ type: LuaType) { self = Kind(rawValue: type.rawValue) ?? .nil }
init(_ type: LuaType) { self = Kind(rawValue: UInt32(type.rawValue)) ?? .nil }
}
/// A constant published on a registered class.
+3 -3
View File
@@ -40,7 +40,7 @@ extension Network {
case unknown = 1
init(_ error: PDNetErr) {
self = NetError(rawValue: error.rawValue) ?? .unknown
self = NetError(rawValue: Int32(error.rawValue)) ?? .unknown
}
}
@@ -66,7 +66,7 @@ extension Network {
}
public static var status: WifiStatus {
WifiStatus(rawValue: networkAPI.pointee.getStatus.unsafelyUnwrapped().rawValue) ?? .notConnected
WifiStatus(rawValue: UInt32(networkAPI.pointee.getStatus.unsafelyUnwrapped().rawValue)) ?? .notConnected
}
/// Turns the wifi radio on or off. The completion receives `nil` on
@@ -115,7 +115,7 @@ extension Network {
// The callback will not be invoked; balance the retain.
box.release()
}
return AccessReply(rawValue: reply.rawValue) ?? .ask
return AccessReply(rawValue: UInt32(reply.rawValue)) ?? .ask
}
// MARK: - HTTP
+5 -5
View File
@@ -43,8 +43,8 @@ extension Sound {
case monoADPCM = 4
case stereoADPCM = 5
init(_ format: SoundFormat) { self = Format(rawValue: format.rawValue) ?? .mono16bit }
var cValue: SoundFormat { SoundFormat(rawValue) }
init(_ format: SoundFormat) { self = Format(rawValue: UInt32(format.rawValue)) ?? .mono16bit }
var cValue: SoundFormat { SoundFormat(SoundFormat.RawValue(rawValue)) }
public var isStereo: Bool { rawValue & 1 != 0 }
public var is16bit: Bool { rawValue >= 2 && rawValue < 4 }
@@ -94,9 +94,9 @@ extension Sound {
return snd.pointee.setMicCallback.unsafelyUnwrapped({ _, buffer, length in
let samples = UnsafeMutableBufferPointer(start: buffer, count: Int(length))
return Sound.micCallback?(samples) == true ? 1 : 0
}, nil, CPlaydate.MicSource(source.rawValue)) != 0
}, nil, CPlaydate.MicSource(CPlaydate.MicSource.RawValue(source.rawValue))) != 0
} else {
return snd.pointee.setMicCallback.unsafelyUnwrapped(nil, nil, CPlaydate.MicSource(source.rawValue)) != 0
return snd.pointee.setMicCallback.unsafelyUnwrapped(nil, nil, CPlaydate.MicSource(CPlaydate.MicSource.RawValue(source.rawValue))) != 0
}
}
@@ -128,7 +128,7 @@ extension Sound {
// The callback will not be invoked; balance the retain.
box.release()
}
return AccessReply(rawValue: reply.rawValue) ?? .ask
return AccessReply(rawValue: UInt32(reply.rawValue)) ?? .ask
}
/// The current headphone and headset-microphone state.
+1 -1
View File
@@ -85,7 +85,7 @@ extension Sound {
case lowShelf = 5
case highShelf = 6
var cValue: TwoPoleFilterType { TwoPoleFilterType(rawValue) }
var cValue: TwoPoleFilterType { TwoPoleFilterType(TwoPoleFilterType.RawValue(rawValue)) }
}
private var retainedFrequencyModulator: SignalValue?
+1 -1
View File
@@ -136,7 +136,7 @@ extension Sound {
case arpeggiator = 6
case function = 7
var cValue: LFOType { LFOType(rawValue) }
var cValue: LFOType { LFOType(LFOType.RawValue(rawValue)) }
}
var function: ((LFO) -> Float)?
+1 -1
View File
@@ -21,7 +21,7 @@ extension Sound {
case poDigital = 6
case poVosim = 7
var cValue: SoundWaveform { SoundWaveform(rawValue) }
var cValue: SoundWaveform { SoundWaveform(SoundWaveform.RawValue(rawValue)) }
}
/// Custom generator callbacks. Samples are in signed Q8.24 format.
+2 -2
View File
@@ -103,9 +103,9 @@ public final class Sprite {
case bounce = 3
init(_ response: SpriteCollisionResponseType) {
self = CollisionResponse(rawValue: response.rawValue) ?? .freeze
self = CollisionResponse(rawValue: UInt32(response.rawValue)) ?? .freeze
}
var cValue: SpriteCollisionResponseType { SpriteCollisionResponseType(rawValue) }
var cValue: SpriteCollisionResponseType { SpriteCollisionResponseType(SpriteCollisionResponseType.RawValue(rawValue)) }
}
/// Information about a single collision, mirroring `SpriteCollisionInfo`.
+11 -11
View File
@@ -17,8 +17,8 @@ extension System {
public struct Buttons: OptionSet, Sendable {
public let rawValue: UInt32
public init(rawValue: UInt32) { self.rawValue = rawValue }
init(_ buttons: PDButtons) { self.rawValue = buttons.rawValue }
var cValue: PDButtons { PDButtons(rawValue) }
init(_ buttons: PDButtons) { self.rawValue = UInt32(buttons.rawValue) }
var cValue: PDButtons { PDButtons(PDButtons.RawValue(rawValue)) }
public static let left = Buttons(kButtonLeft)
public static let right = Buttons(kButtonRight)
@@ -34,8 +34,8 @@ extension System {
public init(rawValue: UInt32) { self.rawValue = rawValue }
public static let none = Peripherals([])
public static let accelerometer = Peripherals(rawValue: kAccelerometer.rawValue)
public static let all = Peripherals(rawValue: kAllPeripherals.rawValue)
public static let accelerometer = Peripherals(rawValue: UInt32(kAccelerometer.rawValue))
public static let all = Peripherals(rawValue: UInt32(kAllPeripherals.rawValue))
}
/// The system language.
@@ -46,9 +46,9 @@ extension System {
case system = 2
init(_ language: PDLanguage) {
self = Language(rawValue: language.rawValue) ?? .english
self = Language(rawValue: UInt32(language.rawValue)) ?? .english
}
var cValue: PDLanguage { PDLanguage(rawValue) }
var cValue: PDLanguage { PDLanguage(PDLanguage.RawValue(rawValue)) }
}
/// A calendar date and time, mirroring `PDDateTime`.
@@ -97,9 +97,9 @@ extension System {
public let rawValue: UInt32
public init(rawValue: UInt32) { self.rawValue = rawValue }
public static let charging = PowerStatus(rawValue: kPDPowerStatusCharging.rawValue)
public static let usb = PowerStatus(rawValue: kPDPowerStatusUsb.rawValue)
public static let screws = PowerStatus(rawValue: kPDPowerStatusScrews.rawValue)
public static let charging = PowerStatus(rawValue: UInt32(kPDPowerStatusCharging.rawValue))
public static let usb = PowerStatus(rawValue: UInt32(kPDPowerStatusUsb.rawValue))
public static let screws = PowerStatus(rawValue: UInt32(kPDPowerStatusScrews.rawValue))
}
/// OS, language, and pdx version information, mirroring `PDInfo`.
@@ -239,7 +239,7 @@ extension System {
nonisolated(unsafe) private static var buttonCallback: ((Buttons, Bool, UInt32) -> Int32)?
public static func setPeripheralsEnabled(_ peripherals: Peripherals) {
api.pointee.setPeripheralsEnabled.unsafelyUnwrapped(PDPeripherals(peripherals.rawValue))
api.pointee.setPeripheralsEnabled.unsafelyUnwrapped(PDPeripherals(PDPeripherals.RawValue(peripherals.rawValue)))
}
/// The most recent accelerometer reading, in g. Enable the accelerometer
@@ -477,7 +477,7 @@ extension System {
public static var volume: Float { api.pointee.getVolume.unsafelyUnwrapped() }
public static var powerStatus: PowerStatus {
PowerStatus(rawValue: api.pointee.getPowerStatus.unsafelyUnwrapped().rawValue)
PowerStatus(rawValue: UInt32(api.pointee.getPowerStatus.unsafelyUnwrapped().rawValue))
}
/// Quits the game and returns to the launcher.