fromPointer static method

VtSgrAttributeData fromPointer(
  1. Pointer<GhosttySgrAttribute> nativePtr
)

Implementation

static VtSgrAttributeData fromPointer(
  ffi.Pointer<bindings.GhosttySgrAttribute> nativePtr,
) {
  final tag = bindings.ghostty_sgr_attribute_tag(nativePtr.ref);
  final value = bindings.ghostty_sgr_attribute_value(nativePtr).ref;
  switch (tag) {
    case bindings.GhosttySgrAttributeTag.GHOSTTY_SGR_ATTR_UNKNOWN:
      final unknown = value.unknown;
      final fullOut = calloc<ffi.Pointer<ffi.Uint16>>();
      final partialOut = calloc<ffi.Pointer<ffi.Uint16>>();
      late final List<int> full;
      late final List<int> partial;
      try {
        final fullLen = bindings.ghostty_sgr_unknown_full(unknown, fullOut);
        final fullPtr = fullOut.value;
        full = fullLen == 0 || fullPtr == ffi.nullptr
            ? const <int>[]
            : List<int>.unmodifiable(fullPtr.asTypedList(fullLen));

        final partialLen = bindings.ghostty_sgr_unknown_partial(
          unknown,
          partialOut,
        );
        final partialPtr = partialOut.value;
        partial = partialLen == 0 || partialPtr == ffi.nullptr
            ? const <int>[]
            : List<int>.unmodifiable(partialPtr.asTypedList(partialLen));
      } finally {
        calloc.free(fullOut);
        calloc.free(partialOut);
      }
      return VtSgrAttributeData._(
        tag: tag,
        unknown: VtSgrUnknownData(full: full, partial: partial),
      );
    case bindings.GhosttySgrAttributeTag.GHOSTTY_SGR_ATTR_UNDERLINE:
      return VtSgrAttributeData._(tag: tag, underline: value.underline);
    case bindings.GhosttySgrAttributeTag.GHOSTTY_SGR_ATTR_UNDERLINE_COLOR:
      return VtSgrAttributeData._(
        tag: tag,
        rgb: VtRgbColor.fromNative(value.underline_color),
      );
    case bindings.GhosttySgrAttributeTag.GHOSTTY_SGR_ATTR_DIRECT_COLOR_FG:
      return VtSgrAttributeData._(
        tag: tag,
        rgb: VtRgbColor.fromNative(value.direct_color_fg),
      );
    case bindings.GhosttySgrAttributeTag.GHOSTTY_SGR_ATTR_DIRECT_COLOR_BG:
      return VtSgrAttributeData._(
        tag: tag,
        rgb: VtRgbColor.fromNative(value.direct_color_bg),
      );
    case bindings.GhosttySgrAttributeTag.GHOSTTY_SGR_ATTR_UNDERLINE_COLOR_256:
      return VtSgrAttributeData._(
        tag: tag,
        paletteIndex: value.underline_color_256,
      );
    case bindings.GhosttySgrAttributeTag.GHOSTTY_SGR_ATTR_BG_8:
      return VtSgrAttributeData._(tag: tag, paletteIndex: value.bg_8);
    case bindings.GhosttySgrAttributeTag.GHOSTTY_SGR_ATTR_FG_8:
      return VtSgrAttributeData._(tag: tag, paletteIndex: value.fg_8);
    case bindings.GhosttySgrAttributeTag.GHOSTTY_SGR_ATTR_BRIGHT_BG_8:
      return VtSgrAttributeData._(tag: tag, paletteIndex: value.bright_bg_8);
    case bindings.GhosttySgrAttributeTag.GHOSTTY_SGR_ATTR_BRIGHT_FG_8:
      return VtSgrAttributeData._(tag: tag, paletteIndex: value.bright_fg_8);
    case bindings.GhosttySgrAttributeTag.GHOSTTY_SGR_ATTR_BG_256:
      return VtSgrAttributeData._(tag: tag, paletteIndex: value.bg_256);
    case bindings.GhosttySgrAttributeTag.GHOSTTY_SGR_ATTR_FG_256:
      return VtSgrAttributeData._(tag: tag, paletteIndex: value.fg_256);
    default:
      return VtSgrAttributeData._(tag: tag);
  }
}