Skip to content

Commit

Permalink
Add ColorFilter to the IconActionButton API
Browse files Browse the repository at this point in the history
We did not do it before, and that's an oversight. This
should also make things like #633 easier to do.
  • Loading branch information
rock3r committed Oct 17, 2024
1 parent 78663d5 commit 9f18fc8
Show file tree
Hide file tree
Showing 2 changed files with 119 additions and 12 deletions.
6 changes: 4 additions & 2 deletions ui/api/ui.api
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
125 changes: 115 additions & 10 deletions ui/src/main/kotlin/org/jetbrains/jewel/ui/component/IconActionButton.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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<PainterHint> = 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,
)
}

Expand All @@ -69,6 +152,7 @@ public fun IconActionButton(
enabled: Boolean = true,
focusable: Boolean = true,
style: IconButtonStyle = JewelTheme.iconButtonStyle,
colorFilter: ColorFilter? = null,
hints: Array<PainterHint> = emptyArray(),
tooltipStyle: TooltipStyle = JewelTheme.tooltipStyle,
tooltipModifier: Modifier = Modifier,
Expand All @@ -87,6 +171,7 @@ public fun IconActionButton(
focusable = focusable,
style = style,
interactionSource = interactionSource,
colorFilter = colorFilter,
hints = hints,
onClick = onClick,
)
Expand All @@ -103,11 +188,31 @@ private fun CoreIconActionButton(
style: IconButtonStyle,
interactionSource: MutableInteractionSource,
modifier: Modifier,
colorFilter: ColorFilter?,
hints: Array<PainterHint>,
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)
}
}

Expand Down

0 comments on commit 9f18fc8

Please sign in to comment.