1pub use crate::{arrow, clear, label, message, point, polyline, vlog_enabled};
14
15#[macro_export]
25macro_rules! clear {
26 (vlogger: $vlogger:expr, $surface:expr) => {
28 $crate::__private_api::clear(
29 $crate::__vlog_vlogger!($vlogger),
30 $crate::__private_api::module_path!(),
31 $surface,
32 )
33 };
34
35 (vlogger: $vlogger:expr, target: $target:expr, $surface:expr) => {
37 $crate::__private_api::clear($crate::__vlog_vlogger!($vlogger), $target, $surface)
38 };
39
40 (target: $target:expr, $surface:expr) => {
42 $crate::__private_api::clear(
43 $crate::__vlog_vlogger!(__vlog_global_vlogger),
44 $target,
45 $surface,
46 )
47 };
48
49 ($surface:expr) => {
51 $crate::__private_api::clear(
52 $crate::__vlog_vlogger!(__vlog_global_vlogger),
53 $crate::__private_api::module_path!(),
54 $surface,
55 )
56 };
57}
58
59#[macro_export]
72macro_rules! message {
73 (vlogger: $vlogger:expr, target: $target:expr, $surface:expr, $($arg:tt)+) => ({
75 $crate::__message!(
76 $crate::__vlog_vlogger!($vlogger),
77 $surface,
78 &$crate::__abs_module_path!($target),
79 $($arg)+
80 )
81 });
82
83 (vlogger: $vlogger:expr, $surface:expr, $($arg:tt)+) => ({
85 $crate::__message!(
86 $crate::__vlog_vlogger!($vlogger),
87 $surface,
88 &$crate::__abs_module_path!(),
89 $($arg)+
90 )
91 });
92
93 (target: $target:expr, $surface:expr, $($arg:tt)+) => ({
95 $crate::__message!(
96 $crate::__vlog_vlogger!(__vlog_global_vlogger),
97 $surface,
98 &$crate::__abs_module_path!($target),
99 $($arg)+
100 )
101 });
102
103 ($surface:expr, $($arg:tt)+) => (
105 $crate::__message!(
106 $crate::__vlog_vlogger!(__vlog_global_vlogger),
107 $surface,
108 &$crate::__abs_module_path!(),
109 $($arg)+
110 )
111 )
112}
113
114#[macro_export]
128macro_rules! point {
129 (vlogger: $vlogger:expr, target: $target:expr, $surface:expr, $($arg:tt)+) => ({
131 $crate::__point!(
132 $crate::__vlog_vlogger!($vlogger),
133 $surface,
134 &$crate::__abs_module_path!($target),
135 $($arg)+
136 )
137 });
138
139 (vlogger: $vlogger:expr, $surface:expr, $($arg:tt)+) => ({
141 $crate::__point!(
142 $crate::__vlog_vlogger!($vlogger),
143 $surface,
144 &$crate::__abs_module_path!(),
145 $($arg)+
146 )
147 });
148
149 (target: $target:expr, $surface:expr, $($arg:tt)+) => ({
151 $crate::__point!(
152 $crate::__vlog_vlogger!(__vlog_global_vlogger),
153 $surface,
154 &$crate::__abs_module_path!($target),
155 $($arg)+
156 )
157 });
158
159 ($surface:expr, $($arg:tt)+) => (
161 $crate::__point!(
162 $crate::__vlog_vlogger!(__vlog_global_vlogger),
163 $surface,
164 &$crate::__abs_module_path!(),
165 $($arg)+
166 )
167 )
168}
169
170#[macro_export]
183macro_rules! label {
184 (vlogger: $vlogger:expr, target: $target:expr, $surface:expr, $($arg:tt)+) => ({
186 $crate::__label!(
187 $crate::__vlog_vlogger!($vlogger),
188 $surface,
189 &$crate::__abs_module_path!($target),
190 $($arg)+
191 )
192 });
193
194 (vlogger: $vlogger:expr, $surface:expr, $($arg:tt)+) => ({
196 $crate::__label!(
197 $crate::__vlog_vlogger!($vlogger),
198 $surface,
199 &$crate::__abs_module_path!(),
200 $($arg)+
201 )
202 });
203
204 (target: $target:expr, $surface:expr, $($arg:tt)+) => ({
206 $crate::__label!(
207 $crate::__vlog_vlogger!(__vlog_global_vlogger),
208 $surface,
209 &$crate::__abs_module_path!($target),
210 $($arg)+
211 )
212 });
213
214 ($surface:expr, $($arg:tt)+) => (
216 $crate::__label!(
217 $crate::__vlog_vlogger!(__vlog_global_vlogger),
218 $surface,
219 &$crate::__abs_module_path!(),
220 $($arg)+
221 )
222 )
223}
224
225#[macro_export]
258macro_rules! polyline {
259 (vlogger: $vlogger:expr, target: $target:expr, $surface:expr, $($arg:tt)+) => ({
261 $crate::__line!(
262 $crate::__vlog_vlogger!($vlogger),
263 $surface,
264 &$crate::__abs_module_path!($target),
265 $($arg)+
266 )
267 });
268
269 (vlogger: $vlogger:expr, $surface:expr, $($arg:tt)+) => ({
271 $crate::__line!(
272 $crate::__vlog_vlogger!($vlogger),
273 $surface,
274 &$crate::__abs_module_path!(),
275 $($arg)+
276 )
277 });
278
279 (target: $target:expr, $surface:expr, $($arg:tt)+) => ({
281 $crate::__line!(
282 $crate::__vlog_vlogger!(__vlog_global_vlogger),
283 $surface,
284 &$crate::__abs_module_path!($target),
285 $($arg)+
286 )
287 });
288
289 ($surface:expr, $($arg:tt)+) => (
291 $crate::__line!(
292 $crate::__vlog_vlogger!(__vlog_global_vlogger),
293 $surface,
294 &$crate::__abs_module_path!(),
295 $($arg)+
296 )
297 )
298}
299
300#[macro_export]
330macro_rules! arrow {
331 (vlogger: $vlogger:expr, target: $target:expr, $surface:expr, $($arg:tt)+) => ({
333 $crate::__arrow!(
334 $crate::__vlog_vlogger!($vlogger),
335 $surface,
336 &$crate::__abs_module_path!($target),
337 $($arg)+
338 )
339 });
340
341 (vlogger: $vlogger:expr, $surface:expr, $($arg:tt)+) => ({
343 $crate::__arrow!(
344 $crate::__vlog_vlogger!($vlogger),
345 $surface,
346 &$crate::__abs_module_path!(),
347 $($arg)+
348 )
349 });
350
351 (target: $target:expr, $surface:expr, $($arg:tt)+) => ({
353 $crate::__arrow!(
354 $crate::__vlog_vlogger!(__vlog_global_vlogger),
355 $surface,
356 &$crate::__abs_module_path!($target),
357 $($arg)+
358 )
359 });
360
361 ($surface:expr, $($arg:tt)+) => (
363 $crate::__arrow!(
364 $crate::__vlog_vlogger!(__vlog_global_vlogger),
365 $surface,
366 &$crate::__abs_module_path!(),
367 $($arg)+
368 )
369 )
370}
371
372#[doc(hidden)]
373#[macro_export]
374#[clippy::format_args]
375macro_rules! __message {
376 ($vlogger:expr, $surface:expr, $loc:expr, color: $color:tt, $($arg:tt)+) => {
377 $crate::__private_api::vlog_message(
378 $vlogger,
379 $crate::__private_api::format_args!($($arg)+),
380 $crate::__color!($color),
381 $surface,
382 $loc
383 )
384 };
385 ($vlogger:expr, $surface:expr, $loc:expr, $($arg:tt)+) => {
386 $crate::__private_api::vlog_message(
387 $vlogger,
388 $crate::__private_api::format_args!($($arg)+),
389 $crate::__color!(Base),
390 $surface,
391 $loc
392 )
393 };
394}
395
396#[doc(hidden)]
397#[macro_export]
398#[clippy::format_args]
399macro_rules! __point {
400 ($vlogger:expr, $surface:expr, $loc:expr, $pos:expr, $size:expr, $color:tt, $style:tt, $($arg:tt)+) => {
401 $crate::__private_api::vlog_point(
402 $vlogger,
403 $crate::__private_api::format_args!($($arg)+),
404 $pos,
405 $size,
406 $crate::__color!($color),
407 $crate::__point_style!($style),
408 $surface,
409 $loc
410 )
411 };
412 ($vlogger:expr, $surface:expr, $loc:expr, $pos:expr, $size:expr, $color:tt, $style:tt) => {
413 $crate::__private_api::vlog_point(
414 $vlogger,
415 $crate::__private_api::format_args!(""),
416 $pos,
417 $size,
418 $crate::__color!($color),
419 $crate::__point_style!($style),
420 $surface,
421 $loc
422 )
423 };
424 ($vlogger:expr, $surface:expr, $loc:expr, $pos:expr, $size:expr, $color:tt) => {
425 $crate::__private_api::vlog_point(
426 $vlogger,
427 $crate::__private_api::format_args!(""),
428 $pos,
429 $size,
430 $crate::__color!($color),
431 $crate::__point_style!("o"),
432 $surface,
433 $loc
434 )
435 };
436}
437
438#[doc(hidden)]
439#[macro_export]
440#[clippy::format_args]
441macro_rules! __label {
442 ($vlogger:expr, $surface:expr, $loc:expr, $pos:expr, ($size:expr, $color:tt, $align:tt), $($arg:tt)+) => {
443 $crate::__private_api::vlog_label(
444 $vlogger,
445 $crate::__private_api::format_args!($($arg)+),
446 $pos,
447 $size,
448 $crate::__color!($color),
449 $crate::__alignment!($align),
450 $surface,
451 $loc
452 )
453 };
454 ($vlogger:expr, $surface:expr, $loc:expr, $pos:expr, $($arg:tt)+) => {
455 $crate::__private_api::vlog_label(
456 $vlogger,
457 $crate::__private_api::format_args!($($arg)+),
458 $pos,
459 12.0, $crate::__color!(Base),
461 $crate::__alignment!("x"),
462 $surface,
463 $loc
464 )
465 };
466}
467
468#[doc(hidden)]
469#[macro_export]
470#[clippy::format_args]
471macro_rules! __line {
472 ($vlogger:expr, $surface:expr, $loc:expr, ($pos1:expr, $pos2:expr), $size:expr, $color:tt, $style:tt, $($arg:tt)+) => {
473 $crate::__private_api::vlog_line(
474 $vlogger,
475 $crate::__private_api::format_args!($($arg)+),
476 $pos1,
477 $pos2,
478 $size,
479 $crate::__color!($color),
480 $crate::__line_style!($style),
481 $surface,
482 $loc
483 )
484 };
485 ($vlogger:expr, $surface:expr, $loc:expr, ($pos1:expr, $pos2:expr), $size:expr, $color:tt, $style:tt) => {
486 $crate::__line!($vlogger, $surface, $loc, ($pos1, $pos2), $size, $color, $style, "");
487 };
488 ($vlogger:expr, $surface:expr, $loc:expr, ($pos1:expr, $pos2:expr), $size:expr, $color:tt) => {
489 $crate::__line!($vlogger, $surface, $loc, ($pos1, $pos2), $size, $color, "-", "");
490 };
491 ($vlogger:expr, $surface:expr, $loc:expr, closed: $point_list:expr, $size:expr, $color:tt, $style:tt, $textsize:expr, $($arg:tt)+) => {
492 $crate::__private_api::vlog_closed_line(
493 $vlogger,
494 $crate::__private_api::format_args!($($arg)+),
495 $point_list,
496 $size,
497 $textsize,
498 $crate::__color!($color),
499 $crate::__line_style!($style),
500 $surface,
501 $loc
502 );
503 };
504 ($vlogger:expr, $surface:expr, $loc:expr, closed: $point_list:expr, $size:expr, $color:tt, $style:tt) => {
505 $crate::__line!($vlogger, $surface, $loc, closed: $point_list, $size, $color, $style, 0.0, "");
506 };
507 ($vlogger:expr, $surface:expr, $loc:expr, closed: $point_list:expr, $size:expr, $color:tt) => {
508 $crate::__line!($vlogger, $surface, $loc, closed: $point_list, $size, $color, "-", 0.0, "");
509 };
510 ($vlogger:expr, $surface:expr, $loc:expr, $point_list:expr, $size:expr, $color:tt, $style:tt) => {
511 let mut last = None;
512 let col = $crate::__color!($color);
513 let line_style = $crate::__line_style!($style);
514 let mut count = 0;
515 for p in $point_list {
516 if let Some(f) = last {
517 $crate::__private_api::vlog_line(
518 $vlogger,
519 $crate::__private_api::format_args!(""),
520 f,
521 p,
522 $size,
523 col,
524 line_style,
525 $surface,
526 $loc
527 );
528 }
529 last = Some(p);
530 count += 1;
531 }
532 assert!(count >= 2);
533 };
534 ($vlogger:expr, $surface:expr, $loc:expr, $point_list:expr, $size:expr, $color:tt) => {
535 $crate::__line!($vlogger, $surface, $loc, $point_list, $size, $color, "-");
536 };
537}
538
539#[doc(hidden)]
540#[macro_export]
541#[cfg(feature = "std")]
542macro_rules! __std_only {
543 ($($t:tt)*) => {
544 $($t)*
545 };
546}
547#[doc(hidden)]
548#[macro_export]
549#[cfg(not(feature = "std"))]
550macro_rules! __std_only {
551 ($($t:tt)*) => {
552 compile_error!("std required for arrow macro with fixed length")
553 };
554}
555
556#[doc(hidden)]
557#[macro_export]
558#[clippy::format_args]
559macro_rules! __arrow {
560 ($vlogger:expr, $surface:expr, $loc:expr, $pos:expr, $dir:expr, ($len:expr), $size:expr, $color:tt, $($arg:tt)+) => {
561 $crate::__std_only!($crate::__private_api::vlog_arrow(
562 $vlogger,
563 $crate::__private_api::format_args!($($arg)+),
564 $pos,
565 $dir,
566 Some($len),
567 $size,
568 $crate::__color!($color),
569 $surface,
570 $loc
571 ))
572 };
573 ($vlogger:expr, $surface:expr, $loc:expr, $pos:expr, $dir:expr, ($len:expr), $size:expr, $color:tt) => {
574 $crate::__arrow!($vlogger, $surface, $loc, $pos, $dir, ($len), $size, $color, "")
575 };
576 ($vlogger:expr, $surface:expr, $loc:expr, $pos:expr, $dir:expr, $size:expr, $color:tt, $($arg:tt)+) => {
577 $crate::__private_api::vlog_arrow(
578 $vlogger,
579 $crate::__private_api::format_args!($($arg)+),
580 $pos,
581 $dir,
582 None,
583 $size,
584 $crate::__color!($color),
585 $surface,
586 $loc
587 )
588 };
589 ($vlogger:expr, $surface:expr, $loc:expr, $pos:expr, $dirs:expr, ($scale:expr), $size:expr) => {
590 $crate::__private_api::vlog_axis(
591 $vlogger,
592 $pos,
593 $dirs,
594 $scale,
595 $size,
596 $surface,
597 $loc
598 )
599 };
600 ($vlogger:expr, $surface:expr, $loc:expr, $pos:expr, $dir:expr, $size:expr, $color:tt) => {
601 $crate::__arrow!($vlogger, $surface, $loc, $pos, $dir, $size, $color, "")
602 };
603}
604#[macro_export]
634macro_rules! vlog_enabled {
635 (vlogger: $vlogger:expr, target: $target:expr, $surface:expr) => {{
637 $crate::__private_api::enabled($crate::__vlog_vlogger!($vlogger), $surface, $target)
638 }};
639
640 (vlogger: $vlogger:expr, $surface:expr) => {{
642 $crate::__private_api::enabled(
643 $crate::__vlog_vlogger!($vlogger),
644 $surface,
645 $crate::__private_api::module_path!(),
646 )
647 }};
648
649 (target: $target:expr, $surface:expr) => {{
651 $crate::__private_api::enabled(
652 $crate::__vlog_vlogger!(__vlog_global_vlogger),
653 $surface,
654 $target,
655 )
656 }};
657
658 ($surface:expr) => {{
660 $crate::__private_api::enabled(
661 $crate::__vlog_vlogger!(__vlog_global_vlogger),
662 $surface,
663 $crate::__private_api::module_path!(),
664 )
665 }};
666}
667
668#[doc(hidden)]
671#[macro_export]
672macro_rules! __vlog_vlogger {
673 (__vlog_global_vlogger) => {{
674 &$crate::__private_api::GlobalVLogger
675 }};
676
677 ($vlogger:expr) => {{
678 &($vlogger)
679 }};
680}
681
682#[doc(hidden)]
683#[macro_export]
684macro_rules! __point_style {
685 ("O") => {
686 $crate::PointStyle::FilledCircle
687 };
688 ("-O") => {
689 $crate::PointStyle::Circle
690 };
691 ("--O") => {
692 $crate::PointStyle::DashedCircle
693 };
694 ("S") => {
695 $crate::PointStyle::FilledSquare
696 };
697 ("-S") => {
698 $crate::PointStyle::Square
699 };
700 ("--S") => {
701 $crate::PointStyle::DashedSquare
702 };
703 ("o") => {
704 $crate::PointStyle::Point
705 };
706 ("-o") => {
707 $crate::PointStyle::PointOutline
708 };
709 ("s") => {
710 $crate::PointStyle::PointSquare
711 };
712 ("-s") => {
713 $crate::PointStyle::PointSquareOutline
714 };
715 ("x") => {
716 $crate::PointStyle::PointCross
717 };
718 ("d") => {
719 $crate::PointStyle::PointDiamond
720 };
721 ("-d") => {
722 $crate::PointStyle::PointDiamondOutline
723 };
724 ($s:literal) => {
725 compile_error!(concat!("unknown point style ", $s))
726 };
727 ($s:ident) => {{
728 use $crate::PointStyle::*;
729 $s
730 }};
731}
732
733#[doc(hidden)]
734#[macro_export]
735macro_rules! __line_style {
736 ("-") => {
737 $crate::LineStyle::Simple
738 };
739 ("--") => {
740 $crate::LineStyle::Dashed
741 };
742 ("->") => {
743 $crate::LineStyle::Arrow
744 };
745 ("_>") => {
746 $crate::LineStyle::InsideHarpoonCCW
747 };
748 ("<_") => {
749 $crate::LineStyle::InsideHarpoonCW
750 };
751 ($s:literal) => {
752 panic!(concat!("unknown line style ", $s))
753 };
754 ($s:expr) => {{
755 use $crate::LineStyle::*;
756 $s
757 }};
758}
759
760#[doc(hidden)]
761#[macro_export]
762macro_rules! __alignment {
763 ("<") => {
764 $crate::TextAlignment::Left
765 };
766 (">") => {
767 $crate::TextAlignment::Right
768 };
769 (".") => {
770 $crate::TextAlignment::Center
771 };
772 ("x") => {
773 $crate::TextAlignment::Flexible
774 };
775 ($a:literal) => {
776 compile_error!(concat!("unknown text alignment ", $a))
777 };
778 ($a:expr) => {{
779 use $crate::TextAlignment::*;
780 $a
781 }};
782}
783
784#[doc(hidden)]
785#[macro_export]
786macro_rules! __color {
787 ($hex:literal) => {
788 $crate::Color::Hex($hex)
789 };
790 ($name:expr) => {{
791 use $crate::Color::*;
792 $name
793 }};
794}