Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Package.resolved

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 12 additions & 0 deletions Sources/OpenRenderBox/Render/ORBDisplayList.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
//
// ORBDisplayList.swift
// OpenRenderBox
//
// Created by Kyle on 1/11/26.
//

#if !canImport(ObjectiveC)
public final class ORBDisplayList {

}
#endif
60 changes: 31 additions & 29 deletions Sources/OpenRenderBoxCxx/Color/ORBColorMode.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,39 +4,41 @@

#include <OpenRenderBox/ORBColorMode.h>

// Working color space lookup table
// Index: mode value (0-15), Value: ORBColorSpace
// 1 = SRGB, 2 = LinearSRGB
static const ORBColorSpace kColorModeWorkingColorSpaceTable[16] = {
ORBColorSpaceSRGB, // 0
ORBColorSpaceLinearSRGB, // 1
ORBColorSpaceLinearSRGB, // 2
ORBColorSpaceSRGB, // 3
ORBColorSpaceSRGB, // 4
ORBColorSpaceSRGB, // 5
ORBColorSpaceLinearSRGB, // 6
ORBColorSpaceLinearSRGB, // 7
ORBColorSpaceLinearSRGB, // 8
ORBColorSpaceSRGB, // 9
ORBColorSpaceLinearSRGB, // 10
ORBColorSpaceSRGB, // 11
ORBColorSpaceSRGB, // 12
ORBColorSpaceLinearSRGB, // 13
ORBColorSpaceSRGB, // 14
ORBColorSpaceLinearSRGB, // 15
};

ORBColorSpace ORBColorModeWorkingColorSpace(ORBColorMode mode) {
switch (mode) {
case ORBColorMode0:
case ORBColorMode3:
case ORBColorMode4:
case ORBColorMode5:
case ORBColorMode9:
case ORBColorMode11:
case ORBColorMode12:
case ORBColorMode14:
return ORBColorSpaceSRGB;
case ORBColorMode1:
case ORBColorMode2:
case ORBColorMode6:
case ORBColorMode7:
case ORBColorMode8:
case ORBColorMode10:
case ORBColorMode13:
case ORBColorMode15:
return ORBColorSpaceLinearSRGB;
default:
return ORBColorSpaceDefault;
if (mode < 0 || mode > 15) {
return ORBColorSpaceDefault;
}
return kColorModeWorkingColorSpaceTable[mode];
}

bool ORBColorModeHasExtendedRange(ORBColorMode mode) {
switch (mode) {
case ORBColorMode2:
case ORBColorMode11:
case ORBColorMode12:
case ORBColorMode13:
return true;
default:
return false;
// Extended range modes: 2, 11, 12, 13
// 0x3804 = 0011 1000 0000 0100 binary
if (mode < 0 || mode > 15) {
return false;
}
uint32_t mask = 0x3804;
return (mask >> mode) & 1;
}
20 changes: 1 addition & 19 deletions Sources/OpenRenderBoxCxx/include/OpenRenderBox/ORBColorMode.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,25 +11,7 @@ ORB_ASSUME_NONNULL_BEGIN

ORB_EXTERN_C_BEGIN

// TODO: Review those names later
typedef ORB_ENUM(int32_t, ORBColorMode) {
ORBColorMode0 = 0,
ORBColorMode1 = 1,
ORBColorMode2 = 2,
ORBColorMode3 = 3,
ORBColorMode4 = 4,
ORBColorMode5 = 5,
ORBColorMode6 = 6,
ORBColorMode7 = 7,
ORBColorMode8 = 8,
ORBColorMode9 = 9,
ORBColorMode10 = 10,
ORBColorMode11 = 11,
ORBColorMode12 = 12,
ORBColorMode13 = 13,
ORBColorMode14 = 14,
ORBColorMode15 = 15,
} ORB_SWIFT_NAME(ORBColor.Mode);
typedef int32_t ORBColorMode ORB_SWIFT_STRUCT ORB_SWIFT_NAME(ORBColor.Mode);

ORB_EXPORT ORBColorSpace ORBColorModeWorkingColorSpace(ORBColorMode mode) ORB_SWIFT_NAME(getter:ORBColorMode.workingColorSpace(self:));
ORB_EXPORT bool ORBColorModeHasExtendedRange(ORBColorMode mode) ORB_SWIFT_NAME(getter:ORBColorMode.hasExtendedRange(self:));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ typedef ORB_ENUM(uint32_t, ORBColorSpace) {
ORBColorSpaceLinearSRGB = 2,
ORBColorSpaceDisplayP3 = 3,
ORBColorSpaceLinearDisplayP3 = 4,
} ORB_SWIFT_NAME(ORBColor.Space);
} ORB_SWIFT_NAME(ORBColor.ColorSpace);

ORB_EXTERN_C_END

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,13 @@

#pragma once

#include "OpenRenderBox/ORBColorMode.h"
#include <OpenRenderBox/ORBBase.h>

#if ORB_OBJC_FOUNDATION

#include <OpenRenderBox/ORBColor.h>
#include <OpenRenderBox/ORBColorMode.h>
#include <OpenRenderBoxObjC/Device/ORBDevice.h>
#include <OpenRenderBoxObjC/Render/ORBDrawableStatistics.h>
#include <OpenRenderBoxObjC/Render/_ORBDrawableDelegate.h>
Expand All @@ -29,7 +31,7 @@ ORB_ASSUME_NONNULL_BEGIN

@property (retain, nonatomic, nullable) ORBDevice *device;
@property (nonatomic) BOOL rendersAsynchronously;
@property (nonatomic) int colorMode;
@property (nonatomic) ORBColorMode colorMode;
@property (nonatomic) BOOL promotesFramebuffer;
@property (nonatomic) NSUInteger pixelFormat;
@property (nonatomic) BOOL clearsBackground;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
#if ORB_OBJC_FOUNDATION

#include <OpenRenderBoxObjC/Render/ORBDisplayList.h>

#include <OpenRenderBoxObjC/Device/ORBDevice.h>
#include <Foundation/Foundation.h>
#include <QuartzCore/QuartzCore.h>

Expand All @@ -24,7 +24,7 @@ ORB_ASSUME_NONNULL_BEGIN
@optional

- (void)RBLayer:(ORBLayer *)layer draw:(ORBDisplayList *)inDisplayList;
- (nullable id)RBLayerDefaultDevice:(ORBLayer *)layer;
- (nullable ORBDevice *)RBLayerDefaultDevice:(ORBLayer *)layer;

@end

Expand Down
44 changes: 22 additions & 22 deletions Tests/OpenRenderBoxCompatibilityTests/ColorTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -135,12 +135,12 @@ struct ColorTests {

#if canImport(CoreGraphics)
@Test("ORBColorCopyCGColor", arguments: [
(ORBColor(red: 1.0, green: 0.0, blue: 0.0, alpha: 1.0), ORBColor.Space.SRGB),
(ORBColor(red: 0.0, green: 1.0, blue: 0.0, alpha: 1.0), ORBColor.Space.linearSRGB),
(ORBColor(red: 0.0, green: 0.0, blue: 1.0, alpha: 0.5), ORBColor.Space.displayP3),
(ORBColor(red: 0.5, green: 0.5, blue: 0.5, alpha: 1.0), ORBColor.Space.linearDisplayP3),
(ORBColor(red: 1.0, green: 0.0, blue: 0.0, alpha: 1.0), ORBColor.ColorSpace.SRGB),
(ORBColor(red: 0.0, green: 1.0, blue: 0.0, alpha: 1.0), ORBColor.ColorSpace.linearSRGB),
(ORBColor(red: 0.0, green: 0.0, blue: 1.0, alpha: 0.5), ORBColor.ColorSpace.displayP3),
(ORBColor(red: 0.5, green: 0.5, blue: 0.5, alpha: 1.0), ORBColor.ColorSpace.linearDisplayP3),
])
func colorCopyCGColor(color: ORBColor, colorSpace: ORBColor.Space) throws {
func colorCopyCGColor(color: ORBColor, colorSpace: ORBColor.ColorSpace) throws {
let cgColor = try #require(color.cgColor(colorSpace: colorSpace))
#expect(cgColor.numberOfComponents == 4)
let components = cgColor.components!
Expand All @@ -157,24 +157,24 @@ struct ColorTests {
// MARK: - ORBColorModeWorkingColorSpace

@Test("ORBColorModeWorkingColorSpace", arguments: [
(ORBColor.Mode.mode0, ORBColor.Space.SRGB),
(ORBColor.Mode.mode1, ORBColor.Space.linearSRGB),
(ORBColor.Mode.mode2, ORBColor.Space.linearSRGB),
(ORBColor.Mode.mode3, ORBColor.Space.SRGB),
(ORBColor.Mode.mode4, ORBColor.Space.SRGB),
(ORBColor.Mode.mode5, ORBColor.Space.SRGB),
(ORBColor.Mode.mode6, ORBColor.Space.linearSRGB),
(ORBColor.Mode.mode7, ORBColor.Space.linearSRGB),
(ORBColor.Mode.mode8, ORBColor.Space.linearSRGB),
(ORBColor.Mode.mode9, ORBColor.Space.SRGB),
(ORBColor.Mode.mode10, ORBColor.Space.linearSRGB),
(ORBColor.Mode.mode11, ORBColor.Space.SRGB),
(ORBColor.Mode.mode12, ORBColor.Space.SRGB),
(ORBColor.Mode.mode13, ORBColor.Space.linearSRGB),
(ORBColor.Mode.mode14, ORBColor.Space.SRGB),
(ORBColor.Mode.mode15, ORBColor.Space.linearSRGB),
(ORBColor.Mode.mode0, ORBColor.ColorSpace.SRGB),
(ORBColor.Mode.mode1, ORBColor.ColorSpace.linearSRGB),
(ORBColor.Mode.mode2, ORBColor.ColorSpace.linearSRGB),
(ORBColor.Mode.mode3, ORBColor.ColorSpace.SRGB),
(ORBColor.Mode.mode4, ORBColor.ColorSpace.SRGB),
(ORBColor.Mode.mode5, ORBColor.ColorSpace.SRGB),
(ORBColor.Mode.mode6, ORBColor.ColorSpace.linearSRGB),
(ORBColor.Mode.mode7, ORBColor.ColorSpace.linearSRGB),
(ORBColor.Mode.mode8, ORBColor.ColorSpace.linearSRGB),
(ORBColor.Mode.mode9, ORBColor.ColorSpace.SRGB),
(ORBColor.Mode.mode10, ORBColor.ColorSpace.linearSRGB),
(ORBColor.Mode.mode11, ORBColor.ColorSpace.SRGB),
(ORBColor.Mode.mode12, ORBColor.ColorSpace.SRGB),
(ORBColor.Mode.mode13, ORBColor.ColorSpace.linearSRGB),
(ORBColor.Mode.mode14, ORBColor.ColorSpace.SRGB),
(ORBColor.Mode.mode15, ORBColor.ColorSpace.linearSRGB),
])
func colorModeWorkingColorSpace(mode: ORBColor.Mode, expectedColorSpace: ORBColor.Space) {
func colorModeWorkingColorSpace(mode: ORBColor.Mode, expectedColorSpace: ORBColor.ColorSpace) {
#expect(mode.workingColorSpace == expectedColorSpace)
}

Expand Down
8 changes: 4 additions & 4 deletions Tests/OpenRenderBoxCompatibilityTests/LayerTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,10 @@ struct LayerTests {
#expect(layer.rendersAsynchronously == false)

// colorMode
layer.colorMode = 0
#expect(layer.colorMode == 0)
layer.colorMode = 1
#expect(layer.colorMode == 1)
layer.colorMode = .init(0)
#expect(layer.colorMode.rawValue == 0)
layer.colorMode = .init(1)
#expect(layer.colorMode.rawValue == 1)

// promotesFramebuffer
layer.promotesFramebuffer = true
Expand Down
Loading