Refine reference liquid glass and resting grey cursor
This commit is contained in:
@@ -117,7 +117,7 @@ class _GlassDockState extends State<GlassDock> with TickerProviderStateMixin {
|
||||
Widget _glass({required Widget child, bool lens = false}) {
|
||||
final pressure = _pressure.clamp(0.0, 1.0);
|
||||
final content = CustomPaint(
|
||||
foregroundPainter: _GlassRimPainter(lens: lens),
|
||||
foregroundPainter: _GlassRimPainter(lens: lens, pressure: pressure),
|
||||
child: DecoratedBox(
|
||||
decoration: BoxDecoration(
|
||||
gradient: LinearGradient(
|
||||
@@ -125,17 +125,26 @@ class _GlassDockState extends State<GlassDock> with TickerProviderStateMixin {
|
||||
end: Alignment.bottomRight,
|
||||
colors: lens
|
||||
? [
|
||||
const Color(0xFFD8DBE0)
|
||||
.withValues(alpha: 0.14 * (1 - pressure * 0.82)),
|
||||
const Color(0xFFC3C7CE)
|
||||
.withValues(alpha: 0.08 * (1 - pressure * 0.82)),
|
||||
const Color(0xFFE5E7EB)
|
||||
.withValues(alpha: 0.12 * (1 - pressure * 0.82)),
|
||||
Color.lerp(
|
||||
const Color(0xFFA1A4AA).withValues(alpha: 0.34),
|
||||
const Color(0xFFD8DBE0).withValues(alpha: 0.0252),
|
||||
pressure,
|
||||
)!,
|
||||
Color.lerp(
|
||||
const Color(0xFF8E939B).withValues(alpha: 0.26),
|
||||
const Color(0xFFC3C7CE).withValues(alpha: 0.0144),
|
||||
pressure,
|
||||
)!,
|
||||
Color.lerp(
|
||||
const Color(0xFFB4B7BC).withValues(alpha: 0.32),
|
||||
const Color(0xFFE5E7EB).withValues(alpha: 0.0216),
|
||||
pressure,
|
||||
)!,
|
||||
]
|
||||
: [
|
||||
Colors.white.withValues(alpha: 0.028),
|
||||
_blue.withValues(alpha: 0.005),
|
||||
Colors.white.withValues(alpha: 0.012),
|
||||
Colors.white.withValues(alpha: 0.05),
|
||||
_blue.withValues(alpha: 0.008),
|
||||
Colors.white.withValues(alpha: 0.018),
|
||||
],
|
||||
),
|
||||
),
|
||||
@@ -145,8 +154,8 @@ class _GlassDockState extends State<GlassDock> with TickerProviderStateMixin {
|
||||
return ClipRRect(
|
||||
borderRadius: BorderRadius.circular(40),
|
||||
child: GlassRefraction(
|
||||
strength: lens ? 0.70 + pressure * 0.70 : 0.55,
|
||||
blurSigma: lens ? 1.6 - pressure * 0.6 : 2,
|
||||
strength: lens ? 0.70 + pressure * 0.70 : 0.95,
|
||||
blurSigma: lens ? 1.6 - pressure * 0.6 : 1.4,
|
||||
child: content,
|
||||
),
|
||||
);
|
||||
@@ -292,11 +301,14 @@ class _GlassDockState extends State<GlassDock> with TickerProviderStateMixin {
|
||||
/// A diffuse silver bevel and thin directional glints show optical thickness.
|
||||
/// The painted highlights stay on the edge so background colour passes through.
|
||||
class _GlassRimPainter extends CustomPainter {
|
||||
const _GlassRimPainter({required this.lens});
|
||||
const _GlassRimPainter({required this.lens, required this.pressure});
|
||||
final bool lens;
|
||||
final double pressure;
|
||||
@override
|
||||
void paint(Canvas canvas, Size size) {
|
||||
final edge = lens ? const Color(0xFF7B838F) : const Color(0xFFAFBECF);
|
||||
// A quiet grey selection at rest; the glossy lens rim returns on touch.
|
||||
final opacity = lens ? 0.25 + pressure * 0.75 : 1.0;
|
||||
final bounds = Offset.zero & size;
|
||||
final outer = RRect.fromRectAndRadius(
|
||||
bounds.deflate(0.7),
|
||||
@@ -311,14 +323,14 @@ class _GlassRimPainter extends CustomPainter {
|
||||
Paint()
|
||||
..style = PaintingStyle.stroke
|
||||
..strokeWidth = lens ? 1.8 : 2.2
|
||||
..maskFilter = const MaskFilter.blur(BlurStyle.normal, 0.9)
|
||||
..maskFilter = MaskFilter.blur(BlurStyle.normal, lens ? 0.9 : 0.45)
|
||||
..shader = ui.Gradient.linear(
|
||||
bounds.topLeft,
|
||||
bounds.bottomRight,
|
||||
[
|
||||
Colors.white.withValues(alpha: 0.24),
|
||||
edge.withValues(alpha: 0.04),
|
||||
Colors.white.withValues(alpha: 0.14),
|
||||
Colors.white.withValues(alpha: 0.24 * opacity),
|
||||
edge.withValues(alpha: 0.04 * opacity),
|
||||
Colors.white.withValues(alpha: 0.14 * opacity),
|
||||
],
|
||||
[0.0, 0.55, 1.0],
|
||||
),
|
||||
@@ -331,12 +343,12 @@ class _GlassRimPainter extends CustomPainter {
|
||||
..shader = ui.Gradient.sweep(
|
||||
bounds.center,
|
||||
[
|
||||
Colors.white.withValues(alpha: 0.90),
|
||||
edge.withValues(alpha: lens ? 0.30 : 0.15),
|
||||
Colors.white.withValues(alpha: 0.10),
|
||||
Colors.white.withValues(alpha: 0.86),
|
||||
edge.withValues(alpha: 0.12),
|
||||
Colors.white.withValues(alpha: 0.90),
|
||||
Colors.white.withValues(alpha: 0.96 * opacity),
|
||||
edge.withValues(alpha: (lens ? 0.30 : 0.15) * opacity),
|
||||
Colors.white.withValues(alpha: 0.10 * opacity),
|
||||
Colors.white.withValues(alpha: 0.94 * opacity),
|
||||
edge.withValues(alpha: 0.12 * opacity),
|
||||
Colors.white.withValues(alpha: 0.96 * opacity),
|
||||
],
|
||||
[0.0, 0.18, 0.38, 0.60, 0.80, 1.0],
|
||||
TileMode.clamp,
|
||||
@@ -353,9 +365,9 @@ class _GlassRimPainter extends CustomPainter {
|
||||
bounds.topLeft,
|
||||
bounds.bottomRight,
|
||||
[
|
||||
Colors.white.withValues(alpha: 0.20),
|
||||
edge.withValues(alpha: lens ? 0.13 : 0.07),
|
||||
Colors.white.withValues(alpha: 0.28),
|
||||
Colors.white.withValues(alpha: 0.20 * opacity),
|
||||
edge.withValues(alpha: (lens ? 0.13 : 0.07) * opacity),
|
||||
Colors.white.withValues(alpha: 0.28 * opacity),
|
||||
],
|
||||
[0.0, 0.5, 1.0],
|
||||
),
|
||||
@@ -379,7 +391,7 @@ class _GlassRimPainter extends CustomPainter {
|
||||
Offset(size.width, 0),
|
||||
[
|
||||
Colors.white.withValues(alpha: 0),
|
||||
Colors.white.withValues(alpha: 0.50),
|
||||
Colors.white.withValues(alpha: 0.50 * opacity),
|
||||
Colors.white.withValues(alpha: 0),
|
||||
],
|
||||
[0.0, 0.5, 1.0],
|
||||
@@ -388,5 +400,6 @@ class _GlassRimPainter extends CustomPainter {
|
||||
}
|
||||
|
||||
@override
|
||||
bool shouldRepaint(_GlassRimPainter oldDelegate) => oldDelegate.lens != lens;
|
||||
bool shouldRepaint(_GlassRimPainter oldDelegate) =>
|
||||
oldDelegate.lens != lens || oldDelegate.pressure != pressure;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user