From c4c23ccfd275d5d64bb5ae3e23822a649d6cfc5d Mon Sep 17 00:00:00 2001 From: Martin Preuss Date: Wed, 1 Oct 2025 23:10:41 +0200 Subject: [PATCH] use correct min/max values from axis instead of subgraph. subgraph contains the max/min values of the datasets while axis stores the visible max/min values (i.e. spanned by labeled tick axis). --- src/lib/aqdiagram/graph/w_viewport.c | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/src/lib/aqdiagram/graph/w_viewport.c b/src/lib/aqdiagram/graph/w_viewport.c index 8db3410..11ad098 100644 --- a/src/lib/aqdiagram/graph/w_viewport.c +++ b/src/lib/aqdiagram/graph/w_viewport.c @@ -18,6 +18,11 @@ +#define AQDG_WIDGET_VIEWPORT_TICK_MIN_X 10 +#define AQDG_WIDGET_VIEWPORT_TICK_MIN_Y 20 + + + /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ @@ -127,13 +132,14 @@ void _drawCurves(AQDG_OBJECT *o, AQDG_DRAW_CONTEXT *dc) const AQDG_GRAPH_SUBGRAPH *subGraph; int penIdx=AQDG_GRAPHWIDGET_PEN_IDX_CURVE0; - DBG_ERROR(NULL, "Draw curves"); xo=GWEN_INHERIT_GETDATA(AQDG_OBJECT, AQDG_WIDGET_VIEWPORT, o); graph=AQDG_GraphWidget_GetGraph(xo->graphObject); subGraphList=AQDG_Graph_GetSubGraphList(graph); subGraph=subGraphList?AQDG_Graph_SubGraph_List_First(subGraphList):NULL; while (subGraph) { + const AQDG_GRAPH_AXIS *xAxis; + const AQDG_GRAPH_AXIS *yAxis; double minValueX; double maxValueX; double minValueY; @@ -141,10 +147,12 @@ void _drawCurves(AQDG_OBJECT *o, AQDG_DRAW_CONTEXT *dc) const AQDG_GRAPH_CURVE_LIST *curveList; const AQDG_GRAPH_CURVE *curve; - minValueX=AQDG_Graph_SubGraph_GetMinValueX(subGraph); - maxValueX=AQDG_Graph_SubGraph_GetMaxValueX(subGraph); - minValueY=AQDG_Graph_SubGraph_GetMinValueY(subGraph); - maxValueY=AQDG_Graph_SubGraph_GetMaxValueY(subGraph); + xAxis=AQDG_Graph_GetAxisByIndex(graph, AQDG_Graph_SubGraph_GetIndexAxisX(subGraph)); + yAxis=AQDG_Graph_GetAxisByIndex(graph, AQDG_Graph_SubGraph_GetIndexAxisY(subGraph)); + minValueX=AQDG_Graph_Axis_GetMinValue(xAxis); + maxValueX=AQDG_Graph_Axis_GetMaxValue(xAxis); + minValueY=AQDG_Graph_Axis_GetMinValue(yAxis); + maxValueY=AQDG_Graph_Axis_GetMaxValue(yAxis); curveList=AQDG_Graph_SubGraph_GetCurves(subGraph); curve=curveList?AQDG_Graph_Curve_List_First(curveList):NULL; @@ -170,7 +178,6 @@ void _drawCurve(AQDG_OBJECT *o, AQDG_DRAW_CONTEXT *dc, const AQDG_GRAPH_CURVE *c double minValueX, double maxValueX, double minValueY, double maxValueY, int pen) { - DBG_ERROR(NULL, "Draw curve"); switch(AQDG_Graph_Curve_GetGraphType(curve)) { case AQDG_GRAPH_TYPE_LINE: _drawCurveLines(o, dc, curve, minValueX, maxValueX, minValueY, maxValueY, pen); @@ -302,7 +309,7 @@ void _drawVerticalGrid(AQDG_OBJECT *o, AQDG_DRAW_CONTEXT *dc) maxValue=AQDG_Graph_Axis_GetMaxValue(axis); pen1=AQDG_GraphWidget_GetPen(xo->graphObject, AQDG_GRAPHWIDGET_PEN_IDX_GRID1); pen2=AQDG_GraphWidget_GetPen(xo->graphObject, AQDG_GRAPHWIDGET_PEN_IDX_GRID2); - showLevel1=(_screenDistBetweenLevelTicksX(tickList, 1, contentSize, minValue, maxValue)>15)?1:0; + showLevel1=(_screenDistBetweenLevelTicksX(tickList, 1, contentSize, minValue, maxValue)>AQDG_WIDGET_VIEWPORT_TICK_MIN_X)?1:0; tick=AQDG_Graph_Tick_List_First(tickList); while(tick) { @@ -361,7 +368,7 @@ void _drawHorizontalGrid(AQDG_OBJECT *o, AQDG_DRAW_CONTEXT *dc) maxValue=AQDG_Graph_Axis_GetMaxValue(axis); pen1=AQDG_GraphWidget_GetPen(xo->graphObject, AQDG_GRAPHWIDGET_PEN_IDX_GRID1); pen2=AQDG_GraphWidget_GetPen(xo->graphObject, AQDG_GRAPHWIDGET_PEN_IDX_GRID2); - showLevel1=(_screenDistBetweenLevelTicksY(tickList, 1, contentSize, minValue, maxValue)>15)?1:0; + showLevel1=(_screenDistBetweenLevelTicksY(tickList, 1, contentSize, minValue, maxValue)>AQDG_WIDGET_VIEWPORT_TICK_MIN_Y)?1:0; tick=AQDG_Graph_Tick_List_First(tickList); while(tick) { @@ -392,9 +399,7 @@ int _screenDistBetweenLevelTicksX(const AQDG_GRAPH_TICK_LIST *tickList, int lvl, int pts; v=AQDG_Graph_Tick_List_DistanceBetweenTicks(tickList, lvl); - DBG_ERROR(NULL, "Value diff: %.2f", v); pts=(v*(contentSize/(maxValue-minValue))); - DBG_ERROR(NULL, "Point diff: %d", pts); return pts; } @@ -407,9 +412,7 @@ int _screenDistBetweenLevelTicksY(const AQDG_GRAPH_TICK_LIST *tickList, int lvl, int pts; v=AQDG_Graph_Tick_List_DistanceBetweenTicks(tickList, lvl); - DBG_ERROR(NULL, "Value diff: %.2f", v); pts=(v*(contentSize/(maxValue-minValue))); - DBG_ERROR(NULL, "Point diff: %d", pts); return pts; }