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
4 changes: 2 additions & 2 deletions Package.resolved

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

12 changes: 5 additions & 7 deletions Sources/OpenRenderBox/Animation/ORBSymbolAnimator.swift
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ public class ORBSymbolAnimator: NSObject {
// MARK: - Properties

public var glyph: AnyObject?
public var renderingMode: UInt32 = 0
public var renderingMode: ORBSymbolRenderingMode = .preferred
public var flipsRightToLeft: Bool = false
public var variableValue: Double = 0
public var opacities: ORBColor = .clear
Expand Down Expand Up @@ -79,19 +79,17 @@ public class ORBSymbolAnimator: NSObject {

// MARK: - Update

public func beginUpdate(withRenderingMode mode: UInt32) -> OpaquePointer {
public func beginUpdate(with mode: ORBSymbolRenderingMode) -> ORBSymbolUpdate {
_openRenderBoxUnimplementedFailure()
}

public func beginUpdate(withRenderingMode mode: UInt32, position: UnsafePointer<CGPoint>?, size: UnsafePointer<CGSize>?, flags: UInt32) -> OpaquePointer {
public func beginUpdate(with mode: ORBSymbolRenderingMode, position: UnsafePointer<CGPoint>?, size: UnsafePointer<CGSize>?, flags: ORBSymbolUpdateFlags) -> ORBSymbolUpdate {
_openRenderBoxUnimplementedFailure()
}

public func endUpdate(_ update: OpaquePointer) {
_openRenderBoxUnimplementedFailure()
}
public func end(_ update: ORBSymbolUpdate) {}

public func copyDebugDescription(for update: OpaquePointer) -> Any? {
public func copyDebugDescription(for update: ORBSymbolUpdate) -> Any? {
_openRenderBoxUnimplementedFailure()
}

Expand Down
41 changes: 41 additions & 0 deletions Sources/OpenRenderBox/Animation/ORBSymbolUpdate.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
//
// ORBSymbolUpdate.swift
// OpenRenderBox

public import OpenCoreGraphicsShims
public import OpenRenderBoxCxx

#if !canImport(ObjectiveC)

extension ORBSymbolUpdate {
public var nextTime: Double { .infinity }
public var styleMask: UInt32 { 0 }
public var groupCount: Int { 0 }

public func groupSize(group: Int) -> Int { 0 }

public func templateImage(scale: UnsafeMutablePointer<Double>?, opacity: UnsafeMutablePointer<Float>?) -> CGImage? {
nil
}

public func draw(in state: ORBDrawingState, resolver: @escaping (ORBSymbolStyle, String?) -> ORBColor) {}
}

extension ORBSymbolUpdateLayer {
public var drawingOpacity: Float { 0 }
public var style: ORBSymbolStyle { .primary }
public var colorName: String? { nil }
public var defaultColor: CGColor? { nil }

public func draw(in state: ORBDrawingState, color: ORBColor, opacity: Float, blendMode: ORBBlendMode, flags: ORBSymbolUpdateLayerFlags) {}
}
#endif

#if !canImport(ObjectiveC) || !OPENRENDERBOX_CF_CGTYPES
extension ORBSymbolUpdateLayer {
public func path(transform: UnsafeMutablePointer<CGAffineTransform>, flags: ORBSymbolUpdateLayerFlags) -> ORBPath {
transform.pointee = .identity
return .null
}
}
#endif
8 changes: 8 additions & 0 deletions Sources/OpenRenderBox/Path/ORBPath.swift
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,14 @@ extension ORBPath {
// MARK: - Properties

extension ORBPath {
public var isNull: Bool {
storage == Self.null.storage && callbacks == Self.null.callbacks
}

public func copy(transform: UnsafePointer<CGAffineTransform>) -> ORBPath {
_openRenderBoxUnimplementedFailure()
}

public var isEmpty: Bool {
_openRenderBoxUnimplementedFailure()
}
Expand Down
5 changes: 5 additions & 0 deletions Sources/OpenRenderBox/Render/ORBDisplayList.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,15 @@
#if !canImport(ObjectiveC)
public import Foundation
public import OpenCoreGraphicsShims
public import OpenRenderBoxCxx

public final class ORBDisplayList: NSObject, ORBDisplayListContents {
// MARK: - Properties

public var state: ORBDrawingState {
_openRenderBoxUnimplementedFailure()
}

public var linearColors: Bool = false
public var profile: UInt32 = 0
public var contentRect: CGRect = .zero
Expand Down
11 changes: 11 additions & 0 deletions Sources/OpenRenderBoxCxx/Animation/ORBSymbolAnimator.m
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,17 @@ @implementation ORBSymbolAnimator

// TODO

- (ORBSymbolUpdate)beginUpdateWithRenderingMode:(ORBSymbolRenderingMode)mode {
return [self beginUpdateWithRenderingMode:mode position:NULL size:NULL flags:0];
}

- (ORBSymbolUpdate)beginUpdateWithRenderingMode:(ORBSymbolRenderingMode)mode position:(const CGPoint *)position size:(const CGSize *)size flags:(ORBSymbolUpdateFlags)flags {
[self doesNotRecognizeSelector:_cmd];
__builtin_trap();
}

- (void)endUpdate:(ORBSymbolUpdate)update {}

@end

#endif /* ORB_OBJC_FOUNDATION */
30 changes: 30 additions & 0 deletions Sources/OpenRenderBoxCxx/Animation/ORBSymbolUpdate.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
//
// ORBSymbolUpdate.m
// OpenRenderBox

#include <OpenRenderBox/ORBSymbolUpdate.h>

#if ORB_OBJC_FOUNDATION

#include <math.h>

// Symbol updates are placeholders until the symbol renderer is implemented.
double ORBSymbolUpdateNextTime(ORBSymbolUpdate update) { return INFINITY; }
uint32_t ORBSymbolUpdateStyleMask(ORBSymbolUpdate update) { return 0; }
intptr_t ORBSymbolUpdateGroupCount(ORBSymbolUpdate update) { return 0; }
intptr_t ORBSymbolUpdateGroupSize(ORBSymbolUpdate update, intptr_t group) { return 0; }
CGImageRef ORBSymbolUpdateTemplateImage(ORBSymbolUpdate update, double *scale, float *opacity) { return NULL; }
void ORBSymbolUpdateDrawWithStyleResolver(ORBSymbolUpdate update, ORBDrawingState state, ORBColor (^resolver)(ORBSymbolStyle, NSString *)) {}
float ORBSymbolUpdateLayerDrawingOpacity(ORBSymbolUpdateLayer layer) { return 0; }
ORBSymbolStyle ORBSymbolUpdateLayerStyle(ORBSymbolUpdateLayer layer) { return ORBSymbolStylePrimary; }
NSString *ORBSymbolUpdateLayerColorName(ORBSymbolUpdateLayer layer) { return nil; }
CGColorRef ORBSymbolUpdateLayerDefaultColor(ORBSymbolUpdateLayer layer) { return NULL; }
#if OPENRENDERBOX_CF_CGTYPES
ORBPath ORBSymbolUpdateLayerPath(ORBSymbolUpdateLayer layer, CGAffineTransform *transform, ORBSymbolUpdateLayerFlags flags) {
*transform = CGAffineTransformIdentity;
return ORBPathNull;
}
#endif
void ORBSymbolUpdateLayerDraw(ORBSymbolUpdateLayer layer, ORBDrawingState state, ORBColor color, float opacity, ORBBlendMode blendMode, ORBSymbolUpdateLayerFlags flags) {}

#endif /* ORB_OBJC_FOUNDATION */
12 changes: 12 additions & 0 deletions Sources/OpenRenderBoxCxx/Path/ORBPath.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,18 @@ void ORBPathRelease(ORBPath path) {

#if ORB_TARGET_OS_DARWIN

ORBPath ORBPathCopyTransformedPath(ORBPath path, const CGAffineTransform *transform) {
if (ORBPathIsNull(path)) {
return ORBPathNull;
}
CGPathRef source = ORBPathCopyCGPath(path);
CGPathRef transformed = CGPathCreateCopyByTransformingPath(source, transform);
ORBPath result = ORBPathMakeWithCGPath(transformed);
CGPathRelease(transformed);
CGPathRelease(source);
return result;
}

// MARK: - Path Creation

namespace {
Expand Down
6 changes: 6 additions & 0 deletions Sources/OpenRenderBoxCxx/Render/ORBDisplayList.m
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,10 @@ @implementation ORBDisplayList

@end

ORBDrawingState ORBDisplayListGetState(ORBDisplayList *list) {
// The drawing state is not implemented yet.
[NSException raise:NSInternalInconsistencyException format:@"ORBDisplayListGetState is not implemented"];
__builtin_trap();
}

#endif /* ORB_OBJC_FOUNDATION */
13 changes: 13 additions & 0 deletions Sources/OpenRenderBoxCxx/include/OpenRenderBox/ORBDrawingState.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
//
// ORBDrawingState.h
// OpenRenderBox

#pragma once

#include <OpenRenderBox/ORBBase.h>

ORB_ASSUME_NONNULL_BEGIN

typedef struct _ORBDrawingState *ORBDrawingState ORB_SWIFT_STRUCT;

ORB_ASSUME_NONNULL_END
12 changes: 12 additions & 0 deletions Sources/OpenRenderBoxCxx/include/OpenRenderBox/ORBPath.h
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,18 @@ ORB_EXPORT
ORBPath ORBPathMakeUnevenRoundedRect(CGRect rect, CGFloat topLeftRadius, CGFloat bottomLeftRadius, CGFloat bottomRightRadius, CGFloat topRightRadius, ORBPathRoundedCornerStyle style, const CGAffineTransform * _Nullable transform) ORB_SWIFT_NAME(ORBPath.init(roundedRect:topLeftRadius:bottomLeftRadius:bottomRightRadius:topRightRadius:style:transform:));
#endif

#if ORB_TARGET_OS_DARWIN
// MARK: - Path Transformation

ORB_EXPORT
ORBPath ORBPathCopyTransformedPath(ORBPath path, const CGAffineTransform *transform) ORB_SWIFT_NAME(ORBPath.copy(self:transform:));

static ORB_INLINE bool ORBPathIsNull(ORBPath path) ORB_SWIFT_NAME(getter:ORBPath.isNull(self:)) {
return path.storage == ORBPathNull.storage && path.callbacks == ORBPathNull.callbacks;
}

#endif

// MARK: - Path Operation

ORB_EXPORT
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
//
// ORBSymbolRenderingMode.h
// OpenRenderBox

#pragma once

#include <OpenRenderBox/ORBBase.h>

typedef ORB_ENUM(uint32_t, ORBSymbolRenderingMode) {
ORBSymbolRenderingModePreferred = 0,
ORBSymbolRenderingModeMonochrome = 1,
ORBSymbolRenderingModeMulticolor = 2,
ORBSymbolRenderingModeHierarchical = 3,
ORBSymbolRenderingModePalette = 4,
ORBSymbolRenderingModeHierarchicalUnlessSlashed = 128,
ORBSymbolRenderingModeHierarchicalSlashBadge = 129,
ORBSymbolRenderingModePaletteSlashBadge = 130,
// No explicit mode. A symbol update keeps the animator's current mode.
ORBSymbolRenderingModeUnspecified = 255,
};
75 changes: 75 additions & 0 deletions Sources/OpenRenderBoxCxx/include/OpenRenderBox/ORBSymbolUpdate.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
//
// ORBSymbolUpdate.h
// OpenRenderBox

#pragma once

#include <OpenRenderBox/ORBBase.h>
#include <OpenRenderBox/ORBBlendMode.h>
#include <OpenRenderBox/ORBColor.h>
#include <OpenRenderBox/ORBDrawingState.h>
#include <OpenRenderBox/ORBPath.h>

#if ORB_OBJC_FOUNDATION
#include <Foundation/Foundation.h>
#endif

ORB_ASSUME_NONNULL_BEGIN

typedef ORB_OPTIONS(uint32_t, ORBSymbolUpdateFlags) {
ORBSymbolUpdateFlagsSwapAxes = 1 << 0,
ORBSymbolUpdateFlagsFlipX = 1 << 1,
ORBSymbolUpdateFlagsFlipY = 1 << 2,
ORBSymbolUpdateFlagsMergeLayers = 1 << 4,
// Apply the glyph's vertical alignment offset to each layer transform.
ORBSymbolUpdateFlagsApplyVerticalOffset = 1 << 5,
};

typedef ORB_OPTIONS(uint32_t, ORBSymbolUpdateLayerFlags) {
ORBSymbolUpdateLayerFlagsIncludeClips = 1 << 0,
};

typedef ORB_ENUM(uint32_t, ORBSymbolStyle) {
ORBSymbolStylePrimary = 0,
ORBSymbolStyleSecondary = 5,
ORBSymbolStyleTertiary = 6,
ORBSymbolStyleQuaternary = 7,
ORBSymbolStyleQuinary = 8,
ORBSymbolStyleNamedColor = 9,
};

typedef struct _ORBSymbolUpdate *ORBSymbolUpdate ORB_SWIFT_STRUCT;

// The update owns all layer data. A layer is valid until endUpdate:.
typedef struct ORBSymbolUpdateLayer {
ORBSymbolUpdate update;
intptr_t group;
intptr_t index;
} ORBSymbolUpdateLayer;

#if ORB_OBJC_FOUNDATION

ORB_EXTERN_C_BEGIN

ORB_EXPORT double ORBSymbolUpdateNextTime(ORBSymbolUpdate update) ORB_SWIFT_NAME(getter:ORBSymbolUpdate.nextTime(self:));
ORB_EXPORT uint32_t ORBSymbolUpdateStyleMask(ORBSymbolUpdate update) ORB_SWIFT_NAME(getter:ORBSymbolUpdate.styleMask(self:));
ORB_EXPORT intptr_t ORBSymbolUpdateGroupCount(ORBSymbolUpdate update) ORB_SWIFT_NAME(getter:ORBSymbolUpdate.groupCount(self:));
ORB_EXPORT intptr_t ORBSymbolUpdateGroupSize(ORBSymbolUpdate update, intptr_t group) ORB_SWIFT_NAME(ORBSymbolUpdate.groupSize(self:group:));
ORB_EXPORT CGImageRef _Nullable ORBSymbolUpdateTemplateImage(ORBSymbolUpdate update, double * _Nullable scale, float * _Nullable opacity) CF_RETURNS_NOT_RETAINED ORB_SWIFT_NAME(ORBSymbolUpdate.templateImage(self:scale:opacity:));
ORB_EXPORT void ORBSymbolUpdateDrawWithStyleResolver(ORBSymbolUpdate update, ORBDrawingState state, ORBColor (^resolver)(ORBSymbolStyle, NSString * _Nullable)) ORB_SWIFT_NAME(ORBSymbolUpdate.draw(self:in:resolver:));

ORB_EXPORT float ORBSymbolUpdateLayerDrawingOpacity(ORBSymbolUpdateLayer layer) ORB_SWIFT_NAME(getter:ORBSymbolUpdateLayer.drawingOpacity(self:));
ORB_EXPORT ORBSymbolStyle ORBSymbolUpdateLayerStyle(ORBSymbolUpdateLayer layer) ORB_SWIFT_NAME(getter:ORBSymbolUpdateLayer.style(self:));
ORB_EXPORT NSString * _Nullable ORBSymbolUpdateLayerColorName(ORBSymbolUpdateLayer layer) ORB_SWIFT_NAME(getter:ORBSymbolUpdateLayer.colorName(self:));
ORB_EXPORT CGColorRef _Nullable ORBSymbolUpdateLayerDefaultColor(ORBSymbolUpdateLayer layer) CF_RETURNS_NOT_RETAINED ORB_SWIFT_NAME(getter:ORBSymbolUpdateLayer.defaultColor(self:));
// The update owns the returned path. Copy it before the update ends.
#if OPENRENDERBOX_CF_CGTYPES
ORB_EXPORT ORBPath ORBSymbolUpdateLayerPath(ORBSymbolUpdateLayer layer, CGAffineTransform *transform, ORBSymbolUpdateLayerFlags flags) ORB_SWIFT_NAME(ORBSymbolUpdateLayer.path(self:transform:flags:));
#endif
ORB_EXPORT void ORBSymbolUpdateLayerDraw(ORBSymbolUpdateLayer layer, ORBDrawingState state, ORBColor color, float opacity, ORBBlendMode blendMode, ORBSymbolUpdateLayerFlags flags) ORB_SWIFT_NAME(ORBSymbolUpdateLayer.draw(self:in:color:opacity:blendMode:flags:));

ORB_EXTERN_C_END

#endif /* ORB_OBJC_FOUNDATION */

ORB_ASSUME_NONNULL_END
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
#include <OpenRenderBox/ORBBase.h>
#include <OpenRenderBox/ORBSymbolAnimation.h>
#include <OpenRenderBox/ORBBlendMode.h>
#include <OpenRenderBox/ORBColor.h>
#include <OpenRenderBox/ORBColorMode.h>
#include <OpenRenderBox/ORBColorSpace.h>
#include <OpenRenderBox/ORBDrawingState.h>
#include <OpenRenderBox/ORBPath.h>
#include <OpenRenderBox/ORBPathCallbacks.h>
#include <OpenRenderBox/ORBPathStorage.h>
#include <OpenRenderBox/ORBSwiftSupport.h>
#include <OpenRenderBox/ORBSymbolAnimation.h>
#include <OpenRenderBox/ORBSymbolRenderingMode.h>
#include <OpenRenderBox/ORBSymbolUpdate.h>
#include <OpenRenderBox/ORBTargetConditionals.h>
#include <OpenRenderBox/ORBUUID.h>
#include <OpenRenderBox/ORBVersion.h>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
#if ORB_OBJC_FOUNDATION

#include <OpenRenderBox/ORBColor.h>
#include <OpenRenderBox/ORBSymbolRenderingMode.h>
#include <OpenRenderBox/ORBSymbolUpdate.h>
#include <OpenRenderBoxObjC/Animation/ORBSymbolAnimatorObserver.h>
#include <OpenRenderBoxObjC/Animation/ORBSymbolAnimation.h>
#include <Foundation/Foundation.h>
Expand All @@ -17,13 +19,12 @@
ORB_ASSUME_NONNULL_BEGIN

@class CUINamedVectorGlyph;
struct _ORBSymbolUpdate;

// TODO
@interface ORBSymbolAnimator : NSObject

@property (retain, nonatomic, nullable) CUINamedVectorGlyph *glyph;
@property (nonatomic) unsigned int renderingMode;
@property (nonatomic) ORBSymbolRenderingMode renderingMode;
@property (nonatomic) BOOL flipsRightToLeft;
@property (nonatomic) double variableValue;
@property (nonatomic) ORBColor opacities;
Expand All @@ -45,16 +46,16 @@ struct _ORBSymbolUpdate;

/* instance methods */
- (unsigned int)addAnimation:(ORBSymbolAnimation)animation options:(nullable id)options ORB_SWIFT_NAME(addAnimation(_:options:));
- (struct _ORBSymbolUpdate *)beginUpdateWithRenderingMode:(unsigned int)mode;
- (void)endUpdate:(struct _ORBSymbolUpdate *)update;
- (ORBSymbolUpdate)beginUpdateWithRenderingMode:(ORBSymbolRenderingMode)mode;
- (void)endUpdate:(ORBSymbolUpdate)update;
- (void)removeAllAnimations;
- (void)removeAnimation:(ORBSymbolAnimation)animation ORB_SWIFT_NAME(removeAnimation(_:));
- (struct _ORBSymbolUpdate *)beginUpdateWithRenderingMode:(unsigned int)mode position:(nullable const CGPoint *)position size:(nullable const CGSize *)size flags:(unsigned int)flags;
- (ORBSymbolUpdate)beginUpdateWithRenderingMode:(ORBSymbolRenderingMode)mode position:(nullable const CGPoint *)position size:(nullable const CGSize *)size flags:(ORBSymbolUpdateFlags)flags;
- (void)cancelAllAnimations;
- (void)cancelAnimation:(ORBSymbolAnimation)animation ORB_SWIFT_NAME(cancelAnimation(_:));
- (void)cancelAnimationWithID:(unsigned int)animationID;
- (ORBColor)colorForStyle:(unsigned int)style;
- (nullable id)copyDebugDescriptionForUpdate:(struct _ORBSymbolUpdate *)update;
- (nullable id)copyDebugDescriptionForUpdate:(ORBSymbolUpdate)update;
- (void)removeAnimationWithID:(unsigned int)animationID;
- (void)setColor:(ORBColor)color forStyle:(unsigned int)style;
- (void)setPriority:(float)priority ofAnimationWithID:(unsigned int)animationID;
Expand Down
Loading
Loading