Files
playdate-kit/Sources/PlayDate/Display.swift
T
javierandClaude Fable 5 6485997edc Promote subsystem namespaces to the top level of the module
System, Display, Graphics, Sprite, Sound, File, JSON, Lua, Scoreboards,
Network, Rect, SystemEvent, and AccessReply now live at module scope
instead of being nested in the Playdate enum; consumers write
System.log(...) instead of Playdate.System.log(...), and can qualify with
the module name (PlayDate.System) on collision. The Playdate enum remains
only as the raw C API bootstrap (initialize(with:), api, apiPointer), and
Playdate.Error is renamed PlaydateError so no top-level type shadows
Swift.Error.

Breaking change for any existing consumers.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 11:10:25 +02:00

58 lines
2.0 KiB
Swift

//
// Display.swift
// Wraps `playdate->display` (pd_api_display.h).
//
internal import CPlaydate
/// The display API: resolution, refresh rate, scaling, and effects.
public enum Display {}
extension Display {
private static var api: playdate_display { Playdate.api.display.pointee }
/// The display width in pixels, taking the current scale into account.
public static var width: Int { Int(api.getWidth.unsafelyUnwrapped()) }
/// The display height in pixels, taking the current scale into account.
public static var height: Int { Int(api.getHeight.unsafelyUnwrapped()) }
/// Sets the nominal refresh rate in frames per second. Pass 0 to update
/// as fast as possible (the update callback drives the pace).
public static func setRefreshRate(_ rate: Float) {
api.setRefreshRate.unsafelyUnwrapped(rate)
}
/// The current nominal refresh rate.
public static var refreshRate: Float { api.getRefreshRate.unsafelyUnwrapped() }
/// The measured average frames per second.
public static var fps: Float { api.getFPS.unsafelyUnwrapped() }
/// Draws the frame white-on-black when `true`.
public static func setInverted(_ inverted: Bool) {
api.setInverted.unsafelyUnwrapped(inverted ? 1 : 0)
}
/// Sets the display scale factor: 1, 2, 4, or 8.
public static func setScale(_ scale: UInt32) {
api.setScale.unsafelyUnwrapped(scale)
}
/// Adds a mosaic effect. Valid values for each axis are 0...3.
public static func setMosaic(x: UInt32, y: UInt32) {
api.setMosaic.unsafelyUnwrapped(x, y)
}
/// Flips the display on the given axes.
public static func setFlipped(x: Bool, y: Bool) {
api.setFlipped.unsafelyUnwrapped(x ? 1 : 0, y ? 1 : 0)
}
/// Offsets the display by the given amount. Areas outside the frame
/// buffer draw black.
public static func setOffset(x: Int, y: Int) {
api.setOffset.unsafelyUnwrapped(Int32(x), Int32(y))
}
}