Use forwardingPainter to add colour to placeholder graphics
This commit is contained in:
1 parent
6f8fa45685
commit
ef4c5a592c
3 files changed
+78
-3
No files matched your search
+60
@@ -0,0 +1,60 @@
|
|||||||
|
package ac.aux.compose.ui.composable.widgets.coil
|
||||||
|
|
||||||
|
import androidx.compose.ui.graphics.ColorFilter
|
||||||
|
import androidx.compose.ui.graphics.DefaultAlpha
|
||||||
|
import androidx.compose.ui.graphics.drawscope.DrawScope
|
||||||
|
import androidx.compose.ui.graphics.painter.Painter
|
||||||
|
|
||||||
|
/**
|
||||||
|
* https://gist.github.com/colinrtwhite/c2966e0b8584b4cdf0a5b05786b20ae1
|
||||||
|
*/
|
||||||
|
fun forwardingPainter(
|
||||||
|
painter: Painter,
|
||||||
|
alpha: Float = DefaultAlpha,
|
||||||
|
colorFilter: ColorFilter? = null,
|
||||||
|
onDraw: DrawScope.(ForwardingDrawInfo) -> Unit = DefaultOnDraw,
|
||||||
|
): Painter = ForwardingPainter(painter, alpha, colorFilter, onDraw)
|
||||||
|
|
||||||
|
data class ForwardingDrawInfo(
|
||||||
|
val painter: Painter,
|
||||||
|
val alpha: Float,
|
||||||
|
val colorFilter: ColorFilter?,
|
||||||
|
)
|
||||||
|
|
||||||
|
private class ForwardingPainter(
|
||||||
|
private val painter: Painter,
|
||||||
|
private var alpha: Float,
|
||||||
|
private var colorFilter: ColorFilter?,
|
||||||
|
private val onDraw: DrawScope.(ForwardingDrawInfo) -> Unit,
|
||||||
|
) : Painter() {
|
||||||
|
|
||||||
|
private var info = newInfo()
|
||||||
|
|
||||||
|
override val intrinsicSize get() = painter.intrinsicSize
|
||||||
|
|
||||||
|
override fun applyAlpha(alpha: Float): Boolean {
|
||||||
|
if (alpha != DefaultAlpha) {
|
||||||
|
this.alpha = alpha
|
||||||
|
this.info = newInfo()
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun applyColorFilter(colorFilter: ColorFilter?): Boolean {
|
||||||
|
if (colorFilter != null) {
|
||||||
|
this.colorFilter = colorFilter
|
||||||
|
this.info = newInfo()
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun DrawScope.onDraw() = onDraw(info)
|
||||||
|
|
||||||
|
private fun newInfo() = ForwardingDrawInfo(painter, alpha, colorFilter)
|
||||||
|
}
|
||||||
|
|
||||||
|
private val DefaultOnDraw: DrawScope.(ForwardingDrawInfo) -> Unit = { info ->
|
||||||
|
with(info.painter) {
|
||||||
|
draw(size, info.alpha, info.colorFilter)
|
||||||
|
}
|
||||||
|
}
|
||||||
+3
@@ -30,6 +30,7 @@ import androidx.compose.runtime.Composable
|
|||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.BiasAbsoluteAlignment
|
import androidx.compose.ui.BiasAbsoluteAlignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.text.AnnotatedString
|
||||||
import androidx.compose.ui.text.style.TextAlign
|
import androidx.compose.ui.text.style.TextAlign
|
||||||
import androidx.compose.ui.tooling.preview.Preview
|
import androidx.compose.ui.tooling.preview.Preview
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
@@ -130,6 +131,7 @@ private fun TextNoteFeedItem(
|
|||||||
horizontalArrangement = Arrangement.End,
|
horizontalArrangement = Arrangement.End,
|
||||||
verticalAlignment = Alignment.CenterVertically
|
verticalAlignment = Alignment.CenterVertically
|
||||||
) {
|
) {
|
||||||
|
// TODO: If we don't have the name of the author being replied too we shouldn't show this..
|
||||||
Text(
|
Text(
|
||||||
"In reply to ",
|
"In reply to ",
|
||||||
style = MaterialTheme.typography.labelSmall
|
style = MaterialTheme.typography.labelSmall
|
||||||
@@ -146,6 +148,7 @@ private fun TextNoteFeedItem(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ElevatedCard(
|
ElevatedCard(
|
||||||
modifier = Modifier.padding(
|
modifier = Modifier.padding(
|
||||||
horizontal = 10.dp
|
horizontal = 10.dp
|
||||||
|
|||||||
+15
-3
@@ -1,6 +1,7 @@
|
|||||||
package ac.aux.compose.ui.composable.widgets.profile
|
package ac.aux.compose.ui.composable.widgets.profile
|
||||||
|
|
||||||
import ac.aux.compose.database.model.Profile
|
import ac.aux.compose.database.model.Profile
|
||||||
|
import ac.aux.compose.ui.composable.widgets.coil.forwardingPainter
|
||||||
import ac.aux.compose.ui.theme.AuxTheme
|
import ac.aux.compose.ui.theme.AuxTheme
|
||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.foundation.layout.size
|
import androidx.compose.foundation.layout.size
|
||||||
@@ -16,6 +17,7 @@ import androidx.compose.runtime.Composable
|
|||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.draw.clip
|
import androidx.compose.ui.draw.clip
|
||||||
import androidx.compose.ui.graphics.Color
|
import androidx.compose.ui.graphics.Color
|
||||||
|
import androidx.compose.ui.graphics.ColorFilter
|
||||||
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||||
import androidx.compose.ui.layout.ContentScale
|
import androidx.compose.ui.layout.ContentScale
|
||||||
import androidx.compose.ui.tooling.preview.Preview
|
import androidx.compose.ui.tooling.preview.Preview
|
||||||
@@ -44,9 +46,19 @@ fun ProfileAvatar(publicKey: String, profile: Profile?) {
|
|||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
// Load image...
|
// Load image...
|
||||||
val placeHolderGraphic = rememberVectorPainter(Icons.Default.Face5)
|
val placeHolderGraphic = forwardingPainter(
|
||||||
val fallbackGraphic = rememberVectorPainter(Icons.Default.Face5)
|
painter = rememberVectorPainter(Icons.Default.Face5),
|
||||||
val errorGraphic = rememberVectorPainter(Icons.Default.FaceRetouchingOff)
|
colorFilter = ColorFilter.tint(tintColor)
|
||||||
|
)
|
||||||
|
|
||||||
|
val fallbackGraphic = forwardingPainter(
|
||||||
|
painter = rememberVectorPainter(Icons.Default.Face5),
|
||||||
|
colorFilter = ColorFilter.tint(tintColor)
|
||||||
|
)
|
||||||
|
val errorGraphic = forwardingPainter(
|
||||||
|
painter = rememberVectorPainter(Icons.Default.FaceRetouchingOff),
|
||||||
|
colorFilter = ColorFilter.tint(tintColor)
|
||||||
|
)
|
||||||
|
|
||||||
AsyncImage(
|
AsyncImage(
|
||||||
model = profile.picture,
|
model = profile.picture,
|
||||||
|
|||||||
Reference in new issue
Block a user