1use super::{
7 clip_pixel_frames_offset_bottom, clip_pixel_frames_offset_left, clip_pixel_frames_offset_right,
8 clip_pixel_frames_offset_top, Offset, PixelFrame,
9};
10
11impl PixelFrame {
13 pub fn clip(&self, other: &PixelFrame, clip_at: Offset) -> Self {
17 self.build_clip(other).offset(clip_at)
18 }
19 pub fn build_clip(&self, other: &PixelFrame) -> Clip {
21 Clip::new(*self, *other)
22 }
23}
24
25#[derive(Copy, Clone, Debug, Default, PartialEq)]
322pub struct Clip {
323 first: PixelFrame,
324 second: PixelFrame,
325}
326
327impl Clip {
328 pub fn new(first: PixelFrame, second: PixelFrame) -> Self {
330 Clip { first, second }
331 }
332
333 pub fn offset(&self, offset: Offset) -> PixelFrame {
335 match offset {
336 Offset::Left(offset) => self.offset_left(offset),
337 Offset::Right(offset) => self.offset_right(offset),
338 Offset::Bottom(offset) => self.offset_bottom(offset),
339 Offset::Top(offset) => self.offset_top(offset),
340 }
341 }
342
343 fn offset_left(&self, offset: u8) -> PixelFrame {
346 assert!(offset < 9);
347 clip_pixel_frames_offset_left(self.first, self.second, offset)
348 }
349
350 fn offset_right(&self, offset: u8) -> PixelFrame {
353 assert!(offset < 9);
354 clip_pixel_frames_offset_right(self.first, self.second, offset)
355 }
356
357 fn offset_bottom(&self, offset: u8) -> PixelFrame {
358 assert!(offset < 9);
359 clip_pixel_frames_offset_bottom(self.first, self.second, offset)
360 }
361
362 fn offset_top(&self, offset: u8) -> PixelFrame {
363 assert!(offset < 9);
364 clip_pixel_frames_offset_top(self.first, self.second, offset)
365 }
366}
367
368#[cfg(test)]
369mod tests {
370 use super::*;
371 use crate::color::PixelColor;
372
373 const DARK: PixelColor = PixelColor::BLACK;
374 const BLUE: PixelColor = PixelColor::BLUE;
375
376 const FRAME_ONE: [PixelColor; 64] = [
377 DARK, DARK, DARK, DARK, DARK, DARK, DARK, BLUE, DARK, BLUE, DARK, DARK, DARK, DARK, BLUE, BLUE, DARK, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, ];
386
387 const FRAME_TWO: [PixelColor; 64] = [
388 BLUE, DARK, DARK, DARK, DARK, DARK, DARK, DARK, BLUE, BLUE, DARK, DARK, DARK, DARK, BLUE, DARK, BLUE, BLUE, BLUE, DARK, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, DARK, BLUE, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, ];
397
398 const OFFSET_RIGHT_ONE: [PixelColor; 64] = [
400 DARK, DARK, DARK, DARK, DARK, DARK, DARK, DARK, DARK, DARK, BLUE, DARK, DARK, DARK, DARK, BLUE, DARK, DARK, DARK, DARK, DARK, DARK, BLUE, BLUE, DARK, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, ];
409
410 const OFFSET_RIGHT_TWO: [PixelColor; 64] = [
411 DARK, DARK, DARK, DARK, DARK, DARK, DARK, DARK, BLUE, DARK, DARK, BLUE, DARK, DARK, DARK, DARK, DARK, DARK, DARK, DARK, DARK, DARK, DARK, BLUE, DARK, DARK, DARK, DARK, DARK, DARK, BLUE, BLUE, DARK, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, ];
420
421 const OFFSET_RIGHT_THREE: [PixelColor; 64] = [
422 DARK, DARK, DARK, DARK, DARK, DARK, DARK, DARK, DARK, BLUE, DARK, DARK, BLUE, DARK, DARK, DARK, DARK, DARK, DARK, DARK, DARK, DARK, DARK, DARK, DARK, DARK, DARK, DARK, DARK, DARK, DARK, BLUE, DARK, DARK, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, ];
431
432 const OFFSET_RIGHT_FOUR: [PixelColor; 64] = [
433 DARK, DARK, DARK, DARK, DARK, DARK, DARK, DARK, DARK, DARK, BLUE, DARK, DARK, BLUE, DARK, DARK, DARK, DARK, DARK, DARK, DARK, DARK, DARK, DARK, DARK, DARK, DARK, DARK, DARK, DARK, DARK, DARK, BLUE, DARK, DARK, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, ];
442
443 const OFFSET_RIGHT_FIVE: [PixelColor; 64] = [
444 DARK, DARK, DARK, DARK, DARK, DARK, DARK, DARK, DARK, DARK, DARK, BLUE, DARK, DARK, BLUE, DARK, DARK, DARK, DARK, DARK, DARK, DARK, DARK, DARK, BLUE, DARK, DARK, DARK, DARK, DARK, DARK, DARK, BLUE, BLUE, DARK, DARK, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, ];
453
454 const OFFSET_RIGHT_SIX: [PixelColor; 64] = [
455 DARK, DARK, DARK, DARK, DARK, DARK, DARK, DARK, DARK, DARK, DARK, DARK, BLUE, DARK, DARK, BLUE, BLUE, DARK, DARK, DARK, DARK, DARK, DARK, DARK, BLUE, BLUE, DARK, DARK, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, DARK, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, ];
464
465 const OFFSET_RIGHT_SEVEN: [PixelColor; 64] = [
466 DARK, DARK, DARK, DARK, DARK, DARK, DARK, DARK, BLUE, DARK, DARK, DARK, DARK, BLUE, DARK, DARK, BLUE, BLUE, DARK, DARK, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, DARK, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, ];
475
476 const OFFSET_LEFT_ONE: [PixelColor; 64] = [
478 DARK, DARK, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, ];
487
488 const OFFSET_LEFT_TWO: [PixelColor; 64] = [
489 DARK, DARK, DARK, DARK, DARK, BLUE, BLUE, DARK, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, BLUE, BLUE, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, ];
498
499 const OFFSET_LEFT_THREE: [PixelColor; 64] = [
500 DARK, DARK, DARK, DARK, BLUE, BLUE, DARK, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, BLUE, BLUE, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, ];
509
510 const OFFSET_LEFT_FOUR: [PixelColor; 64] = [
511 DARK, DARK, DARK, BLUE, BLUE, DARK, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, BLUE, BLUE, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, ];
520
521 const OFFSET_LEFT_FIVE: [PixelColor; 64] = [
522 DARK, DARK, BLUE, BLUE, DARK, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, BLUE, BLUE, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, ];
531
532 const OFFSET_LEFT_SIX: [PixelColor; 64] = [
533 DARK, BLUE, BLUE, DARK, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, BLUE, BLUE, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, ];
542
543 const OFFSET_LEFT_SEVEN: [PixelColor; 64] = [
544 BLUE, BLUE, DARK, DARK, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, BLUE, BLUE, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, ];
553
554 const OFFSET_TOP_ONE: [PixelColor; 64] = [
556 DARK, BLUE, DARK, DARK, DARK, DARK, BLUE, BLUE, DARK, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, DARK, DARK, DARK, DARK, DARK, DARK, ];
565
566 const OFFSET_TOP_TWO: [PixelColor; 64] = [
567 DARK, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, DARK, DARK, DARK, DARK, DARK, DARK, BLUE, BLUE, DARK, DARK, DARK, DARK, BLUE, DARK, ];
576
577 const OFFSET_TOP_THREE: [PixelColor; 64] = [
578 DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, DARK, DARK, DARK, DARK, DARK, DARK, BLUE, BLUE, DARK, DARK, DARK, DARK, BLUE, DARK, BLUE, BLUE, BLUE, DARK, DARK, DARK, DARK, DARK, ];
587
588 const OFFSET_TOP_FOUR: [PixelColor; 64] = [
589 DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, DARK, DARK, DARK, DARK, DARK, DARK, BLUE, BLUE, DARK, DARK, DARK, DARK, BLUE, DARK, BLUE, BLUE, BLUE, DARK, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, DARK, DARK, DARK, DARK, ];
598
599 const OFFSET_TOP_FIVE: [PixelColor; 64] = [
600 DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, DARK, DARK, DARK, DARK, DARK, DARK, BLUE, BLUE, DARK, DARK, DARK, DARK, BLUE, DARK, BLUE, BLUE, BLUE, DARK, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, DARK, DARK, ];
609
610 const OFFSET_TOP_SIX: [PixelColor; 64] = [
611 DARK, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, DARK, DARK, DARK, DARK, DARK, DARK, BLUE, BLUE, DARK, DARK, DARK, DARK, BLUE, DARK, BLUE, BLUE, BLUE, DARK, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, DARK, ];
620
621 const OFFSET_TOP_SEVEN: [PixelColor; 64] = [
622 BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, DARK, DARK, DARK, DARK, DARK, DARK, BLUE, BLUE, DARK, DARK, DARK, DARK, BLUE, DARK, BLUE, BLUE, BLUE, DARK, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, DARK, BLUE, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, ];
631
632 const OFFSET_BOTTOM_ONE: [PixelColor; 64] = [
634 BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, DARK, DARK, DARK, DARK, DARK, DARK, BLUE, DARK, BLUE, DARK, DARK, DARK, DARK, BLUE, BLUE, DARK, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, BLUE, ];
643
644 const OFFSET_BOTTOM_TWO: [PixelColor; 64] = [
645 BLUE, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, DARK, DARK, DARK, DARK, DARK, DARK, BLUE, DARK, BLUE, DARK, DARK, DARK, DARK, BLUE, BLUE, DARK, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, ];
654
655 const OFFSET_BOTTOM_THREE: [PixelColor; 64] = [
656 BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, DARK, BLUE, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, DARK, DARK, DARK, DARK, DARK, DARK, BLUE, DARK, BLUE, DARK, DARK, DARK, DARK, BLUE, BLUE, DARK, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, ];
665
666 const OFFSET_BOTTOM_FOUR: [PixelColor; 64] = [
667 BLUE, BLUE, BLUE, BLUE, BLUE, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, DARK, BLUE, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, DARK, DARK, DARK, DARK, DARK, DARK, BLUE, DARK, BLUE, DARK, DARK, DARK, DARK, BLUE, BLUE, DARK, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, ];
676
677 const OFFSET_BOTTOM_FIVE: [PixelColor; 64] = [
678 BLUE, BLUE, BLUE, BLUE, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, DARK, BLUE, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, DARK, DARK, DARK, DARK, DARK, DARK, BLUE, DARK, BLUE, DARK, DARK, DARK, DARK, BLUE, BLUE, DARK, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, ];
687
688 const OFFSET_BOTTOM_SIX: [PixelColor; 64] = [
689 BLUE, BLUE, BLUE, DARK, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, DARK, BLUE, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, DARK, DARK, DARK, DARK, DARK, DARK, BLUE, DARK, BLUE, DARK, DARK, DARK, DARK, BLUE, BLUE, ];
698
699 const OFFSET_BOTTOM_SEVEN: [PixelColor; 64] = [
700 BLUE, BLUE, DARK, DARK, DARK, DARK, BLUE, DARK, BLUE, BLUE, BLUE, DARK, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, DARK, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, DARK, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, DARK, BLUE, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, DARK, DARK, DARK, DARK, DARK, DARK, DARK, BLUE, ];
709
710 #[test]
711 fn frame_clip_offsets_to_the_left() {
712 let symbol = PixelFrame::new(&FRAME_ONE);
713 let symbol_two = PixelFrame::new(&FRAME_TWO);
714 let clip = symbol.build_clip(&symbol_two);
715 assert_eq!(clip.offset(Offset::left(0)), PixelFrame::new(&FRAME_ONE));
716 assert_eq!(
717 clip.offset(Offset::left(1)),
718 PixelFrame::new(&OFFSET_LEFT_ONE)
719 );
720 assert_eq!(
721 clip.offset(Offset::left(2)),
722 PixelFrame::new(&OFFSET_LEFT_TWO)
723 );
724 assert_eq!(
725 clip.offset(Offset::left(3)),
726 PixelFrame::new(&OFFSET_LEFT_THREE)
727 );
728 assert_eq!(
729 clip.offset(Offset::left(4)),
730 PixelFrame::new(&OFFSET_LEFT_FOUR)
731 );
732 assert_eq!(
733 clip.offset(Offset::left(5)),
734 PixelFrame::new(&OFFSET_LEFT_FIVE)
735 );
736 assert_eq!(
737 clip.offset(Offset::left(6)),
738 PixelFrame::new(&OFFSET_LEFT_SIX)
739 );
740 assert_eq!(
741 clip.offset(Offset::left(7)),
742 PixelFrame::new(&OFFSET_LEFT_SEVEN)
743 );
744 assert_eq!(clip.offset(Offset::left(8)), symbol_two);
745 }
746
747 #[test]
748 #[should_panic]
749 fn frame_clip_panics_when_offset_to_the_left_is_greater_than_8() {
750 let symbol = PixelFrame::new(&FRAME_ONE);
751 let symbol_two = PixelFrame::new(&FRAME_TWO);
752 let clip = symbol.build_clip(&symbol_two);
753 let _ = clip.offset(Offset::left(9));
754 }
755
756 #[test]
757 fn frame_clip_offsets_to_the_right() {
758 let symbol = PixelFrame::new(&FRAME_ONE);
759 let symbol_two = PixelFrame::new(&FRAME_TWO);
760 let clip = symbol.build_clip(&symbol_two);
761 assert_eq!(clip.offset(Offset::right(0)), PixelFrame::new(&FRAME_ONE));
762 assert_eq!(
763 clip.offset(Offset::right(1)),
764 PixelFrame::new(&OFFSET_RIGHT_ONE)
765 );
766 assert_eq!(
767 clip.offset(Offset::right(2)),
768 PixelFrame::new(&OFFSET_RIGHT_TWO)
769 );
770 assert_eq!(
771 clip.offset(Offset::right(3)),
772 PixelFrame::new(&OFFSET_RIGHT_THREE)
773 );
774 assert_eq!(
775 clip.offset(Offset::right(4)),
776 PixelFrame::new(&OFFSET_RIGHT_FOUR)
777 );
778 assert_eq!(
779 clip.offset(Offset::right(5)),
780 PixelFrame::new(&OFFSET_RIGHT_FIVE)
781 );
782 assert_eq!(
783 clip.offset(Offset::right(6)),
784 PixelFrame::new(&OFFSET_RIGHT_SIX)
785 );
786 assert_eq!(
787 clip.offset(Offset::right(7)),
788 PixelFrame::new(&OFFSET_RIGHT_SEVEN)
789 );
790 assert_eq!(clip.offset(Offset::right(8)), symbol_two);
791 }
792
793 #[test]
794 #[should_panic]
795 fn frame_clip_panics_when_offset_to_the_right_is_greater_than_8() {
796 let symbol = PixelFrame::new(&FRAME_ONE);
797 let symbol_two = PixelFrame::new(&FRAME_TWO);
798 let clip = symbol.build_clip(&symbol_two);
799 let _ = clip.offset(Offset::right(9));
800 }
801
802 #[test]
803 fn frame_clip_offsets_to_the_bottom() {
804 let symbol = PixelFrame::new(&FRAME_ONE);
805 let symbol_two = PixelFrame::new(&FRAME_TWO);
806 let clip = symbol.build_clip(&symbol_two);
807 assert_eq!(clip.offset(Offset::bottom(0)), PixelFrame::new(&FRAME_ONE));
808 assert_eq!(
809 clip.offset(Offset::bottom(1)),
810 PixelFrame::new(&OFFSET_BOTTOM_ONE)
811 );
812 assert_eq!(
813 clip.offset(Offset::bottom(2)),
814 PixelFrame::new(&OFFSET_BOTTOM_TWO)
815 );
816 assert_eq!(
817 clip.offset(Offset::bottom(3)),
818 PixelFrame::new(&OFFSET_BOTTOM_THREE)
819 );
820 assert_eq!(
821 clip.offset(Offset::bottom(4)),
822 PixelFrame::new(&OFFSET_BOTTOM_FOUR)
823 );
824 assert_eq!(
825 clip.offset(Offset::bottom(5)),
826 PixelFrame::new(&OFFSET_BOTTOM_FIVE)
827 );
828 assert_eq!(
829 clip.offset(Offset::bottom(6)),
830 PixelFrame::new(&OFFSET_BOTTOM_SIX)
831 );
832 assert_eq!(
833 clip.offset(Offset::bottom(7)),
834 PixelFrame::new(&OFFSET_BOTTOM_SEVEN)
835 );
836 assert_eq!(clip.offset(Offset::bottom(8)), symbol_two);
837 }
838
839 #[test]
840 #[should_panic]
841 fn frame_clip_panics_when_offset_to_the_bottom_is_greater_than_8() {
842 let symbol = PixelFrame::new(&FRAME_ONE);
843 let symbol_two = PixelFrame::new(&FRAME_TWO);
844 let clip = symbol.build_clip(&symbol_two);
845 let _ = clip.offset(Offset::bottom(9));
846 }
847
848 #[test]
849 fn frame_clip_offsets_to_the_top() {
850 let symbol = PixelFrame::new(&FRAME_ONE);
851 let symbol_two = PixelFrame::new(&FRAME_TWO);
852 let clip = symbol.build_clip(&symbol_two);
853 assert_eq!(clip.offset(Offset::top(0)), PixelFrame::new(&FRAME_ONE));
854 assert_eq!(
855 clip.offset(Offset::top(1)),
856 PixelFrame::new(&OFFSET_TOP_ONE)
857 );
858 assert_eq!(
859 clip.offset(Offset::top(2)),
860 PixelFrame::new(&OFFSET_TOP_TWO)
861 );
862 assert_eq!(
863 clip.offset(Offset::top(3)),
864 PixelFrame::new(&OFFSET_TOP_THREE)
865 );
866 assert_eq!(
867 clip.offset(Offset::top(4)),
868 PixelFrame::new(&OFFSET_TOP_FOUR)
869 );
870 assert_eq!(
871 clip.offset(Offset::top(5)),
872 PixelFrame::new(&OFFSET_TOP_FIVE)
873 );
874 assert_eq!(
875 clip.offset(Offset::top(6)),
876 PixelFrame::new(&OFFSET_TOP_SIX)
877 );
878 assert_eq!(
879 clip.offset(Offset::top(7)),
880 PixelFrame::new(&OFFSET_TOP_SEVEN)
881 );
882 assert_eq!(clip.offset(Offset::top(8)), symbol_two);
883 }
884
885 #[test]
886 #[should_panic]
887 fn frame_clip_panics_when_offset_to_the_top_is_greater_than_8() {
888 let symbol = PixelFrame::new(&FRAME_ONE);
889 let symbol_two = PixelFrame::new(&FRAME_TWO);
890 let clip = symbol.build_clip(&symbol_two);
891 let _ = clip.offset(Offset::top(9));
892 }
893}