[graphics] Axe default x|y|zlabels & title font sizes better tuned
[scilab.git] / scilab / modules / graphics / src / c / Axes.c
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 1998-2000 - ENPC - Jean-Philippe Chancelier
4  * Copyright (C) 2006 - INRIA - Jean-Baptiste Silvy
5  * Copyright (C) 2010-2012 - DIGITEO - Manuel Juliachs
6  *
7  * Copyright (C) 2012 - 2016 - Scilab Enterprises
8  *
9  * This file is hereby licensed under the terms of the GNU GPL v2.0,
10  * pursuant to article 5.3.4 of the CeCILL v.2.1.
11  * This file was originally licensed under the terms of the CeCILL v2.1,
12  * and continues to be available under such terms.
13  * For more information, see the COPYING file which you should have received
14  * along with this program.
15  *
16  */
17
18
19 /*------------------------------------------------------------------------
20  *    Graphic library
21  --------------------------------------------------------------------------*/
22 /*------------------------------------------------------------------------
23  * Axis drawing for 2d plots
24  *--------------------------------------------------------------------------*/
25
26 #include <string.h>
27 #include "Axes.h"
28 #include "DestroyObjects.h"
29 #include "InitObjects.h"
30 #include "SetProperty.h"
31 #include "axesScale.h"
32 #include "CurrentSubwin.h"
33
34 #include "GetProperty.h"
35 #include "HandleManagement.h"
36
37 #include "getGraphicObjectProperty.h"
38 #include "setGraphicObjectProperty.h"
39 #include "graphicObjectProperties.h"
40 #include "AxesModel.h"
41 #include "CurrentSubwin.h"
42
43 #include "deleteGraphicObject.h"
44 /*--------------------------------------------------------------------------------*/
45 static void initSubWinAngles(int iSubWinUID);
46 static void initSubWinBounds(int iSubWinUID);
47 /*--------------------------------------------------------------------------------*/
48 /* reinit a subwindow (but don't change position) */
49 static void reinitSubWin(int iSubWinUID)
50 {
51     int visible = 0;
52     int firstPlot = 0;
53     int axisLocation = 0;
54     int iLabelUID = 0;
55     int iChildrenCount = 0;
56     int *piChildrenCount = &iChildrenCount;
57     int i = 0;
58     int* piChildrenUID = NULL;
59
60     /* Deletes the Axes' children */
61     getGraphicObjectProperty(iSubWinUID, __GO_CHILDREN_COUNT__, jni_int, (void **) &piChildrenCount);
62
63     if (iChildrenCount != 0)
64     {
65         getGraphicObjectProperty(iSubWinUID, __GO_CHILDREN__, jni_int_vector, (void **) &piChildrenUID);
66
67         for (i = 0 ; i < iChildrenCount ; ++i)
68         {
69             deleteGraphicObject(piChildrenUID[i]);
70         }
71     }
72
73     initSubWinBounds(iSubWinUID);
74
75     iLabelUID = initLabel(iSubWinUID, __GO_TITLE__);
76     setGraphicObjectProperty(iSubWinUID, __GO_TITLE__, &iLabelUID, jni_int, 1);
77
78     iLabelUID = initLabel(iSubWinUID, __GO_X_AXIS_LABEL__);
79     setGraphicObjectProperty(iSubWinUID, __GO_X_AXIS_LABEL__, &iLabelUID, jni_int, 1);
80
81     iLabelUID = initLabel(iSubWinUID, __GO_Y_AXIS_LABEL__);
82     setGraphicObjectProperty(iSubWinUID, __GO_Y_AXIS_LABEL__, &iLabelUID, jni_int, 1);
83
84     iLabelUID = initLabel(iSubWinUID, __GO_Z_AXIS_LABEL__);
85     setGraphicObjectProperty(iSubWinUID, __GO_Z_AXIS_LABEL__, &iLabelUID, jni_int, 1);
86
87     /* bottom */
88     axisLocation = 0;
89     setGraphicObjectProperty(iSubWinUID, __GO_X_AXIS_LOCATION__, &axisLocation, jni_int, 1);
90     /* left */
91     axisLocation = 4;
92     setGraphicObjectProperty(iSubWinUID, __GO_Y_AXIS_LOCATION__, &axisLocation, jni_int, 1);
93
94     visible = 1;
95     setGraphicObjectProperty(iSubWinUID, __GO_VISIBLE__, &visible, jni_bool, 1);
96     firstPlot = 1;
97     setGraphicObjectProperty(iSubWinUID, __GO_FIRST_PLOT__, &firstPlot, jni_bool, 1);
98
99     initSubWinAngles(iSubWinUID);
100 }
101 /*--------------------------------------------------------------------------------*/
102 /* reinit the viewing angles of a subwindow */
103 static void initSubWinAngles(int iSubWinUID)
104 {
105     int iViewType = 0;
106     int* piViewType = &iViewType;
107     double* rotationAngles = NULL;
108     int iAxesModelUID = getAxesModel();
109
110     getGraphicObjectProperty(iAxesModelUID, __GO_VIEW__, jni_int, (void **) &piViewType);
111     setGraphicObjectProperty(iSubWinUID, __GO_VIEW__, &iViewType, jni_int, 1);
112
113     getGraphicObjectProperty(iAxesModelUID, __GO_ROTATION_ANGLES__, jni_double_vector, (void **) &rotationAngles);
114     setGraphicObjectProperty(iSubWinUID, __GO_ROTATION_ANGLES__, rotationAngles, jni_double_vector, 2);
115
116     getGraphicObjectProperty(iAxesModelUID, __GO_ROTATION_ANGLES_3D__, jni_double_vector, (void **) &rotationAngles);
117     setGraphicObjectProperty(iSubWinUID, __GO_ROTATION_ANGLES_3D__, rotationAngles, jni_double_vector, 2);
118 }
119
120 /*--------------------------------------------------------------------------------*/
121 /* set the data_bounds of the axes to the default value */
122 static void initSubWinBounds(int iSubWinUID)
123 {
124     double* dataBounds = NULL;
125     double* realDataBounds = NULL;
126     int iAxesModelUID = getAxesModel();
127     int linLogFlag = 0;
128
129     setGraphicObjectProperty(iSubWinUID, __GO_X_AXIS_LOG_FLAG__, &linLogFlag, jni_bool, 1);
130     setGraphicObjectProperty(iSubWinUID, __GO_Y_AXIS_LOG_FLAG__, &linLogFlag, jni_bool, 1);
131     setGraphicObjectProperty(iSubWinUID, __GO_Z_AXIS_LOG_FLAG__, &linLogFlag, jni_bool, 1);
132
133     getGraphicObjectProperty(iAxesModelUID, __GO_DATA_BOUNDS__, jni_double_vector, (void **)&dataBounds);
134     setGraphicObjectProperty(iSubWinUID, __GO_DATA_BOUNDS__, dataBounds, jni_double_vector, 6);
135
136     getGraphicObjectProperty(iAxesModelUID, __GO_REAL_DATA_BOUNDS__, jni_double_vector, (void **)&realDataBounds);
137     setGraphicObjectProperty(iSubWinUID, __GO_REAL_DATA_BOUNDS__, realDataBounds, jni_double_vector, 6);
138 }
139 /*--------------------------------------------------------------------------------*/
140 /* reinit the selected subwindow if the auto_clear property is set to on */
141 /* return TRUE if the window has been redrawn */
142 BOOL checkRedrawing(void)
143 {
144     int iAutoClear = 0;
145     int* piAutoClear = &iAutoClear;
146
147     //  nbCheckRedraw++;
148     //  fprintf(stderr, "[DEBUG] checkRedrawing : %d\n", nbCheckRedraw);
149     int iSubWinID = getCurrentSubWin();
150
151     getGraphicObjectProperty(iSubWinID, __GO_AUTO_CLEAR__, jni_bool, (void **)&piAutoClear);
152
153     if (iAutoClear)
154     {
155         reinitSubWin(iSubWinID);
156         return TRUE;
157     }
158
159     return FALSE;
160 }
161 /*--------------------------------------------------------------------------------*/
162 sciLegendPlace propertyNameToLegendPlace(const char * string)
163 {
164     if (strcmp(string, "in_upper_right") == 0)
165     {
166         return SCI_LEGEND_IN_UPPER_RIGHT;
167     }
168     else if (strcmp(string, "in_upper_left") == 0)
169     {
170         return SCI_LEGEND_IN_UPPER_LEFT;
171     }
172     else if (strcmp(string, "in_lower_right") == 0)
173     {
174         return SCI_LEGEND_IN_LOWER_RIGHT;
175     }
176     else if (strcmp(string, "in_lower_left") == 0)
177     {
178         return SCI_LEGEND_IN_LOWER_LEFT;
179     }
180     else if (strcmp(string, "out_upper_right") == 0)
181     {
182         return SCI_LEGEND_OUT_UPPER_RIGHT;
183     }
184     else if (strcmp(string, "out_upper_left") == 0)
185     {
186         return SCI_LEGEND_OUT_UPPER_LEFT;
187     }
188     else if (strcmp(string, "out_lower_right") == 0)
189     {
190         return SCI_LEGEND_OUT_LOWER_RIGHT;
191     }
192     else if (strcmp(string, "out_lower_left") == 0)
193     {
194         return SCI_LEGEND_OUT_LOWER_LEFT;
195     }
196     else if (strcmp(string, "upper_caption") == 0)
197     {
198         return SCI_LEGEND_UPPER_CAPTION;
199     }
200     else if (strcmp(string, "lower_caption") == 0)
201     {
202         return SCI_LEGEND_LOWER_CAPTION;
203     }
204     else if (strcmp(string, "by_coordinates") == 0)
205     {
206         return SCI_LEGEND_BY_COORDINATES;
207     }
208     else
209     {
210         return SCI_LEGEND_POSITION_UNSPECIFIED;
211     }
212 }
213 /*--------------------------------------------------------------------------------*/
214 /*
215  * Converts a boolean log flag to the character format
216  */
217 char getTextLogFlag(int logFlag)
218 {
219     if (logFlag)
220     {
221         return 'l';
222     }
223     else
224     {
225         return 'n';
226     }
227 }
228 /*--------------------------------------------------------------------------------*/
229 /*
230  * Converts a character log flag to the equivalent boolean
231  */
232 int getBooleanLogFlag(char logFlag)
233 {
234     if (logFlag == 'l')
235     {
236         return 1;
237     }
238     else
239     {
240         return 0;
241     }
242 }
243 /*--------------------------------------------------------------------------------*/
244