From a2fc8cec5dedf079f86d4f7727430fe2de309a8a Mon Sep 17 00:00:00 2001 From: Martin Preuss Date: Tue, 23 Dec 2025 17:18:05 +0100 Subject: [PATCH] further improve handling of ticks for x axis. --- src/lib/aqdiagram/graph/w_viewport.c | 11 +++++++---- src/lib/aqdiagram/graph/w_xaxis.c | 9 ++++++--- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/lib/aqdiagram/graph/w_viewport.c b/src/lib/aqdiagram/graph/w_viewport.c index 9b6c7f3..8ab492c 100644 --- a/src/lib/aqdiagram/graph/w_viewport.c +++ b/src/lib/aqdiagram/graph/w_viewport.c @@ -226,6 +226,7 @@ void _drawVerticalGrid(AQDG_OBJECT *o, AQDG_DRAW_CONTEXT *dc) int y1; int y2; int showLevel1; + int showLevel2; y1=AQDG_Object_GetAbsoluteY(o)+AQDG_Object_GetBorderTop(o); y2=AQDG_Object_GetAbsoluteY(o)+AQDG_Object_GetHeight(o)-AQDG_Object_GetBorderBottom(o); @@ -236,20 +237,22 @@ void _drawVerticalGrid(AQDG_OBJECT *o, AQDG_DRAW_CONTEXT *dc) 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)>AQDG_WIDGET_VIEWPORT_TICK_MIN_X)?1:0; + showLevel2=(_screenDistBetweenLevelTicksY(tickList, 2, contentSize, minValue, maxValue)>AQDG_WIDGET_VIEWPORT_TICK_MIN_X)?1:0; tick=AQDG_Graph_Tick_List_First(tickList); while(tick) { double value; int xpos; + int tickLevel; value=AQDG_Graph_Tick_GetValue(tick); xpos=_calcHorizontalPos(value, contentSize, minValue, maxValue); xpos+=AQDG_Object_GetBorderLeft(o); - if (AQDG_Graph_Tick_GetLevel(tick)==0) + tickLevel=AQDG_Graph_Tick_GetLevel(tick); + if (tickLevel==0) AQDG_Draw_Context_DrawLine(dc, pen1, absX+xpos, y1, absX+xpos, y2); - else { - if (showLevel1) - AQDG_Draw_Context_DrawLine(dc, pen2, absX+xpos, y1, absX+xpos, y2); + else if ((tickLevel==1 && showLevel1) || ((tickLevel==2 && showLevel2))) { + AQDG_Draw_Context_DrawLine(dc, pen2, absX+xpos, y1, absX+xpos, y2); } tick=AQDG_Graph_Tick_List_Next(tick); } diff --git a/src/lib/aqdiagram/graph/w_xaxis.c b/src/lib/aqdiagram/graph/w_xaxis.c index 629eb75..aa24f8e 100644 --- a/src/lib/aqdiagram/graph/w_xaxis.c +++ b/src/lib/aqdiagram/graph/w_xaxis.c @@ -133,6 +133,7 @@ void _drawTicks(AQDG_OBJECT *o, AQDG_DRAW_CONTEXT *dc, int absY) int absX; int pen; int showLevel1; + int showLevel2; contentSize=AQDG_Object_GetWidth(o)-AQDG_Object_GetBorderLeft(o)-AQDG_Object_GetBorderRight(o); scaleSize=AQDG_AxisWidget_GetScaleSize(o); @@ -141,20 +142,22 @@ void _drawTicks(AQDG_OBJECT *o, AQDG_DRAW_CONTEXT *dc, int absY) maxValue=AQDG_AxisWidget_GetMaxValue(o); pen=AQDG_DrawableWidget_GetForegroundPenId(o); showLevel1=(_screenDistBetweenLevelTicks(tickList, 1, contentSize, minValue, maxValue)>AQDG_WIDGET_XAXIS_TICK_MIN_X)?1:0; + showLevel2=(_screenDistBetweenLevelTicks(tickList, 2, contentSize, minValue, maxValue)>AQDG_WIDGET_XAXIS_TICK_MIN_X)?1:0; tick=AQDG_Graph_Tick_List_First(tickList); while(tick) { double value; int xpos; + int tickLevel; value=AQDG_Graph_Tick_GetValue(tick); xpos=_calcHorizontalPos(value, contentSize, minValue, maxValue); xpos+=AQDG_Object_GetBorderLeft(o); + tickLevel=AQDG_Graph_Tick_GetLevel(tick); if (AQDG_Graph_Tick_GetLevel(tick)==0) AQDG_Draw_Context_DrawLine(dc, pen, absX+xpos, absY-(scaleSize/2), absX+xpos, absY+(scaleSize/2)); - else if (AQDG_Graph_Tick_GetLevel(tick)==1) { - if (showLevel1) - AQDG_Draw_Context_DrawLine(dc, pen, absX+xpos, absY-(scaleSize/4), absX+xpos, absY+(scaleSize/4)); + else if ((tickLevel==1 && showLevel1) || ((tickLevel==2 && showLevel2))) { + AQDG_Draw_Context_DrawLine(dc, pen, absX+xpos, absY-(scaleSize/4), absX+xpos, absY+(scaleSize/4)); } tick=AQDG_Graph_Tick_List_Next(tick); }