1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
|
#ifndef HORIZONTALPLOTSCALE_H
#define HORIZONTALPLOTSCALE_H
#include <memory>
#include <string>
#include <vector>
#include <gtkmm/drawingarea.h>
class HorizontalPlotScale {
public:
HorizontalPlotScale();
~HorizontalPlotScale();
void SetPlotDimensions(double plotWidth, double plotHeight, double fromLeft, double fromTop, bool isSecondAxis)
{
_plotWidth = plotWidth;
_plotHeight = plotHeight;
_fromLeft = fromLeft;
_fromTop = fromTop;
_isSecondAxis = isSecondAxis;
_metricsAreInitialized = false;
}
double GetHeight(const Cairo::RefPtr<Cairo::Context>& cairo);
double GetRightMargin(const Cairo::RefPtr<Cairo::Context>& cairo);
void Draw(const Cairo::RefPtr<Cairo::Context>& cairo);
void InitializeNumericTicks(double min, double max);
void InitializeTimeTicks(double timeMin, double timeMax);
void InitializeTextTicks(const std::vector<std::string> &labels);
void InitializeLogarithmicTicks(double min, double max);
void SetDrawWithDescription(bool drawWithDescription)
{
_drawWithDescription = drawWithDescription;
_metricsAreInitialized = false;
}
void SetUnitsCaption(const std::string &caption)
{
_unitsCaption = caption;
_metricsAreInitialized = false;
}
void SetDescriptionFontSize(double fontSize)
{
_tickValuesFontSize = fontSize;
_metricsAreInitialized = false;
}
void SetTickValuesFontSize(double fontSize)
{
_tickValuesFontSize = fontSize;
_metricsAreInitialized = false;
}
void SetRotateUnits(bool rotate)
{
_rotateUnits = rotate;
_metricsAreInitialized = false;
}
double UnitToAxis(double unitValue) const;
double AxisToUnit(double axisValue) const;
private:
void drawDescription(const Cairo::RefPtr<Cairo::Context>& cairo);
bool ticksFit(const Cairo::RefPtr<Cairo::Context>& cairo);
void initializeMetrics(const Cairo::RefPtr<Cairo::Context>& cairo);
double _plotWidth, _plotHeight, _fromLeft, _fromTop;
bool _metricsAreInitialized;
double _height, _rightMargin;
std::unique_ptr<class TickSet> _tickSet;
bool _drawWithDescription;
std::string _unitsCaption;
double _descriptionFontSize;
double _tickValuesFontSize;
bool _rotateUnits, _isLogarithmic, _isSecondAxis;
};
#endif
|