[chronojump] RaceAnalyzer shows triggers on capture tab cairo graphs



commit f09a6ffe34aaf6980a087d6feddf69ca6bd4f971
Author: Xavier de Blas <xaviblas gmail com>
Date:   Wed Feb 16 13:19:37 2022 +0100

    RaceAnalyzer shows triggers on capture tab cairo graphs

 src/gui/app1/runEncoder.cs    | 12 ++++++++----
 src/gui/cairo/generic.cs      | 29 ++++++++++++++++++++++++++++-
 src/gui/cairo/raceAnalyzer.cs |  6 +++++-
 src/gui/cairo/xy.cs           |  2 +-
 src/gui/trigger.cs            |  2 +-
 5 files changed, 43 insertions(+), 8 deletions(-)
---
diff --git a/src/gui/app1/runEncoder.cs b/src/gui/app1/runEncoder.cs
index 8bc993744..75c85395a 100644
--- a/src/gui/app1/runEncoder.cs
+++ b/src/gui/app1/runEncoder.cs
@@ -455,7 +455,8 @@ public partial class ChronoJumpWindow
 
                treeview_raceAnalyzer = UtilGtk.RemoveColumns(treeview_raceAnalyzer);
                button_raceAnalyzer_table_save.Sensitive = false;
-               clearRaceAnalyzerTriggers();
+               triggerListRunEncoder = new TriggerList();
+               clearRaceAnalyzerTriggersFromTextView();
 
                button_run_encoder_analyze_options_close_and_analyze.Sensitive = false;
                button_run_encoder_analyze_analyze.Sensitive = false;
@@ -2256,7 +2257,8 @@ public partial class ChronoJumpWindow
                                        verticalLinesUs_2l, true);
 
                cairoGraphRaceAnalyzer_dt.DoSendingList (preferences.fontType.ToString(),
-                               cairoGraphRaceAnalyzerPoints_dt_l, forceRedraw, CairoXY.PlotTypes.LINES);
+                               cairoGraphRaceAnalyzerPoints_dt_l, triggerListRunEncoder,
+                               forceRedraw, CairoXY.PlotTypes.LINES);
        }
        private void updateRaceAnalyzerCaptureSpeedTime(bool forceRedraw)
        {
@@ -2277,7 +2279,8 @@ public partial class ChronoJumpWindow
                                        verticalLinesUs_2l, false);
 
                cairoGraphRaceAnalyzer_st.DoSendingList (preferences.fontType.ToString(),
-                               cairoGraphRaceAnalyzerPoints_st_l, forceRedraw, CairoXY.PlotTypes.LINES);
+                               cairoGraphRaceAnalyzerPoints_st_l, triggerListRunEncoder,
+                               forceRedraw, CairoXY.PlotTypes.LINES);
        }
        private void updateRaceAnalyzerCaptureAccelTime(bool forceRedraw)
        {
@@ -2301,7 +2304,8 @@ public partial class ChronoJumpWindow
                                        verticalLinesUs_2l, false);
 
                cairoGraphRaceAnalyzer_at.DoSendingList (preferences.fontType.ToString(),
-                               cairoGraphRaceAnalyzerPoints_at_l, forceRedraw, CairoXY.PlotTypes.LINES);
+                               cairoGraphRaceAnalyzerPoints_at_l, triggerListRunEncoder,
+                               forceRedraw, CairoXY.PlotTypes.LINES);
        }
 
        private void on_button_race_analyzer_capture_save_image_clicked (object o, EventArgs args)
diff --git a/src/gui/cairo/generic.cs b/src/gui/cairo/generic.cs
index 767d2b6c2..b50280983 100644
--- a/src/gui/cairo/generic.cs
+++ b/src/gui/cairo/generic.cs
@@ -40,6 +40,11 @@ public abstract class CairoGeneric
        protected string font;
        protected int textHeight = 12;
 
+       Cairo.Color green = colorFromRGB(0, 200, 0);
+       Cairo.Color red = colorFromRGB(200, 0, 0);
+       Cairo.Color black = colorFromRGB(0, 0, 0);
+
+
        /*
           need to dispose because Cairo does not clean ok on win and mac:
           Don’t forget to manually dispose the Context and the target Surface at the end of the expose 
event. Automatic garbage collecting is not yet 100% working in Cairo.
@@ -54,7 +59,7 @@ public abstract class CairoGeneric
        }
 
        //0 - 255
-       protected Cairo.Color colorFromRGB(int red, int green, int blue)
+       protected static Cairo.Color colorFromRGB(int red, int green, int blue)
        {
                return new Cairo.Color(red/256.0, green/256.0, blue/256.0);
        }
@@ -172,6 +177,28 @@ public abstract class CairoGeneric
                //LogB.Information("pvgl fontH: " + fontH.ToString());
        }
 
+       protected void paintVerticalTriggerLine (Cairo.Context g, Trigger trigger, int fontH)
+       {
+               if(fontH < 1)
+                       fontH = 1;
+
+               if(trigger.InOut)
+                       g.SetSourceColor(green);
+               else
+                       g.SetSourceColor(red);
+
+               double triggerInSeconds = UtilAll.DivideSafe(trigger.Us, 1000000);
+               double xtemp = calculatePaintX(triggerInSeconds);
+               LogB.Information(string.Format("trigger.Us:{0}, xtemp:{1}", triggerInSeconds, xtemp));
+               g.MoveTo(xtemp, topMargin);
+               g.LineTo(xtemp, graphHeight - bottomMargin);
+               g.Stroke ();
+
+               printText(xtemp, graphHeight -.8*bottomMargin, 0, fontH, 
Util.TrimDecimals(triggerInSeconds,1), g, alignTypes.CENTER);
+
+               g.SetSourceColor(black);
+       }
+
        //horiz or vertical to manage spacement of arrow points and tip draw
        protected void plotArrowPassingRealPoints (Cairo.Context g, Cairo.Color color,
                        double ax, double ay, double bx, double by, bool horiz, bool doubleTip, int spacement)
diff --git a/src/gui/cairo/raceAnalyzer.cs b/src/gui/cairo/raceAnalyzer.cs
index 77e1b898f..4ebd1cc84 100644
--- a/src/gui/cairo/raceAnalyzer.cs
+++ b/src/gui/cairo/raceAnalyzer.cs
@@ -89,7 +89,7 @@ public class CairoGraphRaceAnalyzer : CairoXY
                points_list_painted = 0;
        }
 
-       public override void DoSendingList (string font, List<PointF> points_list, bool forceRedraw, 
PlotTypes plotType)
+       public override void DoSendingList (string font, List<PointF> points_list, TriggerList triggerList, 
bool forceRedraw, PlotTypes plotType)
        {
                LogB.Information("at RaceAnalyzerGraph.Do");
 
@@ -207,6 +207,10 @@ public class CairoGraphRaceAnalyzer : CairoXY
                        }
                }
 
+               if(triggerList != null && triggerList.Count() > 0)
+                       foreach(Trigger trigger in triggerList.GetList())
+                               paintVerticalTriggerLine(g, trigger, textHeight -3);
+
                if(initGraphDone)
                        endGraphDisposing(g);
 
diff --git a/src/gui/cairo/xy.cs b/src/gui/cairo/xy.cs
index 8fb7909dd..02d077ebc 100644
--- a/src/gui/cairo/xy.cs
+++ b/src/gui/cairo/xy.cs
@@ -109,7 +109,7 @@ public abstract class CairoXY : CairoGeneric
        public virtual void Do(string font)
        {
        }
-       public virtual void DoSendingList(string font, List<PointF> points_list, bool forceRedraw, PlotTypes 
plotType)
+       public virtual void DoSendingList(string font, List<PointF> points_list, TriggerList triggerList, 
bool forceRedraw, PlotTypes plotType)
        {
        }
 
diff --git a/src/gui/trigger.cs b/src/gui/trigger.cs
index 8979e903a..404ca1c99 100644
--- a/src/gui/trigger.cs
+++ b/src/gui/trigger.cs
@@ -93,7 +93,7 @@ public partial class ChronoJumpWindow
                }
        }
 
-       private void clearRaceAnalyzerTriggers()
+       private void clearRaceAnalyzerTriggersFromTextView()
        {
                UtilGtk.TextViewClear(textview_run_encoder_triggers);
        }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]