Windows kurulumu: DLS logosu, Kovak Yazılım markası ve lisans sözleşmesi
- Uygulama logosu DLS diş logosu yapıldı (Windows ikonu + uygulama içi ToothLogo) - Inno Setup sihirbazı: DLS ve Kovak Yazılım görselleri, "Bir Kovak Yazılım ürünüdür" - Türkçe son kullanıcı lisans sözleşmesi (LICENSE_TR.txt) kurulumda onaylatılıyor - Exe adı DLS.exe, sürüm bilgisinde Kovak Yazılım; MSVC /utf-8 - Kurulum tüm Release dosyalarını ve VC++ runtime DLL'lerini içeriyor - installer/build_installer.ps1 ile tek komutta kurulum dosyası - Flutter 3.47 uyumu için shadcn_flutter 0.0.55 (sidebar renkleri kaldırıldı) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
/// Renders the DLS brand logo — navy tooth + cyan chevrons.
|
||||
/// Renders the DLS brand logo (assets/branding/dls_logo.png).
|
||||
///
|
||||
/// [color] null → brand colors (#00397C tooth + #57B8CE chevrons).
|
||||
/// [color] null → original brand colors.
|
||||
/// Pass a color (e.g. Colors.white) for monochrome override on dark backgrounds.
|
||||
class ToothLogo extends StatelessWidget {
|
||||
const ToothLogo({
|
||||
@@ -11,94 +11,22 @@ class ToothLogo extends StatelessWidget {
|
||||
this.color,
|
||||
});
|
||||
|
||||
static const asset = 'assets/branding/dls_logo.png';
|
||||
|
||||
final double size;
|
||||
final Color? color;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return SizedBox(
|
||||
width: size * 1.9,
|
||||
height: size,
|
||||
child: CustomPaint(
|
||||
painter: _DlsLogoPainter(color: color),
|
||||
),
|
||||
final box = size * 1.3;
|
||||
return Image.asset(
|
||||
asset,
|
||||
width: box,
|
||||
height: box,
|
||||
fit: BoxFit.contain,
|
||||
filterQuality: FilterQuality.high,
|
||||
color: color,
|
||||
colorBlendMode: color == null ? null : BlendMode.srcIn,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class _DlsLogoPainter extends CustomPainter {
|
||||
const _DlsLogoPainter({this.color});
|
||||
final Color? color;
|
||||
|
||||
static const _navy = Color(0xFF00397C);
|
||||
static const _cyan = Color(0xFF57B8CE);
|
||||
|
||||
@override
|
||||
void paint(Canvas canvas, Size size) {
|
||||
final toothColor = color ?? _navy;
|
||||
final chevronColor = color ?? _cyan;
|
||||
|
||||
// Content bounding box in SVG 200×200 space: x=[42.5..157.5], y=[72..133]
|
||||
// Width=115, Height=61 → aspect ~1.885 ≈ widget aspect 1.9
|
||||
const svgLeft = 42.5, svgTop = 72.0, svgWidth = 115.0, svgHeight = 61.0;
|
||||
final s = size.height / svgHeight;
|
||||
final dx = (size.width - svgWidth * s) / 2.0 - svgLeft * s;
|
||||
final dy = (size.height - svgHeight * s) / 2.0 - svgTop * s;
|
||||
|
||||
canvas.translate(dx, dy);
|
||||
canvas.scale(s);
|
||||
|
||||
_drawTooth(canvas, toothColor);
|
||||
_drawChevrons(canvas, chevronColor);
|
||||
}
|
||||
|
||||
static void _drawTooth(Canvas canvas, Color color) {
|
||||
// SVG path with scale(0.58) + translate(100,100) applied inline.
|
||||
const cx = 100.0, cy = 100.0, sc = 0.58;
|
||||
double px(double v) => cx + v * sc;
|
||||
double py(double v) => cy + v * sc;
|
||||
|
||||
final path = Path()
|
||||
..moveTo(px(0), py(-46))
|
||||
..cubicTo(px(-22), py(-50), px(-44), py(-38), px(-44), py(-12))
|
||||
..cubicTo(px(-44), py(8), px(-34), py(32), px(-26), py(46))
|
||||
..cubicTo(px(-20), py(57), px(-11), py(53), px(-8), py(33))
|
||||
..cubicTo(px(-6), py(19), px(-2), py(17), px(0), py(17))
|
||||
..cubicTo(px(2), py(17), px(6), py(19), px(8), py(33))
|
||||
..cubicTo(px(11), py(53), px(20), py(57), px(26), py(46))
|
||||
..cubicTo(px(34), py(32), px(44), py(8), px(44), py(-12))
|
||||
..cubicTo(px(44), py(-38), px(22), py(-50), px(0), py(-46))
|
||||
..close();
|
||||
|
||||
canvas.drawPath(path, Paint()..color = color..style = PaintingStyle.fill);
|
||||
}
|
||||
|
||||
static void _drawChevrons(Canvas canvas, Color color) {
|
||||
final paint = Paint()
|
||||
..color = color
|
||||
..style = PaintingStyle.stroke
|
||||
..strokeWidth = 11.0
|
||||
..strokeCap = StrokeCap.round
|
||||
..strokeJoin = StrokeJoin.round;
|
||||
|
||||
// Polyline points + translate(100,100). Left: (-52,-22)→(-34,0)→(-52,22)
|
||||
canvas.drawPath(
|
||||
Path()
|
||||
..moveTo(48, 78)
|
||||
..lineTo(66, 100)
|
||||
..lineTo(48, 122),
|
||||
paint,
|
||||
);
|
||||
// Right: (52,-22)→(34,0)→(52,22)
|
||||
canvas.drawPath(
|
||||
Path()
|
||||
..moveTo(152, 78)
|
||||
..lineTo(134, 100)
|
||||
..lineTo(152, 122),
|
||||
paint,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
bool shouldRepaint(_DlsLogoPainter old) => old.color != color;
|
||||
}
|
||||
|
||||
@@ -83,14 +83,6 @@ const _dlsLight = ColorScheme(
|
||||
chart3: Color(0xFFF59E0B),
|
||||
chart4: Color(0xFF0369A1),
|
||||
chart5: Color(0xFFDC2626),
|
||||
sidebar: Color(0xFFFFFFFF),
|
||||
sidebarForeground: Color(0xFF0F172A),
|
||||
sidebarPrimary: Color(0xFF1E3A5F),
|
||||
sidebarPrimaryForeground: Color(0xFFFFFFFF),
|
||||
sidebarAccent: Color(0xFFF1F5F9),
|
||||
sidebarAccentForeground: Color(0xFF0F172A),
|
||||
sidebarBorder: Color(0xFFE2E8F0),
|
||||
sidebarRing: Color(0xFF0369A1),
|
||||
);
|
||||
|
||||
// ── DLS Dark color scheme ─────────────────────────────────────────────────────
|
||||
@@ -120,12 +112,4 @@ const _dlsDark = ColorScheme(
|
||||
chart3: Color(0xFFFCD34D),
|
||||
chart4: Color(0xFF7DD3FC),
|
||||
chart5: Color(0xFFFCA5A5),
|
||||
sidebar: Color(0xFF1E293B),
|
||||
sidebarForeground: Color(0xFFF1F5F9),
|
||||
sidebarPrimary: Color(0xFF93C5FD),
|
||||
sidebarPrimaryForeground: Color(0xFF1E3A5F),
|
||||
sidebarAccent: Color(0xFF273344),
|
||||
sidebarAccentForeground: Color(0xFFF1F5F9),
|
||||
sidebarBorder: Color(0xFF334155),
|
||||
sidebarRing: Color(0xFF7DD3FC),
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user