diff --git a/ui/api/ui.api b/ui/api/ui.api index b1f12bd84..80fcba1d3 100644 --- a/ui/api/ui.api +++ b/ui/api/ui.api @@ -309,8 +309,10 @@ public final class org/jetbrains/jewel/ui/component/GroupHeaderKt { public final class org/jetbrains/jewel/ui/component/IconActionButtonKt { public static final fun IconActionButton (Landroidx/compose/ui/graphics/painter/Painter;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZZLorg/jetbrains/jewel/ui/component/styling/IconButtonStyle;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/Composer;II)V public static final fun IconActionButton (Landroidx/compose/ui/graphics/painter/Painter;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZZLorg/jetbrains/jewel/ui/component/styling/IconButtonStyle;Lorg/jetbrains/jewel/ui/component/styling/TooltipStyle;Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/TooltipPlacement;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;III)V - public static final fun IconActionButton (Lorg/jetbrains/jewel/ui/icon/IconKey;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZZLorg/jetbrains/jewel/ui/component/styling/IconButtonStyle;[Lorg/jetbrains/jewel/ui/painter/PainterHint;Landroidx/compose/foundation/interaction/MutableInteractionSource;Ljava/lang/Class;Landroidx/compose/runtime/Composer;II)V - public static final fun IconActionButton (Lorg/jetbrains/jewel/ui/icon/IconKey;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZZLorg/jetbrains/jewel/ui/component/styling/IconButtonStyle;[Lorg/jetbrains/jewel/ui/painter/PainterHint;Lorg/jetbrains/jewel/ui/component/styling/TooltipStyle;Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/TooltipPlacement;Landroidx/compose/foundation/interaction/MutableInteractionSource;Ljava/lang/Class;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;III)V + public static final fun IconActionButton (Lorg/jetbrains/jewel/ui/icon/IconKey;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZZLorg/jetbrains/jewel/ui/component/styling/IconButtonStyle;Landroidx/compose/ui/graphics/ColorFilter;Lorg/jetbrains/jewel/ui/painter/PainterHint;Landroidx/compose/foundation/interaction/MutableInteractionSource;Ljava/lang/Class;Landroidx/compose/runtime/Composer;III)V + public static final fun IconActionButton (Lorg/jetbrains/jewel/ui/icon/IconKey;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZZLorg/jetbrains/jewel/ui/component/styling/IconButtonStyle;Landroidx/compose/ui/graphics/ColorFilter;[Lorg/jetbrains/jewel/ui/painter/PainterHint;Landroidx/compose/foundation/interaction/MutableInteractionSource;Ljava/lang/Class;Landroidx/compose/runtime/Composer;III)V + public static final fun IconActionButton (Lorg/jetbrains/jewel/ui/icon/IconKey;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZZLorg/jetbrains/jewel/ui/component/styling/IconButtonStyle;Landroidx/compose/ui/graphics/ColorFilter;[Lorg/jetbrains/jewel/ui/painter/PainterHint;Lorg/jetbrains/jewel/ui/component/styling/TooltipStyle;Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/TooltipPlacement;Landroidx/compose/foundation/interaction/MutableInteractionSource;Ljava/lang/Class;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;III)V + public static final fun IconActionButton (Lorg/jetbrains/jewel/ui/icon/IconKey;Ljava/lang/String;Lorg/jetbrains/jewel/ui/painter/PainterHint;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZZLorg/jetbrains/jewel/ui/component/styling/IconButtonStyle;Landroidx/compose/ui/graphics/ColorFilter;Lorg/jetbrains/jewel/ui/component/styling/TooltipStyle;Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/TooltipPlacement;Landroidx/compose/foundation/interaction/MutableInteractionSource;Ljava/lang/Class;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;III)V public static final fun SelectableIconActionButton (Lorg/jetbrains/jewel/ui/icon/IconKey;Ljava/lang/String;ZLkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZZLorg/jetbrains/jewel/ui/component/styling/IconButtonStyle;[Lorg/jetbrains/jewel/ui/painter/PainterHint;Landroidx/compose/foundation/interaction/MutableInteractionSource;Ljava/lang/Class;Landroidx/compose/runtime/Composer;III)V public static final fun SelectableIconActionButton (Lorg/jetbrains/jewel/ui/icon/IconKey;Ljava/lang/String;ZLkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZZLorg/jetbrains/jewel/ui/component/styling/IconButtonStyle;[Lorg/jetbrains/jewel/ui/painter/PainterHint;Lorg/jetbrains/jewel/ui/component/styling/TooltipStyle;Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/TooltipPlacement;Landroidx/compose/foundation/interaction/MutableInteractionSource;Ljava/lang/Class;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;III)V public static final fun ToggleableIconActionButton (Lorg/jetbrains/jewel/ui/icon/IconKey;Ljava/lang/String;ZLkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;ZZLorg/jetbrains/jewel/ui/component/styling/IconButtonStyle;[Lorg/jetbrains/jewel/ui/painter/PainterHint;Landroidx/compose/foundation/interaction/MutableInteractionSource;Ljava/lang/Class;Landroidx/compose/runtime/Composer;III)V diff --git a/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/IconActionButton.kt b/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/IconActionButton.kt index 3ba4b27e4..4c1302a16 100644 --- a/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/IconActionButton.kt +++ b/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/IconActionButton.kt @@ -21,6 +21,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.ColorFilter import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.unit.DpOffset import androidx.compose.ui.unit.dp @@ -42,21 +43,103 @@ public fun IconActionButton( enabled: Boolean = true, focusable: Boolean = true, style: IconButtonStyle = JewelTheme.iconButtonStyle, + colorFilter: ColorFilter? = null, + hint: PainterHint? = null, + interactionSource: MutableInteractionSource = remember { MutableInteractionSource() }, + iconClass: Class<*> = key::class.java, +) { + if (hint != null) { + CoreIconActionButton( + key = key, + contentDescription = contentDescription, + iconClass = iconClass, + enabled = enabled, + focusable = focusable, + style = style, + interactionSource = interactionSource, + modifier = modifier, + colorFilter = colorFilter, + hint = hint, + onClick = onClick, + ) + } else { + CoreIconActionButton( + key = key, + contentDescription = contentDescription, + iconClass = iconClass, + enabled = enabled, + focusable = focusable, + style = style, + interactionSource = interactionSource, + modifier = modifier, + colorFilter = colorFilter, + hints = emptyArray(), + onClick = onClick, + ) + } +} + +@Composable +public fun IconActionButton( + key: IconKey, + contentDescription: String?, + hint: PainterHint, + onClick: () -> Unit, + modifier: Modifier = Modifier, + enabled: Boolean = true, + focusable: Boolean = true, + style: IconButtonStyle = JewelTheme.iconButtonStyle, + colorFilter: ColorFilter? = null, + tooltipStyle: TooltipStyle = JewelTheme.tooltipStyle, + tooltipModifier: Modifier = Modifier, + tooltipPlacement: TooltipPlacement = FixedCursorPoint(offset = DpOffset(0.dp, 16.dp)), + interactionSource: MutableInteractionSource = remember { MutableInteractionSource() }, + iconClass: Class<*> = key::class.java, + tooltip: @Composable () -> Unit, +) { + Tooltip(tooltip, style = tooltipStyle, modifier = tooltipModifier, tooltipPlacement = tooltipPlacement) { + CoreIconActionButton( + key = key, + modifier = modifier, + contentDescription = contentDescription, + iconClass = iconClass, + enabled = enabled, + focusable = focusable, + style = style, + interactionSource = interactionSource, + colorFilter = colorFilter, + hint = hint, + onClick = onClick, + ) + } +} + +@Composable +public fun IconActionButton( + key: IconKey, + contentDescription: String?, + onClick: () -> Unit, + modifier: Modifier = Modifier, + enabled: Boolean = true, + focusable: Boolean = true, + style: IconButtonStyle = JewelTheme.iconButtonStyle, + colorFilter: ColorFilter? = null, hints: Array = emptyArray(), interactionSource: MutableInteractionSource = remember { MutableInteractionSource() }, iconClass: Class<*> = key::class.java, ) { CoreIconActionButton( - key, - contentDescription, - iconClass, - enabled, - focusable, - style, - interactionSource, - modifier, + key = key, + contentDescription = contentDescription, + iconClass = iconClass, + enabled = enabled, + focusable = focusable, + style = style, + interactionSource = interactionSource, + modifier = modifier, + colorFilter = colorFilter, hints = hints, - onClick, + onClick = onClick, ) } @@ -69,6 +152,7 @@ public fun IconActionButton( enabled: Boolean = true, focusable: Boolean = true, style: IconButtonStyle = JewelTheme.iconButtonStyle, + colorFilter: ColorFilter? = null, hints: Array = emptyArray(), tooltipStyle: TooltipStyle = JewelTheme.tooltipStyle, tooltipModifier: Modifier = Modifier, @@ -87,6 +171,7 @@ public fun IconActionButton( focusable = focusable, style = style, interactionSource = interactionSource, + colorFilter = colorFilter, hints = hints, onClick = onClick, ) @@ -103,11 +188,31 @@ private fun CoreIconActionButton( style: IconButtonStyle, interactionSource: MutableInteractionSource, modifier: Modifier, + colorFilter: ColorFilter?, hints: Array, onClick: () -> Unit, ) { IconButton(onClick, modifier, enabled, focusable, style, interactionSource) { - Icon(key, contentDescription, iconClass = iconClass, hints = hints) + Icon(key, contentDescription, iconClass = iconClass, colorFilter = colorFilter, hints = hints) + } +} + +@Composable +private fun CoreIconActionButton( + key: IconKey, + contentDescription: String?, + iconClass: Class<*>, + enabled: Boolean, + focusable: Boolean, + style: IconButtonStyle, + interactionSource: MutableInteractionSource, + modifier: Modifier, + colorFilter: ColorFilter?, + hint: PainterHint, + onClick: () -> Unit, +) { + IconButton(onClick, modifier, enabled, focusable, style, interactionSource) { + Icon(key, contentDescription, iconClass = iconClass, hint = hint, colorFilter = colorFilter) } }