Skip to content

Commit 073ed20

Browse files
committed
Add support for color index
1 parent 8f51e8f commit 073ed20

1 file changed

Lines changed: 164 additions & 72 deletions

File tree

InfiniLink/Core/Home/WatchFace.swift

Lines changed: 164 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -226,11 +226,11 @@ struct PineTimeStyleWF: View {
226226
ZStack {
227227
backgroundColor
228228
if !hour24 {
229-
CustomTextView(text: Calendar.current.component(.hour, from: Date()) > 12 ? "P\nM" : "A\nM", font: .custom("JetBrainsMono-ExtraBold", size: geometry.size.width * 0.075), lineSpacing: -4)
229+
CustomTextView(text: Calendar.current.component(.hour, from: Date()) >= 12 ? "P\nM" : "A\nM", font: .custom("JetBrainsMono-ExtraBold", size: geometry.size.width * 0.075), lineSpacing: -4)
230230
.foregroundColor(timeColor)
231231
.frame(width: geometry.size.width, height: geometry.size.height, alignment: .bottomLeading)
232232
}
233-
if Calendar.current.component(.hour, from: Date()) > 12 && !hour24 {
233+
if Calendar.current.component(.hour, from: Date()) >= 12 && !hour24 {
234234
CustomTextView(text: "\(String(format: "%02d", Calendar.current.component(.hour, from: Date()) - 12))\n\(String(format: "%02d", Calendar.current.component(.minute, from: Date())))", font: .custom("OpenSans-light", size: geometry.size.width * 0.62), lineSpacing: -geometry.size.width * 0.35)
235235
.foregroundColor(timeColor)
236236
.position(x: geometry.size.width / 2.3, y: geometry.size.height / 2.0)
@@ -295,11 +295,11 @@ struct DigitalWF: View {
295295
var body: some View {
296296
ZStack {
297297
if !hour24 {
298-
CustomTextView(text: Calendar.current.component(.hour, from: Date()) > 12 ? "PM" : "AM", font: .custom("JetBrainsMono-Bold", size: geometry.size.width * 0.085), lineSpacing: 0)
298+
CustomTextView(text: Calendar.current.component(.hour, from: Date()) >= 12 ? "PM" : "AM", font: .custom("JetBrainsMono-Bold", size: geometry.size.width * 0.085), lineSpacing: 0)
299299
.foregroundColor(.white)
300300
.frame(width: geometry.size.width, height: geometry.size.height / 1.95, alignment: .topTrailing)
301301
}
302-
if Calendar.current.component(.hour, from: Date()) > 12 && !hour24 {
302+
if Calendar.current.component(.hour, from: Date()) >= 12 && !hour24 {
303303
CustomTextView(text: "\(Calendar.current.component(.hour, from: Date()) - 12):\(String(format: "%02d", Calendar.current.component(.minute, from: Date())))", font: .custom("JetBrainsMono-ExtraBold", size: geometry.size.width * 0.33), lineSpacing: 0)
304304
.foregroundColor(.white)
305305
.frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .trailing)
@@ -330,117 +330,183 @@ struct InfineatWF: View {
330330
return true
331331
}
332332
}
333+
334+
let orangeColors: [Color] = [
335+
Color(red: 0xfd / 255.0, green: 0x87 / 255.0, blue: 0x2b / 255.0),
336+
Color(red: 0xf0 / 255.0, green: 0x59 / 255.0, blue: 0x3b / 255.0),
337+
Color(red: 0x6f / 255.0, green: 0x10 / 255.0, blue: 0x00 / 255.0),
338+
Color(red: 0xfd / 255.0, green: 0x7a / 255.0, blue: 0x0a / 255.0),
339+
Color(red: 0xe8 / 255.0, green: 0x51 / 255.0, blue: 0x02 / 255.0),
340+
Color(red: 0xea / 255.0, green: 0x1c / 255.0, blue: 0x00 / 255.0)
341+
]
342+
343+
let blueColors: [Color] = [
344+
Color(red: 0xe7 / 255.0, green: 0xf8 / 255.0, blue: 0xff / 255.0),
345+
Color(red: 0x16 / 255.0, green: 0x36 / 255.0, blue: 0xff / 255.0),
346+
Color(red: 0x18 / 255.0, green: 0x2a / 255.0, blue: 0x8b / 255.0),
347+
Color(red: 0xe7 / 255.0, green: 0xf8 / 255.0, blue: 0xff / 255.0),
348+
Color(red: 0x59 / 255.0, green: 0x91 / 255.0, blue: 0xff / 255.0),
349+
Color(red: 0x16 / 255.0, green: 0x36 / 255.0, blue: 0xff / 255.0)
350+
]
351+
352+
let greenColors: [Color] = [
353+
Color(red: 0xb8 / 255.0, green: 0xff / 255.0, blue: 0x9b / 255.0),
354+
Color(red: 0x08 / 255.0, green: 0x86 / 255.0, blue: 0x08 / 255.0),
355+
Color(red: 0x00 / 255.0, green: 0x4a / 255.0, blue: 0x00 / 255.0),
356+
Color(red: 0xb8 / 255.0, green: 0xff / 255.0, blue: 0x9b / 255.0),
357+
Color(red: 0x62 / 255.0, green: 0xd5 / 255.0, blue: 0x15 / 255.0),
358+
Color(red: 0x00 / 255.0, green: 0x74 / 255.0, blue: 0x00 / 255.0)
359+
]
360+
361+
let rainbowColors: [Color] = [
362+
Color(red: 0x2d / 255.0, green: 0xa4 / 255.0, blue: 0x00 / 255.0),
363+
Color(red: 0xac / 255.0, green: 0x09 / 255.0, blue: 0xc4 / 255.0),
364+
Color(red: 0xfe / 255.0, green: 0x03 / 255.0, blue: 0x03 / 255.0),
365+
Color(red: 0x0d / 255.0, green: 0x57 / 255.0, blue: 0xff / 255.0),
366+
Color(red: 0xe0 / 255.0, green: 0xb9 / 255.0, blue: 0x00 / 255.0),
367+
Color(red: 0xe8 / 255.0, green: 0x51 / 255.0, blue: 0x02 / 255.0)
368+
]
369+
370+
let grayColors: [Color] = [
371+
Color(red: 0xee / 255.0, green: 0xee / 255.0, blue: 0xee / 255.0),
372+
Color(red: 0x98 / 255.0, green: 0x95 / 255.0, blue: 0x9b / 255.0),
373+
Color(red: 0x19 / 255.0, green: 0x19 / 255.0, blue: 0x19 / 255.0),
374+
Color(red: 0xee / 255.0, green: 0xee / 255.0, blue: 0xee / 255.0),
375+
Color(red: 0x91 / 255.0, green: 0x91 / 255.0, blue: 0x91 / 255.0),
376+
Color(red: 0x3a / 255.0, green: 0x3a / 255.0, blue: 0x3a / 255.0)
377+
]
378+
379+
let nordBlueColors: [Color] = [
380+
Color(red: 0xc3 / 255.0, green: 0xda / 255.0, blue: 0xf2 / 255.0),
381+
Color(red: 0x4d / 255.0, green: 0x78 / 255.0, blue: 0xce / 255.0),
382+
Color(red: 0x15 / 255.0, green: 0x34 / 255.0, blue: 0x51 / 255.0),
383+
Color(red: 0xc3 / 255.0, green: 0xda / 255.0, blue: 0xf2 / 255.0),
384+
Color(red: 0x5d / 255.0, green: 0x8a / 255.0, blue: 0xd2 / 255.0),
385+
Color(red: 0x21 / 255.0, green: 0x51 / 255.0, blue: 0x8a / 255.0)
386+
]
387+
388+
let nordGreenColors: [Color] = [
389+
Color(red: 0xd5 / 255.0, green: 0xf0 / 255.0, blue: 0xe9 / 255.0),
390+
Color(red: 0x23 / 255.0, green: 0x83 / 255.0, blue: 0x73 / 255.0),
391+
Color(red: 0x1d / 255.0, green: 0x41 / 255.0, blue: 0x3f / 255.0),
392+
Color(red: 0xd5 / 255.0, green: 0xf0 / 255.0, blue: 0xe9 / 255.0),
393+
Color(red: 0x2f / 255.0, green: 0xb8 / 255.0, blue: 0xa2 / 255.0),
394+
Color(red: 0x11 / 255.0, green: 0x70 / 255.0, blue: 0x5a / 255.0)
395+
]
396+
333397
func infineatColor(for item: InfineatItem) -> Color {
334-
/*
335-
0. orange
336-
1. blue
337-
2. green
338-
3. rainbow
339-
4. gray
340-
5. nordBlue
341-
6. nordGreen
342-
343-
TODO: Add colors from watch face source
344-
*/
345-
346398
switch item {
347399
case .base:
348400
switch bleManagerVal.infineatColorIndex {
349401
case 0:
350-
return Color("Maroon")
351-
case 1, 5:
352-
return Color("Navy")
353-
case 2, 6:
354-
return Color("DarkGreen")
402+
return orangeColors[2]
403+
case 1:
404+
return blueColors[2]
405+
case 2:
406+
return greenColors[2]
355407
case 3:
356-
return Color(.red)
408+
return rainbowColors[2]
357409
case 4:
358-
return Color.darkestGray
410+
return grayColors[2]
411+
case 5:
412+
return nordBlueColors[2]
413+
case 6:
414+
return nordGreenColors[2]
359415
default:
360416
break
361417
}
362418
case .bottom:
363419
switch bleManagerVal.infineatColorIndex {
364420
case 0:
365-
return Color("Orange").opacity(0.9)
421+
return orangeColors[1]
366422
case 1:
367-
return Color.blue.opacity(0.9)
423+
return blueColors[1]
368424
case 2:
369-
return Color("LightGreen").opacity(0.9)
425+
return greenColors[1]
370426
case 3:
371-
return Color.purple
427+
return rainbowColors[1]
372428
case 4:
373-
return Color.gray
429+
return grayColors[1]
374430
case 5:
375-
return Color("BabyBlue").opacity(0.9)
431+
return nordBlueColors[1]
376432
case 6:
377-
return Color.mint.opacity(0.9)
433+
return nordGreenColors[1]
378434
default:
379435
break
380436
}
381437
case .topTop:
382438
switch bleManagerVal.infineatColorIndex {
383439
case 0:
384-
return Color("Orange")
440+
return orangeColors[4]
385441
case 1:
386-
return Color("LightBlue")
442+
return blueColors[4]
387443
case 2:
388-
return Color("LightGreen")
444+
return greenColors[4]
389445
case 3:
390-
return Color("Yellow")
446+
return rainbowColors[4]
391447
case 4:
392-
return Color.gray
448+
return grayColors[4]
393449
case 5:
394-
return Color("BabyBlue")
450+
return nordBlueColors[4]
395451
case 6:
396-
return Color.mint
452+
return nordGreenColors[4]
397453
default:
398454
break
399455
}
400456
case .topBottom:
401457
switch bleManagerVal.infineatColorIndex {
402458
case 0:
403-
return Color("Red")
459+
return orangeColors[5]
404460
case 1:
405-
return Color.blue
461+
return blueColors[5]
406462
case 2:
407-
return Color("Green")
463+
return greenColors[5]
408464
case 3:
409-
return Color("Orange")
465+
return rainbowColors[5]
410466
case 4:
411-
return Color(.darkGray)
467+
return grayColors[5]
412468
case 5:
413-
return Color("NordBlue")
469+
return nordBlueColors[5]
414470
case 6:
415-
return Color("NordGreen")
471+
return nordGreenColors[5]
416472
default:
417473
break
418474
}
419475
case .midBottom:
420476
switch bleManagerVal.infineatColorIndex {
421477
case 0:
422-
return Color("Yellow")
423-
case 1, 4, 5, 6:
424-
// 5 and 6 aren't perfectly white on the watch
425-
return Color.white
478+
return orangeColors[3]
479+
case 1:
480+
return blueColors[3]
426481
case 2:
427-
return Color("LightestGreen")
482+
return greenColors[3]
428483
case 3:
429-
return Color.blue
484+
return rainbowColors[3]
485+
case 4:
486+
return grayColors[3]
487+
case 5:
488+
return nordBlueColors[3]
489+
case 6:
490+
return nordGreenColors[3]
430491
default:
431492
break
432493
}
433494
case .midTop:
434495
switch bleManagerVal.infineatColorIndex {
435496
case 0:
436-
return Color("Yellow")
437-
case 1, 4, 5, 6:
438-
// 5 and 6 aren't perfectly white on the watch
439-
return Color.white
497+
return orangeColors[0]
498+
case 1:
499+
return blueColors[0]
440500
case 2:
441-
return Color("LightestGreen")
501+
return greenColors[0]
442502
case 3:
443-
return Color("Green")
503+
return rainbowColors[0]
504+
case 4:
505+
return grayColors[0]
506+
case 5:
507+
return nordBlueColors[0]
508+
case 6:
509+
return nordGreenColors[0]
444510
default:
445511
break
446512
}
@@ -451,11 +517,11 @@ struct InfineatWF: View {
451517
var body: some View {
452518
ZStack {
453519
if hour24 {
454-
CustomTextView(text: Calendar.current.component(.hour, from: Date()) > 12 ? "PM" : "AM", font: .custom("Teko-Light", size: geometry.size.width * 0.125), lineSpacing: 0)
520+
CustomTextView(text: Calendar.current.component(.hour, from: Date()) >= 12 ? "PM" : "AM", font: .custom("Teko-Light", size: geometry.size.width * 0.125), lineSpacing: 0)
455521
.foregroundColor(.white)
456522
.frame(width: geometry.size.width, height: geometry.size.height / 1.35, alignment: .topTrailing)
457523
}
458-
if Calendar.current.component(.hour, from: Date()) > 12 && !hour24 {
524+
if Calendar.current.component(.hour, from: Date()) >= 12 && !hour24 {
459525
VStack(alignment: .center, spacing: -28) {
460526
Text("\(String(format: "%02d", Calendar.current.component(.hour, from: Date()) - 12))")
461527
Text("\(String(format: "%02d", Calendar.current.component(.minute, from: Date())))")
@@ -506,46 +572,52 @@ struct InfineatWF: View {
506572
.frame(maxHeight: .infinity, alignment: .topLeading)
507573
.foregroundColor(infineatColor(for: .midTop))
508574
.rotationEffect(Angle(degrees: 49))
509-
.offset(x: -36, y: -44)
575+
.offset(x: -36, y: -48)
510576
Rectangle()
511577
.frame(width: 19)
512578
.frame(height: geometry.size.height / 1.5, alignment: .bottomLeading)
513579
.frame(maxHeight: .infinity, alignment: .bottomLeading)
514580
.foregroundColor(infineatColor(for: .bottom))
515581
.opacity(0.8)
516-
.rotationEffect(Angle(degrees: -16))
517-
.offset(x: -6, y: 12)
582+
.rotationEffect(Angle(degrees: -22))
583+
.offset(x: -16, y: 14)
518584
Rectangle()
519585
.frame(width: 26, alignment: .leading)
520-
.offset(x: -5)
586+
.offset(x: -9)
521587
.foregroundColor(infineatColor(for: .base))
522588
Rectangle()
523589
.frame(width: 26)
524590
.frame(height: geometry.size.height / 1.5, alignment: .topLeading)
525591
.frame(maxHeight: .infinity, alignment: .bottomLeading)
526592
.foregroundColor(infineatColor(for: .midBottom))
527-
.rotationEffect(Angle(degrees: -38))
528-
.offset(x: -26, y: 30)
593+
.rotationEffect(Angle(degrees: -42))
594+
.offset(x: -31, y: 38)
595+
ZStack {
596+
DiamondShape()
597+
.fill(Color.white)
598+
.frame(width: 50, height: 75)
599+
.offset(x: -5)
600+
Image("pine_logo")
601+
.resizable()
602+
.frame(width: 20, height: 25)
603+
.offset(x: -1)
604+
}
529605
Rectangle()
530606
.frame(width: 38)
531607
.frame(height: geometry.size.height / 1.3, alignment: .topLeading)
532608
.frame(maxHeight: .infinity, alignment: .topLeading)
533609
.foregroundColor(infineatColor(for: .topTop))
534610
.rotationEffect(Angle(degrees: 18))
535-
.offset(x: -28, y: -16)
611+
.offset(x: -32, y: -16)
536612
Rectangle()
537613
.frame(width: 38)
538614
.frame(height: geometry.size.height / 1.3, alignment: .topLeading)
539615
.frame(maxHeight: .infinity, alignment: .bottomLeading)
540616
.foregroundColor(infineatColor(for: .topBottom))
541617
.rotationEffect(Angle(degrees: -18))
542-
.offset(x: -28, y: 16)
618+
.offset(x: -32, y: 16)
543619
}
544620
.frame(width: geometry.size.width, height: geometry.size.height, alignment: .leading)
545-
Image("pine_logo")
546-
.resizable()
547-
.frame(width: 20, height: 26)
548-
.frame(width: geometry.size.width / 1.15, height: geometry.size.height, alignment: .leading)
549621
}
550622
.frame(width: geometry.size.width, height: geometry.size.height, alignment: .center)
551623
.clipped()
@@ -706,7 +778,7 @@ struct CasioWF: View {
706778
lineSpacing: 0
707779
)
708780
.frame(width: geometry.size.width / 1.08, height: geometry.size.height / 2.25, alignment: .topTrailing)
709-
if Calendar.current.component(.hour, from: Date()) > 12 && !hour24 {
781+
if Calendar.current.component(.hour, from: Date()) >= 12 && !hour24 {
710782
CustomTextView(text: "\(Calendar.current.component(.hour, from: Date()) - 12):\(String(format: "%02d", Calendar.current.component(.minute, from: Date())))", font: .custom("7-segment", size: geometry.size.width * 0.36), lineSpacing: 0)
711783
.frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .trailing)
712784
.position(x: geometry.size.width / 2.0, y: geometry.size.height / 1.30)
@@ -757,6 +829,26 @@ struct CustomTextView: View {
757829
}
758830
}
759831

832+
struct DiamondShape: Shape {
833+
func path(in rect: CGRect) -> Path {
834+
var path = Path()
835+
836+
let topPoint = CGPoint(x: rect.midX, y: rect.minY)
837+
let rightPoint = CGPoint(x: rect.maxX, y: rect.midY)
838+
let bottomPoint = CGPoint(x: rect.midX, y: rect.maxY)
839+
let leftPoint = CGPoint(x: rect.minX, y: rect.midY)
840+
841+
path.move(to: topPoint)
842+
843+
path.addLine(to: rightPoint)
844+
path.addLine(to: bottomPoint)
845+
path.addLine(to: leftPoint)
846+
path.closeSubpath()
847+
848+
return path
849+
}
850+
}
851+
760852
enum InfineatItem {
761853
case base
762854
case bottom
@@ -774,7 +866,7 @@ enum InfineatItem {
774866
.frame(width: geometry.size.width / 1.65, height: geometry.size.width / 1.65, alignment: .center)
775867
.clipped(antialiased: true)
776868
.onAppear {
777-
BLEManagerVal.shared.infineatColorIndex = 6
869+
BLEManagerVal.shared.infineatColorIndex = 1
778870
}
779871
}
780872
}

0 commit comments

Comments
 (0)