From 43af8a8e757444df7c6a1046babd3908e9ce010c Mon Sep 17 00:00:00 2001 From: Martin Preuss Date: Sun, 16 Jun 2024 21:56:18 +0200 Subject: [PATCH] more work on graph module. --- src/lib/aqdiagram/graph/0BUILD | 15 +- src/lib/aqdiagram/graph/o_graph.h | 102 ---------- src/lib/aqdiagram/graph/o_graph_p.h | 43 ---- .../aqdiagram/graph/{o_graph.c => w_graph.c} | 186 +++++++++++------- src/lib/aqdiagram/graph/w_graph.h | 102 ++++++++++ src/lib/aqdiagram/graph/w_graph_p.h | 33 ++++ .../graph/{o_xaxis.c => w_viewport.c} | 20 +- .../graph/{o_xaxis.h => w_viewport.h} | 10 +- src/lib/aqdiagram/graph/w_viewport_p.h | 23 +++ src/lib/aqdiagram/graph/w_xaxis.c | 68 +++++++ src/lib/aqdiagram/graph/w_xaxis.h | 20 ++ src/lib/aqdiagram/graph/w_xaxis_p.h | 24 +++ src/lib/aqdiagram/graph/w_yaxis.c | 68 +++++++ src/lib/aqdiagram/graph/w_yaxis.h | 20 ++ .../graph/{o_xaxis_p.h => w_yaxis_p.h} | 11 +- 15 files changed, 508 insertions(+), 237 deletions(-) delete mode 100644 src/lib/aqdiagram/graph/o_graph.h delete mode 100644 src/lib/aqdiagram/graph/o_graph_p.h rename src/lib/aqdiagram/graph/{o_graph.c => w_graph.c} (57%) create mode 100644 src/lib/aqdiagram/graph/w_graph.h create mode 100644 src/lib/aqdiagram/graph/w_graph_p.h rename src/lib/aqdiagram/graph/{o_xaxis.c => w_viewport.c} (72%) rename src/lib/aqdiagram/graph/{o_xaxis.h => w_viewport.h} (56%) create mode 100644 src/lib/aqdiagram/graph/w_viewport_p.h create mode 100644 src/lib/aqdiagram/graph/w_xaxis.c create mode 100644 src/lib/aqdiagram/graph/w_xaxis.h create mode 100644 src/lib/aqdiagram/graph/w_xaxis_p.h create mode 100644 src/lib/aqdiagram/graph/w_yaxis.c create mode 100644 src/lib/aqdiagram/graph/w_yaxis.h rename src/lib/aqdiagram/graph/{o_xaxis_p.h => w_yaxis_p.h} (68%) diff --git a/src/lib/aqdiagram/graph/0BUILD b/src/lib/aqdiagram/graph/0BUILD index 69cdeae..569a50b 100644 --- a/src/lib/aqdiagram/graph/0BUILD +++ b/src/lib/aqdiagram/graph/0BUILD @@ -78,13 +78,19 @@ graph.h - o_graph.h + w_graph.h + w_xaxis.h + w_yaxis.h + w_viewport.h graph_p.h - o_graph_p.h + w_graph_p.h + w_xaxis_p.h + w_yaxis_p.h + w_viewport_p.h @@ -92,7 +98,10 @@ $(local/typefiles) graph.c g_setup.c - o_graph.c + w_graph.c + w_xaxis.c + w_yaxis.c + w_viewport.c diff --git a/src/lib/aqdiagram/graph/o_graph.h b/src/lib/aqdiagram/graph/o_graph.h deleted file mode 100644 index ea442b5..0000000 --- a/src/lib/aqdiagram/graph/o_graph.h +++ /dev/null @@ -1,102 +0,0 @@ -/**************************************************************************** - * This file is part of the project AqDiagram. - * AqDiagram (c) by 2023 Martin Preuss, all rights reserved. - * - * The license for this file can be found in the file COPYING which you - * should have received along with this file. - ****************************************************************************/ - -#ifndef AQDG_GRAPH_O_GRAPH_H -#define AQDG_GRAPH_O_GRAPH_H - -#include -#include - - - -/* see https://www.rapidtables.com/web/color/RGB_Color.html */ -#define AQDG_GRAPHOBJECT_COL_BLACK ((uint32_t) 0x00000000) -#define AQDG_GRAPHOBJECT_COL_WHITE ((uint32_t) 0xFFFFFF00) -#define AQDG_GRAPHOBJECT_COL_RED ((uint32_t) 0xFF000000) -#define AQDG_GRAPHOBJECT_COL_LIME ((uint32_t) 0x00FF0000) -#define AQDG_GRAPHOBJECT_COL_BLUE ((uint32_t) 0x0000FF00) -#define AQDG_GRAPHOBJECT_COL_YELLOW ((uint32_t) 0xFFFF0000) -#define AQDG_GRAPHOBJECT_COL_CYAN ((uint32_t) 0x00FFFF00) -#define AQDG_GRAPHOBJECT_COL_MAGENTA ((uint32_t) 0xFF00FF00) -#define AQDG_GRAPHOBJECT_COL_SILVER ((uint32_t) 0xC0C0C000) -#define AQDG_GRAPHOBJECT_COL_GRAY ((uint32_t) 0x80808000) -#define AQDG_GRAPHOBJECT_COL_MAROON ((uint32_t) 0x80000000) -#define AQDG_GRAPHOBJECT_COL_OLIVE ((uint32_t) 0x80800000) -#define AQDG_GRAPHOBJECT_COL_GREEN ((uint32_t) 0x00800000) -#define AQDG_GRAPHOBJECT_COL_PURPLE ((uint32_t) 0x80008000) -#define AQDG_GRAPHOBJECT_COL_TEAL ((uint32_t) 0x00808000) -#define AQDG_GRAPHOBJECT_COL_NAVY ((uint32_t) 0x00008000) - -#define AQDG_GRAPHOBJECT_COL_ORANGE ((uint32_t) 0xFFA50000) -#define AQDG_GRAPHOBJECT_COL_GOLD ((uint32_t) 0xFFD70000) -#define AQDG_GRAPHOBJECT_COL_TURQUOISE ((uint32_t) 0x40E0D000) -#define AQDG_GRAPHOBJECT_COL_SKYBLUE ((uint32_t) 0x87CEEB00) -#define AQDG_GRAPHOBJECT_COL_DEEPPINK ((uint32_t) 0xFF149300) -#define AQDG_GRAPHOBJECT_COL_COMSILK ((uint32_t) 0xFFF8DC00) -#define AQDG_GRAPHOBJECT_COL_GAINSBORO ((uint32_t) 0xDCDCDC00) -#define AQDG_GRAPHOBJECT_COL_WHITESMOKE ((uint32_t) 0xF5F5F500) - - -enum { - AQDG_GRAPHOBJECT_PEN_IDX_TITLE=0, - AQDG_GRAPHOBJECT_PEN_IDX_SUBTITLE, - AQDG_GRAPHOBJECT_PEN_IDX_AXISLINE, - AQDG_GRAPHOBJECT_PEN_IDX_AXISLABEL, - AQDG_GRAPHOBJECT_PEN_IDX_TICKLABELMAINLEVEL, - AQDG_GRAPHOBJECT_PEN_IDX_TICKLABELSUBLEVEL, - AQDG_GRAPHOBJECT_PEN_IDX_TICKMAINLEVEL, - AQDG_GRAPHOBJECT_PEN_IDX_TICKSUBLEVEL, - AQDG_GRAPHOBJECT_PEN_IDX_GRAPHBACKGROUND, - AQDG_GRAPHOBJECT_PEN_IDX_GRID, - AQDG_GRAPHOBJECT_PEN_IDX_BACKGROUND, - AQDG_GRAPHOBJECT_PEN_IDX_CURVE0, - AQDG_GRAPHOBJECT_PEN_IDX_CURVE1, - AQDG_GRAPHOBJECT_PEN_IDX_CURVE2, - AQDG_GRAPHOBJECT_PEN_IDX_CURVE3, - AQDG_GRAPHOBJECT_PEN_IDX_CURVE4, - AQDG_GRAPHOBJECT_PEN_IDX_CURVE5, - AQDG_GRAPHOBJECT_PEN_IDX_CURVE6, - AQDG_GRAPHOBJECT_PEN_IDX_CURVE7, - - AQDG_GRAPHOBJECT_PEN_IDX_LAST -}; - - - -enum { - AQDG_GRAPHOBJECT_FONT_IDX_TITLE=0, - AQDG_GRAPHOBJECT_FONT_IDX_SUBTITLE, - AQDG_GRAPHOBJECT_FONT_IDX_AXISLABEL, - AQDG_GRAPHOBJECT_FONT_IDX_TICKLABELMAINLEVEL, - AQDG_GRAPHOBJECT_FONT_IDX_TICKLABELSUBLEVEL, - - AQDG_GRAPHOBJECT_FONT_IDX_LAST -}; - - - - -AQDG_OBJECT *AQDG_GraphObject_new(AQDG_OBJECT *parent, uint32_t options, AQDG_DRAW_CONTEXT *drawContext, AQDG_GRAPH *graph); - - -AQDG_GRAPH *AQDG_GraphObject_GetGraph(const AQDG_OBJECT *o); - - -int AQDG_GraphObject_GetPen(const AQDG_OBJECT *o, int idx); -void AQDG_GraphObject_SetPen(AQDG_OBJECT *o, int idx, int penId); - -int AQDG_GraphObject_GetFont(const AQDG_OBJECT *o, int idx); -void AQDG_GraphObject_SetFont(AQDG_OBJECT *o, int idx, int fontId); - -int AQDG_GraphObject_CreatePenFromDb(AQDG_OBJECT *o, GWEN_DB_NODE *db, const char *name, uint32_t defColor, int defWidth, int defDash); -int AQDG_GraphObject_CreateFontFromDb(AQDG_OBJECT *o, GWEN_DB_NODE *db, const char *name, int defaultFontSize); -uint32_t AQDG_GraphObject_GetStandardCurveColor(int idx, uint32_t defCol); - - -#endif - diff --git a/src/lib/aqdiagram/graph/o_graph_p.h b/src/lib/aqdiagram/graph/o_graph_p.h deleted file mode 100644 index 2897b6f..0000000 --- a/src/lib/aqdiagram/graph/o_graph_p.h +++ /dev/null @@ -1,43 +0,0 @@ -/**************************************************************************** - * This file is part of the project AqDiagram. - * AqDiagram (c) by 2023 Martin Preuss, all rights reserved. - * - * The license for this file can be found in the file COPYING which you - * should have received along with this file. - ****************************************************************************/ - -#ifndef AQDG_GRAPH_O_GRAPH_P_H -#define AQDG_GRAPH_O_GRAPH_P_H - -#include - - -#define AQDG_GRAPHOBJECT_NUMPENS AQDG_GRAPHOBJECT_PEN_IDX_LAST -#define AQDG_GRAPHOBJECT_NUMFONTS AQDG_GRAPHOBJECT_FONT_IDX_LAST - - - - - -typedef struct AQDG_OBJECT_GRAPH AQDG_OBJECT_GRAPH; -struct AQDG_OBJECT_GRAPH { - AQDG_GRAPH *graph; - - int penArray[AQDG_GRAPHOBJECT_NUMPENS]; - int fontArray[AQDG_GRAPHOBJECT_NUMFONTS]; - - - AQDG_OBJECT *xAxisTopObject; - AQDG_OBJECT *xAxisBottomObject; - AQDG_OBJECT *yAxisLeftObject; - AQDG_OBJECT *yAxisRightObject; - AQDG_OBJECT *graphViewport; - AQDG_OBJECT *legendObject; - AQDG_OBJECT *titleLabel; - AQDG_OBJECT *subtitleLabel; -}; - - - -#endif - diff --git a/src/lib/aqdiagram/graph/o_graph.c b/src/lib/aqdiagram/graph/w_graph.c similarity index 57% rename from src/lib/aqdiagram/graph/o_graph.c rename to src/lib/aqdiagram/graph/w_graph.c index 8367d08..92f23bb 100644 --- a/src/lib/aqdiagram/graph/o_graph.c +++ b/src/lib/aqdiagram/graph/w_graph.c @@ -10,12 +10,15 @@ # include #endif -#include "./o_graph_p.h" +#include "./w_graph_p.h" +#include "aqdiagram/graph/w_xaxis.h" +#include "aqdiagram/graph/w_yaxis.h" +#include "aqdiagram/graph/w_viewport.h" #include "aqdiagram/draw/w_vlayout.h" #include "aqdiagram/draw/w_mlayout.h" -#include "aqdiagram/draw/w_drawable.h" #include "aqdiagram/draw/w_label.h" +#include "aqdiagram/draw/w_drawable.h" #include @@ -27,7 +30,9 @@ */ static GWENHYWFAR_CB void _freeData(void *bp, void *p); -AQDG_OBJECT *_createLabel(AQDG_OBJECT *o, AQDG_OBJECT *parent, uint32_t options, const char *s, int penIdx, int fontIdx); +static void _setupObjectTree(AQDG_OBJECT *o); +static void _setupMatrix(AQDG_OBJECT *o); +static AQDG_OBJECT *_createLabel(AQDG_OBJECT *o, AQDG_OBJECT *parent, uint32_t options, const char *s, int penIdx, int fontIdx); @@ -37,14 +42,14 @@ AQDG_OBJECT *_createLabel(AQDG_OBJECT *o, AQDG_OBJECT *parent, uint32_t options, */ static uint32_t _curveColors[]={ - AQDG_GRAPHOBJECT_COL_LIME, - AQDG_GRAPHOBJECT_COL_BLUE, - AQDG_GRAPHOBJECT_COL_CYAN, - AQDG_GRAPHOBJECT_COL_MAGENTA, - AQDG_GRAPHOBJECT_COL_GREEN, - AQDG_GRAPHOBJECT_COL_TURQUOISE, - AQDG_GRAPHOBJECT_COL_DEEPPINK, - AQDG_GRAPHOBJECT_COL_NAVY + AQDG_GRAPHWIDGET_COL_LIME, + AQDG_GRAPHWIDGET_COL_BLUE, + AQDG_GRAPHWIDGET_COL_CYAN, + AQDG_GRAPHWIDGET_COL_MAGENTA, + AQDG_GRAPHWIDGET_COL_GREEN, + AQDG_GRAPHWIDGET_COL_TURQUOISE, + AQDG_GRAPHWIDGET_COL_DEEPPINK, + AQDG_GRAPHWIDGET_COL_NAVY }; @@ -54,32 +59,34 @@ static uint32_t _curveColors[]={ * ------------------------------------------------------------------------------------------------ */ -GWEN_INHERIT(AQDG_OBJECT, AQDG_OBJECT_GRAPH); +GWEN_INHERIT(AQDG_OBJECT, AQDG_WIDGET_GRAPH); -AQDG_OBJECT *AQDG_GraphObject_new(AQDG_OBJECT *parent, uint32_t options, AQDG_DRAW_CONTEXT *drawContext, AQDG_GRAPH *graph) +AQDG_OBJECT *AQDG_GraphWidget_new(AQDG_OBJECT *parent, uint32_t options, AQDG_DRAW_CONTEXT *drawContext, AQDG_GRAPH *graph) { - AQDG_OBJECT *object; - AQDG_OBJECT_GRAPH *xo; + AQDG_OBJECT *o; + AQDG_WIDGET_GRAPH *xo; - object=AQDG_VLayoutWidget_new(parent, options, drawContext); - AQDG_Object_SetName(object, "GraphObject"); - GWEN_NEW_OBJECT(AQDG_OBJECT_GRAPH, xo); - GWEN_INHERIT_SETDATA(AQDG_OBJECT, AQDG_OBJECT_GRAPH, object, xo, _freeData); + o=AQDG_VLayoutWidget_new(parent, options, drawContext); + AQDG_Object_SetName(o, "GraphWidget"); + GWEN_NEW_OBJECT(AQDG_WIDGET_GRAPH, xo); + GWEN_INHERIT_SETDATA(AQDG_OBJECT, AQDG_WIDGET_GRAPH, o, xo, _freeData); xo->graph=graph; - return object; + _setupObjectTree(o); + + return o; } GWENHYWFAR_CB void _freeData(void *bp, void *p) { - AQDG_OBJECT_GRAPH *xo; + AQDG_WIDGET_GRAPH *xo; - xo=(AQDG_OBJECT_GRAPH*) p; + xo=(AQDG_WIDGET_GRAPH*) p; AQDG_Graph_free(xo->graph); GWEN_FREE_OBJECT(p); } @@ -88,12 +95,10 @@ GWENHYWFAR_CB void _freeData(void *bp, void *p) void _setupObjectTree(AQDG_OBJECT *o) { - AQDG_OBJECT_GRAPH *xo; - AQDG_OBJECT *oMatrix; + AQDG_WIDGET_GRAPH *xo; const char *s; - int matrixColumns=1; - xo=GWEN_INHERIT_GETDATA(AQDG_OBJECT, AQDG_OBJECT_GRAPH, o); + xo=GWEN_INHERIT_GETDATA(AQDG_OBJECT, AQDG_WIDGET_GRAPH, o); s=AQDG_Graph_GetTitle(xo->graph); if (s) @@ -101,8 +106,8 @@ void _setupObjectTree(AQDG_OBJECT *o) o, AQDG_OBJECT_OPTIONS_STRETCHX | AQDG_OBJECT_OPTIONS_HALIGNCENTER, s, - AQDG_GRAPHOBJECT_PEN_IDX_TITLE, - AQDG_GRAPHOBJECT_FONT_IDX_TITLE); + AQDG_GRAPHWIDGET_PEN_IDX_TITLE, + AQDG_GRAPHWIDGET_FONT_IDX_TITLE); s=AQDG_Graph_GetSubTitle(xo->graph); if (s) @@ -110,8 +115,26 @@ void _setupObjectTree(AQDG_OBJECT *o) o, AQDG_OBJECT_OPTIONS_STRETCHX | AQDG_OBJECT_OPTIONS_HALIGNCENTER, s, - AQDG_GRAPHOBJECT_PEN_IDX_SUBTITLE, - AQDG_GRAPHOBJECT_FONT_IDX_SUBTITLE); + AQDG_GRAPHWIDGET_PEN_IDX_SUBTITLE, + AQDG_GRAPHWIDGET_FONT_IDX_SUBTITLE); + + _setupMatrix(o); + + /* TODO: add label for legend */ + +} + + + +void _setupMatrix(AQDG_OBJECT *o) +{ + AQDG_WIDGET_GRAPH *xo; + AQDG_DRAW_CONTEXT *dc; + AQDG_OBJECT *oMatrix; + int matrixColumns=1; + + xo=GWEN_INHERIT_GETDATA(AQDG_OBJECT, AQDG_WIDGET_GRAPH, o); + dc=AQDG_DrawableWidget_GetDrawContext(o); if (AQDG_Graph_GetAxisByIndex(xo->graph, AQDG_GRAPH_AXISPOS_LEFT)) matrixColumns++; @@ -121,7 +144,30 @@ void _setupObjectTree(AQDG_OBJECT *o) AQDG_OBJECT_OPTIONS_STRETCHX | AQDG_OBJECT_OPTIONS_STRETCHY, AQDG_DrawableWidget_GetDrawContext(o), matrixColumns); + /* first row: top x-axis */ + if (AQDG_Graph_GetAxisByIndex(xo->graph, AQDG_GRAPH_AXISPOS_TOP)) { + if (AQDG_Graph_GetAxisByIndex(xo->graph, AQDG_GRAPH_AXISPOS_LEFT)) + AQDG_DrawableWidget_new(oMatrix, 0, dc); + AQDG_XAxisWidget_new(oMatrix, AQDG_OBJECT_OPTIONS_STRETCHX, o, AQDG_GRAPH_AXISPOS_TOP); + if (AQDG_Graph_GetAxisByIndex(xo->graph, AQDG_GRAPH_AXISPOS_RIGHT)) + AQDG_DrawableWidget_new(oMatrix, 0, dc); + } + /* middle row: left y-axis, graph, right y-axis */ + if (AQDG_Graph_GetAxisByIndex(xo->graph, AQDG_GRAPH_AXISPOS_LEFT)) + AQDG_YAxisWidget_new(oMatrix, AQDG_OBJECT_OPTIONS_STRETCHY, o, AQDG_GRAPH_AXISPOS_LEFT); + AQDG_ViewportWidget_new(oMatrix, AQDG_OBJECT_OPTIONS_STRETCHX | AQDG_OBJECT_OPTIONS_STRETCHY, o); + if (AQDG_Graph_GetAxisByIndex(xo->graph, AQDG_GRAPH_AXISPOS_RIGHT)) + AQDG_YAxisWidget_new(oMatrix, AQDG_OBJECT_OPTIONS_STRETCHY, o, AQDG_GRAPH_AXISPOS_RIGHT); + + /* last row: bottom x-axis */ + if (AQDG_Graph_GetAxisByIndex(xo->graph, AQDG_GRAPH_AXISPOS_BOTTOM)) { + if (AQDG_Graph_GetAxisByIndex(xo->graph, AQDG_GRAPH_AXISPOS_LEFT)) + AQDG_DrawableWidget_new(oMatrix, 0, dc); + AQDG_XAxisWidget_new(oMatrix, AQDG_OBJECT_OPTIONS_STRETCHX, o, AQDG_GRAPH_AXISPOS_BOTTOM); + if (AQDG_Graph_GetAxisByIndex(xo->graph, AQDG_GRAPH_AXISPOS_RIGHT)) + AQDG_DrawableWidget_new(oMatrix, 0, dc); + } } @@ -132,8 +178,8 @@ AQDG_OBJECT *_createLabel(AQDG_OBJECT *o, AQDG_OBJECT *parent, uint32_t options, int penId; int fontId; - penId=AQDG_GraphObject_GetPen(o, penIdx); - fontId=AQDG_GraphObject_GetFont(o, fontIdx); + penId=AQDG_GraphWidget_GetPen(o, penIdx); + fontId=AQDG_GraphWidget_GetFont(o, fontIdx); oLabel=AQDG_LabelWidget_new(o, options, AQDG_DrawableWidget_GetDrawContext(o), s); if (penId!=-1) AQDG_DrawableWidget_SetForegroundPenId(oLabel, penId); @@ -148,13 +194,13 @@ AQDG_OBJECT *_createLabel(AQDG_OBJECT *o, AQDG_OBJECT *parent, uint32_t options, void _presetPens(AQDG_OBJECT *o) { if (o) { - AQDG_OBJECT_GRAPH *xo; + AQDG_WIDGET_GRAPH *xo; - xo=GWEN_INHERIT_GETDATA(AQDG_OBJECT, AQDG_OBJECT_GRAPH, o); + xo=GWEN_INHERIT_GETDATA(AQDG_OBJECT, AQDG_WIDGET_GRAPH, o); if (xo) { int i; - for (i=0; ipenArray[i]=-1; } } @@ -165,13 +211,13 @@ void _presetPens(AQDG_OBJECT *o) void _presetFonts(AQDG_OBJECT *o) { if (o) { - AQDG_OBJECT_GRAPH *xo; + AQDG_WIDGET_GRAPH *xo; - xo=GWEN_INHERIT_GETDATA(AQDG_OBJECT, AQDG_OBJECT_GRAPH, o); + xo=GWEN_INHERIT_GETDATA(AQDG_OBJECT, AQDG_WIDGET_GRAPH, o); if (xo) { int i; - for (i=0; ifontArray[i]=-1; } } @@ -182,15 +228,15 @@ void _presetFonts(AQDG_OBJECT *o) void _releasePens(AQDG_OBJECT *o) { if (o) { - AQDG_OBJECT_GRAPH *xo; + AQDG_WIDGET_GRAPH *xo; - xo=GWEN_INHERIT_GETDATA(AQDG_OBJECT, AQDG_OBJECT_GRAPH, o); + xo=GWEN_INHERIT_GETDATA(AQDG_OBJECT, AQDG_WIDGET_GRAPH, o); if (xo) { AQDG_DRAW_CONTEXT *dc; int i; dc=AQDG_DrawableWidget_GetDrawContext(o); - for (i=0; ipenArray[i]); xo->penArray[i]=-1; } @@ -203,15 +249,15 @@ void _releasePens(AQDG_OBJECT *o) void _releaseFonts(AQDG_OBJECT *o) { if (o) { - AQDG_OBJECT_GRAPH *xo; + AQDG_WIDGET_GRAPH *xo; - xo=GWEN_INHERIT_GETDATA(AQDG_OBJECT, AQDG_OBJECT_GRAPH, o); + xo=GWEN_INHERIT_GETDATA(AQDG_OBJECT, AQDG_WIDGET_GRAPH, o); if (xo) { AQDG_DRAW_CONTEXT *dc; int i; dc=AQDG_DrawableWidget_GetDrawContext(o); - for (i=0; ifontArray[i]); xo->fontArray[i]=-1; } @@ -224,12 +270,12 @@ void _releaseFonts(AQDG_OBJECT *o) -AQDG_GRAPH *AQDG_GraphObject_GetGraph(const AQDG_OBJECT *o) +AQDG_GRAPH *AQDG_GraphWidget_GetGraph(const AQDG_OBJECT *o) { if (o) { - AQDG_OBJECT_GRAPH *xo; + AQDG_WIDGET_GRAPH *xo; - xo=GWEN_INHERIT_GETDATA(AQDG_OBJECT, AQDG_OBJECT_GRAPH, o); + xo=GWEN_INHERIT_GETDATA(AQDG_OBJECT, AQDG_WIDGET_GRAPH, o); if (xo) return xo->graph; } @@ -239,12 +285,12 @@ AQDG_GRAPH *AQDG_GraphObject_GetGraph(const AQDG_OBJECT *o) -int AQDG_GraphObject_GetPen(const AQDG_OBJECT *o, int idx) +int AQDG_GraphWidget_GetPen(const AQDG_OBJECT *o, int idx) { - if (o && idxpenArray[idx]; } @@ -254,12 +300,12 @@ int AQDG_GraphObject_GetPen(const AQDG_OBJECT *o, int idx) -void AQDG_GraphObject_SetPen(AQDG_OBJECT *o, int idx, int penId) +void AQDG_GraphWidget_SetPen(AQDG_OBJECT *o, int idx, int penId) { - if (o && idxpenArray[idx]=penId; } @@ -267,12 +313,12 @@ void AQDG_GraphObject_SetPen(AQDG_OBJECT *o, int idx, int penId) -int AQDG_GraphObject_GetFont(const AQDG_OBJECT *o, int idx) +int AQDG_GraphWidget_GetFont(const AQDG_OBJECT *o, int idx) { - if (o && idxfontArray[idx]; } @@ -282,12 +328,12 @@ int AQDG_GraphObject_GetFont(const AQDG_OBJECT *o, int idx) -void AQDG_GraphObject_SetFont(AQDG_OBJECT *o, int idx, int fontId) +void AQDG_GraphWidget_SetFont(AQDG_OBJECT *o, int idx, int fontId) { - if (o && idxfontArray[idx]=fontId; } @@ -295,12 +341,12 @@ void AQDG_GraphObject_SetFont(AQDG_OBJECT *o, int idx, int fontId) -int AQDG_GraphObject_CreatePenFromDb(AQDG_OBJECT *o, GWEN_DB_NODE *db, const char *name, uint32_t defColor, int defWidth, int defDash) +int AQDG_GraphWidget_CreatePenFromDb(AQDG_OBJECT *o, GWEN_DB_NODE *db, const char *name, uint32_t defColor, int defWidth, int defDash) { if (o) { - AQDG_OBJECT_GRAPH *xo; + AQDG_WIDGET_GRAPH *xo; - xo=GWEN_INHERIT_GETDATA(AQDG_OBJECT, AQDG_OBJECT_GRAPH, o); + xo=GWEN_INHERIT_GETDATA(AQDG_OBJECT, AQDG_WIDGET_GRAPH, o); if (xo) { uint32_t frontColour; int lineWidth; @@ -344,12 +390,12 @@ int AQDG_GraphObject_CreatePenFromDb(AQDG_OBJECT *o, GWEN_DB_NODE *db, const cha -int AQDG_GraphObject_CreateFontFromDb(AQDG_OBJECT *o, GWEN_DB_NODE *db, const char *name, int defaultFontSize) +int AQDG_GraphWidget_CreateFontFromDb(AQDG_OBJECT *o, GWEN_DB_NODE *db, const char *name, int defaultFontSize) { if (o) { - AQDG_OBJECT_GRAPH *xo; + AQDG_WIDGET_GRAPH *xo; - xo=GWEN_INHERIT_GETDATA(AQDG_OBJECT, AQDG_OBJECT_GRAPH, o); + xo=GWEN_INHERIT_GETDATA(AQDG_OBJECT, AQDG_WIDGET_GRAPH, o); if (xo) { const char *fontName; int fontSize; @@ -397,7 +443,7 @@ int AQDG_GraphObject_CreateFontFromDb(AQDG_OBJECT *o, GWEN_DB_NODE *db, const ch -uint32_t AQDG_GraphObject_GetStandardCurveColor(int idx, uint32_t defCol) +uint32_t AQDG_GraphWidget_GetStandardCurveColor(int idx, uint32_t defCol) { if (idx +#include + + + +/* see https://www.rapidtables.com/web/color/RGB_Color.html */ +#define AQDG_GRAPHWIDGET_COL_BLACK ((uint32_t) 0x00000000) +#define AQDG_GRAPHWIDGET_COL_WHITE ((uint32_t) 0xFFFFFF00) +#define AQDG_GRAPHWIDGET_COL_RED ((uint32_t) 0xFF000000) +#define AQDG_GRAPHWIDGET_COL_LIME ((uint32_t) 0x00FF0000) +#define AQDG_GRAPHWIDGET_COL_BLUE ((uint32_t) 0x0000FF00) +#define AQDG_GRAPHWIDGET_COL_YELLOW ((uint32_t) 0xFFFF0000) +#define AQDG_GRAPHWIDGET_COL_CYAN ((uint32_t) 0x00FFFF00) +#define AQDG_GRAPHWIDGET_COL_MAGENTA ((uint32_t) 0xFF00FF00) +#define AQDG_GRAPHWIDGET_COL_SILVER ((uint32_t) 0xC0C0C000) +#define AQDG_GRAPHWIDGET_COL_GRAY ((uint32_t) 0x80808000) +#define AQDG_GRAPHWIDGET_COL_MAROON ((uint32_t) 0x80000000) +#define AQDG_GRAPHWIDGET_COL_OLIVE ((uint32_t) 0x80800000) +#define AQDG_GRAPHWIDGET_COL_GREEN ((uint32_t) 0x00800000) +#define AQDG_GRAPHWIDGET_COL_PURPLE ((uint32_t) 0x80008000) +#define AQDG_GRAPHWIDGET_COL_TEAL ((uint32_t) 0x00808000) +#define AQDG_GRAPHWIDGET_COL_NAVY ((uint32_t) 0x00008000) + +#define AQDG_GRAPHWIDGET_COL_ORANGE ((uint32_t) 0xFFA50000) +#define AQDG_GRAPHWIDGET_COL_GOLD ((uint32_t) 0xFFD70000) +#define AQDG_GRAPHWIDGET_COL_TURQUOISE ((uint32_t) 0x40E0D000) +#define AQDG_GRAPHWIDGET_COL_SKYBLUE ((uint32_t) 0x87CEEB00) +#define AQDG_GRAPHWIDGET_COL_DEEPPINK ((uint32_t) 0xFF149300) +#define AQDG_GRAPHWIDGET_COL_COMSILK ((uint32_t) 0xFFF8DC00) +#define AQDG_GRAPHWIDGET_COL_GAINSBORO ((uint32_t) 0xDCDCDC00) +#define AQDG_GRAPHWIDGET_COL_WHITESMOKE ((uint32_t) 0xF5F5F500) + + +enum { + AQDG_GRAPHWIDGET_PEN_IDX_TITLE=0, + AQDG_GRAPHWIDGET_PEN_IDX_SUBTITLE, + AQDG_GRAPHWIDGET_PEN_IDX_AXISLINE, + AQDG_GRAPHWIDGET_PEN_IDX_AXISLABEL, + AQDG_GRAPHWIDGET_PEN_IDX_TICKLABELMAINLEVEL, + AQDG_GRAPHWIDGET_PEN_IDX_TICKLABELSUBLEVEL, + AQDG_GRAPHWIDGET_PEN_IDX_TICKMAINLEVEL, + AQDG_GRAPHWIDGET_PEN_IDX_TICKSUBLEVEL, + AQDG_GRAPHWIDGET_PEN_IDX_GRAPHBACKGROUND, + AQDG_GRAPHWIDGET_PEN_IDX_GRID, + AQDG_GRAPHWIDGET_PEN_IDX_BACKGROUND, + AQDG_GRAPHWIDGET_PEN_IDX_CURVE0, + AQDG_GRAPHWIDGET_PEN_IDX_CURVE1, + AQDG_GRAPHWIDGET_PEN_IDX_CURVE2, + AQDG_GRAPHWIDGET_PEN_IDX_CURVE3, + AQDG_GRAPHWIDGET_PEN_IDX_CURVE4, + AQDG_GRAPHWIDGET_PEN_IDX_CURVE5, + AQDG_GRAPHWIDGET_PEN_IDX_CURVE6, + AQDG_GRAPHWIDGET_PEN_IDX_CURVE7, + + AQDG_GRAPHWIDGET_PEN_IDX_LAST +}; + + + +enum { + AQDG_GRAPHWIDGET_FONT_IDX_TITLE=0, + AQDG_GRAPHWIDGET_FONT_IDX_SUBTITLE, + AQDG_GRAPHWIDGET_FONT_IDX_AXISLABEL, + AQDG_GRAPHWIDGET_FONT_IDX_TICKLABELMAINLEVEL, + AQDG_GRAPHWIDGET_FONT_IDX_TICKLABELSUBLEVEL, + + AQDG_GRAPHWIDGET_FONT_IDX_LAST +}; + + + + +AQDG_OBJECT *AQDG_GraphWidget_new(AQDG_OBJECT *parent, uint32_t options, AQDG_DRAW_CONTEXT *drawContext, AQDG_GRAPH *graph); + + +AQDG_GRAPH *AQDG_GraphWidget_GetGraph(const AQDG_OBJECT *o); + + +int AQDG_GraphWidget_GetPen(const AQDG_OBJECT *o, int idx); +void AQDG_GraphWidget_SetPen(AQDG_OBJECT *o, int idx, int penId); + +int AQDG_GraphWidget_GetFont(const AQDG_OBJECT *o, int idx); +void AQDG_GraphWidget_SetFont(AQDG_OBJECT *o, int idx, int fontId); + +int AQDG_GraphWidget_CreatePenFromDb(AQDG_OBJECT *o, GWEN_DB_NODE *db, const char *name, uint32_t defColor, int defWidth, int defDash); +int AQDG_GraphWidget_CreateFontFromDb(AQDG_OBJECT *o, GWEN_DB_NODE *db, const char *name, int defaultFontSize); +uint32_t AQDG_GraphWidget_GetStandardCurveColor(int idx, uint32_t defCol); + + +#endif + diff --git a/src/lib/aqdiagram/graph/w_graph_p.h b/src/lib/aqdiagram/graph/w_graph_p.h new file mode 100644 index 0000000..8b54225 --- /dev/null +++ b/src/lib/aqdiagram/graph/w_graph_p.h @@ -0,0 +1,33 @@ +/**************************************************************************** + * This file is part of the project AqDiagram. + * AqDiagram (c) by 2023 Martin Preuss, all rights reserved. + * + * The license for this file can be found in the file COPYING which you + * should have received along with this file. + ****************************************************************************/ + +#ifndef AQDG_GRAPH_W_GRAPH_P_H +#define AQDG_GRAPH_W_GRAPH_P_H + +#include + + +#define AQDG_GRAPHWIDGET_NUMPENS AQDG_GRAPHWIDGET_PEN_IDX_LAST +#define AQDG_GRAPHWIDGET_NUMFONTS AQDG_GRAPHWIDGET_FONT_IDX_LAST + + + + + +typedef struct AQDG_WIDGET_GRAPH AQDG_WIDGET_GRAPH; +struct AQDG_WIDGET_GRAPH { + AQDG_GRAPH *graph; + + int penArray[AQDG_GRAPHWIDGET_NUMPENS]; + int fontArray[AQDG_GRAPHWIDGET_NUMFONTS]; +}; + + + +#endif + diff --git a/src/lib/aqdiagram/graph/o_xaxis.c b/src/lib/aqdiagram/graph/w_viewport.c similarity index 72% rename from src/lib/aqdiagram/graph/o_xaxis.c rename to src/lib/aqdiagram/graph/w_viewport.c index 9db4d78..20d98b4 100644 --- a/src/lib/aqdiagram/graph/o_xaxis.c +++ b/src/lib/aqdiagram/graph/w_viewport.c @@ -10,9 +10,11 @@ # include #endif -#include "./o_xaxis_p.h" +#include "./w_viewport_p.h" #include "aqdiagram/draw/w_drawable.h" +#include + /* ------------------------------------------------------------------------------------------------ @@ -29,19 +31,19 @@ static GWENHYWFAR_CB void _freeData(void *bp, void *p); * ------------------------------------------------------------------------------------------------ */ -GWEN_INHERIT(AQDG_OBJECT, AQDG_OBJECT_XAXIS); +GWEN_INHERIT(AQDG_OBJECT, AQDG_WIDGET_VIEWPORT); -AQDG_OBJECT *AQDG_XAxisObject_new(AQDG_OBJECT *parent, uint32_t options, AQDG_OBJECT *graphObject) +AQDG_OBJECT *AQDG_ViewportWidget_new(AQDG_OBJECT *parent, uint32_t options, AQDG_OBJECT *graphObject) { AQDG_OBJECT *o; - AQDG_OBJECT_XAXIS *xo; + AQDG_WIDGET_VIEWPORT *xo; o=AQDG_DrawableWidget_new(parent, options, AQDG_DrawableWidget_GetDrawContext(graphObject)); - AQDG_Object_SetName(object, "XAxisObject"); - GWEN_NEW_OBJECT(AQDG_OBJECT_XAXIS, xo); - GWEN_INHERIT_SETDATA(AQDG_OBJECT, AQDG_OBJECT_XAXIS, o, xo, _freeData); + AQDG_Object_SetName(o, "ViewportWidget"); + GWEN_NEW_OBJECT(AQDG_WIDGET_VIEWPORT, xo); + GWEN_INHERIT_SETDATA(AQDG_OBJECT, AQDG_WIDGET_VIEWPORT, o, xo, _freeData); xo->graphObject=graphObject; @@ -53,9 +55,9 @@ AQDG_OBJECT *AQDG_XAxisObject_new(AQDG_OBJECT *parent, uint32_t options, AQDG_OB GWENHYWFAR_CB void _freeData(void *bp, void *p) { - AQDG_OBJECT_XAXIS *xo; + AQDG_WIDGET_VIEWPORT *xo; - xo=(AQDG_OBJECT_XAXIS*) p; + xo=(AQDG_WIDGET_VIEWPORT*) p; GWEN_FREE_OBJECT(xo); } diff --git a/src/lib/aqdiagram/graph/o_xaxis.h b/src/lib/aqdiagram/graph/w_viewport.h similarity index 56% rename from src/lib/aqdiagram/graph/o_xaxis.h rename to src/lib/aqdiagram/graph/w_viewport.h index 4487df6..d935c62 100644 --- a/src/lib/aqdiagram/graph/o_xaxis.h +++ b/src/lib/aqdiagram/graph/w_viewport.h @@ -1,18 +1,18 @@ /**************************************************************************** * This file is part of the project AqDiagram. - * AqDiagram (c) by 2023 Martin Preuss, all rights reserved. + * AqDiagram (c) by 2024 Martin Preuss, all rights reserved. * * The license for this file can be found in the file COPYING which you * should have received along with this file. ****************************************************************************/ -#ifndef AQDG_GRAPH_O_XAXIS_H -#define AQDG_GRAPH_O_XAXIS_H +#ifndef AQDG_GRAPH_W_VIEWPORT_H +#define AQDG_GRAPH_W_VIEWPORT_H -#include +#include -AQDG_OBJECT *AQDG_XAxisObject_new(AQDG_OBJECT *parent, uint32_t options, AQDG_OBJECT *graphObject); +AQDG_OBJECT *AQDG_ViewportWidget_new(AQDG_OBJECT *parent, uint32_t options, AQDG_OBJECT *graphObject); diff --git a/src/lib/aqdiagram/graph/w_viewport_p.h b/src/lib/aqdiagram/graph/w_viewport_p.h new file mode 100644 index 0000000..895de74 --- /dev/null +++ b/src/lib/aqdiagram/graph/w_viewport_p.h @@ -0,0 +1,23 @@ +/**************************************************************************** + * This file is part of the project AqDiagram. + * AqDiagram (c) by 2024 Martin Preuss, all rights reserved. + * + * The license for this file can be found in the file COPYING which you + * should have received along with this file. + ****************************************************************************/ + +#ifndef AQDG_GRAPH_W_VIEWPORT_P_H +#define AQDG_GRAPH_W_VIEWPORT_P_H + +#include + + +typedef struct AQDG_WIDGET_VIEWPORT AQDG_WIDGET_VIEWPORT; +struct AQDG_WIDGET_VIEWPORT { + AQDG_OBJECT *graphObject; +}; + + + +#endif + diff --git a/src/lib/aqdiagram/graph/w_xaxis.c b/src/lib/aqdiagram/graph/w_xaxis.c new file mode 100644 index 0000000..bdeec56 --- /dev/null +++ b/src/lib/aqdiagram/graph/w_xaxis.c @@ -0,0 +1,68 @@ +/**************************************************************************** + * This file is part of the project AqDiagram. + * AqDiagram (c) by 2024 Martin Preuss, all rights reserved. + * + * The license for this file can be found in the file COPYING which you + * should have received along with this file. + ****************************************************************************/ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include "./w_xaxis_p.h" +#include "aqdiagram/draw/w_drawable.h" + +#include + + + +/* ------------------------------------------------------------------------------------------------ + * forward declarations + * ------------------------------------------------------------------------------------------------ + */ + +static GWENHYWFAR_CB void _freeData(void *bp, void *p); + + + +/* ------------------------------------------------------------------------------------------------ + * implementations + * ------------------------------------------------------------------------------------------------ + */ + +GWEN_INHERIT(AQDG_OBJECT, AQDG_WIDGET_XAXIS); + + + +AQDG_OBJECT *AQDG_XAxisWidget_new(AQDG_OBJECT *parent, uint32_t options, AQDG_OBJECT *graphObject, int axisIndex) +{ + AQDG_OBJECT *o; + AQDG_WIDGET_XAXIS *xo; + + o=AQDG_DrawableWidget_new(parent, options, AQDG_DrawableWidget_GetDrawContext(graphObject)); + AQDG_Object_SetName(o, "XAxisWidget"); + GWEN_NEW_OBJECT(AQDG_WIDGET_XAXIS, xo); + GWEN_INHERIT_SETDATA(AQDG_OBJECT, AQDG_WIDGET_XAXIS, o, xo, _freeData); + + xo->graphObject=graphObject; + xo->axisIndex=axisIndex; + + return o; +} + + + + +GWENHYWFAR_CB void _freeData(void *bp, void *p) +{ + AQDG_WIDGET_XAXIS *xo; + + xo=(AQDG_WIDGET_XAXIS*) p; + + GWEN_FREE_OBJECT(xo); +} + + + + diff --git a/src/lib/aqdiagram/graph/w_xaxis.h b/src/lib/aqdiagram/graph/w_xaxis.h new file mode 100644 index 0000000..22b7958 --- /dev/null +++ b/src/lib/aqdiagram/graph/w_xaxis.h @@ -0,0 +1,20 @@ +/**************************************************************************** + * This file is part of the project AqDiagram. + * AqDiagram (c) by 2024 Martin Preuss, all rights reserved. + * + * The license for this file can be found in the file COPYING which you + * should have received along with this file. + ****************************************************************************/ + +#ifndef AQDG_GRAPH_W_XAXIS_H +#define AQDG_GRAPH_W_XAXIS_H + +#include + + +AQDG_OBJECT *AQDG_XAxisWidget_new(AQDG_OBJECT *parent, uint32_t options, AQDG_OBJECT *graphObject, int axisIndex); + + + +#endif + diff --git a/src/lib/aqdiagram/graph/w_xaxis_p.h b/src/lib/aqdiagram/graph/w_xaxis_p.h new file mode 100644 index 0000000..e904b30 --- /dev/null +++ b/src/lib/aqdiagram/graph/w_xaxis_p.h @@ -0,0 +1,24 @@ +/**************************************************************************** + * This file is part of the project AqDiagram. + * AqDiagram (c) by 2024 Martin Preuss, all rights reserved. + * + * The license for this file can be found in the file COPYING which you + * should have received along with this file. + ****************************************************************************/ + +#ifndef AQDG_GRAPH_W_XAXIS_P_H +#define AQDG_GRAPH_W_XAXIS_P_H + +#include + + +typedef struct AQDG_WIDGET_XAXIS AQDG_WIDGET_XAXIS; +struct AQDG_WIDGET_XAXIS { + AQDG_OBJECT *graphObject; + int axisIndex; +}; + + + +#endif + diff --git a/src/lib/aqdiagram/graph/w_yaxis.c b/src/lib/aqdiagram/graph/w_yaxis.c new file mode 100644 index 0000000..e55f601 --- /dev/null +++ b/src/lib/aqdiagram/graph/w_yaxis.c @@ -0,0 +1,68 @@ +/**************************************************************************** + * This file is part of the project AqDiagram. + * AqDiagram (c) by 2024 Martin Preuss, all rights reserved. + * + * The license for this file can be found in the file COPYING which you + * should have received along with this file. + ****************************************************************************/ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include "./w_yaxis_p.h" +#include "aqdiagram/draw/w_drawable.h" + +#include + + + +/* ------------------------------------------------------------------------------------------------ + * forward declarations + * ------------------------------------------------------------------------------------------------ + */ + +static GWENHYWFAR_CB void _freeData(void *bp, void *p); + + + +/* ------------------------------------------------------------------------------------------------ + * implementations + * ------------------------------------------------------------------------------------------------ + */ + +GWEN_INHERIT(AQDG_OBJECT, AQDG_WIDGET_YAXIS); + + + +AQDG_OBJECT *AQDG_YAxisWidget_new(AQDG_OBJECT *parent, uint32_t options, AQDG_OBJECT *graphObject, int axisIndex) +{ + AQDG_OBJECT *o; + AQDG_WIDGET_YAXIS *xo; + + o=AQDG_DrawableWidget_new(parent, options, AQDG_DrawableWidget_GetDrawContext(graphObject)); + AQDG_Object_SetName(o, "XAxisWidget"); + GWEN_NEW_OBJECT(AQDG_WIDGET_YAXIS, xo); + GWEN_INHERIT_SETDATA(AQDG_OBJECT, AQDG_WIDGET_YAXIS, o, xo, _freeData); + + xo->graphObject=graphObject; + xo->axisIndex=axisIndex; + + return o; +} + + + + +GWENHYWFAR_CB void _freeData(void *bp, void *p) +{ + AQDG_WIDGET_YAXIS *xo; + + xo=(AQDG_WIDGET_YAXIS*) p; + + GWEN_FREE_OBJECT(xo); +} + + + + diff --git a/src/lib/aqdiagram/graph/w_yaxis.h b/src/lib/aqdiagram/graph/w_yaxis.h new file mode 100644 index 0000000..b5d6210 --- /dev/null +++ b/src/lib/aqdiagram/graph/w_yaxis.h @@ -0,0 +1,20 @@ +/**************************************************************************** + * This file is part of the project AqDiagram. + * AqDiagram (c) by 2024 Martin Preuss, all rights reserved. + * + * The license for this file can be found in the file COPYING which you + * should have received along with this file. + ****************************************************************************/ + +#ifndef AQDG_GRAPH_W_YAXIS_H +#define AQDG_GRAPH_W_YAXIS_H + +#include + + +AQDG_OBJECT *AQDG_YAxisWidget_new(AQDG_OBJECT *parent, uint32_t options, AQDG_OBJECT *graphObject, int axisIndex); + + + +#endif + diff --git a/src/lib/aqdiagram/graph/o_xaxis_p.h b/src/lib/aqdiagram/graph/w_yaxis_p.h similarity index 68% rename from src/lib/aqdiagram/graph/o_xaxis_p.h rename to src/lib/aqdiagram/graph/w_yaxis_p.h index c24ed84..7e1da2e 100644 --- a/src/lib/aqdiagram/graph/o_xaxis_p.h +++ b/src/lib/aqdiagram/graph/w_yaxis_p.h @@ -6,15 +6,16 @@ * should have received along with this file. ****************************************************************************/ -#ifndef AQDG_GRAPH_O_XAXIS_P_H -#define AQDG_GRAPH_O_XAXIS_P_H +#ifndef AQDG_GRAPH_W_YAXIS_P_H +#define AQDG_GRAPH_W_YAXIS_P_H -#include +#include -typedef struct AQDG_OBJECT_XAXIS AQDG_OBJECT_XAXIS; -struct AQDG_OBJECT_XAXIS { +typedef struct AQDG_WIDGET_YAXIS AQDG_WIDGET_YAXIS; +struct AQDG_WIDGET_YAXIS { AQDG_OBJECT *graphObject; + int axisIndex; };