diff --git a/JKQtPlotterBuildAllExamples.pro b/JKQtPlotterBuildAllExamples.pro
index ae549b9569..746ba921e0 100644
--- a/JKQtPlotterBuildAllExamples.pro
+++ b/JKQtPlotterBuildAllExamples.pro
@@ -1,6 +1,7 @@
TEMPLATE = subdirs
SUBDIRS += jkqtplotterlib \
+ jkqtplotterlib_sharedlib \
jkqtmathtext_simpletest \
jkqtplot_test \
jkqtplotter_simpletest \
@@ -8,31 +9,33 @@ SUBDIRS += jkqtplotterlib \
jkqtfastplotter_test
-jkqtplotterlib.file = lib/jkqtplotterlib.pro
+jkqtplotterlib.file = staticlib/jkqtplotterlib.pro
-jkqtmathtext_simpletest.subdir = test/jkqtmathtext_simpletest
+jkqtplotterlib_sharedlib.file = sharedlib/jkqtplotterlib_sharedlib.pro
+
+jkqtmathtext_simpletest.subdir = examples/jkqtmathtext_simpletest
jkqtmathtext_simpletest.depends = jkqtplotterlib
-jkqtmathtext_test.subdir = test/jkqtmathtext_test
+jkqtmathtext_test.subdir = examples/jkqtmathtext_test
jkqtmathtext_test.depends = jkqtplotterlib
-jkqtplot_test.subdir = test/jkqtplot_test
+jkqtplot_test.subdir = examples/jkqtplot_test
jkqtplot_test.depends = jkqtplotterlib
-jkqtplotter_simpletest.file = test/simpletest/jkqtplotter_simpletest.pro
+jkqtplotter_simpletest.file = examples/simpletest/jkqtplotter_simpletest.pro
jkqtplotter_simpletest.depends = jkqtplotterlib
-test_multiplot.file = test/test_multiplot/test_multiplot.pro
+test_multiplot.file = examples/test_multiplot/test_multiplot.pro
test_multiplot.depends = jkqtplotterlib
-jkqtfastplotter_test.file = $$PWD/test/jkqtfastplotter_test/jkqtfastplotter_test.pro
+jkqtfastplotter_test.file = $$PWD/examples/jkqtfastplotter_test/jkqtfastplotter_test.pro
jkqtfastplotter_test.depends = jkqtplotterlib
defineTest(addSimpleTest) {
test_name = $$1
SUBDIRS += jkqtplotter_simpletest_$${test_name}
- jkqtplotter_simpletest_$${test_name}.file = test/simpletest_$${test_name}/jkqtplotter_simpletest_$${test_name}.pro
+ jkqtplotter_simpletest_$${test_name}.file = examples/simpletest_$${test_name}/jkqtplotter_simpletest_$${test_name}.pro
jkqtplotter_simpletest_$${test_name}.depends = jkqtplotterlib
export (jkqtplotter_simpletest_$${test_name}.file)
diff --git a/README.md b/README.md
index acef83d6c3..16f9733880 100644
--- a/README.md
+++ b/README.md
@@ -1,8 +1,8 @@
# JKQtPlotter
This is an extensive library of function/data plotter classes for Qt (>= 4.7, tested with Qt up to 5.11).
-This software is licensed under the term of the GNU Lesser General Public License 2.1
-(LGPL 2.1) or above.
+This software is licensed under the term of the [GNU Lesser General Public License 2.1
+(LGPL 2.1)](https://github.com/jkriege2/JKQtPlotter/blob/master/LICENSE) or above.
## Continuous Integration Status
[![Build status](https://ci.appveyor.com/api/projects/status/vq2o9pfi97isxm2a/branch/master?svg=true)](https://ci.appveyor.com/project/jkriege2/jkqtplotter/branch/master)
@@ -11,6 +11,11 @@ This software is licensed under the term of the GNU Lesser General Public Licens
## Screenshots
[Screenshots directory](https://github.com/jkriege2/JKQtPlotter/tree/master/screenshots)
+## Building
+Building instructions can be found here:
+- include necessary files into QMake project: [`./lib/*.pri`](https://github.com/jkriege2/JKQtPlotter/tree/master/lib)
+- build a static library: [`./staticlib/*.pro`](https://github.com/jkriege2/JKQtPlotter/tree/master/staticlib)
+- build a shared library (DLL): [`./sharedlib/*.pro`](https://github.com/jkriege2/JKQtPlotter/tree/master/sharedlib)
## Examples
This section assembles some simple examples of usage.
@@ -21,49 +26,49 @@ All test-projects are Qt-projects that use qmake to build. You can load them int
| Screenshot | Description | Notes |
|:-------------:| ------------- | ------------- |
-| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest1_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/test/simpletest) | [Very Basic Example (Line Graph)](https://github.com/jkriege2/JKQtPlotter/tree/master/test/simpletest) | `JKQTPxyLineGraph`
C++-style QVector arrays of data |
-| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_speed_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/test/simpletest_speed) | [Line Graph with Live Data / Speed Test](https://github.com/jkriege2/JKQtPlotter/tree/master/test/simpletest_speed) | `JKQTPxyLineGraph`
external `std::array` data, not owned by datastore
live-data, measure plotting speed
tipps to increas plotting speed |
-| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_symbols_and_styles_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/test/simpletest_symbols_and_styles) | [Line Graph with Different Symbols and Line Styles](https://github.com/jkriege2/JKQtPlotter/tree/master/test/simpletest_symbols_and_styles) | `JKQTPxyLineGraph`
C++ vector of data
setting line styles and symbol styles
automatic graph coloring |
-| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_stepplots_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/test/simpletest_stepplots) | [Step Line Plots in Different Styles](https://github.com/jkriege2/JKQtPlotter/tree/master/test/simpletest_stepplots) | `JKQTPstepHorizontalGraph` (and `JKQTPxyLineGraph`)
C++ vector of data
different step modes, filled and line-only |
-| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_symbols_and_errors_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/test/simpletest_symbols_and_errors) | [Simple Line/Symbol Graph With Errorbars](https://github.com/jkriege2/JKQtPlotter/tree/master/test/simpletest_symbols_and_errors) | `JKQTPxyLineErrorGraph`
C-style arrays of data |
-| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_errorbarstyles_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/test/simpletest_errorbarstyles) | [Different Types of Error Indicators](https://github.com/jkriege2/JKQtPlotter/tree/master/test/simpletest_errorbarstyles) | `JKQTPxyLineErrorGraph`
different styles of error indicators for x- and y-errors
C++-style QVector for data
styling error indicators
moving key and formatting plotter grid |
-| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_barchart_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/test/simpletest_barchart) | [Simple Bar Charts](https://github.com/jkriege2/JKQtPlotter/tree/master/test/simpletest_barchart) | `JKQTPbarVerticalGraph`
C-style arrays of data |
-| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/JKQTPbarVerticalGraphStacked_small.png)
![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/JKQTPbarHorizontalGraphStacked_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/test/simpletest_stackedbars) | [Stacked Bar Charts](https://github.com/jkriege2/JKQtPlotter/tree/master/test/simpletest_stackedbars) | `JKQTPbarVerticalStackableGraph`, `JKQTPbarHorizontalStackableGraph`
C++-style vectors of data |
-| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_filledgraphs_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/test/simpletest_filledgraphs) | [Filled Curve Plots](https://github.com/jkriege2/JKQtPlotter/tree/master/test/simpletest_filledgraphs) | `JKQTPbarVerticalGraph`
setting/altering data in `JKQTPdatstore` directly
transparent plots
calculating histograms |
-| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_impulsesplot_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/test/simpletest_impulsesplot) | [Impulse Plots](https://github.com/jkriege2/JKQtPlotter/tree/master/test/simpletest_impulsesplot) | `JKQTPimpulsesVerticalGraph` and `JKQTPimpulsesHorizontalGraph`
C++-style QVector as plot data |
-| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_paramscatterplot_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/test/simpletest_paramscatterplot) | [Scatter Graph with Parametrized Symbols/Colors](https://github.com/jkriege2/JKQtPlotter/tree/master/test/simpletest_paramscatterplot) | `JKQTPxyParametrizedScatterGraph`
C++-style QVector as plot data
modify scatter/points/line-graph properties by data |
-| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_paramscatterplot_image_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/test/simpletest_paramscatterplot_image) | [Draw an Artistic Image with a Parametrized Scatter Graph](https://github.com/jkriege2/JKQtPlotter/tree/master/test/simpletest_paramscatterplot_image) | `JKQTPxyParametrizedScatterGraph`
C++-style QVector as plot data
rectangular arrangement of scatters
generative computer graphics |
-| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_parametriccurve_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/test/simpletest_parametriccurve) | [Plotting Parametric Curves](https://github.com/jkriege2/JKQtPlotter/tree/master/test/simpletest_parametriccurve) | `JKQTPxyLineGraph` and `JKQTPxyParametrizedScatterGraph`
C++-style QVector as plot data
parametric curve plotting |
-| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_functionplot_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/test/simpletest_functionplot) | [Plotting Mathematical Functions as Line Graphs](https://github.com/jkriege2/JKQtPlotter/tree/master/test/simpletest_functionplot) | `JKQTPxFunctionLineGraph`
diretly plotting C/C++-functions |
-[![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_parsedfunctionplot_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/test/simpletest_parsedfunctionplot) | [Plotting Parsed Mathematical Functions as Line Graphs](https://github.com/jkriege2/JKQtPlotter/tree/master/test/simpletest_parsedfunctionplot) | `JKQTPxParsedFunctionLineGraph`
plotting functions with the internal math equation parser/evaluator |
+| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest1_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/simpletest) | [Very Basic Example (Line Graph)](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/simpletest) | `JKQTPxyLineGraph`
C++-style QVector arrays of data |
+| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_speed_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/simpletest_speed) | [Line Graph with Live Data / Speed Test](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/simpletest_speed) | `JKQTPxyLineGraph`
external `std::array` data, not owned by datastore
live-data, measure plotting speed
tipps to increas plotting speed |
+| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_symbols_and_styles_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/simpletest_symbols_and_styles) | [Line Graph with Different Symbols and Line Styles](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/simpletest_symbols_and_styles) | `JKQTPxyLineGraph`
C++ vector of data
setting line styles and symbol styles
automatic graph coloring |
+| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_stepplots_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/simpletest_stepplots) | [Step Line Plots in Different Styles](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/simpletest_stepplots) | `JKQTPstepHorizontalGraph` (and `JKQTPxyLineGraph`)
C++ vector of data
different step modes, filled and line-only |
+| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_symbols_and_errors_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/simpletest_symbols_and_errors) | [Simple Line/Symbol Graph With Errorbars](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/simpletest_symbols_and_errors) | `JKQTPxyLineErrorGraph`
C-style arrays of data |
+| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_errorbarstyles_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/simpletest_errorbarstyles) | [Different Types of Error Indicators](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/simpletest_errorbarstyles) | `JKQTPxyLineErrorGraph`
different styles of error indicators for x- and y-errors
C++-style QVector for data
styling error indicators
moving key and formatting plotter grid |
+| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_barchart_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/simpletest_barchart) | [Simple Bar Charts](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/simpletest_barchart) | `JKQTPbarVerticalGraph`
C-style arrays of data |
+| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/JKQTPbarVerticalGraphStacked_small.png)
![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/JKQTPbarHorizontalGraphStacked_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/simpletest_stackedbars) | [Stacked Bar Charts](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/simpletest_stackedbars) | `JKQTPbarVerticalStackableGraph`, `JKQTPbarHorizontalStackableGraph`
C++-style vectors of data |
+| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_filledgraphs_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/simpletest_filledgraphs) | [Filled Curve Plots](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/simpletest_filledgraphs) | `JKQTPbarVerticalGraph`
setting/altering data in `JKQTPdatstore` directly
transparent plots
calculating histograms |
+| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_impulsesplot_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/simpletest_impulsesplot) | [Impulse Plots](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/simpletest_impulsesplot) | `JKQTPimpulsesVerticalGraph` and `JKQTPimpulsesHorizontalGraph`
C++-style QVector as plot data |
+| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_paramscatterplot_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/simpletest_paramscatterplot) | [Scatter Graph with Parametrized Symbols/Colors](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/simpletest_paramscatterplot) | `JKQTPxyParametrizedScatterGraph`
C++-style QVector as plot data
modify scatter/points/line-graph properties by data |
+| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_paramscatterplot_image_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/simpletest_paramscatterplot_image) | [Draw an Artistic Image with a Parametrized Scatter Graph](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/simpletest_paramscatterplot_image) | `JKQTPxyParametrizedScatterGraph`
C++-style QVector as plot data
rectangular arrangement of scatters
generative computer graphics |
+| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_parametriccurve_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/simpletest_parametriccurve) | [Plotting Parametric Curves](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/simpletest_parametriccurve) | `JKQTPxyLineGraph` and `JKQTPxyParametrizedScatterGraph`
C++-style QVector as plot data
parametric curve plotting |
+| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_functionplot_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/simpletest_functionplot) | [Plotting Mathematical Functions as Line Graphs](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/simpletest_functionplot) | `JKQTPxFunctionLineGraph`
diretly plotting C/C++-functions |
+[![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_parsedfunctionplot_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/simpletest_parsedfunctionplot) | [Plotting Parsed Mathematical Functions as Line Graphs](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/simpletest_parsedfunctionplot) | `JKQTPxParsedFunctionLineGraph`
plotting functions with the internal math equation parser/evaluator |
### Styling the Plot, Keys, Axes, ...
| Screenshot | Description | Notes |
|:-------------:| ------------- | ------------- |
-| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_logaxes_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/test/simpletest_logaxes) | [logarithmic axes](https://github.com/jkriege2/JKQtPlotter/tree/master/test/simpletest_logaxes) | `JKQTPxyLineGraph` and `JKQTPgeoText`
C++ vector of data
logarithmic axes and styling
plot line styles
internal LaTeX parser
add commenting text to a graph |
-| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_dateaxes_small.png)
![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_dateaxes_dates_small.png)
![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_dateaxes_timeaxis_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/test/simpletest_dateaxes) | [date/time axes](https://github.com/jkriege2/JKQtPlotter/tree/master/test/simpletest_dateaxes) | `JKQTPxyLineGraph` and `JKQTPfilledVerticalRangeGraph`
C++ vector of data
date/time axes
plot min/max range graph
internal LaTeX parser
data from CSV files |
+| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_logaxes_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/simpletest_logaxes) | [logarithmic axes](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/simpletest_logaxes) | `JKQTPxyLineGraph` and `JKQTPgeoText`
C++ vector of data
logarithmic axes and styling
plot line styles
internal LaTeX parser
add commenting text to a graph |
+| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_dateaxes_small.png)
![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_dateaxes_dates_small.png)
![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_dateaxes_timeaxis_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/simpletest_dateaxes) | [date/time axes](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/simpletest_dateaxes) | `JKQTPxyLineGraph` and `JKQTPfilledVerticalRangeGraph`
C++ vector of data
date/time axes
plot min/max range graph
internal LaTeX parser
data from CSV files |
### Image data Plots
| Screenshot | Description | Notes |
|:-------------:| ------------- | ------------- |
-| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_rgbimageplot_qt_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/test/simpletest_rgbimageplot_qt) | [`QImage` as a Graph](https://github.com/jkriege2/JKQtPlotter/tree/master/test/simpletest_rgbimageplot_qt) | `JKQTPImage`
`QImage` drawn onto a plot with arbitrary scaling) |
-| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_imageplot_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/test/simpletest_imageplot) | [Basic 1-channel Raw C Image Plot](https://github.com/jkriege2/JKQtPlotter/tree/master/test/simpletest_imageplot) | `JKQTPColumnMathImage`
image data copied from C-style row-major array into a single column of the internal datastore
Describes several options of the image plotting classes (different ways of color coding, what to do with data above/below the limits etc.) |
-| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_imageplot_modifier_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/test/simpletest_imageplot_modifier) | [Modifier-Feature of Image Plots](https://github.com/jkriege2/JKQtPlotter/tree/master/test/simpletest_imageplot_modifier) | `JKQTPColumnMathImage`
image data copied from C-style row-major array into a single column of the internal datastore
Image is modified by a second image to display two data dimensions at the same time |
-| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_imageplot_nodatastore_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/test/simpletest_imageplot_nodatastore) | [Basic 1-channel Raw C Image Plot
without the internal datastore](https://github.com/jkriege2/JKQtPlotter/tree/master/test/simpletest_imageplot_nodatastore) | `JKQTPMathImage`
image data in a C-style row-major array, not using internal datastore |
-| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_imageplot_opencv_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/test/simpletest_imageplot_opencv) | [1-channel OpenCV cv::Mat Image Plot](https://github.com/jkriege2/JKQtPlotter/tree/master/test/simpletest_imageplot_opencv) | `JKQTPColumnMathImage`
image data copied from OpenCV cv::Mat-structure into a single column of the internal datastore |
-| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_rgbimageplot_opencv_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/test/simpletest_rgbimageplot_opencv) | [RGB OpenCV cv::Mat Image Plot](https://github.com/jkriege2/JKQtPlotter/tree/master/test/simpletest_rgbimageplot_opencv) | `JKQTPColumnRGBMathImage`
image data copied from OpenCV cv::Mat-structure into three columns of the internal datastore |
+| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_rgbimageplot_qt_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/simpletest_rgbimageplot_qt) | [`QImage` as a Graph](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/simpletest_rgbimageplot_qt) | `JKQTPImage`
`QImage` drawn onto a plot with arbitrary scaling) |
+| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_imageplot_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/simpletest_imageplot) | [Basic 1-channel Raw C Image Plot](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/simpletest_imageplot) | `JKQTPColumnMathImage`
image data copied from C-style row-major array into a single column of the internal datastore
Describes several options of the image plotting classes (different ways of color coding, what to do with data above/below the limits etc.) |
+| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_imageplot_modifier_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/simpletest_imageplot_modifier) | [Modifier-Feature of Image Plots](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/simpletest_imageplot_modifier) | `JKQTPColumnMathImage`
image data copied from C-style row-major array into a single column of the internal datastore
Image is modified by a second image to display two data dimensions at the same time |
+| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_imageplot_nodatastore_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/simpletest_imageplot_nodatastore) | [Basic 1-channel Raw C Image Plot
without the internal datastore](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/simpletest_imageplot_nodatastore) | `JKQTPMathImage`
image data in a C-style row-major array, not using internal datastore |
+| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_imageplot_opencv_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/simpletest_imageplot_opencv) | [1-channel OpenCV cv::Mat Image Plot](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/simpletest_imageplot_opencv) | `JKQTPColumnMathImage`
image data copied from OpenCV cv::Mat-structure into a single column of the internal datastore |
+| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_rgbimageplot_opencv_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/simpletest_rgbimageplot_opencv) | [RGB OpenCV cv::Mat Image Plot](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/simpletest_rgbimageplot_opencv) | `JKQTPColumnRGBMathImage`
image data copied from OpenCV cv::Mat-structure into three columns of the internal datastore |
### GUI Tools and Plot Layout
| Screenshot | Description | Notes |
|:-------------:| ------------- | ------------- |
-| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/test_multiplot_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/test/test_multiplot) | [Layouting Several Plots](https://github.com/jkriege2/JKQtPlotter/tree/master/test/test_multiplot) | Combining plots in Qt Layouts
linking plot axes
copy data from a `std::map` int the datastore
print plots/print preview |
+| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/test_multiplot_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/test_multiplot) | [Layouting Several Plots](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/test_multiplot) | Combining plots in Qt Layouts
linking plot axes
copy data from a `std::map` int the datastore
print plots/print preview |
### Tools and Special Features
| Screenshot | Description | Notes |
|:-------------:| ------------- | ------------- |
-| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtmathtext_simpletest_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/test/jkqtmathtext_simpletest) | [JKQTMathText: LaTeX Renderer](https://github.com/jkriege2/JKQtPlotter/tree/master/test/jkqtmathtext_simpletest) | |
+| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtmathtext_simpletest_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/jkqtmathtext_simpletest) | [JKQTMathText: LaTeX Renderer](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/jkqtmathtext_simpletest) | |
diff --git a/appveyor.yml b/appveyor.yml
index 715a0b9556..3b4b4d4a2c 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -31,7 +31,7 @@ build:
configuration:
- release
-# - debug
+ - debug
install:
- IF %VSVER% GTR 14 (
diff --git a/test/jkqtfastplotter_test/jkqtfastplotter_test.cpp b/examples/jkqtfastplotter_test/jkqtfastplotter_test.cpp
similarity index 94%
rename from test/jkqtfastplotter_test/jkqtfastplotter_test.cpp
rename to examples/jkqtfastplotter_test/jkqtfastplotter_test.cpp
index 346b2321df..b6deb00562 100644
--- a/test/jkqtfastplotter_test/jkqtfastplotter_test.cpp
+++ b/examples/jkqtfastplotter_test/jkqtfastplotter_test.cpp
@@ -1,9 +1,9 @@
-#include
-#include "testmain.h"
-
-int main(int argc, char *argv[]) {
- QApplication a(argc, argv);
- TestMain w;
- w.show();
- return a.exec();
-}
+#include
+#include "testmain.h"
+
+int main(int argc, char *argv[]) {
+ QApplication a(argc, argv);
+ TestMain w;
+ w.show();
+ return a.exec();
+}
diff --git a/test/jkqtfastplotter_test/jkqtfastplotter_test.pro b/examples/jkqtfastplotter_test/jkqtfastplotter_test.pro
similarity index 76%
rename from test/jkqtfastplotter_test/jkqtfastplotter_test.pro
rename to examples/jkqtfastplotter_test/jkqtfastplotter_test.pro
index bf29b2ff0f..b734a41400 100644
--- a/test/jkqtfastplotter_test/jkqtfastplotter_test.pro
+++ b/examples/jkqtfastplotter_test/jkqtfastplotter_test.pro
@@ -1,35 +1,39 @@
-# -------------------------------------------------
-# Project created by QtCreator 2010-06-13T12:40:50
-# -------------------------------------------------
-TARGET = JKQTFastPlotter_test
-
-TEMPLATE = app
-
-SOURCES += jkqtfastplotter_test.cpp \
- testmain.cpp
-
-HEADERS += testmain.h
-
-RCC_DIR = .rccs
-
-CONFIG += qt windows
-
-QT += core gui opengl
-
-UI_DIR = .uics
-
-OBJECTS_DIR = .objs
-
-MOC_DIR = .mocs
-
-DESTDIR = ./
-
-DEFINES += DEBUG_TIMING
-
-greaterThan(QT_MAJOR_VERSION, 4): QT += widgets printsupport
-
-# include JKQtPlotter library
-DEPENDPATH += . ../../lib
-INCLUDEPATH += ../../lib
-CONFIG (debug, debug|release):LIBS += -L../../lib/debug -ljkqtplotterlib
-CONFIG (release):LIBS += -L../../lib/release -ljkqtplotterlib
+# -------------------------------------------------
+# Project created by QtCreator 2010-06-13T12:40:50
+# -------------------------------------------------
+TARGET = JKQTFastPlotter_test
+
+TEMPLATE = app
+
+SOURCES += jkqtfastplotter_test.cpp \
+ testmain.cpp
+
+HEADERS += testmain.h
+
+RCC_DIR = .rccs
+
+CONFIG += qt windows
+
+QT += core gui opengl
+
+UI_DIR = .uics
+
+OBJECTS_DIR = .objs
+
+MOC_DIR = .mocs
+
+DESTDIR = ./
+
+DEFINES += DEBUG_TIMING
+
+greaterThan(QT_MAJOR_VERSION, 4): QT += widgets printsupport
+
+# include JKQtPlotter library
+DEPENDPATH += . ../../lib
+INCLUDEPATH += ../../lib
+CONFIG (debug, debug|release) {
+ LIBS += -L../../staticlib/debug -ljkqtplotterlib_debug
+} else {
+ LIBS += -L../../staticlib/release -ljkqtplotterlib
+}
+message("LIBS = $$LIBS")
diff --git a/test/jkqtfastplotter_test/jkqtfastplotter_test_and_lib.pro b/examples/jkqtfastplotter_test/jkqtfastplotter_test_and_lib.pro
similarity index 100%
rename from test/jkqtfastplotter_test/jkqtfastplotter_test_and_lib.pro
rename to examples/jkqtfastplotter_test/jkqtfastplotter_test_and_lib.pro
diff --git a/test/jkqtfastplotter_test/lena.jpg b/examples/jkqtfastplotter_test/lena.jpg
similarity index 100%
rename from test/jkqtfastplotter_test/lena.jpg
rename to examples/jkqtfastplotter_test/lena.jpg
diff --git a/test/jkqtfastplotter_test/lena.png b/examples/jkqtfastplotter_test/lena.png
similarity index 100%
rename from test/jkqtfastplotter_test/lena.png
rename to examples/jkqtfastplotter_test/lena.png
diff --git a/test/jkqtfastplotter_test/testmain.cpp b/examples/jkqtfastplotter_test/testmain.cpp
similarity index 96%
rename from test/jkqtfastplotter_test/testmain.cpp
rename to examples/jkqtfastplotter_test/testmain.cpp
index b9e7381f05..244a60f8e2 100644
--- a/test/jkqtfastplotter_test/testmain.cpp
+++ b/examples/jkqtfastplotter_test/testmain.cpp
@@ -1,186 +1,186 @@
-#include "testmain.h"
-#include
-#include
-
-TestMain::TestMain(QWidget *parent) :
- QWidget(parent)
-{
-
-
- imageRed=(double*)calloc(IMAGE_N*IMAGE_N, sizeof(double));
- imageGreen=(double*)calloc(IMAGE_N*IMAGE_N, sizeof(double));
- imageBlue=(double*)calloc(IMAGE_N*IMAGE_N, sizeof(double));
- image=(double*)calloc(IMAGE_N*IMAGE_N, sizeof(double));
- ovrl=(bool*)calloc(IMAGE_N*IMAGE_N, sizeof(bool));
- x=(double*)calloc(N1, sizeof(double));
- y1=(double*)calloc(N1, sizeof(double));
- y2=(double*)calloc(N1, sizeof(double));
- y3=(double*)calloc(N1, sizeof(double));
-
-
- QGridLayout* gl=new QGridLayout(this);
- setLayout(gl);
- QTabWidget* t=new QTabWidget(this);
- gl->addWidget(t,0,0);
-
- QWidget* w=new QWidget(this);
- gl=new QGridLayout(w);
- w->setLayout(gl);
-
- JKQTFastPlotter* pl1=new JKQTFastPlotter(w);
- pl1->set_maintainAspectRatio(true);
- gl->addWidget(pl1, 0, 0);
- JKQTFastPlotter* pl2=new JKQTFastPlotter(w);
- pl2->setMaximumWidth(100);
- pl2->set_synchronizeY(pl1);
- pl2->set_yAxisLabelVisible(false);
- pl2->set_plotBorderLeft(10);
- pl2->set_plotBorderRight(2);
- w->connect(pl1, SIGNAL(replotting()), pl2, SLOT(update_plot()));
- gl->addWidget(pl2, 0, 1);
- JKQTFastPlotter* pl3=new JKQTFastPlotter(w);
- pl3->set_synchronizeX(pl1);
- w->connect(pl1, SIGNAL(replotting()), pl3, SLOT(update_plot()));
- gl->addWidget(pl3, 1, 0);
-
-
- xx.clear();
- yy.clear();
- for (int i=0; i50 && y>50) image[y*IMAGE_N+x]=0;
- if (x<50 && y<50) image[y*IMAGE_N+x]=50;
- if (abs(x-(IMAGE_N-y))<4) ovrl[y*IMAGE_N+x]=true; else ovrl[y*IMAGE_N+x]=false;
- }
- }
-
- JKQTFPimagePlot* p5=new JKQTFPimagePlot(pl3, image, JKQTFP_double, IMAGE_N, IMAGE_N, 0, 10, 0, 10, JKQTFP_GRAY);
- QColor col=QColor("red");
- col.setAlpha(127);
- JKQTFPimageOverlayPlot* p5o=new JKQTFPimageOverlayPlot(pl3, ovrl, IMAGE_N, IMAGE_N, 0, 10, 0, 10, col);
- JKQTFPXRangePlot* p6=new JKQTFPXRangePlot(pl1, 2.25, 7.75);
- p6->set_fillStyle(Qt::SolidPattern);
- JKQTFPQScaleBarXPlot* sb=new JKQTFPQScaleBarXPlot(pl1, 1, QString("%1 mm"));
-
- pl1->addPlot(p6);
- pl1->addPlot(p1);
- pl1->addPlot(p2);
- pl1->addPlot(p3);
- pl1->addPlot(pv);
- pl1->addPlot(sb);
-
- pl2->addPlot(p4);
-
- pl3->addPlot(p5);
- pl3->addPlot(p5o);
- pl3->setObjectName("pl3");
-
- QComboBox* spin=new QComboBox(w);
- spin->addItems(JKQTFPimagePlot_getPalettes());
- gl->addWidget(spin, 2,0);
- connect(spin, SIGNAL(currentIndexChanged(int)), p5, SLOT(set_palette(int)));
- QComboBox* scale=new QComboBox(w);
- scale->addItem("TopLeft");
- scale->addItem("TopRight");
- scale->addItem("BottomLeft");
- scale->addItem("BottomRight");
- gl->addWidget(scale, 3,0);
- connect(scale, SIGNAL(currentIndexChanged(int)), sb, SLOT(set_position(int)));
-
- t->addTab(w, tr("Basic Test"));
-
-
- w=new QWidget(this);
- gl=new QGridLayout(w);
- w->setLayout(gl);
- JKQTFastPlotter* p21=new JKQTFastPlotter(w);
- gl->addWidget(p21, 0, 0, 1, 3);
- for (int x=0; xset_image(imageRed, JKQTFP_double, imageGreen, JKQTFP_double, imageBlue, JKQTFP_double, IMAGE_N, IMAGE_N,0,10,0,10);
- p21->addPlot(prgb);
-
- QCheckBox* c=new QCheckBox(tr("red channel"), w);
- c->setChecked(true);
- connect(c, SIGNAL(toggled(bool)), this, SLOT(enableRed(bool)));
- gl->addWidget(c, 1,0);
-
- c=new QCheckBox(tr("green channel"), w);
- c->setChecked(true);
- connect(c, SIGNAL(toggled(bool)), this, SLOT(enableGreen(bool)));
- gl->addWidget(c, 1,1);
-
- c=new QCheckBox(tr("blue channel"), w);
- c->setChecked(true);
- connect(c, SIGNAL(toggled(bool)), this, SLOT(enableBlue(bool)));
- gl->addWidget(c, 1,2);
-
-
- t->addTab(w, tr("Overlay Test"));
- t->setCurrentIndex(1);
-
- resize(500,400);
-
-}
-
-TestMain::~TestMain() {
- free(imageRed);
- free(imageGreen);
- free(imageBlue);
- free(image);
- free(ovrl);
- free(x);
- free(y1);
- free(y2);
- free(y3);
-
-}
-
-void TestMain::enableRed(bool enabled) {
- if (enabled) {
- prgb->set_imageRed(imageRed, JKQTFP_double);
- } else {
- prgb->set_imageRed(NULL, JKQTFP_double);
- }
-}
-
-void TestMain::enableGreen(bool enabled) {
- if (enabled) {
- prgb->set_imageGreen(imageGreen, JKQTFP_double);
- } else {
- prgb->set_imageGreen(NULL, JKQTFP_double);
- }
-}
-
-void TestMain::enableBlue(bool enabled) {
- if (enabled) {
- prgb->set_imageBlue(imageBlue, JKQTFP_double);
- } else {
- prgb->set_imageBlue(NULL, JKQTFP_double);
- }
-}
+#include "testmain.h"
+#include
+#include
+
+TestMain::TestMain(QWidget *parent) :
+ QWidget(parent)
+{
+
+
+ imageRed=(double*)calloc(IMAGE_N*IMAGE_N, sizeof(double));
+ imageGreen=(double*)calloc(IMAGE_N*IMAGE_N, sizeof(double));
+ imageBlue=(double*)calloc(IMAGE_N*IMAGE_N, sizeof(double));
+ image=(double*)calloc(IMAGE_N*IMAGE_N, sizeof(double));
+ ovrl=(bool*)calloc(IMAGE_N*IMAGE_N, sizeof(bool));
+ x=(double*)calloc(N1, sizeof(double));
+ y1=(double*)calloc(N1, sizeof(double));
+ y2=(double*)calloc(N1, sizeof(double));
+ y3=(double*)calloc(N1, sizeof(double));
+
+
+ QGridLayout* gl=new QGridLayout(this);
+ setLayout(gl);
+ QTabWidget* t=new QTabWidget(this);
+ gl->addWidget(t,0,0);
+
+ QWidget* w=new QWidget(this);
+ gl=new QGridLayout(w);
+ w->setLayout(gl);
+
+ JKQTFastPlotter* pl1=new JKQTFastPlotter(w);
+ pl1->set_maintainAspectRatio(true);
+ gl->addWidget(pl1, 0, 0);
+ JKQTFastPlotter* pl2=new JKQTFastPlotter(w);
+ pl2->setMaximumWidth(100);
+ pl2->set_synchronizeY(pl1);
+ pl2->set_yAxisLabelVisible(false);
+ pl2->set_plotBorderLeft(10);
+ pl2->set_plotBorderRight(2);
+ w->connect(pl1, SIGNAL(replotting()), pl2, SLOT(update_plot()));
+ gl->addWidget(pl2, 0, 1);
+ JKQTFastPlotter* pl3=new JKQTFastPlotter(w);
+ pl3->set_synchronizeX(pl1);
+ w->connect(pl1, SIGNAL(replotting()), pl3, SLOT(update_plot()));
+ gl->addWidget(pl3, 1, 0);
+
+
+ xx.clear();
+ yy.clear();
+ for (int i=0; i50 && y>50) image[y*IMAGE_N+x]=0;
+ if (x<50 && y<50) image[y*IMAGE_N+x]=50;
+ if (abs(x-(IMAGE_N-y))<4) ovrl[y*IMAGE_N+x]=true; else ovrl[y*IMAGE_N+x]=false;
+ }
+ }
+
+ JKQTFPimagePlot* p5=new JKQTFPimagePlot(pl3, image, JKQTFP_double, IMAGE_N, IMAGE_N, 0, 10, 0, 10, JKQTFP_GRAY);
+ QColor col=QColor("red");
+ col.setAlpha(127);
+ JKQTFPimageOverlayPlot* p5o=new JKQTFPimageOverlayPlot(pl3, ovrl, IMAGE_N, IMAGE_N, 0, 10, 0, 10, col);
+ JKQTFPXRangePlot* p6=new JKQTFPXRangePlot(pl1, 2.25, 7.75);
+ p6->set_fillStyle(Qt::SolidPattern);
+ JKQTFPQScaleBarXPlot* sb=new JKQTFPQScaleBarXPlot(pl1, 1, QString("%1 mm"));
+
+ pl1->addPlot(p6);
+ pl1->addPlot(p1);
+ pl1->addPlot(p2);
+ pl1->addPlot(p3);
+ pl1->addPlot(pv);
+ pl1->addPlot(sb);
+
+ pl2->addPlot(p4);
+
+ pl3->addPlot(p5);
+ pl3->addPlot(p5o);
+ pl3->setObjectName("pl3");
+
+ QComboBox* spin=new QComboBox(w);
+ spin->addItems(JKQTFPimagePlot_getPalettes());
+ gl->addWidget(spin, 2,0);
+ connect(spin, SIGNAL(currentIndexChanged(int)), p5, SLOT(set_palette(int)));
+ QComboBox* scale=new QComboBox(w);
+ scale->addItem("TopLeft");
+ scale->addItem("TopRight");
+ scale->addItem("BottomLeft");
+ scale->addItem("BottomRight");
+ gl->addWidget(scale, 3,0);
+ connect(scale, SIGNAL(currentIndexChanged(int)), sb, SLOT(set_position(int)));
+
+ t->addTab(w, tr("Basic Test"));
+
+
+ w=new QWidget(this);
+ gl=new QGridLayout(w);
+ w->setLayout(gl);
+ JKQTFastPlotter* p21=new JKQTFastPlotter(w);
+ gl->addWidget(p21, 0, 0, 1, 3);
+ for (int x=0; xset_image(imageRed, JKQTFP_double, imageGreen, JKQTFP_double, imageBlue, JKQTFP_double, IMAGE_N, IMAGE_N,0,10,0,10);
+ p21->addPlot(prgb);
+
+ QCheckBox* c=new QCheckBox(tr("red channel"), w);
+ c->setChecked(true);
+ connect(c, SIGNAL(toggled(bool)), this, SLOT(enableRed(bool)));
+ gl->addWidget(c, 1,0);
+
+ c=new QCheckBox(tr("green channel"), w);
+ c->setChecked(true);
+ connect(c, SIGNAL(toggled(bool)), this, SLOT(enableGreen(bool)));
+ gl->addWidget(c, 1,1);
+
+ c=new QCheckBox(tr("blue channel"), w);
+ c->setChecked(true);
+ connect(c, SIGNAL(toggled(bool)), this, SLOT(enableBlue(bool)));
+ gl->addWidget(c, 1,2);
+
+
+ t->addTab(w, tr("Overlay Test"));
+ t->setCurrentIndex(1);
+
+ resize(500,400);
+
+}
+
+TestMain::~TestMain() {
+ free(imageRed);
+ free(imageGreen);
+ free(imageBlue);
+ free(image);
+ free(ovrl);
+ free(x);
+ free(y1);
+ free(y2);
+ free(y3);
+
+}
+
+void TestMain::enableRed(bool enabled) {
+ if (enabled) {
+ prgb->set_imageRed(imageRed, JKQTFP_double);
+ } else {
+ prgb->set_imageRed(NULL, JKQTFP_double);
+ }
+}
+
+void TestMain::enableGreen(bool enabled) {
+ if (enabled) {
+ prgb->set_imageGreen(imageGreen, JKQTFP_double);
+ } else {
+ prgb->set_imageGreen(NULL, JKQTFP_double);
+ }
+}
+
+void TestMain::enableBlue(bool enabled) {
+ if (enabled) {
+ prgb->set_imageBlue(imageBlue, JKQTFP_double);
+ } else {
+ prgb->set_imageBlue(NULL, JKQTFP_double);
+ }
+}
diff --git a/test/jkqtfastplotter_test/testmain.h b/examples/jkqtfastplotter_test/testmain.h
similarity index 95%
rename from test/jkqtfastplotter_test/testmain.h
rename to examples/jkqtfastplotter_test/testmain.h
index 878f1dbd4c..d04b204d50 100644
--- a/test/jkqtfastplotter_test/testmain.h
+++ b/examples/jkqtfastplotter_test/testmain.h
@@ -1,44 +1,44 @@
-#ifndef TESTMAIN_H
-#define TESTMAIN_H
-
-#include
-#include
-#include "jkqtfastplotter/jkqtfastplotter.h"
-#include
-
-#define N1 20
-#define XMAX 10.0
-#define IMAGE_N 300
-
-
-class TestMain : public QWidget {
- Q_OBJECT
- public:
- explicit TestMain(QWidget *parent = 0);
- virtual ~TestMain();
-
- signals:
-
- public slots:
- void enableRed(bool enabled);
- void enableGreen(bool enabled);
- void enableBlue(bool enabled);
-
- protected:
- double* x;
- double* y1;
- double* y2;
- double* y3;
- QVector xx;
- QVector yy;
- QImage img;
- double* image;
- bool* ovrl;
-
- double* imageRed;
- double* imageGreen;
- double* imageBlue;
- JKQTFPRGBImageOverlayPlot* prgb;
-};
-
-#endif // TESTMAIN_H
+#ifndef TESTMAIN_H
+#define TESTMAIN_H
+
+#include
+#include
+#include "jkqtfastplotter/jkqtfastplotter.h"
+#include
+
+#define N1 20
+#define XMAX 10.0
+#define IMAGE_N 300
+
+
+class TestMain : public QWidget {
+ Q_OBJECT
+ public:
+ explicit TestMain(QWidget *parent = 0);
+ virtual ~TestMain();
+
+ signals:
+
+ public slots:
+ void enableRed(bool enabled);
+ void enableGreen(bool enabled);
+ void enableBlue(bool enabled);
+
+ protected:
+ double* x;
+ double* y1;
+ double* y2;
+ double* y3;
+ QVector xx;
+ QVector yy;
+ QImage img;
+ double* image;
+ bool* ovrl;
+
+ double* imageRed;
+ double* imageGreen;
+ double* imageBlue;
+ JKQTFPRGBImageOverlayPlot* prgb;
+};
+
+#endif // TESTMAIN_H
diff --git a/test/jkqtmathtext_simpletest/README.md b/examples/jkqtmathtext_simpletest/README.md
similarity index 84%
rename from test/jkqtmathtext_simpletest/README.md
rename to examples/jkqtmathtext_simpletest/README.md
index 6d68cab7e3..6ad6edda05 100644
--- a/test/jkqtmathtext_simpletest/README.md
+++ b/examples/jkqtmathtext_simpletest/README.md
@@ -1,72 +1,72 @@
-[Back to JKQTPlotter main page](https://github.com/jkriege2/JKQtPlotter/)
-
-# JKQtPlotter
-
-## JKQTmathText
-JKQTmathText is a hand-written LaTeX-renderer for Qt (implemented in native C++, using Qt). It supports a large set of standard LaTeX markup and can render it to a QPainter.
-## A simple usage example
-This project (see `./test/jkqtmathtext_simpletest/`) simply creates a QLabel (as a new window) that displays a rendered LaTeX equation (here the time-dependent Schrödinger equation).
-The QMake project looks like this (see [`jkqtmathtext_simpletest.pro`](https://github.com/jkriege2/JKQtPlotter/blob/master/test/jkqtmathtext_simpletest/jkqtmathtext_simpletest.pro):
-```qmake
-# include JKQTmathText source-code, including the open-source XITS fonts
-include(../../lib/jkqtmathtext_with_xits.pri)
-SOURCES += jkqtmathtext_simpletest.cpp
-
-# if you don't want to use the XITS fonts, use this line (and uncomment the
-# last two line!):
-#include(../../lib/jkqtmathtext.pri)
-
-CONFIG += qt
-QT += core gui
-greaterThan(QT_MAJOR_VERSION, 4): QT += widgets printsupport
-
-TARGET = jkqtmathtext_simpletest
-```
-And the soruce code of the main application is (see [`jkqtmathtext_simpletest.cpp`](https://github.com/jkriege2/JKQtPlotter/blob/master/test/jkqtmathtext_simpletest/jkqtmathtext_simpletest.cpp):
-```c++
-#include
-#include
-#include
-#include "jkqtmathtext/jkqtmathtext.h"
-
-int main(int argc, char* argv[])
-{
- QApplication app(argc, argv);
-
- // we use a simple label to display the math text
- QLabel lab;
-
- // 1. we will paint into a QPixmap
- QPixmap pix(600,400);
- pix.fill(QColor("white"));
- QPainter painter;
-
- // 2. now we create a JKQTmathText object.
- // Also we configure the JKQTmathText to use the XITS fonts that
- // were included in the *.pro-file
- JKQTmathText mathText;
- mathText.useXITS();
- mathText.set_fontSize(20);
-
- // 3. now we parse some LaTeX code (the Schroedinger's equation), so
- // we can draw it onto the QPixmap in the next step
- mathText.parse("$\\left[-\\frac{\\hbar^2}{2m}\\frac{\\partial^2}{\\partial x^2}+V(x)\\right]\\Psi(x)=\\mathrm{i}\\hbar\\frac{\\partial}{\\partial t}\\Psi(x)$");
-
- // 3. here we do the painting
- painter.begin(&pix);
- mathText.draw(painter, Qt::AlignCenter, QRectF(0,0,pix.width(), pix.height()), false);
- painter.end();
-
- // now we display and resize the label as a window
- lab.setPixmap(pix);
- lab.show();
- lab.resize(600,400);
-
- return app.exec();
-}
-```
-The result looks like this:
-
-![jkqtmathtext_simpletest](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtmathtext_simpletest.png)
-
+[Back to JKQTPlotter main page](https://github.com/jkriege2/JKQtPlotter/)
+
+# JKQtPlotter
+
+## JKQTmathText
+JKQTmathText is a hand-written LaTeX-renderer for Qt (implemented in native C++, using Qt). It supports a large set of standard LaTeX markup and can render it to a QPainter.
+## A simple usage example
+This project (see `./examples/jkqtmathtext_simpletest/`) simply creates a QLabel (as a new window) that displays a rendered LaTeX equation (here the time-dependent Schrödinger equation).
+The QMake project looks like this (see [`jkqtmathtext_simpletest.pro`](https://github.com/jkriege2/JKQtPlotter/blob/master/examples/jkqtmathtext_simpletest/jkqtmathtext_simpletest.pro):
+```qmake
+# include JKQTmathText source-code, including the open-source XITS fonts
+include(../../lib/jkqtmathtext_with_xits.pri)
+SOURCES += jkqtmathtext_simpletest.cpp
+
+# if you don't want to use the XITS fonts, use this line (and uncomment the
+# last two line!):
+#include(../../lib/jkqtmathtext.pri)
+
+CONFIG += qt
+QT += core gui
+greaterThan(QT_MAJOR_VERSION, 4): QT += widgets printsupport
+
+TARGET = jkqtmathtext_simpletest
+```
+And the soruce code of the main application is (see [`jkqtmathtext_simpletest.cpp`](https://github.com/jkriege2/JKQtPlotter/blob/master/examples/jkqtmathtext_simpletest/jkqtmathtext_simpletest.cpp):
+```c++
+#include
+#include
+#include
+#include "jkqtmathtext/jkqtmathtext.h"
+
+int main(int argc, char* argv[])
+{
+ QApplication app(argc, argv);
+
+ // we use a simple label to display the math text
+ QLabel lab;
+
+ // 1. we will paint into a QPixmap
+ QPixmap pix(600,400);
+ pix.fill(QColor("white"));
+ QPainter painter;
+
+ // 2. now we create a JKQTmathText object.
+ // Also we configure the JKQTmathText to use the XITS fonts that
+ // were included in the *.pro-file
+ JKQTmathText mathText;
+ mathText.useXITS();
+ mathText.set_fontSize(20);
+
+ // 3. now we parse some LaTeX code (the Schroedinger's equation), so
+ // we can draw it onto the QPixmap in the next step
+ mathText.parse("$\\left[-\\frac{\\hbar^2}{2m}\\frac{\\partial^2}{\\partial x^2}+V(x)\\right]\\Psi(x)=\\mathrm{i}\\hbar\\frac{\\partial}{\\partial t}\\Psi(x)$");
+
+ // 3. here we do the painting
+ painter.begin(&pix);
+ mathText.draw(painter, Qt::AlignCenter, QRectF(0,0,pix.width(), pix.height()), false);
+ painter.end();
+
+ // now we display and resize the label as a window
+ lab.setPixmap(pix);
+ lab.show();
+ lab.resize(600,400);
+
+ return app.exec();
+}
+```
+The result looks like this:
+
+![jkqtmathtext_simpletest](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtmathtext_simpletest.png)
+
[Back to JKQTPlotter main page](https://github.com/jkriege2/JKQtPlotter/)
\ No newline at end of file
diff --git a/test/jkqtmathtext_simpletest/jkqtmathtext_simpletest.cpp b/examples/jkqtmathtext_simpletest/jkqtmathtext_simpletest.cpp
similarity index 96%
rename from test/jkqtmathtext_simpletest/jkqtmathtext_simpletest.cpp
rename to examples/jkqtmathtext_simpletest/jkqtmathtext_simpletest.cpp
index 189e4366b2..84041eadbf 100644
--- a/test/jkqtmathtext_simpletest/jkqtmathtext_simpletest.cpp
+++ b/examples/jkqtmathtext_simpletest/jkqtmathtext_simpletest.cpp
@@ -1,40 +1,40 @@
-#include
-#include
-#include
-#include "jkqtmathtext/jkqtmathtext.h"
-
-int main(int argc, char* argv[])
-{
- QApplication app(argc, argv);
-
- // we use a simple label to display the math text
- QLabel lab;
-
- // 1. we will paint into a QPixmap
- QPixmap pix(600,400);
- pix.fill(QColor("white"));
- QPainter painter;
-
- // 2. now we create a JKQTmathText object.
- // Also we configure the JKQTmathText to use the XITS fonts that
- // were included in the *.pro-file
- JKQTmathText mathText;
- mathText.useXITS();
- mathText.set_fontSize(20);
-
- // 3. now we parse some LaTeX code (the Schroedinger's equation), so
- // we can draw it onto the QPixmap in the next step
- mathText.parse("$\\left[-\\frac{\\hbar^2}{2m}\\frac{\\partial^2}{\\partial x^2}+V(x)\\right]\\Psi(x)=\\mathrm{i}\\hbar\\frac{\\partial}{\\partial t}\\Psi(x)$");
-
- // 3. here we do the painting
- painter.begin(&pix);
- mathText.draw(painter, Qt::AlignCenter, QRectF(0,0,pix.width(), pix.height()), false);
- painter.end();
-
- // now we display and resize the label as a window
- lab.setPixmap(pix);
- lab.show();
- lab.resize(600,400);
-
- return app.exec();
-}
+#include
+#include
+#include
+#include "jkqtmathtext/jkqtmathtext.h"
+
+int main(int argc, char* argv[])
+{
+ QApplication app(argc, argv);
+
+ // we use a simple label to display the math text
+ QLabel lab;
+
+ // 1. we will paint into a QPixmap
+ QPixmap pix(600,400);
+ pix.fill(QColor("white"));
+ QPainter painter;
+
+ // 2. now we create a JKQTmathText object.
+ // Also we configure the JKQTmathText to use the XITS fonts that
+ // were included in the *.pro-file
+ JKQTmathText mathText;
+ mathText.useXITS();
+ mathText.set_fontSize(20);
+
+ // 3. now we parse some LaTeX code (the Schroedinger's equation), so
+ // we can draw it onto the QPixmap in the next step
+ mathText.parse("$\\left[-\\frac{\\hbar^2}{2m}\\frac{\\partial^2}{\\partial x^2}+V(x)\\right]\\Psi(x)=\\mathrm{i}\\hbar\\frac{\\partial}{\\partial t}\\Psi(x)$");
+
+ // 3. here we do the painting
+ painter.begin(&pix);
+ mathText.draw(painter, Qt::AlignCenter, QRectF(0,0,pix.width(), pix.height()), false);
+ painter.end();
+
+ // now we display and resize the label as a window
+ lab.setPixmap(pix);
+ lab.show();
+ lab.resize(600,400);
+
+ return app.exec();
+}
diff --git a/test/jkqtmathtext_simpletest/jkqtmathtext_simpletest.pro b/examples/jkqtmathtext_simpletest/jkqtmathtext_simpletest.pro
similarity index 56%
rename from test/jkqtmathtext_simpletest/jkqtmathtext_simpletest.pro
rename to examples/jkqtmathtext_simpletest/jkqtmathtext_simpletest.pro
index 16ecebb56c..377019957a 100644
--- a/test/jkqtmathtext_simpletest/jkqtmathtext_simpletest.pro
+++ b/examples/jkqtmathtext_simpletest/jkqtmathtext_simpletest.pro
@@ -1,14 +1,18 @@
-TARGET = jkqtmathtext_simpletest
-TEMPLATE = app
-
-SOURCES += jkqtmathtext_simpletest.cpp
-
-CONFIG += qt
-QT += core gui xml svg
-greaterThan(QT_MAJOR_VERSION, 4): QT += widgets printsupport
-
-
-DEPENDPATH += . ../../lib
-INCLUDEPATH += ../../lib
-CONFIG (debug, debug|release):LIBS += -L../../lib/debug -ljkqtplotterlib
-CONFIG (release):LIBS += -L../../lib/release -ljkqtplotterlib
+TARGET = jkqtmathtext_simpletest
+TEMPLATE = app
+
+SOURCES += jkqtmathtext_simpletest.cpp
+
+CONFIG += qt
+QT += core gui xml svg
+greaterThan(QT_MAJOR_VERSION, 4): QT += widgets printsupport
+
+
+DEPENDPATH += . ../../lib
+INCLUDEPATH += ../../lib
+CONFIG (debug, debug|release) {
+ LIBS += -L../../staticlib/debug -ljkqtplotterlib_debug
+} else {
+ LIBS += -L../../staticlib/release -ljkqtplotterlib
+}
+message("LIBS = $$LIBS")
diff --git a/test/jkqtmathtext_simpletest/jkqtmathtext_simpletest_and_lib.pro b/examples/jkqtmathtext_simpletest/jkqtmathtext_simpletest_and_lib.pro
similarity index 96%
rename from test/jkqtmathtext_simpletest/jkqtmathtext_simpletest_and_lib.pro
rename to examples/jkqtmathtext_simpletest/jkqtmathtext_simpletest_and_lib.pro
index 6116bb0143..4796840fd9 100644
--- a/test/jkqtmathtext_simpletest/jkqtmathtext_simpletest_and_lib.pro
+++ b/examples/jkqtmathtext_simpletest/jkqtmathtext_simpletest_and_lib.pro
@@ -1,8 +1,8 @@
-TEMPLATE = subdirs
-
-SUBDIRS += jkqtplotterlib jkqtmathtext_simpletest
-
-jkqtplotterlib.file = ../../lib/jkqtplotterlib.pro
-
-jkqtmathtext_simpletest.file=$$PWD/jkqtmathtext_simpletest.pro
-jkqtmathtext_simpletest.depends = jkqtplotterlib
+TEMPLATE = subdirs
+
+SUBDIRS += jkqtplotterlib jkqtmathtext_simpletest
+
+jkqtplotterlib.file = ../../lib/jkqtplotterlib.pro
+
+jkqtmathtext_simpletest.file=$$PWD/jkqtmathtext_simpletest.pro
+jkqtmathtext_simpletest.depends = jkqtplotterlib
diff --git a/test/jkqtmathtext_test/asana.pri b/examples/jkqtmathtext_test/asana.pri
similarity index 95%
rename from test/jkqtmathtext_test/asana.pri
rename to examples/jkqtmathtext_test/asana.pri
index 64bc7d53f3..28146b3242 100644
--- a/test/jkqtmathtext_test/asana.pri
+++ b/examples/jkqtmathtext_test/asana.pri
@@ -1 +1 @@
-RESOURCES += asana.qrc
+RESOURCES += asana.qrc
diff --git a/test/jkqtmathtext_test/asana.qrc b/examples/jkqtmathtext_test/asana.qrc
similarity index 100%
rename from test/jkqtmathtext_test/asana.qrc
rename to examples/jkqtmathtext_test/asana.qrc
diff --git a/test/jkqtmathtext_test/asana/Asana-Math.otf b/examples/jkqtmathtext_test/asana/Asana-Math.otf
similarity index 100%
rename from test/jkqtmathtext_test/asana/Asana-Math.otf
rename to examples/jkqtmathtext_test/asana/Asana-Math.otf
diff --git a/test/jkqtmathtext_test/asana/Asana-Math.ttf b/examples/jkqtmathtext_test/asana/Asana-Math.ttf
similarity index 100%
rename from test/jkqtmathtext_test/asana/Asana-Math.ttf
rename to examples/jkqtmathtext_test/asana/Asana-Math.ttf
diff --git a/test/jkqtmathtext_test/asana/README.txt b/examples/jkqtmathtext_test/asana/README.txt
similarity index 100%
rename from test/jkqtmathtext_test/asana/README.txt
rename to examples/jkqtmathtext_test/asana/README.txt
diff --git a/test/jkqtmathtext_test/jkqtmathtext_test.cpp b/examples/jkqtmathtext_test/jkqtmathtext_test.cpp
similarity index 97%
rename from test/jkqtmathtext_test/jkqtmathtext_test.cpp
rename to examples/jkqtmathtext_test/jkqtmathtext_test.cpp
index 02e67a7225..b735b15edd 100644
--- a/test/jkqtmathtext_test/jkqtmathtext_test.cpp
+++ b/examples/jkqtmathtext_test/jkqtmathtext_test.cpp
@@ -1,275 +1,275 @@
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include "jkqtmathtext/jkqtmathtext.h"
-#include "jkqtplottertools/jkqtphighrestimer.h"
-#include "testform.h"
-
-
-#define W 2000
-#define H 3000
-#define X1 15
-#define Y1 50
-
-/*
-HighResTimer ht;
-
-
-double draw(QPainter& painter, double X, double YY, JKQTmathText& mt, QString name) {
- double Y=YY;
- painter.save();
- ht.start();
- QSizeF s=mt.getSize(painter);
- Y=Y+mt.getAscent(painter);
- std::cout<<" sizing in "<"+mt.toHtml(&okh)+"
");
- qDebug()<<"HTML1: ---------------------------------------------\n"<"+mt.toHtml(&okh)+"
");
- qDebug()<<"HTML2: ---------------------------------------------\n"<"+mt.toHtml(&okh)+"
");
- qDebug()<<"HTML2: ---------------------------------------------\n"<
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include "jkqtmathtext/jkqtmathtext.h"
+#include "jkqtplottertools/jkqtphighrestimer.h"
+#include "testform.h"
+
+
+#define W 2000
+#define H 3000
+#define X1 15
+#define Y1 50
+
+/*
+HighResTimer ht;
+
+
+double draw(QPainter& painter, double X, double YY, JKQTmathText& mt, QString name) {
+ double Y=YY;
+ painter.save();
+ ht.start();
+ QSizeF s=mt.getSize(painter);
+ Y=Y+mt.getAscent(painter);
+ std::cout<<" sizing in "<"+mt.toHtml(&okh)+"
");
+ qDebug()<<"HTML1: ---------------------------------------------\n"<"+mt.toHtml(&okh)+"
");
+ qDebug()<<"HTML2: ---------------------------------------------\n"<"+mt.toHtml(&okh)+"
");
+ qDebug()<<"HTML2: ---------------------------------------------\n"< \alpha\beta\gamma\delta\epsilon\Gamma\Delta\Theta\Omega \left\lfloor \left\lceil \cbrt{\hbar\omega}\right\rceil\right\rfloor $
- \item\textbf{chi2 test:} \[\vec{p}^\ast=\argmax\limits_{\vec{p}}\chi^2=\argmax\limits_{\vec{p}}\sum\limits_{i=1}^N\left|\frac{\hat{f}_i-f(x_i;\vec{p})}{\sigma_i}\right|^2\]
- \item\textbf{upper/lower parantheses test:} \[ \text{bblabla} \frac{1}{2}\cdot\left(\frac{1}{\mathrm{e}^x+\mathrm{e}^{-x}}\right)\cdot\left(\frac{1}{\frac{1+2}{5+x}}\right)\cdot\left(\frac{1}{\exp\left[-\frac{y^2}{\sqrt{x}}\right]\cdot\exp\left[-\frac{1}{\frac{1}{2}}\right]}\right) \]
- \item\textbf{ACF test:} \[g_{rg}^{ab}(\tau)=\frac{1}{N}\cdot\left(1+\frac{2}{3}\frac{\langle r^2(\tau)\rangle}{w_{xy}^2}\right)^{-1}\cdot\left(1+\frac{2}{3}\frac{\langle r^2(\tau)\rangle}{w_{xy}^2}\right)^{-\frac{1}{2}} \]
- \item\textbf{MSD test:} \[\mathrm{MSD}(\tau)\equiv\langle r^2(\tau)\rangle=\left\langle (\vec{r}(t)-\vec{r}(t+\tau) )^2\right\rangle=2n\cdot\frac{K_\alpha}{\Gamma(1+\alpha)}\cdot\tau^\alpha \]
- \item\textbf{math: blackboard:} \[\mathbb{ABCDEFGHIJKLMNOPQRSTUVWXYZ120} \]
- \item\textbf{math: bf:} \[\mathbf{ABCDEFGHIJKLMNOPQRSTUVWXYZ120} \]
- \item\textbf{math: rm:} \[\mathrm{ABCDEFGHIJKLMNOPQRSTUVWXYZ120} \]
- \item\textbf{math: cal:} \[\mathcal{ABCDEFGHIJKLMNOPQRSTUVWXYZ120} \]
- \item\textbf{subscript test:} \[r_{123}\ \ r_{\frac{1}{2}} \]
- \item\textbf{subscript0 test:} \[r_{123} \]
- \item\textbf{subscript1 test:} \[r_{123}\ \]
- \item\textbf{subscript2 test:} \[r_{123}\ \ \]
- \item\textbf{subscript3 test:} \[r_{123}r_{\frac{1}{2}} \]
- \item\textbf{superscript test:} \[r^{123}\ \ r^{\frac{1}{2}} \]
- \item\textbf{superscript0 test:} \[r^{123} \]
- \item\textbf{superscript1 test:} \[r^{123}\ \]
- \item\textbf{superscript2 test:} \[r^{123}\ \ \]
- \item\textbf{superscript3 test:} \[r^{123}r^{\frac{1}{2}} \]
- \item\textbf{asuperscript test:} \[a^{123}\ \ a^{\frac{1}{2}} \]
- \item\textbf{asuperscript0 test:} \[a^{123} \]
- \item\textbf{gsuperscript1 test:} \[g^{123}\ \]
- \item\textbf{gsuperscript2 test:} \[g^{123}\ \ \]
- \item\textbf{gsuperscript3 test:} \[g^{123}g^{\frac{1}{2}} \]
- \item\textbf{frac test:} \[\frac{a}{b}+\frac{g}{a}-\frac{a^2}{b^2}\cdot\frac{a^2}{b^{\frac{1}{2}}} \]
- \item\textbf{tfrac test:} \[\tfrac{a}{b}+\tfrac{g}{a}-\tfrac{a^2}{b^2}\cdot\tfrac{a^2}{b^{\tfrac{1}{2}}} \]
- \item\textbf{dfrac test:} \[\dfrac{a}{b}+\dfrac{g}{a}-\dfrac{a^2}{b^2}\cdot\dfrac{a^2}{b^{\dfrac{1}{2}}} \]
- \item\textbf{stackrel test:} \[\stackrel{a}{b}+\stackrel{g}{a}-\stackrel{a^2}{b^2}\cdot\stackrel{a^2}{b^{\stackrel{1}{2}}} \]
- \item\textbf{brace5 test: ( )} \[\left(\left(\left( r^{123}\right)\right)\right) -- \left(\left(\left( r^{123}\right)\right)\right) \]
- \item\textbf{brace6 test: [ ]} \[\left[\left[\left[ r^{123}\right]\right]\right] -- \left[\left[\left[ r^{123}\right]\right]\right] \]
- \item\textbf{brace7 test: { }} \[\left\{\left\{\left\{ r^{123}\right\}\right\}\right\} -- \left\{\left\{\left\{ r^{123}\right\}\right\}\right\} \]
- \item\textbf{brace8 test: || ||} \[\left\|\left\|\left\| r^{123}\right\|\right\|\right\| -- \left\|\left\|\left\| r^{123}\right\|\right\|\right\| \]
- \item\textbf{brace9 test: | |} \[\left|\left|\left| r^{123}\right|\right|\right| -- \left|\left|\left| r^{123}\right|\right|\right| \]
- \item\textbf{brace10 test} \[\left\{\left[\left( r^{123}\right)\right]\right\} -- \left\{\left[\left( r^{123}\right)\right]\right\} \]
- \item\textbf{brace11 test: floor} \[\left\lfloor\left\lfloor\left\lfloor r^{123}\right\rfloor\right\rfloor\right\rfloor -- \left\lfloor\left\lfloor\left\lfloor r^{123}\right\rfloor\right\rfloor\right\rfloor \]
- \item\textbf{brace12 test: ceil} \[\left\lceil\left\lceil\left\lceil r^{123}\right\rceil\right\rceil\right\rceil -- \left\lceil\left\lceil\left\lceil r^{123}\right\rceil\right\rceil\right\rceil \]
- \item\textbf{sub-, superscript test} \[r^{1234}_{321} r_{321}^{1234} -- r^{1234}_{321} r_{321}^{1234} -- \kappa^2 -- \kappa_2 -- \kappa_2^2 \]
- \item\textbf{super-, subscript test} \[r^{123}_{4321} r_{4321}^{123} -- r^{123}_{4321} r_{4321}^{123} -- \kappa^2 -- \kappa_2 -- \kappa_2^2 \]
-
- \item\textbf{math 1:} \[f(x)=\int_{-\infty}^xe^{-t^2}\;\mathrm{d}t \]
- \item\textbf{math 2:} \[\sum_{i=1}^\infty\frac{-e^{i\pi}}{2^n} \]
- \item\textbf{math 3:} \[\mbox{det} \begin{pmatrix} 1 & x_1 & \ldots & x_1^{n-1} \\ 1 & x_2 & \ldots & x_2^{n-1} \\ \vdots & \vdots & \ddots & \vdots \\ 1 & x_n & \ldots & x_n^{n-1} \end{pmatrix} = \prod_{1 \leq i < j \leq n} (x_j - x_i) \]
- \item\textbf{math 4:} \[\sqrt{1+\sqrt{1+\sqrt{1+\sqrt{1+\sqrt{1+\sqrt{1+x}}}}}} \]
- \item\textbf{math 5:} \[\left(\stackrel{p}{2}\right)=x^2y^{p-2}-\frac{1}{1-x}\frac{1}{1-x^2} \]
- \item\textbf{math 6:} \[a_0+\frac{1}{a_1+\frac{1}{a_2+\frac{1}{a_3+\frac{1}{a_4}}}} \]
- \item\textbf{math 7:} \[\left(\frac{\partial^2}{\partial x^2}+\frac{\partial^2}{\partial y^2}\right)\left|\varphi(x+\mathrm{i}y)\right|^2=0 \]
- \item\textbf{math 8:} \[2^{2^{2^{x}}} \]
- \item\textbf{math 9:} \[\iint_Df(x,y)\;\mathrm{d}x\;\mathrm{d}y \]
- \item\textbf{math 10 (overbrace):} \[\overbrace{x+x+...+x}{k\ \mathrm{times}} \]
- \item\textbf{math 11 (underbrace):} \[\underbrace{x+x+...+x}{k\ \mathrm{times}} \]
- \item\textbf{math 12 (under/overbrace):} \[\underbrace{\overbrace{x+x+...+x}{k\ \mathrm{times}} \overbrace{x+x+...+x}{k\ \mathrm{times}}}{2k\ \mathrm{times}} \]
- \item\textbf{math 13:} \[y_1''\ \ \ y_2''' \]
- \item\textbf{math 14:} \[f(x)=\begin{cases} 1/3 & \mathrm{if}\ 0\leq x\leq1 \\ 2/3 & \mathrm{if}\ 3\leq x\leq4 \\0 & \mathrm{elsewhere} \end{cases} \]
- \item\textbf{math 15:} \[\Re{z} =\frac{n\pi \dfrac{\theta +\psi}{2}}{\left(\dfrac{\theta +\psi}{2}\right)^2 + \left( \dfrac{1}{2}\log \left\lvert\dfrac{B}{A}\right\rvert\right)^2}. \]
- \item\textbf{math 16:} \[\sum_{m=1}^\infty\sum_{n=1}^\infty\frac{m^2\,n}{3^m\left(m\,3^n+n\,3^m\right)} \]
- \item\textbf{math 17:} \[\phi_n(\kappa) =\frac{1}{4\pi^2\kappa^2} \int_0^\infty\frac{\sin(\kappa R)}{\kappa R}\frac{\partial}{\partial R}\left[R^2\frac{\partial D_n(R)}{\partial R}\right]\,dR \]
- \item\textbf{math 18:} \[{}_pF_q(a_1,\dots,a_p;c_1,\dots,c_q;z)= \sum_{n=0}^\infty\frac{(a_1)_n\cdots(a_p)_n}{(c_1)_n\cdots(c_q)_n}\frac{z^n}{n!} \]
- \item\textbf{math 19 (overset):} \[X \overset{=}{def} Y\ \ \ \ \ X \overset{=}{!} Y\ \ \ \ \ X \overset{\rightarrow}{f} Y\ \ \ \ \ \frac{f(x+\Delta x)-f(x)}{\Delta x}\overset{\longrightarrow}{\Delta x\to 0}f'(x) \]
- \item\textbf{math 20 (underset):} \[X \underset{=}{\text{def (5)}} Y\ \ \ \ \ X \underset{\rightarrow}{f} Y\ \ \ \ \ \frac{f(x+\Delta x)-f(x)}{\Delta x}\underset{\longrightarrow}{\Delta x\to 0}f'(x) \]
- \item\textbf{axiom of power test:} \[\forall A \, \exists P \, \forall B \, [B \in P \iff \forall C \, (C \in B \Rightarrow C \in A)] \]
- \item\textbf{De Morgan's law:} $\neg(P\land Q)\iff(\neg P)\lor(\neg Q)$ or $\overline{\bigcap_{i \in I} A_{i}}\equiv\bigcup_{i \in I} \overline{A_{i}}$ or $\overline{A \cup B}\equiv\overline{A} \cap \overline{B} $
- \item\textbf{quadratic formula:} \[x=\frac{-b \pm \sqrt{b^2-4ac}}{2a} \]
- \item\textbf{combination:} \[\binom{n}{k} = \frac{n(n-1)...(n-k+1)}{k(k-1)\dots1}=\frac{n!}{k!(n-k)!} \]
- \item\textbf{Sophomore's dream 1:} \[\int_0^1 x^{-x}\,dx = \sum_{n=1}^\infty n^{-n}(\scriptstyle{= 1.29128599706266354040728259059560054149861936827\dots)} \]
- \item\textbf{Sophomore's dream 2:} \[\int_0^1 x^x \,dx = \sum_{n=1}^\infty (-1)^{n+1}n^{-n} = - \sum_{n=1}^\infty (-n)^{-n} (\scriptstyle{= 0.78343051071213440705926438652697546940768199014\dots}) \]
- \item\textbf{divergence 1:} \[\operatorname{div}\vec{F} = \nabla\cdot\vec{F}=\frac{\partial U}{\partial x}+\frac{\partial V}{\partial y}+\frac{\partial W}{\partial z} \]
- \item\textbf{divergence 2:} \[\overrightarrow{\operatorname{div}}\,(\mathbf{\underline{\underline{\epsilon}}}) =
- \begin{bmatrix}
- \frac{\partial \epsilon_{xx}}{\partial x} +\frac{\partial \epsilon_{yx}}{\partial y} +\frac{\partial \epsilon_{zx}}{\partial z} \\
- \frac{\partial \epsilon_{xy}}{\partial x} +\frac{\partial \epsilon_{yy}}{\partial y} +\frac{\partial \epsilon_{zy}}{\partial z} \\
- \frac{\partial \epsilon_{xz}}{\partial x} +\frac{\partial \epsilon_{yz}}{\partial y} +\frac{\partial \epsilon_{zz}}{\partial z}
- \end{bmatrix} \]
- \item\textbf{lim, sum ...:} \[\lim_{x\to\infty} f(x) = \binom{k}{r} + \frac{a}{b} \sum_{n=1}^\infty a_n + \displaystyle{ \left\{ \frac{1}{13} \sum_{n=1}^\infty b_n \right\} }. \]
- %\item\textbf{array test:} \[ f(x) := \left\{\begin{array}[ll] x^2\sin\frac{1}{x} & \text{if} x \ne 0, \\ 0 & \text{if } x = 0 . \end{array}\right. \]
- \item\textbf{Schwinger-Dyson:} \[\left\langle\psi\left|\mathcal{T}\{F \phi^j\}\right|\psi\right\rangle=\left\langle\psi\left|\mathcal{T}\{iF_{,i}D^{ij}-FS_{int,i}D^{ij}\}\right|\psi\right\rangle. \]
- \item\textbf{Schrödinger's equation:} \[\left[-\frac{\hbar^2}{-2m}\frac{\partial^2}{\partial x^2}+V\right]\Psi(x)=i\hbar\frac{\partial}{\partial t}\Psi(x) \]
- \item\textbf{Cauchy-Schwarz inequality:} \[\left( \sum_{k=1}^n a_k b_k \right)^2 \leq \left( \sum_{k=1}^n a_k^2 \right) \left( \sum_{k=1}^n b_k^2 \right) \]
- \item\textbf{Maxwell's equations:} \[\begin{aligned}\nabla \times \vec{\mathbf{B}} -\, \frac{1}{c}\, \frac{\partial\vec{\mathbf{E}}}{\partial t} & = \frac{4\pi}{c}\vec{\mathbf{j}} \\ \nabla \cdot \vec{\mathbf{E}} & = 4 \pi \rho \\\nabla \times \vec{\mathbf{E}}\, +\, \frac{1}{c}\, \frac{\partial\vec{\mathbf{B}}}{\partial t} & = \vec{\mathbf{0}} \\\nabla \cdot \vec{\mathbf{B}} & = 0 \end{aligned} \]
-
- \end{itemize}
-
+
+\documentclass[a4paper]{scrartcl}
+
+%% Deutsche Anpassungen %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\usepackage[ngerman]{babel}
+\usepackage[ansinew]{inputenc}
+\usepackage{ulem}
+\usepackage{mathtools}
+\usepackage{esint}
+%\usepackage{txfonts}
+\usepackage[landscape]{geometry}
+\usepackage{amsmath}
+\usepackage{amssymb}
+
+\newcommand{\cbrt}[1]{\sqrt[3]{#1}}
+
+\newcommand{\bbC}{\mathbb{C}}
+\newcommand{\bbH}{\mathbb{H}}
+\newcommand{\bbN}{\mathbb{N}}
+\newcommand{\bbP}{\mathbb{P}}
+\newcommand{\bbQ}{\mathbb{Q}}
+\newcommand{\bbZ}{\mathbb{Z}}
+\newcommand{\bbR}{\mathbb{R}}
+\newcommand{\Angstrom}{\r{A}}
+\newcommand{\lefrighttharpoons}{\rightleftharpoons}
+\newcommand{\subsetnot}{\not\subset}
+\newcommand{\argmax}{\operatorname*{arg\,max}}
+
+
+\newcommand{\va}{\vec{a}}
+\newcommand{\vr}{\vec{r}}
+\newcommand{\vR}{\vec{R}}
+\newcommand{\argmin}{\mbox{arg\:min}}
+\newcommand{\uul}[1]{\uuline{#1}}
+\newcommand{\ool}[1]{\overline{\overline{#1}}}
+\newcommand{\arrow}[1]{\overrightarrow{#1}}
+\begin{document}
+ \begin{itemize}
+
+\item\textbf{std dev:} \[\sigma_x=\sqrt{\langle (x-\langle x\rangle)^2\rangle}=\sqrt{\frac{1}{N-1}\cdot\left( \sum_{i=1}^N{x_i}^2-\frac{1}{N}\cdot\left(\sum_{i=1}^Nx_i\right)^2\right)} \]
+ \item\textbf{std dev 2:} \[\sigma_x=\sqrt{\langle (x-\langle x\rangle)^2\rangle}=\sqrt{\frac{1}{N-1}\cdot\left( \sum_{i=1}^Nx_i^2-\frac{1}{N}\cdot\left(\sum_{i=1}^Nx_i\right)^2\right)} \]
+ \item\textbf{rotation matrix:} \[\mathrm{\mathbf{M}}(\alpha) = \left(\begin{matrix}\cos(\alpha)+n_x^2\cdot (1-\cos(\alpha)) & n_x\cdot n_y\cdot (1-\cos(\alpha))-n_z\cdot \sin(\alpha) & n_x\cdot n_z\cdot (1-\cos(\alpha))+n_y\cdot \sin(\alpha)\\n_x\cdot n_y\cdot (1-\cos(\alpha))+n_z\cdot \sin(\alpha) & \cos(\alpha)+n_y^2\cdot (1-\cos(\alpha)) & n_y\cdot n_z\cdot (1-\cos(\alpha))-n_x\cdot \sin(\alpha)\\n_z\cdot n_x\cdot (1-\cos(\alpha))-n_y\cdot \sin(\alpha) & n_z\cdot n_y\cdot (1-\cos(\alpha))+n_x\cdot \sin(\alpha) & \cos(\alpha)+n_z^2\cdot (1-\cos(\alpha))\end{matrix}\right) \]
+ \item\textbf{like in label at bottom (no MM):} \[\left(\left[\sqrt{2\pi\cdot\int_{-\infty}^\infty f(x)\;\mathrm{d}x}\right]\right) \]
+ \item\textbf{like in label at bottom (MM):} \[\left(\left[\sqrt{2\pi\cdot\int_{-\infty}^\infty f(x)\;\mathrm{d}x}\right]\right) \]
+ \item\textbf{decoration:} \[\vec{x}\vec{X}\vec{\psi} -- \dot{x}\dot{X}\dot{\psi} -- \ddot{x}\ddot{X}\ddot{\psi} -- \overline{x}\overline{X}\overline{\psi} -- \underline{x}\underline{X}\underline{\psi} -- \hat{x}\hat{X}\hat{\psi} -- \tilde{x}\tilde{X}\tilde{\psi} -- \uul{x}\uul{X}\uul{\psi} -- \ool{x}\ool{X}\ool{\psi} -- \bar{x}\bar{X}\bar{\psi} -- \arrow{x}\arrow{X}\arrow{\psi} \]
+ \item\textbf{mathtest:}\\ This is normal text: $this is math:\langle r^2(\tau)\rangle=\left\langle (\vec{r}(t)-\vec{r}(t+\tau) )^2\right\rangle\ \ \ g(\tau)=\frac{1}{N}\cdot\left(1+\frac{2}{3}\frac{\langle r^2(\tau)\rangle}{w_{xy}^2}\right)^{-1} \lfloor\rfloor\lceil\rceil\langle\rangle\left\{\va\left|\|\va\|_2\geq2\right.\right\} \vr\vR$\\$\frac{\sqrt{\sqrt{\sqrt{\sum_{i=0}^\infty \hat{i}^2}+y^\alpha}+1}}{\dot{v}\equiv\ddot{r}}\argmin_{\vec{k}}\sum_{\sqrt{i}=0}^{N}\int_{x_0}^{x_1}\left(\left(\left(x\right)\right)\right)\underbrace{\left[\left\{\frac{\partial f}{\partial x}\right\}\cdot\frac{1}{2}\right]}{\text{underbraced text $\hbar$}}\cdots\frac{\sqrt{\sum_{i=0}^2 \hat{i}^2}+y^\alpha}{\dot{v}\equiv\ddot{r}}, \hat{t}\hat{T} \overbrace{\left|\sqrt{x\cdot Y}\right|}{\propto\bbN\circ\bbZ}$\\$\left<\arrow{x(\tau)}\cdot\vec{R}(t+\bar{\tau})\right> \alpha\beta\gamma\delta\epsilon\Gamma\Delta\Theta\Omega \left\lfloor \left\lceil \cbrt{\hbar\omega}\right\rceil\right\rfloor $
+ \item\textbf{chi2 test:} \[\vec{p}^\ast=\argmax\limits_{\vec{p}}\chi^2=\argmax\limits_{\vec{p}}\sum\limits_{i=1}^N\left|\frac{\hat{f}_i-f(x_i;\vec{p})}{\sigma_i}\right|^2\]
+ \item\textbf{upper/lower parantheses test:} \[ \text{bblabla} \frac{1}{2}\cdot\left(\frac{1}{\mathrm{e}^x+\mathrm{e}^{-x}}\right)\cdot\left(\frac{1}{\frac{1+2}{5+x}}\right)\cdot\left(\frac{1}{\exp\left[-\frac{y^2}{\sqrt{x}}\right]\cdot\exp\left[-\frac{1}{\frac{1}{2}}\right]}\right) \]
+ \item\textbf{ACF test:} \[g_{rg}^{ab}(\tau)=\frac{1}{N}\cdot\left(1+\frac{2}{3}\frac{\langle r^2(\tau)\rangle}{w_{xy}^2}\right)^{-1}\cdot\left(1+\frac{2}{3}\frac{\langle r^2(\tau)\rangle}{w_{xy}^2}\right)^{-\frac{1}{2}} \]
+ \item\textbf{MSD test:} \[\mathrm{MSD}(\tau)\equiv\langle r^2(\tau)\rangle=\left\langle (\vec{r}(t)-\vec{r}(t+\tau) )^2\right\rangle=2n\cdot\frac{K_\alpha}{\Gamma(1+\alpha)}\cdot\tau^\alpha \]
+ \item\textbf{math: blackboard:} \[\mathbb{ABCDEFGHIJKLMNOPQRSTUVWXYZ120} \]
+ \item\textbf{math: bf:} \[\mathbf{ABCDEFGHIJKLMNOPQRSTUVWXYZ120} \]
+ \item\textbf{math: rm:} \[\mathrm{ABCDEFGHIJKLMNOPQRSTUVWXYZ120} \]
+ \item\textbf{math: cal:} \[\mathcal{ABCDEFGHIJKLMNOPQRSTUVWXYZ120} \]
+ \item\textbf{subscript test:} \[r_{123}\ \ r_{\frac{1}{2}} \]
+ \item\textbf{subscript0 test:} \[r_{123} \]
+ \item\textbf{subscript1 test:} \[r_{123}\ \]
+ \item\textbf{subscript2 test:} \[r_{123}\ \ \]
+ \item\textbf{subscript3 test:} \[r_{123}r_{\frac{1}{2}} \]
+ \item\textbf{superscript test:} \[r^{123}\ \ r^{\frac{1}{2}} \]
+ \item\textbf{superscript0 test:} \[r^{123} \]
+ \item\textbf{superscript1 test:} \[r^{123}\ \]
+ \item\textbf{superscript2 test:} \[r^{123}\ \ \]
+ \item\textbf{superscript3 test:} \[r^{123}r^{\frac{1}{2}} \]
+ \item\textbf{asuperscript test:} \[a^{123}\ \ a^{\frac{1}{2}} \]
+ \item\textbf{asuperscript0 test:} \[a^{123} \]
+ \item\textbf{gsuperscript1 test:} \[g^{123}\ \]
+ \item\textbf{gsuperscript2 test:} \[g^{123}\ \ \]
+ \item\textbf{gsuperscript3 test:} \[g^{123}g^{\frac{1}{2}} \]
+ \item\textbf{frac test:} \[\frac{a}{b}+\frac{g}{a}-\frac{a^2}{b^2}\cdot\frac{a^2}{b^{\frac{1}{2}}} \]
+ \item\textbf{tfrac test:} \[\tfrac{a}{b}+\tfrac{g}{a}-\tfrac{a^2}{b^2}\cdot\tfrac{a^2}{b^{\tfrac{1}{2}}} \]
+ \item\textbf{dfrac test:} \[\dfrac{a}{b}+\dfrac{g}{a}-\dfrac{a^2}{b^2}\cdot\dfrac{a^2}{b^{\dfrac{1}{2}}} \]
+ \item\textbf{stackrel test:} \[\stackrel{a}{b}+\stackrel{g}{a}-\stackrel{a^2}{b^2}\cdot\stackrel{a^2}{b^{\stackrel{1}{2}}} \]
+ \item\textbf{brace5 test: ( )} \[\left(\left(\left( r^{123}\right)\right)\right) -- \left(\left(\left( r^{123}\right)\right)\right) \]
+ \item\textbf{brace6 test: [ ]} \[\left[\left[\left[ r^{123}\right]\right]\right] -- \left[\left[\left[ r^{123}\right]\right]\right] \]
+ \item\textbf{brace7 test: { }} \[\left\{\left\{\left\{ r^{123}\right\}\right\}\right\} -- \left\{\left\{\left\{ r^{123}\right\}\right\}\right\} \]
+ \item\textbf{brace8 test: || ||} \[\left\|\left\|\left\| r^{123}\right\|\right\|\right\| -- \left\|\left\|\left\| r^{123}\right\|\right\|\right\| \]
+ \item\textbf{brace9 test: | |} \[\left|\left|\left| r^{123}\right|\right|\right| -- \left|\left|\left| r^{123}\right|\right|\right| \]
+ \item\textbf{brace10 test} \[\left\{\left[\left( r^{123}\right)\right]\right\} -- \left\{\left[\left( r^{123}\right)\right]\right\} \]
+ \item\textbf{brace11 test: floor} \[\left\lfloor\left\lfloor\left\lfloor r^{123}\right\rfloor\right\rfloor\right\rfloor -- \left\lfloor\left\lfloor\left\lfloor r^{123}\right\rfloor\right\rfloor\right\rfloor \]
+ \item\textbf{brace12 test: ceil} \[\left\lceil\left\lceil\left\lceil r^{123}\right\rceil\right\rceil\right\rceil -- \left\lceil\left\lceil\left\lceil r^{123}\right\rceil\right\rceil\right\rceil \]
+ \item\textbf{sub-, superscript test} \[r^{1234}_{321} r_{321}^{1234} -- r^{1234}_{321} r_{321}^{1234} -- \kappa^2 -- \kappa_2 -- \kappa_2^2 \]
+ \item\textbf{super-, subscript test} \[r^{123}_{4321} r_{4321}^{123} -- r^{123}_{4321} r_{4321}^{123} -- \kappa^2 -- \kappa_2 -- \kappa_2^2 \]
+
+ \item\textbf{math 1:} \[f(x)=\int_{-\infty}^xe^{-t^2}\;\mathrm{d}t \]
+ \item\textbf{math 2:} \[\sum_{i=1}^\infty\frac{-e^{i\pi}}{2^n} \]
+ \item\textbf{math 3:} \[\mbox{det} \begin{pmatrix} 1 & x_1 & \ldots & x_1^{n-1} \\ 1 & x_2 & \ldots & x_2^{n-1} \\ \vdots & \vdots & \ddots & \vdots \\ 1 & x_n & \ldots & x_n^{n-1} \end{pmatrix} = \prod_{1 \leq i < j \leq n} (x_j - x_i) \]
+ \item\textbf{math 4:} \[\sqrt{1+\sqrt{1+\sqrt{1+\sqrt{1+\sqrt{1+\sqrt{1+x}}}}}} \]
+ \item\textbf{math 5:} \[\left(\stackrel{p}{2}\right)=x^2y^{p-2}-\frac{1}{1-x}\frac{1}{1-x^2} \]
+ \item\textbf{math 6:} \[a_0+\frac{1}{a_1+\frac{1}{a_2+\frac{1}{a_3+\frac{1}{a_4}}}} \]
+ \item\textbf{math 7:} \[\left(\frac{\partial^2}{\partial x^2}+\frac{\partial^2}{\partial y^2}\right)\left|\varphi(x+\mathrm{i}y)\right|^2=0 \]
+ \item\textbf{math 8:} \[2^{2^{2^{x}}} \]
+ \item\textbf{math 9:} \[\iint_Df(x,y)\;\mathrm{d}x\;\mathrm{d}y \]
+ \item\textbf{math 10 (overbrace):} \[\overbrace{x+x+...+x}{k\ \mathrm{times}} \]
+ \item\textbf{math 11 (underbrace):} \[\underbrace{x+x+...+x}{k\ \mathrm{times}} \]
+ \item\textbf{math 12 (under/overbrace):} \[\underbrace{\overbrace{x+x+...+x}{k\ \mathrm{times}} \overbrace{x+x+...+x}{k\ \mathrm{times}}}{2k\ \mathrm{times}} \]
+ \item\textbf{math 13:} \[y_1''\ \ \ y_2''' \]
+ \item\textbf{math 14:} \[f(x)=\begin{cases} 1/3 & \mathrm{if}\ 0\leq x\leq1 \\ 2/3 & \mathrm{if}\ 3\leq x\leq4 \\0 & \mathrm{elsewhere} \end{cases} \]
+ \item\textbf{math 15:} \[\Re{z} =\frac{n\pi \dfrac{\theta +\psi}{2}}{\left(\dfrac{\theta +\psi}{2}\right)^2 + \left( \dfrac{1}{2}\log \left\lvert\dfrac{B}{A}\right\rvert\right)^2}. \]
+ \item\textbf{math 16:} \[\sum_{m=1}^\infty\sum_{n=1}^\infty\frac{m^2\,n}{3^m\left(m\,3^n+n\,3^m\right)} \]
+ \item\textbf{math 17:} \[\phi_n(\kappa) =\frac{1}{4\pi^2\kappa^2} \int_0^\infty\frac{\sin(\kappa R)}{\kappa R}\frac{\partial}{\partial R}\left[R^2\frac{\partial D_n(R)}{\partial R}\right]\,dR \]
+ \item\textbf{math 18:} \[{}_pF_q(a_1,\dots,a_p;c_1,\dots,c_q;z)= \sum_{n=0}^\infty\frac{(a_1)_n\cdots(a_p)_n}{(c_1)_n\cdots(c_q)_n}\frac{z^n}{n!} \]
+ \item\textbf{math 19 (overset):} \[X \overset{=}{def} Y\ \ \ \ \ X \overset{=}{!} Y\ \ \ \ \ X \overset{\rightarrow}{f} Y\ \ \ \ \ \frac{f(x+\Delta x)-f(x)}{\Delta x}\overset{\longrightarrow}{\Delta x\to 0}f'(x) \]
+ \item\textbf{math 20 (underset):} \[X \underset{=}{\text{def (5)}} Y\ \ \ \ \ X \underset{\rightarrow}{f} Y\ \ \ \ \ \frac{f(x+\Delta x)-f(x)}{\Delta x}\underset{\longrightarrow}{\Delta x\to 0}f'(x) \]
+ \item\textbf{axiom of power test:} \[\forall A \, \exists P \, \forall B \, [B \in P \iff \forall C \, (C \in B \Rightarrow C \in A)] \]
+ \item\textbf{De Morgan's law:} $\neg(P\land Q)\iff(\neg P)\lor(\neg Q)$ or $\overline{\bigcap_{i \in I} A_{i}}\equiv\bigcup_{i \in I} \overline{A_{i}}$ or $\overline{A \cup B}\equiv\overline{A} \cap \overline{B} $
+ \item\textbf{quadratic formula:} \[x=\frac{-b \pm \sqrt{b^2-4ac}}{2a} \]
+ \item\textbf{combination:} \[\binom{n}{k} = \frac{n(n-1)...(n-k+1)}{k(k-1)\dots1}=\frac{n!}{k!(n-k)!} \]
+ \item\textbf{Sophomore's dream 1:} \[\int_0^1 x^{-x}\,dx = \sum_{n=1}^\infty n^{-n}(\scriptstyle{= 1.29128599706266354040728259059560054149861936827\dots)} \]
+ \item\textbf{Sophomore's dream 2:} \[\int_0^1 x^x \,dx = \sum_{n=1}^\infty (-1)^{n+1}n^{-n} = - \sum_{n=1}^\infty (-n)^{-n} (\scriptstyle{= 0.78343051071213440705926438652697546940768199014\dots}) \]
+ \item\textbf{divergence 1:} \[\operatorname{div}\vec{F} = \nabla\cdot\vec{F}=\frac{\partial U}{\partial x}+\frac{\partial V}{\partial y}+\frac{\partial W}{\partial z} \]
+ \item\textbf{divergence 2:} \[\overrightarrow{\operatorname{div}}\,(\mathbf{\underline{\underline{\epsilon}}}) =
+ \begin{bmatrix}
+ \frac{\partial \epsilon_{xx}}{\partial x} +\frac{\partial \epsilon_{yx}}{\partial y} +\frac{\partial \epsilon_{zx}}{\partial z} \\
+ \frac{\partial \epsilon_{xy}}{\partial x} +\frac{\partial \epsilon_{yy}}{\partial y} +\frac{\partial \epsilon_{zy}}{\partial z} \\
+ \frac{\partial \epsilon_{xz}}{\partial x} +\frac{\partial \epsilon_{yz}}{\partial y} +\frac{\partial \epsilon_{zz}}{\partial z}
+ \end{bmatrix} \]
+ \item\textbf{lim, sum ...:} \[\lim_{x\to\infty} f(x) = \binom{k}{r} + \frac{a}{b} \sum_{n=1}^\infty a_n + \displaystyle{ \left\{ \frac{1}{13} \sum_{n=1}^\infty b_n \right\} }. \]
+ %\item\textbf{array test:} \[ f(x) := \left\{\begin{array}[ll] x^2\sin\frac{1}{x} & \text{if} x \ne 0, \\ 0 & \text{if } x = 0 . \end{array}\right. \]
+ \item\textbf{Schwinger-Dyson:} \[\left\langle\psi\left|\mathcal{T}\{F \phi^j\}\right|\psi\right\rangle=\left\langle\psi\left|\mathcal{T}\{iF_{,i}D^{ij}-FS_{int,i}D^{ij}\}\right|\psi\right\rangle. \]
+ \item\textbf{Schrödinger's equation:} \[\left[-\frac{\hbar^2}{-2m}\frac{\partial^2}{\partial x^2}+V\right]\Psi(x)=i\hbar\frac{\partial}{\partial t}\Psi(x) \]
+ \item\textbf{Cauchy-Schwarz inequality:} \[\left( \sum_{k=1}^n a_k b_k \right)^2 \leq \left( \sum_{k=1}^n a_k^2 \right) \left( \sum_{k=1}^n b_k^2 \right) \]
+ \item\textbf{Maxwell's equations:} \[\begin{aligned}\nabla \times \vec{\mathbf{B}} -\, \frac{1}{c}\, \frac{\partial\vec{\mathbf{E}}}{\partial t} & = \frac{4\pi}{c}\vec{\mathbf{j}} \\ \nabla \cdot \vec{\mathbf{E}} & = 4 \pi \rho \\\nabla \times \vec{\mathbf{E}}\, +\, \frac{1}{c}\, \frac{\partial\vec{\mathbf{B}}}{\partial t} & = \vec{\mathbf{0}} \\\nabla \cdot \vec{\mathbf{B}} & = 0 \end{aligned} \]
+
+ \end{itemize}
+
\end{document}
\ No newline at end of file
diff --git a/test/jkqtmathtext_test/testform.cpp b/examples/jkqtmathtext_test/testform.cpp
similarity index 98%
rename from test/jkqtmathtext_test/testform.cpp
rename to examples/jkqtmathtext_test/testform.cpp
index 196693bc16..7ee6308847 100644
--- a/test/jkqtmathtext_test/testform.cpp
+++ b/examples/jkqtmathtext_test/testform.cpp
@@ -1,387 +1,387 @@
-#include "testform.h"
-#include "ui_testform.h"
-#include
-
-
-TestForm::TestForm(QWidget *parent) :
- QWidget(parent),
- ui(new Ui::TestForm)
-{
- ui->setupUi(this);
- ui->cmbTestset->addItem("simple relations", "$a{\\leq}b$, $a{\\geq}b$, $a{\\equiv}b$, $a=b$, $a{\\neq}b$, $ab$");
- ui->cmbTestset->addItem("simple relations in different modes", "math: $a{\\leq}b$, math/no braces: $a\\leq b$, no math: a{\\leq}b, no math/no braces: a\\leq b");
- ui->cmbTestset->addItem("named symbols 1", "ll: $\\ll$\\ gg: $\\gg$\\ leq: $\\leq$\\ geq: $\\geq$\\ pm: $\\pm$\\ mp: $\\mp$\\ ");
- ui->cmbTestset->addItem("named symbols 2", "nexists: $\\nexists$\\ ni: $\\ni$\\ notni: $\\notni$\\ circ: $\\circ$\\ sim: $\\sim$\\ emptyset: $\\emptyset$\\ odot: $\\odot$\\ ominus: $\\ominus$\\ subsetnot: $\\subsetnot$\\ bot: $\\bot$");
- ui->cmbTestset->addItem("named symbols 3", "leftharpoonup: $\\leftharpoonup$\\ rightharpoonup: $\\rightharpoonup$\\ upharpoonleft: $\\upharpoonleft$\\ downharpoonleft: $\\downharpoonleft$\\ leftrightharpoon: $\\leftrightharpoon$\\ rightleftharpoon: $\\rightleftharpoon$");
- ui->cmbTestset->addItem("named symbols 4", "coprod: $\\coprod$\\ leftharpoondown: $\\leftharpoondown$\\ rightharpoondown: $\\rightharpoondown$\\ upharpoonright: $\\upharpoonright$\\ downharpoonright: $\\downharpoonright$\\ nwarrow: $\\nwarrow$\\ nearrow: $\\nearrow$\\ ");
- ui->cmbTestset->addItem("named symbols 5", "searrow: $\\searrow$\\ swarrow: $\\swarrow$\\ mapsto: $\\mapsto$\\ div: $\\div$\\ multimap: $\\multimap$\\ maporiginal: $\\maporiginal$\\ mapimage: $\\mapimage$\\ ");
- ui->cmbTestset->addItem("named symbols 6", "times: $\\times$\\ propto: $\\propto$\\ bullet: $\\bullet$\\ neq: $\\neq$\\ ne: $\\ne$\\ equiv: $\\equiv$\\ approx: $\\approx$\\ otimes: $\\otimes$\\ oplus: $\\oplus$");
- ui->cmbTestset->addItem("named symbols 7", "oslash: $\\oslash$\\ cap: $\\cap$\\ land: $\\land$\\ cup: $\\cup$\\ lor: $\\lor$\\ supset: $\\supset$\\ supseteq: $\\supseteq$\\ supsetnot: $\\supsetnot$\\ subset: $\\subset$");
- ui->cmbTestset->addItem("named symbols 8", "subseteq: $\\subseteq$\\ in: $\\in$\\ notin: $\\notin$\\ cdot: $\\cdot$\\ wedge: $\\wedge$\\ vee: $\\vee$\\ cong: $\\cong$\\ bot: $\\bot$");
- ui->cmbTestset->addItem("symbols", "$\\ll\\gg\\leq\\geq\\leftrightarrow\\leftarrow\\rightarrow\\to\\uparrow\\downarrow\\updownarrow\\Leftrightarrow\\iff\\Leftarrow\\Rightarrow\\Uparrow\\Downarrow\\Updownarrow\\pm\\mp\\nexists\\ni\\notni\\circ\\sim\\emptyset\\odot\\ominus\\subsetnot\\bot\\leftharpoonup\\rightharpoonup\\upharpoonleft\\downharpoonleft\\leftrightharpoon\\rightleftharpoon\\coprod\\leftharpoondown\\rightharpoondown\\upharpoonright\\downharpoonright\\nwarrow\\nearrow\\searrow\\swarrow\\mapsto\\div\\multimap\\maporiginal\\mapimage\\times\\propto\\bullet\\neq\\ne\\equiv\\approx\\otimes\\oplus\\oslash\\cap\\land\\cup\\lor\\supset\\supseteq\\supsetnot\\subset\\subseteq\\in\\notin\\cdot\\wedge\\vee\\cong\\bot$");
- ui->cmbTestset->addItem("std dev", "$\\sigma_x=\\sqrt{\\langle (x-\\langle x\\rangle)^2\\rangle}=\\sqrt{\\frac{1}{N-1}\\cdot\\left( \\sum_{i=1}^N{x_i}^2-\\frac{1}{N}\\cdot\\left(\\sum_{i=1}^Nx_i\\right)^2\\right)}$");
- ui->cmbTestset->addItem("std dev 2", "$\\sigma_x=\\sqrt{\\langle (x-\\langle x\\rangle)^2\\rangle}=\\sqrt{\\frac{1}{N-1}\\cdot\\left( \\sum_{i=1}^Nx_i^2-\\frac{1}{N}\\cdot\\left(\\sum_{i=1}^Nx_i\\right)^2\\right)}$");
- ui->cmbTestset->addItem("rotation matrix", "$\\mathrm{\\mathbf{M}}(\\alpha) = \\left(\\begin{matrix}\\cos(\\alpha)+n_x^2\\cdot (1-\\cos(\\alpha)) & n_x\\cdot n_y\\cdot (1-\\cos(\\alpha))-n_z\\cdot \\sin(\\alpha) & n_x\\cdot n_z\\cdot (1-\\cos(\\alpha))+n_y\\cdot \\sin(\\alpha)\\\\n_x\\cdot n_y\\cdot (1-\\cos(\\alpha))+n_z\\cdot \\sin(\\alpha) & \\cos(\\alpha)+n_y^2\\cdot (1-\\cos(\\alpha)) & n_y\\cdot n_z\\cdot (1-\\cos(\\alpha))-n_x\\cdot \\sin(\\alpha)\\\\n_z\\cdot n_x\\cdot (1-\\cos(\\alpha))-n_y\\cdot \\sin(\\alpha) & n_z\\cdot n_y\\cdot (1-\\cos(\\alpha))+n_x\\cdot \\sin(\\alpha) & \\cos(\\alpha)+n_z^2\\cdot (1-\\cos(\\alpha))\\end{matrix}\\right)$");
- ui->cmbTestset->addItem("like in label at bottom (no MM)", "\\left(\\left[\\sqrt{2\\pi\\cdot\\int_{-\\infty}^\\infty f(x)\\;\\mathrm{d}x}\\right]\\right)");
- ui->cmbTestset->addItem("like in label at bottom (MM)", "$\\left(\\left[\\sqrt{2\\pi\\cdot\\int_{-\\infty}^\\infty f(x)\\;\\mathrm{d}x}\\right]\\right)$");
- ui->cmbTestset->addItem("text 0", "text");
- ui->cmbTestset->addItem("text 1", "text \\mathbf{bold}");
- ui->cmbTestset->addItem("text 2", "text \\mathbf{bold}\\textcolor{red}{RED}");
- ui->cmbTestset->addItem("decoration", "$\\vec{x}\\vec{X}\\vec{\\psi} -- \\dot{x}\\dot{X}\\dot{\\psi} -- \\ddot{x}\\ddot{X}\\ddot{\\psi} -- \\overline{x}\\overline{X}\\overline{\\psi} -- \\underline{x}\\underline{X}\\underline{\\psi} -- \\hat{x}\\hat{X}\\hat{\\psi} -- \\tilde{x}\\tilde{X}\\tilde{\\psi} -- \\uul{x}\\uul{X}\\uul{\\psi} -- \\ool{x}\\ool{X}\\ool{\\psi} -- \\bar{x}\\bar{X}\\bar{\\psi} -- \\arrow{x}\\arrow{X}\\arrow{\\psi}$");
- ui->cmbTestset->addItem("mathtest", "This is normal text: $this is math:\\langle r^2(\\tau)\\rangle=\\left\\langle (\\vec{r}(t)-\\vec{r}(t+\\tau) )^2\\right\\rangle\\ \\ \\ g(\\tau)=\\frac{1}{N}\\cdot\\left(1+\\frac{2}{3}\\frac{\\langle r^2(\\tau)\\rangle}{w_{xy}^2}\\right)^{-1} \\lfloor\\rfloor\\lceil\\rceil\\langle\\rangle\\left\\{\\va\\left|\\|\\va\\|_2\\geq2\\right.\\right\\} \\vr\\vR\\frac{\\sqrt{\\sqrt{\\sqrt{\\sum_{i=0}^\\infty \\hat{i}^2}+y^\\alpha}+1}}{\\dot{v}\\equiv\\ddot{r}}\\argmin_{\\vec{k}}\\sum_{\\sqrt{i}=0}^{N}\\int_{x_0}^{x_1}\\left(\\left(\\left(x\\right)\\right)\\right)\\underbrace{\\left[\\left\\{\\frac{\\partial f}{\\partial x}\\right\\}\\cdot\\frac{1}{2}\\right]}{\\text{underbraced text \\hbar}}\\cdots\\frac{\\sqrt{\\sum_{i=0}^2 \\hat{i}^2}+y^\\alpha}{\\dot{v}\\equiv\\ddot{r}}, \\hat{t}\\hat{T} \\overbrace{\\left|\\sqrt{x\\cdot Y}\\right|}{\\propto\\bbN\\circ\\bbZ} \\left<\\arrow{x(\\tau)}\\cdot\\vec{R}(t+\\bar{\\tau})\\right> \\alpha\\beta\\gamma\\delta\\epsilon\\Gamma\\Delta\\Theta\\Omega \\left\\_\\left~\\cbrt{\\hbar\\omega}\\right~\\right\\_$");
- ui->cmbTestset->addItem("upper/lower parantheses test:", "$\\text{bblabla} \\frac{1}{2}\\cdot\\left(\\frac{1}{\\mathrm{e}^x+\\mathrm{e}^{-x}}\\right)\\cdot\\left(\\frac{1}{\\frac{1+2}{5+x}}\\right)\\cdot\\left(\\frac{1}{\\exp\\left[-\\frac{y^2}{\\sqrt{x}}\\right]\\cdot\\exp\\left[-\\frac{1}{\\frac{1}{2}}\\right]}\\right) $");
- ui->cmbTestset->addItem("ACF test", "$g_{rg}^{ab}(\\tau)=\\frac{1}{N}\\cdot\\left(1+\\frac{2}{3}\\frac{\\langle r^2(\\tau)\\rangle}{w_{xy}^2}\\right)^{-1}\\cdot\\left(1+\\frac{2}{3}\\frac{\\langle r^2(\\tau)\\rangle}{w_{xy}^2}\\right)^{-\\frac{1}{2}}$");
- ui->cmbTestset->addItem("MSD test", "$\\mathrm{MSD}(\\tau)\\equiv\\langle r^2(\\tau)\\rangle=\\left\\langle (\\vec{r}(t)-\\vec{r}(t+\\tau) )^2\\right\\rangle=2n\\cdot\\frac{K_\\alpha}{\\Gamma(1+\\alpha)}\\cdot\\tau^\\alpha$");
- ui->cmbTestset->addItem("f() test", "$f(\\vec{x})=\\frac{1}{\\sqrt{2\\pi\\cdot\\sigma^2}}\\exp\\left(-\\frac{(\\vec{x}-\\vec{x}_0)^2}{\\sigma^2}\\right)$");
- ui->cmbTestset->addItem("chi^2 test", "$\\vec{p}^\\ast=\\argmax\\limits_{\\vec{p}}\\chi^2=\\argmax\\limits_{\\vec{p}}\\sum\\limits_{i=1}^N\\left|\\frac{\\hat{f}_i-f(x_i;\\vec{p})}{\\sigma_i}\\right|^2$");
- ui->cmbTestset->addItem("symbol test", "\\vdots\\cdots\\ddots\\iddots\\lfloor\\rfloor\\lceil\\rceil\\langle\\rangle\\sum\\int \\iint \\oint \\prod \\leftrightarrow \\leftarrow\\Leftarrow\\rightarrow\\Rightarrow\\pm\\mp\\leq\\geq\\ll\\gg\\hbar\\euro\\bbC\\bbH\\bbN\\bbP\\bbQ\\bbZ\\bbR\\Angstrom\\Alef\\Bet\\Gimel\\Dalet\\nexists\\ni\\notni\\circ\\tilde\\oiint\\oiiint\\emptyset\\odot\\ominus\\subsetnot\\DC\\bot\\cdots\\perthousand\\leftharpoonup\\rightharpoonup \\upharpoonleft \\downharpoonleft \\leftrightharpoon \\rightleftharpoon \\coprod \\leftharpoondown \\rightharpoondown \\nwarrow \\nearrow \\mapsto \\cent \\pound \\yen \\div \\multimap \\maporiginal \\mapimage \\bigcap \\bigcup \\benzene \\times \\cdot \\propto \\equiv \\Im \\Re \\ ");
- ui->cmbTestset->addItem("arrowtest 1", "$\\leftarrow \\longleftarrow \\Leftarrow \\Longleftarrow \\rightarrow \\longrightarrow \\Rightarrow \\Longrightarrow \\uparrow \\Uparrow \\downarrow \\Downarrow \\leftrightarrow \\Leftrightarrow \\longleftrightarrow \\Longleftrightarrow$");
- ui->cmbTestset->addItem("arrowtest 2", "$\\nwarrow \\nearrow \\searrow \\swarrow \\mapsto \\leftharpoonup \\rightharpoonup \\upharpoonleft \\downharpoonleft \\leftrightharpoon \\rightleftharpoon \\leftharpoondown \\rightharpoondown \\upharpoonright \\downharpoonright $");
- ui->cmbTestset->addItem("math: blackboard", "$\\mathbb{ABCDEFGHIJKLMNOPQRSTUVWXYZ120}$");
- ui->cmbTestset->addItem("math: bf", "$\\mathbf{ABCDEFGHIJKLMNOPQRSTUVWXYZ120}$");
- ui->cmbTestset->addItem("math: rm", "$\\mathrm{ABCDEFGHIJKLMNOPQRSTUVWXYZ120}$");
- ui->cmbTestset->addItem("math: cal", "$\\mathcal{ABCDEFGHIJKLMNOPQRSTUVWXYZ120}$");
- ui->cmbTestset->addItem("subscript test", "$r_{123}\\ \\ r_{\\frac{1}{2}}$");
- ui->cmbTestset->addItem("subscript0 test", "$r_{123}$");
- ui->cmbTestset->addItem("subscript1 test", "$r_{123}\\ $");
- ui->cmbTestset->addItem("subscript2 test", "$r_{123}\\ \\ $");
- ui->cmbTestset->addItem("subscript3 test", "$r_{123}r_{\\frac{1}{2}}$");
- ui->cmbTestset->addItem("superscript test", "$r^{123}\\ \\ r^{\\frac{1}{2}}$");
- ui->cmbTestset->addItem("superscript0 test", "$r^{123}$");
- ui->cmbTestset->addItem("superscript1 test", "$r^{123}\\ $");
- ui->cmbTestset->addItem("superscript2 test", "$r^{123}\\ \\ $");
- ui->cmbTestset->addItem("superscript3 test", "$r^{123}r^{\\frac{1}{2}}$");
- ui->cmbTestset->addItem("asuperscript test", "$a^{123}\\ \\ a^{\\frac{1}{2}}$");
- ui->cmbTestset->addItem("asuperscript0 test", "$a^{123}$");
- ui->cmbTestset->addItem("gsuperscript1 test", "$g^{123}\\ $");
- ui->cmbTestset->addItem("gsuperscript2 test", "$g^{123}\\ \\ $");
- ui->cmbTestset->addItem("gsuperscript3 test", "$g^{123}g^{\\frac{1}{2}}$");
- ui->cmbTestset->addItem("frac test", "$\\frac{a}{b}+\\frac{g}{a}-\\frac{a^2}{b^2}\\cdot\\frac{a^2}{b^{\\frac{1}{2}}}$");
- ui->cmbTestset->addItem("tfrac test", "$\\tfrac{a}{b}+\\tfrac{g}{a}-\\tfrac{a^2}{b^2}\\cdot\\tfrac{a^2}{b^{\\tfrac{1}{2}}}$");
- ui->cmbTestset->addItem("dfrac test", "$\\dfrac{a}{b}+\\dfrac{g}{a}-\\dfrac{a^2}{b^2}\\cdot\\dfrac{a^2}{b^{\\dfrac{1}{2}}}$");
- ui->cmbTestset->addItem("stackrel test", "$\\stackrel{a}{b}+\\stackrel{g}{a}-\\stackrel{a^2}{b^2}\\cdot\\stackrel{a^2}{b^{\\stackrel{1}{2}}}$");
- ui->cmbTestset->addItem("brace0 test", "\\langle\\langle -- $\\langle\\langle$");
- ui->cmbTestset->addItem("brace1 test", "\\langle\\langle r^{123} -- $\\langle\\langle r^{123}$");
- ui->cmbTestset->addItem("brace2 test", "\\langle\\langle r^{123}\\rangle\\rangle -- $\\langle\\langle r^{123}\\rangle\\rangle$");
- ui->cmbTestset->addItem("brace3 test", "\\left\\langle r^{123}\\right\\rangle -- $\\left\\langle r^{123}\\right\\rangle$");
- ui->cmbTestset->addItem("brace4 test", "\\left\\langle\\left\\langle\\left\\langle r^{123}\\right\\rangle\\right\\rangle\\right\\rangle -- $\\left\\langle\\left\\langle\\left\\langle r^{123}\\right\\rangle\\right\\rangle\\right\\rangle$");
- ui->cmbTestset->addItem("brace5 test: ( )", "\\left(\\left(\\left( r^{123}\\right)\\right)\\right) -- $\\left(\\left(\\left( r^{123}\\right)\\right)\\right)$");
- ui->cmbTestset->addItem("brace6 test: [ ]", "\\left[\\left[\\left[ r^{123}\\right]\\right]\\right] -- $\\left[\\left[\\left[ r^{123}\\right]\\right]\\right]$");
- ui->cmbTestset->addItem("brace7 test: { }", "\\left\\{\\left\\{\\left\\{ r^{123}\\right\\}\\right\\}\\right\\} -- $\\left\\{\\left\\{\\left\\{ r^{123}\\right\\}\\right\\}\\right\\}$");
- ui->cmbTestset->addItem("brace8 test: || ||", "\\left\\|\\left\\|\\left\\| r^{123}\\right\\|\\right\\|\\right\\| -- $\\left\\|\\left\\|\\left\\| r^{123}\\right\\|\\right\\|\\right\\|$");
- ui->cmbTestset->addItem("brace9 test: | |", "\\left|\\left|\\left| r^{123}\\right|\\right|\\right| -- $\\left|\\left|\\left| r^{123}\\right|\\right|\\right|$");
- ui->cmbTestset->addItem("brace10 test", "\\left\\{\\left[\\left( r^{123}\\right)\\right]\\right\\} -- $\\left\\{\\left[\\left( r^{123}\\right)\\right]\\right\\}$");
- ui->cmbTestset->addItem("brace11 test: floor", "\\left\\lfloor\\left\\lfloor\\left\\lfloor r^{123}\\right\\rfloor\\right\\rfloor\\right\\rfloor -- $\\left\\lfloor\\left\\lfloor\\left\\lfloor r^{123}\\right\\rfloor\\right\\rfloor\\right\\rfloor$");
- ui->cmbTestset->addItem("brace12 test: ceil", "\\left\\lceil\\left\\lceil\\left\\lceil r^{123}\\right\\rceil\\right\\rceil\\right\\rceil -- $\\left\\lceil\\left\\lceil\\left\\lceil r^{123}\\right\\rceil\\right\\rceil\\right\\rceil$");
- ui->cmbTestset->addItem("sub-, superscript test", "r^{1234}_{321} r_{321}^{1234} -- $r^{1234}_{321} r_{321}^{1234} -- \\kappa^2 -- \\kappa_2 -- \\kappa_2^2$");
- ui->cmbTestset->addItem("super-, subscript test", "r^{123}_{4321} r_{4321}^{123} -- $r^{123}_{4321} r_{4321}^{123} -- \\kappa^2 -- \\kappa_2 -- \\kappa_2^2$");
- //ui->cmbTestset->addItem("", "");
- ui->cmbTestset->addItem("math 1", "$f(x)=\\int_{-\\infty}^xe^{-t^2}\\;\\mathrm{d}t$");
- ui->cmbTestset->addItem("math 2", "$\\sum_{i=1}^\\infty\\frac{-e^{i\\pi}}{2^n}$");
- ui->cmbTestset->addItem("math 3", "$\\mbox{det} \\begin{pmatrix} 1 & x_1 & \\ldots & x_1^{n-1} \\\\ 1 & x_2 & \\ldots & x_2^{n-1} \\\\ \\vdots & \\vdots & \\ddots & \\vdots \\\\ 1 & x_n & \\ldots & x_n^{n-1} \\end{pmatrix} = \\prod_{1 \\leq i < j \\leq n} (x_j - x_i) $");
- ui->cmbTestset->addItem("math 4", "$\\sqrt{1+\\sqrt{1+\\sqrt{1+\\sqrt{1+\\sqrt{1+\\sqrt{1+x}}}}}}$");
- ui->cmbTestset->addItem("math 5", "$\\left(\\stackrel{p}{2}\\right)=x^2y^{p-2}-\\frac{1}{1-x}\\frac{1}{1-x^2}$");
- ui->cmbTestset->addItem("math 6", "$a_0+\\frac{1}{a_1+\\frac{1}{a_2+\\frac{1}{a_3+\\frac{1}{a_4}}}}$");
- ui->cmbTestset->addItem("math 7", "$\\left(\\frac{\\partial^2}{\\partial x^2}+\\frac{\\partial^2}{\\partial y^2}\\right)\\left|\\varphi(x+\\mathrm{i}y)\\right|^2=0$");
- ui->cmbTestset->addItem("math 8", "$2^{2^{2^{x}}}$");
- ui->cmbTestset->addItem("math 9", "$\\iint_Df(x,y)\\;\\mathrm{d}x\\;\\mathrm{d}y$");
- ui->cmbTestset->addItem("math 10 (overbrace)", "$\\overbrace{x+x+...+x}{k\\ \\mathrm{times}}$");
- ui->cmbTestset->addItem("math 11 (underbrace)", "$\\underbrace{x+x+...+x}{k\\ \\mathrm{times}}$");
- ui->cmbTestset->addItem("math 12 (under/overbrace)", "$\\underbrace{\\overbrace{x+x+...+x}{k\\ \\mathrm{times}} \\overbrace{x+x+...+x}{k\\ \\mathrm{times}}}{2k\\ \\mathrm{times}}$");
- ui->cmbTestset->addItem("math 13", "$y_1''\\ \\ \\ y_2'''$");
- ui->cmbTestset->addItem("math 14", "$f(x)=\\begin{cases} 1/3 & \\mathrm{if}\\ 0\\leq x\\leq1 \\\\ 2/3 & \\mathrm{if}\\ 3\\leq x\\leq4 \\\\0 & \\mathrm{elsewhere} \\end{cases}$");
- ui->cmbTestset->addItem("math 15", "$\\Re{z} =\\frac{n\\pi \\dfrac{\\theta +\\psi}{2}}{\\left(\\dfrac{\\theta +\\psi}{2}\\right)^2 + \\left( \\dfrac{1}{2}\\log \\left\\lvert\\dfrac{B}{A}\\right\\rvert\\right)^2}.$");
- ui->cmbTestset->addItem("math 16", "$\\sum_{m=1}^\\infty\\sum_{n=1}^\\infty\\frac{m^2\\,n}{3^m\\left(m\\,3^n+n\\,3^m\\right)}$");
- ui->cmbTestset->addItem("math 17", "$\\phi_n(\\kappa) =\\frac{1}{4\\pi^2\\kappa^2} \\int_0^\\infty\\frac{\\sin(\\kappa R)}{\\kappa R}\\frac{\\partial}{\\partial R}\\left[R^2\\frac{\\partial D_n(R)}{\\partial R}\\right]\\,dR$");
- ui->cmbTestset->addItem("math 18", "${}_pF_q(a_1,\\dots,a_p;c_1,\\dots,c_q;z)= \\sum_{n=0}^\\infty\\frac{(a_1)_n\\cdots(a_p)_n}{(c_1)_n\\cdots(c_q)_n}\\frac{z^n}{n!}$");
- ui->cmbTestset->addItem("math 19 (overset)", "$X \\overset{=}{def} Y$\\ \\ \\ \\ \\ $X \\overset{=}{!} Y$\\ \\ \\ \\ \\ $X \\overset{\\rightarrow}{f} Y$\\ \\ \\ \\ \\ $\\frac{f(x+\\Delta x)-f(x)}{\\Delta x}\\overset{\\longrightarrow}{\\Delta x\\to 0}f'(x)$");
- ui->cmbTestset->addItem("math 20 (underset)", "$X \\underset{=}{\\text{def (5)}} Y$\\ \\ \\ \\ \\ $X \\underset{\\rightarrow}{f} Y$\\ \\ \\ \\ \\ $\\frac{f(x+\\Delta x)-f(x)}{\\Delta x}\\underset{\\longrightarrow}{\\Delta x\\to 0}f'(x)$");
- ui->cmbTestset->addItem("Jacobi Matrix and VarCov matrix", "$J_{ij}= \\left.\\frac{\\partial f(x,\\vec{p})}{\\partial p_i}\\right|_{\\vec{p},x=x_j}\\ \\ \\ \\ \\ \\mat{C}=\\left(\\mat{J}^\\mathrm{T}\\ J\\right)^{-1}\\ \\ \\ \\ \\ test: \\left|\\frac{\\partial f(x,\\vec{p})}{\\partial p_i}\\right|_{\\vec{p},x=x_j}^2$");
- ui->cmbTestset->addItem("operator test (textmode)", "x=0\\ \\ y>0\\ \\ x+y\\ \\ -1\\ \\ x-2\\ \\ x\\cdot y\\ \\ x\\geq 4\\ \\ x~4");
- ui->cmbTestset->addItem("operator test (mathmode)", "$x=0\\ \\ y>0\\ \\ x+y\\ \\ -1\\ \\ x-2\\ \\ x\\cdot y\\ \\ x\\geq 4\\ \\ x~4$");
- ui->cmbTestset->addItem("color test", "\\textcolor{red}{RED}\\textcolor{blue}{BLUE}");
- ui->cmbTestset->addItem("boxed test", "test: \\boxed{boxed text} in the middle");
- ui->cmbTestset->addItem("mathboxed test", "\\fbox{2^{2^{\\colorbox{red}{2^{x}}}}}");
- ui->cmbTestset->addItem("axiom of power test", "$\\forall A \\, \\exists P \\, \\forall B \\, [B \\in P \\iff \\forall C \\, (C \\in B \\Rightarrow C \\in A)]$");
- ui->cmbTestset->addItem("De Morgan's law", "$\\neg(P\\land Q)\\iff(\\neg P)\\lor(\\neg Q)$ or $\\overline{\\bigcap_{i \\in I} A_{i}}\\equiv\\bigcup_{i \\in I} \\overline{A_{i}}$ or $\\overline{A \\cup B}\\equiv\\overline{A} \\cap \\overline{B}$");
- ui->cmbTestset->addItem("quadratic formula", "$x=\\frac{-b \\pm \\sqrt{b^2-4ac}}{2a}$");
- ui->cmbTestset->addItem("combination", "$\\binom{n}{k} = \\frac{n(n-1)...(n-k+1)}{k(k-1)\\dots1}=\\frac{n!}{k!(n-k)!}$");
- ui->cmbTestset->addItem("Sophomore's dream 1", "$\\int_0^1 x^{-x}\\,dx = \\sum_{n=1}^\\infty n^{-n}(\\scriptstyle{= 1.29128599706266354040728259059560054149861936827\\dots)}$");
- ui->cmbTestset->addItem("Sophomore's dream 2", "$\\int_0^1 x^x \\,dx = \\sum_{n=1}^\\infty (-1)^{n+1}n^{-n} = - \\sum_{n=1}^\\infty (-n)^{-n} (\\scriptstyle{= 0.78343051071213440705926438652697546940768199014\\dots})$");
- ui->cmbTestset->addItem("divergence 1", "$\\operatorname{div}\\vec{F} = \\nabla\\cdot\\vec{F}=\\frac{\\partial U}{\\partial x}+\\frac{\\partial V}{\\partial y}+\\frac{\\partial W}{\\partial z}$");
- ui->cmbTestset->addItem("divergence 2", "$\\overrightarrow{\\operatorname{div}}\\,(\\mathbf{\\underline{\\underline{\\epsilon}}}) = "
- "\\begin{bmatrix}"
- "\\frac{\\partial \\epsilon_{xx}}{\\partial x} +\\frac{\\partial \\epsilon_{yx}}{\\partial y} +\\frac{\\partial \\epsilon_{zx}}{\\partial z} \\\\"
- "\\frac{\\partial \\epsilon_{xy}}{\\partial x} +\\frac{\\partial \\epsilon_{yy}}{\\partial y} +\\frac{\\partial \\epsilon_{zy}}{\\partial z} \\\\"
- "\\frac{\\partial \\epsilon_{xz}}{\\partial x} +\\frac{\\partial \\epsilon_{yz}}{\\partial y} +\\frac{\\partial \\epsilon_{zz}}{\\partial z}"
- "\\end{bmatrix}$");
- ui->cmbTestset->addItem("lim, sum ...", "$\\lim_{x\\to\\infty} f(x) = \\binom{k}{r} + \\frac{a}{b} \\sum_{n=1}^\\infty a_n + \\displaystyle{ \\left\\{ \\frac{1}{13} \\sum_{n=1}^\\infty b_n \\right\\} }.$");
- ui->cmbTestset->addItem("array test", "$f(x) := \\left\\{\\begin{array} x^2 \\sin \\frac{1}{x} & \\textrm{if } x \\ne 0, \\\\ 0 & \\textrm{if } x = 0 . \\end{array}\\right.$");
- ui->cmbTestset->addItem("Schwinger-Dyson", "$\\left\\langle\\psi\\left|\\mathcal{T}\\{F \\phi^j\\}\\right|\\psi\\right\\rangle=\\left\\langle\\psi\\left|\\mathcal{T}\\{iF_{,i}D^{ij}-FS_{int,i}D^{ij}\\}\\right|\\psi\\right\\rangle.$");
- ui->cmbTestset->addItem(QLatin1String("Schrödinger's equation"), "$\\left[-\\frac{\\hbar^2}{2m}\\frac{\\partial^2}{\\partial x^2}+V\\right]\\Psi(x)=\\mathrm{i}\\hbar\\frac{\\partial}{\\partial t}\\Psi(x)$");
- ui->cmbTestset->addItem("Cauchy-Schwarz inequality", "$\\left( \\sum_{k=1}^n a_k b_k \\right)^2 \\leq \\left( \\sum_{k=1}^n a_k^2 \\right) \\left( \\sum_{k=1}^n b_k^2 \\right)$");
- ui->cmbTestset->addItem("Maxwell's equations", "$\\begin{aligned}\\nabla \\times \\vec{\\mathbf{B}} -\\, \\frac{1}{c}\\, \\frac{\\partial\\vec{\\mathbf{E}}}{\\partial t} & = \\frac{4\\pi}{c}\\vec{\\mathbf{j}} \\\\ \\nabla \\cdot \\vec{\\mathbf{E}} & = 4 \\pi \\rho \\\\\\nabla \\times \\vec{\\mathbf{E}}\\, +\\, \\frac{1}{c}\\, \\frac{\\partial\\vec{\\mathbf{B}}}{\\partial t} & = \\vec{\\mathbf{0}} \\\\\\nabla \\cdot \\vec{\\mathbf{B}} & = 0 \\end{aligned}$");
- ui->cmbTestset->addItem("Langevin Equation", "$m \\dot{v}(t) = -\\gamma v(t) + F(x,t)+ f(t)$");
- ui->cmbTestset->addItem("Fokker-Planck Equation", "$\\frac{\\partial}{\\partial t}P(y,t)=-\\frac{\\partial}{\\partial y}\\left[ A(y,t)P(y,t)\\right] +\\frac{\\Gamma}{2}\\frac{\\partial^2}{\\partial y^2}\\left[ P(y,t)\\right]$");
- ui->cmbTestset->addItem("Hamilton Equations of motion", "$\\mathcal{H}(\\mathbf{q},\\mathbf{p})=\\frac{\\mathbf{p}^2}{2\\,m}+V(\\mathbf{q})\\ \\ \\ \\text{and}\\ \\ \\ \\dot{q}_k =\\frac{p_k}{m}\\ ,\\ \\dot{p}_k = - \\frac{\\partial V}{\\partial q_k}$");
- ui->cmbTestset->addItem("Gaussian Distrubution", "$f(x | \\mu,\\sigma^2)=\\frac{1}{\\sqrt{2\\pi\\sigma^2}}\\operatorname{exp}\\left(-\\frac{(x-\\mu)^2}{2\\sigma^2}\\right)=\\frac{1}{\\sqrt{2\\pi\\sigma^2}} e^{-\\frac{(x-\\mu)^2}{2\\sigma^2}}\\quad -\\inftycmbTestset->addItem("User-Editable Text");
- //
- //ui->cmbTestset->addItem("", "$$");
- //ui->cmbTestset->addItem("", "$$");
- //ui->cmbTestset->addItem("", "");
- ui->cmbTestset->setCurrentIndex(0);
-
- ui->labMath->setMath("\\left(\\left[\\sqrt{2\\pi\\cdot\\int_{-\\infty}^\\infty f(x)\\;\\mathrm{d}x}\\right]\\right)");
- ui->cmbFont->setCurrentIndex(1);
-}
-
-TestForm::~TestForm()
-{
- delete ui;
-}
-
-#define W 2000
-#define H 2000
-#define X1 15
-#define Y1 50
-
-
-
-double TestForm::draw(QPainter& painter, double X, double YY, JKQTmathText& mt, QString name, double& durationSizingMS, double&durationTimingMS) {
-
-
- double Y=YY;
- painter.save();
- ht.start();
- QSizeF s=mt.getSize(painter);
- Y=Y+mt.getAscent(painter);
- durationSizingMS=ht.get_time()/1000.0;
- qDebug()<<" sizing in "<chkBoxes->isChecked());
- durationTimingMS=ht.get_time()/1000.0;
- qDebug()<<" drawing in "<get_decoration()));
- if (decoN->get_child()) ti->addChild(createTree(decoN->get_child(), ti));
- } else if (matrixN) {
- int l=matrixN->get_lines();
- int c=matrixN->get_columns();
- name=QString("MTmatrixNode: l*c=%1*%2").arg(l).arg(c);
- QVector > children=matrixN->get_children();
- for (int y=0; ysetText(0, QString("(%1,%2):").arg(y).arg(x)+it->text(0));
- ti->addChild(it);
- }
- }
- }
- } else if (fracN) {
- name=QString("MTfracNode: mode='%1'").arg(JKQTmathText::fracModeToString(fracN->get_mode()));
- if (fracN->get_child1()) ti->addChild(createTree(fracN->get_child1(), ti));
- if (fracN->get_child2()) ti->addChild(createTree(fracN->get_child2(), ti));
- } else if (sqrtN) {
- name=QString("MTsqrtNode: deg=%1").arg(sqrtN->get_degree());
- if (sqrtN->get_child()) ti->addChild(createTree(sqrtN->get_child(), ti));
- } else if (braceN) {
- name=QString("MTbraceNode: l='%1', r='%2', showR=%3").arg(braceN->get_openbrace()).arg(braceN->get_closebrace()).arg(braceN->get_showRightBrace());
- if (braceN->get_child()) ti->addChild(createTree(braceN->get_child(), ti));
- } else if (superN) {
- name=QString("MTsuperscriptNode");
- if (superN->get_child()) ti->addChild(createTree(superN->get_child(), ti));
- } else if (subN) {
- name=QString("MTsubscriptNode");
- if (subN->get_child()) ti->addChild(createTree(subN->get_child(), ti));
- } else if (inst1N) {
- name=QString("MTinstruction1Node: \'%1\'").arg(inst1N->get_name());
- if (inst1N->get_child()) ti->addChild(createTree(inst1N->get_child(), ti));
- } else if (lstN) {
- name=QString("MTlistNode");
- QList list=lstN->get_nodes();
- for (int i=0; iaddChild(createTree(list[i], ti));
- }
- } else if (symN) {
- name=QString("MTsymbolNode: \'%1\'").arg(symN->get_symbolName());
- } else if (spN) {
- name=QString("MTwhitespaceNode :\'%1\'").arg(txtN->get_text());
- } else if (txtN) {
- name=QString("MTtextNode: \'%1\'").arg(txtN->get_text());
-
- } else {
- name=QString("unknown");
- }
-
- ti->setText(0,name);
-
- /*
- QString space="";
- QTreeWidgetItem* p=ti->parent();
- while (p) {
- space+=" ";
- p=p->parent();
- }
-
- qDebug()<cmbTestset->currentIndex()==ui->cmbTestset->count()-1) {
- mathTest=ui->textBrowserSource->toPlainText();
- ui->textBrowserSource->setReadOnly(false);
- ui->btnRender->setEnabled(true);
- } else {
- mathTest=ui->cmbTestset->itemData(ui->cmbTestset->currentIndex()).toString();
- ui->textBrowserSource->setPlainText(mathTest);
- ui->textBrowserSource->setReadOnly(true);
- ui->btnRender->setEnabled(false);
- }
-
- ui->scrollArea->setBackgroundRole(QPalette::Dark);
-
- QPixmap pix(W, H);
- pix.fill();
- QPainter painter;
- JKQTmathText mt(this);
-
-
- double Y=Y1;
-
- painter.begin(&pix);
- if (ui->chkAntiAlias->isChecked()) painter.setRenderHint(QPainter::Antialiasing);
- if (ui->chkAntiAliasHQ->isChecked()) painter.setRenderHint(QPainter::HighQualityAntialiasing);
- if (ui->chkAntiAliasText->isChecked()) painter.setRenderHint(QPainter::TextAntialiasing);
- if (ui->chkSmoothTransform->isChecked()) painter.setRenderHint(QPainter::QPainter::SmoothPixmapTransform);
- ht.start();
-
-
- mt.set_fontRoman(ui->cmbUnicodeSerif->currentFont().family());
- mt.set_fontMathRoman(ui->cmbUnicodeSerif->currentFont().family());
- mt.set_fontSans(ui->cmbUnicodeSans->currentFont().family());
- mt.set_fontMathSans(ui->cmbUnicodeSans->currentFont().family());
- mt.set_fontTypewriter(ui->cmbUnicodeFixed->currentFont().family());
- mt.set_fontSymbol(ui->cmbUnicodeSymbol->currentFont().family());
-
- switch (ui->cmbFont->currentIndex()) {
- case 1: mt.useXITS(); break;
- case 2: mt.useSTIX(); break;
- case 3: mt.useAnyUnicode(ui->cmbUnicodeSans->currentFont().family(),ui->cmbUnicodeSerif->currentFont().family()); break;
- case 4: mt.useLatexFonts(ui->edtLatexPrefix->text(), ui->edtLatexPostfix->text()); break;
- case 5: mt.useASANA(); break;
-
- }
-
- ui->tree->clear();
- ht.start();
- double durationParse=0;
- if (mt.parse(mathTest)) {
- durationParse=ht.get_time()/1000.0;
- ui->tree->addTopLevelItem(createTree(mt.get_parsedNode()));
- } else {
- durationParse=ht.get_time()/1000.0;
- }
- ui->labParsingTimes->setText(QString(" %1ms").arg(durationParse, 0, 'f', 3));
- ui->tree->expandAll();
- bool okh=true;
- ui->textBrowser->clear();
- qDebug()<<"parse mathTest in "<edtSizes->text().split(",");
- ui->labRenderTimes->setText("");
-
- for (int i=0; icmbTestset->currentText()).arg(ui->cmbFont->currentText()).arg(size), durationSizingMS, durationTimingMS);
-
- if (i==0) {
- if (mt.get_error_list().size()>0) {
- ui->labError->setText(""+mt.get_error_list().join("
")+"");
- } else {
- ui->labError->setText("OK");
- }
- }
-
- ui->labRenderTimes->setText(ui->labRenderTimes->text()+QString(" %1pt: %2ms/%3ms").arg(size).arg(durationSizingMS, 0, 'F', 1).arg(durationTimingMS, 0, 'F', 1));
- ui->textBrowser->textCursor().insertHtml("
"+mt.toHtml(&okh)+"
");
- qDebug()<<"HTML: ---------------------------------------------\n"<label->setPixmap(pix);
- QApplication::restoreOverrideCursor();
-}
+#include "testform.h"
+#include "ui_testform.h"
+#include
+
+
+TestForm::TestForm(QWidget *parent) :
+ QWidget(parent),
+ ui(new Ui::TestForm)
+{
+ ui->setupUi(this);
+ ui->cmbTestset->addItem("simple relations", "$a{\\leq}b$, $a{\\geq}b$, $a{\\equiv}b$, $a=b$, $a{\\neq}b$, $ab$");
+ ui->cmbTestset->addItem("simple relations in different modes", "math: $a{\\leq}b$, math/no braces: $a\\leq b$, no math: a{\\leq}b, no math/no braces: a\\leq b");
+ ui->cmbTestset->addItem("named symbols 1", "ll: $\\ll$\\ gg: $\\gg$\\ leq: $\\leq$\\ geq: $\\geq$\\ pm: $\\pm$\\ mp: $\\mp$\\ ");
+ ui->cmbTestset->addItem("named symbols 2", "nexists: $\\nexists$\\ ni: $\\ni$\\ notni: $\\notni$\\ circ: $\\circ$\\ sim: $\\sim$\\ emptyset: $\\emptyset$\\ odot: $\\odot$\\ ominus: $\\ominus$\\ subsetnot: $\\subsetnot$\\ bot: $\\bot$");
+ ui->cmbTestset->addItem("named symbols 3", "leftharpoonup: $\\leftharpoonup$\\ rightharpoonup: $\\rightharpoonup$\\ upharpoonleft: $\\upharpoonleft$\\ downharpoonleft: $\\downharpoonleft$\\ leftrightharpoon: $\\leftrightharpoon$\\ rightleftharpoon: $\\rightleftharpoon$");
+ ui->cmbTestset->addItem("named symbols 4", "coprod: $\\coprod$\\ leftharpoondown: $\\leftharpoondown$\\ rightharpoondown: $\\rightharpoondown$\\ upharpoonright: $\\upharpoonright$\\ downharpoonright: $\\downharpoonright$\\ nwarrow: $\\nwarrow$\\ nearrow: $\\nearrow$\\ ");
+ ui->cmbTestset->addItem("named symbols 5", "searrow: $\\searrow$\\ swarrow: $\\swarrow$\\ mapsto: $\\mapsto$\\ div: $\\div$\\ multimap: $\\multimap$\\ maporiginal: $\\maporiginal$\\ mapimage: $\\mapimage$\\ ");
+ ui->cmbTestset->addItem("named symbols 6", "times: $\\times$\\ propto: $\\propto$\\ bullet: $\\bullet$\\ neq: $\\neq$\\ ne: $\\ne$\\ equiv: $\\equiv$\\ approx: $\\approx$\\ otimes: $\\otimes$\\ oplus: $\\oplus$");
+ ui->cmbTestset->addItem("named symbols 7", "oslash: $\\oslash$\\ cap: $\\cap$\\ land: $\\land$\\ cup: $\\cup$\\ lor: $\\lor$\\ supset: $\\supset$\\ supseteq: $\\supseteq$\\ supsetnot: $\\supsetnot$\\ subset: $\\subset$");
+ ui->cmbTestset->addItem("named symbols 8", "subseteq: $\\subseteq$\\ in: $\\in$\\ notin: $\\notin$\\ cdot: $\\cdot$\\ wedge: $\\wedge$\\ vee: $\\vee$\\ cong: $\\cong$\\ bot: $\\bot$");
+ ui->cmbTestset->addItem("symbols", "$\\ll\\gg\\leq\\geq\\leftrightarrow\\leftarrow\\rightarrow\\to\\uparrow\\downarrow\\updownarrow\\Leftrightarrow\\iff\\Leftarrow\\Rightarrow\\Uparrow\\Downarrow\\Updownarrow\\pm\\mp\\nexists\\ni\\notni\\circ\\sim\\emptyset\\odot\\ominus\\subsetnot\\bot\\leftharpoonup\\rightharpoonup\\upharpoonleft\\downharpoonleft\\leftrightharpoon\\rightleftharpoon\\coprod\\leftharpoondown\\rightharpoondown\\upharpoonright\\downharpoonright\\nwarrow\\nearrow\\searrow\\swarrow\\mapsto\\div\\multimap\\maporiginal\\mapimage\\times\\propto\\bullet\\neq\\ne\\equiv\\approx\\otimes\\oplus\\oslash\\cap\\land\\cup\\lor\\supset\\supseteq\\supsetnot\\subset\\subseteq\\in\\notin\\cdot\\wedge\\vee\\cong\\bot$");
+ ui->cmbTestset->addItem("std dev", "$\\sigma_x=\\sqrt{\\langle (x-\\langle x\\rangle)^2\\rangle}=\\sqrt{\\frac{1}{N-1}\\cdot\\left( \\sum_{i=1}^N{x_i}^2-\\frac{1}{N}\\cdot\\left(\\sum_{i=1}^Nx_i\\right)^2\\right)}$");
+ ui->cmbTestset->addItem("std dev 2", "$\\sigma_x=\\sqrt{\\langle (x-\\langle x\\rangle)^2\\rangle}=\\sqrt{\\frac{1}{N-1}\\cdot\\left( \\sum_{i=1}^Nx_i^2-\\frac{1}{N}\\cdot\\left(\\sum_{i=1}^Nx_i\\right)^2\\right)}$");
+ ui->cmbTestset->addItem("rotation matrix", "$\\mathrm{\\mathbf{M}}(\\alpha) = \\left(\\begin{matrix}\\cos(\\alpha)+n_x^2\\cdot (1-\\cos(\\alpha)) & n_x\\cdot n_y\\cdot (1-\\cos(\\alpha))-n_z\\cdot \\sin(\\alpha) & n_x\\cdot n_z\\cdot (1-\\cos(\\alpha))+n_y\\cdot \\sin(\\alpha)\\\\n_x\\cdot n_y\\cdot (1-\\cos(\\alpha))+n_z\\cdot \\sin(\\alpha) & \\cos(\\alpha)+n_y^2\\cdot (1-\\cos(\\alpha)) & n_y\\cdot n_z\\cdot (1-\\cos(\\alpha))-n_x\\cdot \\sin(\\alpha)\\\\n_z\\cdot n_x\\cdot (1-\\cos(\\alpha))-n_y\\cdot \\sin(\\alpha) & n_z\\cdot n_y\\cdot (1-\\cos(\\alpha))+n_x\\cdot \\sin(\\alpha) & \\cos(\\alpha)+n_z^2\\cdot (1-\\cos(\\alpha))\\end{matrix}\\right)$");
+ ui->cmbTestset->addItem("like in label at bottom (no MM)", "\\left(\\left[\\sqrt{2\\pi\\cdot\\int_{-\\infty}^\\infty f(x)\\;\\mathrm{d}x}\\right]\\right)");
+ ui->cmbTestset->addItem("like in label at bottom (MM)", "$\\left(\\left[\\sqrt{2\\pi\\cdot\\int_{-\\infty}^\\infty f(x)\\;\\mathrm{d}x}\\right]\\right)$");
+ ui->cmbTestset->addItem("text 0", "text");
+ ui->cmbTestset->addItem("text 1", "text \\mathbf{bold}");
+ ui->cmbTestset->addItem("text 2", "text \\mathbf{bold}\\textcolor{red}{RED}");
+ ui->cmbTestset->addItem("decoration", "$\\vec{x}\\vec{X}\\vec{\\psi} -- \\dot{x}\\dot{X}\\dot{\\psi} -- \\ddot{x}\\ddot{X}\\ddot{\\psi} -- \\overline{x}\\overline{X}\\overline{\\psi} -- \\underline{x}\\underline{X}\\underline{\\psi} -- \\hat{x}\\hat{X}\\hat{\\psi} -- \\tilde{x}\\tilde{X}\\tilde{\\psi} -- \\uul{x}\\uul{X}\\uul{\\psi} -- \\ool{x}\\ool{X}\\ool{\\psi} -- \\bar{x}\\bar{X}\\bar{\\psi} -- \\arrow{x}\\arrow{X}\\arrow{\\psi}$");
+ ui->cmbTestset->addItem("mathtest", "This is normal text: $this is math:\\langle r^2(\\tau)\\rangle=\\left\\langle (\\vec{r}(t)-\\vec{r}(t+\\tau) )^2\\right\\rangle\\ \\ \\ g(\\tau)=\\frac{1}{N}\\cdot\\left(1+\\frac{2}{3}\\frac{\\langle r^2(\\tau)\\rangle}{w_{xy}^2}\\right)^{-1} \\lfloor\\rfloor\\lceil\\rceil\\langle\\rangle\\left\\{\\va\\left|\\|\\va\\|_2\\geq2\\right.\\right\\} \\vr\\vR\\frac{\\sqrt{\\sqrt{\\sqrt{\\sum_{i=0}^\\infty \\hat{i}^2}+y^\\alpha}+1}}{\\dot{v}\\equiv\\ddot{r}}\\argmin_{\\vec{k}}\\sum_{\\sqrt{i}=0}^{N}\\int_{x_0}^{x_1}\\left(\\left(\\left(x\\right)\\right)\\right)\\underbrace{\\left[\\left\\{\\frac{\\partial f}{\\partial x}\\right\\}\\cdot\\frac{1}{2}\\right]}{\\text{underbraced text \\hbar}}\\cdots\\frac{\\sqrt{\\sum_{i=0}^2 \\hat{i}^2}+y^\\alpha}{\\dot{v}\\equiv\\ddot{r}}, \\hat{t}\\hat{T} \\overbrace{\\left|\\sqrt{x\\cdot Y}\\right|}{\\propto\\bbN\\circ\\bbZ} \\left<\\arrow{x(\\tau)}\\cdot\\vec{R}(t+\\bar{\\tau})\\right> \\alpha\\beta\\gamma\\delta\\epsilon\\Gamma\\Delta\\Theta\\Omega \\left\\_\\left~\\cbrt{\\hbar\\omega}\\right~\\right\\_$");
+ ui->cmbTestset->addItem("upper/lower parantheses test:", "$\\text{bblabla} \\frac{1}{2}\\cdot\\left(\\frac{1}{\\mathrm{e}^x+\\mathrm{e}^{-x}}\\right)\\cdot\\left(\\frac{1}{\\frac{1+2}{5+x}}\\right)\\cdot\\left(\\frac{1}{\\exp\\left[-\\frac{y^2}{\\sqrt{x}}\\right]\\cdot\\exp\\left[-\\frac{1}{\\frac{1}{2}}\\right]}\\right) $");
+ ui->cmbTestset->addItem("ACF test", "$g_{rg}^{ab}(\\tau)=\\frac{1}{N}\\cdot\\left(1+\\frac{2}{3}\\frac{\\langle r^2(\\tau)\\rangle}{w_{xy}^2}\\right)^{-1}\\cdot\\left(1+\\frac{2}{3}\\frac{\\langle r^2(\\tau)\\rangle}{w_{xy}^2}\\right)^{-\\frac{1}{2}}$");
+ ui->cmbTestset->addItem("MSD test", "$\\mathrm{MSD}(\\tau)\\equiv\\langle r^2(\\tau)\\rangle=\\left\\langle (\\vec{r}(t)-\\vec{r}(t+\\tau) )^2\\right\\rangle=2n\\cdot\\frac{K_\\alpha}{\\Gamma(1+\\alpha)}\\cdot\\tau^\\alpha$");
+ ui->cmbTestset->addItem("f() test", "$f(\\vec{x})=\\frac{1}{\\sqrt{2\\pi\\cdot\\sigma^2}}\\exp\\left(-\\frac{(\\vec{x}-\\vec{x}_0)^2}{\\sigma^2}\\right)$");
+ ui->cmbTestset->addItem("chi^2 test", "$\\vec{p}^\\ast=\\argmax\\limits_{\\vec{p}}\\chi^2=\\argmax\\limits_{\\vec{p}}\\sum\\limits_{i=1}^N\\left|\\frac{\\hat{f}_i-f(x_i;\\vec{p})}{\\sigma_i}\\right|^2$");
+ ui->cmbTestset->addItem("symbol test", "\\vdots\\cdots\\ddots\\iddots\\lfloor\\rfloor\\lceil\\rceil\\langle\\rangle\\sum\\int \\iint \\oint \\prod \\leftrightarrow \\leftarrow\\Leftarrow\\rightarrow\\Rightarrow\\pm\\mp\\leq\\geq\\ll\\gg\\hbar\\euro\\bbC\\bbH\\bbN\\bbP\\bbQ\\bbZ\\bbR\\Angstrom\\Alef\\Bet\\Gimel\\Dalet\\nexists\\ni\\notni\\circ\\tilde\\oiint\\oiiint\\emptyset\\odot\\ominus\\subsetnot\\DC\\bot\\cdots\\perthousand\\leftharpoonup\\rightharpoonup \\upharpoonleft \\downharpoonleft \\leftrightharpoon \\rightleftharpoon \\coprod \\leftharpoondown \\rightharpoondown \\nwarrow \\nearrow \\mapsto \\cent \\pound \\yen \\div \\multimap \\maporiginal \\mapimage \\bigcap \\bigcup \\benzene \\times \\cdot \\propto \\equiv \\Im \\Re \\ ");
+ ui->cmbTestset->addItem("arrowtest 1", "$\\leftarrow \\longleftarrow \\Leftarrow \\Longleftarrow \\rightarrow \\longrightarrow \\Rightarrow \\Longrightarrow \\uparrow \\Uparrow \\downarrow \\Downarrow \\leftrightarrow \\Leftrightarrow \\longleftrightarrow \\Longleftrightarrow$");
+ ui->cmbTestset->addItem("arrowtest 2", "$\\nwarrow \\nearrow \\searrow \\swarrow \\mapsto \\leftharpoonup \\rightharpoonup \\upharpoonleft \\downharpoonleft \\leftrightharpoon \\rightleftharpoon \\leftharpoondown \\rightharpoondown \\upharpoonright \\downharpoonright $");
+ ui->cmbTestset->addItem("math: blackboard", "$\\mathbb{ABCDEFGHIJKLMNOPQRSTUVWXYZ120}$");
+ ui->cmbTestset->addItem("math: bf", "$\\mathbf{ABCDEFGHIJKLMNOPQRSTUVWXYZ120}$");
+ ui->cmbTestset->addItem("math: rm", "$\\mathrm{ABCDEFGHIJKLMNOPQRSTUVWXYZ120}$");
+ ui->cmbTestset->addItem("math: cal", "$\\mathcal{ABCDEFGHIJKLMNOPQRSTUVWXYZ120}$");
+ ui->cmbTestset->addItem("subscript test", "$r_{123}\\ \\ r_{\\frac{1}{2}}$");
+ ui->cmbTestset->addItem("subscript0 test", "$r_{123}$");
+ ui->cmbTestset->addItem("subscript1 test", "$r_{123}\\ $");
+ ui->cmbTestset->addItem("subscript2 test", "$r_{123}\\ \\ $");
+ ui->cmbTestset->addItem("subscript3 test", "$r_{123}r_{\\frac{1}{2}}$");
+ ui->cmbTestset->addItem("superscript test", "$r^{123}\\ \\ r^{\\frac{1}{2}}$");
+ ui->cmbTestset->addItem("superscript0 test", "$r^{123}$");
+ ui->cmbTestset->addItem("superscript1 test", "$r^{123}\\ $");
+ ui->cmbTestset->addItem("superscript2 test", "$r^{123}\\ \\ $");
+ ui->cmbTestset->addItem("superscript3 test", "$r^{123}r^{\\frac{1}{2}}$");
+ ui->cmbTestset->addItem("asuperscript test", "$a^{123}\\ \\ a^{\\frac{1}{2}}$");
+ ui->cmbTestset->addItem("asuperscript0 test", "$a^{123}$");
+ ui->cmbTestset->addItem("gsuperscript1 test", "$g^{123}\\ $");
+ ui->cmbTestset->addItem("gsuperscript2 test", "$g^{123}\\ \\ $");
+ ui->cmbTestset->addItem("gsuperscript3 test", "$g^{123}g^{\\frac{1}{2}}$");
+ ui->cmbTestset->addItem("frac test", "$\\frac{a}{b}+\\frac{g}{a}-\\frac{a^2}{b^2}\\cdot\\frac{a^2}{b^{\\frac{1}{2}}}$");
+ ui->cmbTestset->addItem("tfrac test", "$\\tfrac{a}{b}+\\tfrac{g}{a}-\\tfrac{a^2}{b^2}\\cdot\\tfrac{a^2}{b^{\\tfrac{1}{2}}}$");
+ ui->cmbTestset->addItem("dfrac test", "$\\dfrac{a}{b}+\\dfrac{g}{a}-\\dfrac{a^2}{b^2}\\cdot\\dfrac{a^2}{b^{\\dfrac{1}{2}}}$");
+ ui->cmbTestset->addItem("stackrel test", "$\\stackrel{a}{b}+\\stackrel{g}{a}-\\stackrel{a^2}{b^2}\\cdot\\stackrel{a^2}{b^{\\stackrel{1}{2}}}$");
+ ui->cmbTestset->addItem("brace0 test", "\\langle\\langle -- $\\langle\\langle$");
+ ui->cmbTestset->addItem("brace1 test", "\\langle\\langle r^{123} -- $\\langle\\langle r^{123}$");
+ ui->cmbTestset->addItem("brace2 test", "\\langle\\langle r^{123}\\rangle\\rangle -- $\\langle\\langle r^{123}\\rangle\\rangle$");
+ ui->cmbTestset->addItem("brace3 test", "\\left\\langle r^{123}\\right\\rangle -- $\\left\\langle r^{123}\\right\\rangle$");
+ ui->cmbTestset->addItem("brace4 test", "\\left\\langle\\left\\langle\\left\\langle r^{123}\\right\\rangle\\right\\rangle\\right\\rangle -- $\\left\\langle\\left\\langle\\left\\langle r^{123}\\right\\rangle\\right\\rangle\\right\\rangle$");
+ ui->cmbTestset->addItem("brace5 test: ( )", "\\left(\\left(\\left( r^{123}\\right)\\right)\\right) -- $\\left(\\left(\\left( r^{123}\\right)\\right)\\right)$");
+ ui->cmbTestset->addItem("brace6 test: [ ]", "\\left[\\left[\\left[ r^{123}\\right]\\right]\\right] -- $\\left[\\left[\\left[ r^{123}\\right]\\right]\\right]$");
+ ui->cmbTestset->addItem("brace7 test: { }", "\\left\\{\\left\\{\\left\\{ r^{123}\\right\\}\\right\\}\\right\\} -- $\\left\\{\\left\\{\\left\\{ r^{123}\\right\\}\\right\\}\\right\\}$");
+ ui->cmbTestset->addItem("brace8 test: || ||", "\\left\\|\\left\\|\\left\\| r^{123}\\right\\|\\right\\|\\right\\| -- $\\left\\|\\left\\|\\left\\| r^{123}\\right\\|\\right\\|\\right\\|$");
+ ui->cmbTestset->addItem("brace9 test: | |", "\\left|\\left|\\left| r^{123}\\right|\\right|\\right| -- $\\left|\\left|\\left| r^{123}\\right|\\right|\\right|$");
+ ui->cmbTestset->addItem("brace10 test", "\\left\\{\\left[\\left( r^{123}\\right)\\right]\\right\\} -- $\\left\\{\\left[\\left( r^{123}\\right)\\right]\\right\\}$");
+ ui->cmbTestset->addItem("brace11 test: floor", "\\left\\lfloor\\left\\lfloor\\left\\lfloor r^{123}\\right\\rfloor\\right\\rfloor\\right\\rfloor -- $\\left\\lfloor\\left\\lfloor\\left\\lfloor r^{123}\\right\\rfloor\\right\\rfloor\\right\\rfloor$");
+ ui->cmbTestset->addItem("brace12 test: ceil", "\\left\\lceil\\left\\lceil\\left\\lceil r^{123}\\right\\rceil\\right\\rceil\\right\\rceil -- $\\left\\lceil\\left\\lceil\\left\\lceil r^{123}\\right\\rceil\\right\\rceil\\right\\rceil$");
+ ui->cmbTestset->addItem("sub-, superscript test", "r^{1234}_{321} r_{321}^{1234} -- $r^{1234}_{321} r_{321}^{1234} -- \\kappa^2 -- \\kappa_2 -- \\kappa_2^2$");
+ ui->cmbTestset->addItem("super-, subscript test", "r^{123}_{4321} r_{4321}^{123} -- $r^{123}_{4321} r_{4321}^{123} -- \\kappa^2 -- \\kappa_2 -- \\kappa_2^2$");
+ //ui->cmbTestset->addItem("", "");
+ ui->cmbTestset->addItem("math 1", "$f(x)=\\int_{-\\infty}^xe^{-t^2}\\;\\mathrm{d}t$");
+ ui->cmbTestset->addItem("math 2", "$\\sum_{i=1}^\\infty\\frac{-e^{i\\pi}}{2^n}$");
+ ui->cmbTestset->addItem("math 3", "$\\mbox{det} \\begin{pmatrix} 1 & x_1 & \\ldots & x_1^{n-1} \\\\ 1 & x_2 & \\ldots & x_2^{n-1} \\\\ \\vdots & \\vdots & \\ddots & \\vdots \\\\ 1 & x_n & \\ldots & x_n^{n-1} \\end{pmatrix} = \\prod_{1 \\leq i < j \\leq n} (x_j - x_i) $");
+ ui->cmbTestset->addItem("math 4", "$\\sqrt{1+\\sqrt{1+\\sqrt{1+\\sqrt{1+\\sqrt{1+\\sqrt{1+x}}}}}}$");
+ ui->cmbTestset->addItem("math 5", "$\\left(\\stackrel{p}{2}\\right)=x^2y^{p-2}-\\frac{1}{1-x}\\frac{1}{1-x^2}$");
+ ui->cmbTestset->addItem("math 6", "$a_0+\\frac{1}{a_1+\\frac{1}{a_2+\\frac{1}{a_3+\\frac{1}{a_4}}}}$");
+ ui->cmbTestset->addItem("math 7", "$\\left(\\frac{\\partial^2}{\\partial x^2}+\\frac{\\partial^2}{\\partial y^2}\\right)\\left|\\varphi(x+\\mathrm{i}y)\\right|^2=0$");
+ ui->cmbTestset->addItem("math 8", "$2^{2^{2^{x}}}$");
+ ui->cmbTestset->addItem("math 9", "$\\iint_Df(x,y)\\;\\mathrm{d}x\\;\\mathrm{d}y$");
+ ui->cmbTestset->addItem("math 10 (overbrace)", "$\\overbrace{x+x+...+x}{k\\ \\mathrm{times}}$");
+ ui->cmbTestset->addItem("math 11 (underbrace)", "$\\underbrace{x+x+...+x}{k\\ \\mathrm{times}}$");
+ ui->cmbTestset->addItem("math 12 (under/overbrace)", "$\\underbrace{\\overbrace{x+x+...+x}{k\\ \\mathrm{times}} \\overbrace{x+x+...+x}{k\\ \\mathrm{times}}}{2k\\ \\mathrm{times}}$");
+ ui->cmbTestset->addItem("math 13", "$y_1''\\ \\ \\ y_2'''$");
+ ui->cmbTestset->addItem("math 14", "$f(x)=\\begin{cases} 1/3 & \\mathrm{if}\\ 0\\leq x\\leq1 \\\\ 2/3 & \\mathrm{if}\\ 3\\leq x\\leq4 \\\\0 & \\mathrm{elsewhere} \\end{cases}$");
+ ui->cmbTestset->addItem("math 15", "$\\Re{z} =\\frac{n\\pi \\dfrac{\\theta +\\psi}{2}}{\\left(\\dfrac{\\theta +\\psi}{2}\\right)^2 + \\left( \\dfrac{1}{2}\\log \\left\\lvert\\dfrac{B}{A}\\right\\rvert\\right)^2}.$");
+ ui->cmbTestset->addItem("math 16", "$\\sum_{m=1}^\\infty\\sum_{n=1}^\\infty\\frac{m^2\\,n}{3^m\\left(m\\,3^n+n\\,3^m\\right)}$");
+ ui->cmbTestset->addItem("math 17", "$\\phi_n(\\kappa) =\\frac{1}{4\\pi^2\\kappa^2} \\int_0^\\infty\\frac{\\sin(\\kappa R)}{\\kappa R}\\frac{\\partial}{\\partial R}\\left[R^2\\frac{\\partial D_n(R)}{\\partial R}\\right]\\,dR$");
+ ui->cmbTestset->addItem("math 18", "${}_pF_q(a_1,\\dots,a_p;c_1,\\dots,c_q;z)= \\sum_{n=0}^\\infty\\frac{(a_1)_n\\cdots(a_p)_n}{(c_1)_n\\cdots(c_q)_n}\\frac{z^n}{n!}$");
+ ui->cmbTestset->addItem("math 19 (overset)", "$X \\overset{=}{def} Y$\\ \\ \\ \\ \\ $X \\overset{=}{!} Y$\\ \\ \\ \\ \\ $X \\overset{\\rightarrow}{f} Y$\\ \\ \\ \\ \\ $\\frac{f(x+\\Delta x)-f(x)}{\\Delta x}\\overset{\\longrightarrow}{\\Delta x\\to 0}f'(x)$");
+ ui->cmbTestset->addItem("math 20 (underset)", "$X \\underset{=}{\\text{def (5)}} Y$\\ \\ \\ \\ \\ $X \\underset{\\rightarrow}{f} Y$\\ \\ \\ \\ \\ $\\frac{f(x+\\Delta x)-f(x)}{\\Delta x}\\underset{\\longrightarrow}{\\Delta x\\to 0}f'(x)$");
+ ui->cmbTestset->addItem("Jacobi Matrix and VarCov matrix", "$J_{ij}= \\left.\\frac{\\partial f(x,\\vec{p})}{\\partial p_i}\\right|_{\\vec{p},x=x_j}\\ \\ \\ \\ \\ \\mat{C}=\\left(\\mat{J}^\\mathrm{T}\\ J\\right)^{-1}\\ \\ \\ \\ \\ test: \\left|\\frac{\\partial f(x,\\vec{p})}{\\partial p_i}\\right|_{\\vec{p},x=x_j}^2$");
+ ui->cmbTestset->addItem("operator test (textmode)", "x=0\\ \\ y>0\\ \\ x+y\\ \\ -1\\ \\ x-2\\ \\ x\\cdot y\\ \\ x\\geq 4\\ \\ x~4");
+ ui->cmbTestset->addItem("operator test (mathmode)", "$x=0\\ \\ y>0\\ \\ x+y\\ \\ -1\\ \\ x-2\\ \\ x\\cdot y\\ \\ x\\geq 4\\ \\ x~4$");
+ ui->cmbTestset->addItem("color test", "\\textcolor{red}{RED}\\textcolor{blue}{BLUE}");
+ ui->cmbTestset->addItem("boxed test", "test: \\boxed{boxed text} in the middle");
+ ui->cmbTestset->addItem("mathboxed test", "\\fbox{2^{2^{\\colorbox{red}{2^{x}}}}}");
+ ui->cmbTestset->addItem("axiom of power test", "$\\forall A \\, \\exists P \\, \\forall B \\, [B \\in P \\iff \\forall C \\, (C \\in B \\Rightarrow C \\in A)]$");
+ ui->cmbTestset->addItem("De Morgan's law", "$\\neg(P\\land Q)\\iff(\\neg P)\\lor(\\neg Q)$ or $\\overline{\\bigcap_{i \\in I} A_{i}}\\equiv\\bigcup_{i \\in I} \\overline{A_{i}}$ or $\\overline{A \\cup B}\\equiv\\overline{A} \\cap \\overline{B}$");
+ ui->cmbTestset->addItem("quadratic formula", "$x=\\frac{-b \\pm \\sqrt{b^2-4ac}}{2a}$");
+ ui->cmbTestset->addItem("combination", "$\\binom{n}{k} = \\frac{n(n-1)...(n-k+1)}{k(k-1)\\dots1}=\\frac{n!}{k!(n-k)!}$");
+ ui->cmbTestset->addItem("Sophomore's dream 1", "$\\int_0^1 x^{-x}\\,dx = \\sum_{n=1}^\\infty n^{-n}(\\scriptstyle{= 1.29128599706266354040728259059560054149861936827\\dots)}$");
+ ui->cmbTestset->addItem("Sophomore's dream 2", "$\\int_0^1 x^x \\,dx = \\sum_{n=1}^\\infty (-1)^{n+1}n^{-n} = - \\sum_{n=1}^\\infty (-n)^{-n} (\\scriptstyle{= 0.78343051071213440705926438652697546940768199014\\dots})$");
+ ui->cmbTestset->addItem("divergence 1", "$\\operatorname{div}\\vec{F} = \\nabla\\cdot\\vec{F}=\\frac{\\partial U}{\\partial x}+\\frac{\\partial V}{\\partial y}+\\frac{\\partial W}{\\partial z}$");
+ ui->cmbTestset->addItem("divergence 2", "$\\overrightarrow{\\operatorname{div}}\\,(\\mathbf{\\underline{\\underline{\\epsilon}}}) = "
+ "\\begin{bmatrix}"
+ "\\frac{\\partial \\epsilon_{xx}}{\\partial x} +\\frac{\\partial \\epsilon_{yx}}{\\partial y} +\\frac{\\partial \\epsilon_{zx}}{\\partial z} \\\\"
+ "\\frac{\\partial \\epsilon_{xy}}{\\partial x} +\\frac{\\partial \\epsilon_{yy}}{\\partial y} +\\frac{\\partial \\epsilon_{zy}}{\\partial z} \\\\"
+ "\\frac{\\partial \\epsilon_{xz}}{\\partial x} +\\frac{\\partial \\epsilon_{yz}}{\\partial y} +\\frac{\\partial \\epsilon_{zz}}{\\partial z}"
+ "\\end{bmatrix}$");
+ ui->cmbTestset->addItem("lim, sum ...", "$\\lim_{x\\to\\infty} f(x) = \\binom{k}{r} + \\frac{a}{b} \\sum_{n=1}^\\infty a_n + \\displaystyle{ \\left\\{ \\frac{1}{13} \\sum_{n=1}^\\infty b_n \\right\\} }.$");
+ ui->cmbTestset->addItem("array test", "$f(x) := \\left\\{\\begin{array} x^2 \\sin \\frac{1}{x} & \\textrm{if } x \\ne 0, \\\\ 0 & \\textrm{if } x = 0 . \\end{array}\\right.$");
+ ui->cmbTestset->addItem("Schwinger-Dyson", "$\\left\\langle\\psi\\left|\\mathcal{T}\\{F \\phi^j\\}\\right|\\psi\\right\\rangle=\\left\\langle\\psi\\left|\\mathcal{T}\\{iF_{,i}D^{ij}-FS_{int,i}D^{ij}\\}\\right|\\psi\\right\\rangle.$");
+ ui->cmbTestset->addItem(QLatin1String("Schrödinger's equation"), "$\\left[-\\frac{\\hbar^2}{2m}\\frac{\\partial^2}{\\partial x^2}+V\\right]\\Psi(x)=\\mathrm{i}\\hbar\\frac{\\partial}{\\partial t}\\Psi(x)$");
+ ui->cmbTestset->addItem("Cauchy-Schwarz inequality", "$\\left( \\sum_{k=1}^n a_k b_k \\right)^2 \\leq \\left( \\sum_{k=1}^n a_k^2 \\right) \\left( \\sum_{k=1}^n b_k^2 \\right)$");
+ ui->cmbTestset->addItem("Maxwell's equations", "$\\begin{aligned}\\nabla \\times \\vec{\\mathbf{B}} -\\, \\frac{1}{c}\\, \\frac{\\partial\\vec{\\mathbf{E}}}{\\partial t} & = \\frac{4\\pi}{c}\\vec{\\mathbf{j}} \\\\ \\nabla \\cdot \\vec{\\mathbf{E}} & = 4 \\pi \\rho \\\\\\nabla \\times \\vec{\\mathbf{E}}\\, +\\, \\frac{1}{c}\\, \\frac{\\partial\\vec{\\mathbf{B}}}{\\partial t} & = \\vec{\\mathbf{0}} \\\\\\nabla \\cdot \\vec{\\mathbf{B}} & = 0 \\end{aligned}$");
+ ui->cmbTestset->addItem("Langevin Equation", "$m \\dot{v}(t) = -\\gamma v(t) + F(x,t)+ f(t)$");
+ ui->cmbTestset->addItem("Fokker-Planck Equation", "$\\frac{\\partial}{\\partial t}P(y,t)=-\\frac{\\partial}{\\partial y}\\left[ A(y,t)P(y,t)\\right] +\\frac{\\Gamma}{2}\\frac{\\partial^2}{\\partial y^2}\\left[ P(y,t)\\right]$");
+ ui->cmbTestset->addItem("Hamilton Equations of motion", "$\\mathcal{H}(\\mathbf{q},\\mathbf{p})=\\frac{\\mathbf{p}^2}{2\\,m}+V(\\mathbf{q})\\ \\ \\ \\text{and}\\ \\ \\ \\dot{q}_k =\\frac{p_k}{m}\\ ,\\ \\dot{p}_k = - \\frac{\\partial V}{\\partial q_k}$");
+ ui->cmbTestset->addItem("Gaussian Distrubution", "$f(x | \\mu,\\sigma^2)=\\frac{1}{\\sqrt{2\\pi\\sigma^2}}\\operatorname{exp}\\left(-\\frac{(x-\\mu)^2}{2\\sigma^2}\\right)=\\frac{1}{\\sqrt{2\\pi\\sigma^2}} e^{-\\frac{(x-\\mu)^2}{2\\sigma^2}}\\quad -\\inftycmbTestset->addItem("User-Editable Text");
+ //
+ //ui->cmbTestset->addItem("", "$$");
+ //ui->cmbTestset->addItem("", "$$");
+ //ui->cmbTestset->addItem("", "");
+ ui->cmbTestset->setCurrentIndex(0);
+
+ ui->labMath->setMath("\\left(\\left[\\sqrt{2\\pi\\cdot\\int_{-\\infty}^\\infty f(x)\\;\\mathrm{d}x}\\right]\\right)");
+ ui->cmbFont->setCurrentIndex(1);
+}
+
+TestForm::~TestForm()
+{
+ delete ui;
+}
+
+#define W 2000
+#define H 2000
+#define X1 15
+#define Y1 50
+
+
+
+double TestForm::draw(QPainter& painter, double X, double YY, JKQTmathText& mt, QString name, double& durationSizingMS, double&durationTimingMS) {
+
+
+ double Y=YY;
+ painter.save();
+ ht.start();
+ QSizeF s=mt.getSize(painter);
+ Y=Y+mt.getAscent(painter);
+ durationSizingMS=ht.get_time()/1000.0;
+ qDebug()<<" sizing in "<chkBoxes->isChecked());
+ durationTimingMS=ht.get_time()/1000.0;
+ qDebug()<<" drawing in "<get_decoration()));
+ if (decoN->get_child()) ti->addChild(createTree(decoN->get_child(), ti));
+ } else if (matrixN) {
+ int l=matrixN->get_lines();
+ int c=matrixN->get_columns();
+ name=QString("MTmatrixNode: l*c=%1*%2").arg(l).arg(c);
+ QVector > children=matrixN->get_children();
+ for (int y=0; ysetText(0, QString("(%1,%2):").arg(y).arg(x)+it->text(0));
+ ti->addChild(it);
+ }
+ }
+ }
+ } else if (fracN) {
+ name=QString("MTfracNode: mode='%1'").arg(JKQTmathText::fracModeToString(fracN->get_mode()));
+ if (fracN->get_child1()) ti->addChild(createTree(fracN->get_child1(), ti));
+ if (fracN->get_child2()) ti->addChild(createTree(fracN->get_child2(), ti));
+ } else if (sqrtN) {
+ name=QString("MTsqrtNode: deg=%1").arg(sqrtN->get_degree());
+ if (sqrtN->get_child()) ti->addChild(createTree(sqrtN->get_child(), ti));
+ } else if (braceN) {
+ name=QString("MTbraceNode: l='%1', r='%2', showR=%3").arg(braceN->get_openbrace()).arg(braceN->get_closebrace()).arg(braceN->get_showRightBrace());
+ if (braceN->get_child()) ti->addChild(createTree(braceN->get_child(), ti));
+ } else if (superN) {
+ name=QString("MTsuperscriptNode");
+ if (superN->get_child()) ti->addChild(createTree(superN->get_child(), ti));
+ } else if (subN) {
+ name=QString("MTsubscriptNode");
+ if (subN->get_child()) ti->addChild(createTree(subN->get_child(), ti));
+ } else if (inst1N) {
+ name=QString("MTinstruction1Node: \'%1\'").arg(inst1N->get_name());
+ if (inst1N->get_child()) ti->addChild(createTree(inst1N->get_child(), ti));
+ } else if (lstN) {
+ name=QString("MTlistNode");
+ QList list=lstN->get_nodes();
+ for (int i=0; iaddChild(createTree(list[i], ti));
+ }
+ } else if (symN) {
+ name=QString("MTsymbolNode: \'%1\'").arg(symN->get_symbolName());
+ } else if (spN) {
+ name=QString("MTwhitespaceNode :\'%1\'").arg(txtN->get_text());
+ } else if (txtN) {
+ name=QString("MTtextNode: \'%1\'").arg(txtN->get_text());
+
+ } else {
+ name=QString("unknown");
+ }
+
+ ti->setText(0,name);
+
+ /*
+ QString space="";
+ QTreeWidgetItem* p=ti->parent();
+ while (p) {
+ space+=" ";
+ p=p->parent();
+ }
+
+ qDebug()<cmbTestset->currentIndex()==ui->cmbTestset->count()-1) {
+ mathTest=ui->textBrowserSource->toPlainText();
+ ui->textBrowserSource->setReadOnly(false);
+ ui->btnRender->setEnabled(true);
+ } else {
+ mathTest=ui->cmbTestset->itemData(ui->cmbTestset->currentIndex()).toString();
+ ui->textBrowserSource->setPlainText(mathTest);
+ ui->textBrowserSource->setReadOnly(true);
+ ui->btnRender->setEnabled(false);
+ }
+
+ ui->scrollArea->setBackgroundRole(QPalette::Dark);
+
+ QPixmap pix(W, H);
+ pix.fill();
+ QPainter painter;
+ JKQTmathText mt(this);
+
+
+ double Y=Y1;
+
+ painter.begin(&pix);
+ if (ui->chkAntiAlias->isChecked()) painter.setRenderHint(QPainter::Antialiasing);
+ if (ui->chkAntiAliasHQ->isChecked()) painter.setRenderHint(QPainter::HighQualityAntialiasing);
+ if (ui->chkAntiAliasText->isChecked()) painter.setRenderHint(QPainter::TextAntialiasing);
+ if (ui->chkSmoothTransform->isChecked()) painter.setRenderHint(QPainter::QPainter::SmoothPixmapTransform);
+ ht.start();
+
+
+ mt.set_fontRoman(ui->cmbUnicodeSerif->currentFont().family());
+ mt.set_fontMathRoman(ui->cmbUnicodeSerif->currentFont().family());
+ mt.set_fontSans(ui->cmbUnicodeSans->currentFont().family());
+ mt.set_fontMathSans(ui->cmbUnicodeSans->currentFont().family());
+ mt.set_fontTypewriter(ui->cmbUnicodeFixed->currentFont().family());
+ mt.set_fontSymbol(ui->cmbUnicodeSymbol->currentFont().family());
+
+ switch (ui->cmbFont->currentIndex()) {
+ case 1: mt.useXITS(); break;
+ case 2: mt.useSTIX(); break;
+ case 3: mt.useAnyUnicode(ui->cmbUnicodeSans->currentFont().family(),ui->cmbUnicodeSerif->currentFont().family()); break;
+ case 4: mt.useLatexFonts(ui->edtLatexPrefix->text(), ui->edtLatexPostfix->text()); break;
+ case 5: mt.useASANA(); break;
+
+ }
+
+ ui->tree->clear();
+ ht.start();
+ double durationParse=0;
+ if (mt.parse(mathTest)) {
+ durationParse=ht.get_time()/1000.0;
+ ui->tree->addTopLevelItem(createTree(mt.get_parsedNode()));
+ } else {
+ durationParse=ht.get_time()/1000.0;
+ }
+ ui->labParsingTimes->setText(QString(" %1ms").arg(durationParse, 0, 'f', 3));
+ ui->tree->expandAll();
+ bool okh=true;
+ ui->textBrowser->clear();
+ qDebug()<<"parse mathTest in "<edtSizes->text().split(",");
+ ui->labRenderTimes->setText("");
+
+ for (int i=0; icmbTestset->currentText()).arg(ui->cmbFont->currentText()).arg(size), durationSizingMS, durationTimingMS);
+
+ if (i==0) {
+ if (mt.get_error_list().size()>0) {
+ ui->labError->setText(""+mt.get_error_list().join("
")+"");
+ } else {
+ ui->labError->setText("OK");
+ }
+ }
+
+ ui->labRenderTimes->setText(ui->labRenderTimes->text()+QString(" %1pt: %2ms/%3ms").arg(size).arg(durationSizingMS, 0, 'F', 1).arg(durationTimingMS, 0, 'F', 1));
+ ui->textBrowser->textCursor().insertHtml("
"+mt.toHtml(&okh)+"
");
+ qDebug()<<"HTML: ---------------------------------------------\n"<label->setPixmap(pix);
+ QApplication::restoreOverrideCursor();
+}
diff --git a/test/jkqtmathtext_test/testform.h b/examples/jkqtmathtext_test/testform.h
similarity index 95%
rename from test/jkqtmathtext_test/testform.h
rename to examples/jkqtmathtext_test/testform.h
index ef96bda633..9e8f97bfee 100644
--- a/test/jkqtmathtext_test/testform.h
+++ b/examples/jkqtmathtext_test/testform.h
@@ -1,34 +1,34 @@
-#ifndef TESTFORM_H
-#define TESTFORM_H
-
-#include
-#include
-#include "jkqtmathtext/jkqtmathtext.h"
-#include "jkqtplottertools/jkqtphighrestimer.h"
-#include
-#include
-
-
-namespace Ui {
- class TestForm;
-}
-
-class TestForm : public QWidget
-{
- Q_OBJECT
-
- public:
- explicit TestForm(QWidget *parent = 0);
- ~TestForm();
-
- public slots:
- void updateMath();
- private:
- Ui::TestForm *ui;
- JKQTPHighResTimer ht;
- double draw(QPainter& painter, double X, double YY, JKQTmathText& mt, QString name, double &durationSizingMS, double &durationTimingMS);
-
- QTreeWidgetItem* createTree(JKQTmathText::MTnode* node, QTreeWidgetItem *parent=NULL);
-};
-
-#endif // TESTFORM_H
+#ifndef TESTFORM_H
+#define TESTFORM_H
+
+#include
+#include
+#include "jkqtmathtext/jkqtmathtext.h"
+#include "jkqtplottertools/jkqtphighrestimer.h"
+#include
+#include
+
+
+namespace Ui {
+ class TestForm;
+}
+
+class TestForm : public QWidget
+{
+ Q_OBJECT
+
+ public:
+ explicit TestForm(QWidget *parent = 0);
+ ~TestForm();
+
+ public slots:
+ void updateMath();
+ private:
+ Ui::TestForm *ui;
+ JKQTPHighResTimer ht;
+ double draw(QPainter& painter, double X, double YY, JKQTmathText& mt, QString name, double &durationSizingMS, double &durationTimingMS);
+
+ QTreeWidgetItem* createTree(JKQTmathText::MTnode* node, QTreeWidgetItem *parent=NULL);
+};
+
+#endif // TESTFORM_H
diff --git a/test/jkqtmathtext_test/testform.ui b/examples/jkqtmathtext_test/testform.ui
similarity index 95%
rename from test/jkqtmathtext_test/testform.ui
rename to examples/jkqtmathtext_test/testform.ui
index 768cceff4c..dfc55d2a8f 100644
--- a/test/jkqtmathtext_test/testform.ui
+++ b/examples/jkqtmathtext_test/testform.ui
@@ -1,672 +1,672 @@
-
-
- TestForm
-
-
-
- 0
- 0
- 1238
- 742
-
-
-
- Form
-
-
- -
-
-
- true
-
-
-
-
- 0
- 0
- 605
- 616
-
-
-
-
-
-
-
- TextLabel
-
-
- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop
-
-
-
-
-
-
-
- -
-
-
-
- 75
- true
-
-
-
- render times (getSize()+getAscent()/draw()):
-
-
-
- -
-
-
-
-
-
- testset:
-
-
-
- -
-
-
- -1
-
-
- 30
-
-
-
- -
-
-
- fonts:
-
-
-
- -
-
-
- 0
-
-
-
-
- Symbol
-
-
- -
-
- XITS
-
-
- -
-
- STIX
-
-
- -
-
- Unicode
-
-
- -
-
- LaTeX
-
-
- -
-
- ASANA
-
-
-
-
- -
-
-
- size:
-
-
-
- -
-
-
- 90,30,20,10
-
-
-
- -
-
-
- boxes
-
-
- true
-
-
-
- -
-
-
- anti-aliase
-
-
- true
-
-
-
- -
-
-
- HQ anti-aliase
-
-
-
- -
-
-
- Text anti-aliase
-
-
- true
-
-
-
- -
-
-
- smooth transform
-
-
-
- -
-
-
- Qt::Horizontal
-
-
-
- 40
- 20
-
-
-
-
-
-
- -
-
-
- left(left[sqrt{2picdotint_{-infty}^infty f(x);mathrm{d}x}right]right)
-
-
-
- -
-
-
-
-
-
-
- 75
- true
-
-
-
- LaTeX source:
-
-
-
- -
-
-
- Qt::Horizontal
-
-
-
- 40
- 20
-
-
-
-
- -
-
-
- false
-
-
- &Render
-
-
-
-
-
- -
-
-
- true
-
-
-
- -
-
-
-
- 75
- true
-
-
-
- rendered result:
-
-
-
- -
-
-
-
- 75
- true
-
-
-
- HTML output:
-
-
-
- -
-
-
-
-
-
- latex prefix/postfix:
-
-
-
- -
-
-
- -
-
-
- -
-
-
- Symbol/Unicode fonts:
-
-
-
- -
-
-
-
- Times New Roman
-
-
-
-
- -
-
-
-
- Arial
-
-
-
-
- -
-
-
-
- Courier New
-
-
-
-
- -
-
-
- symbol font:
-
-
-
- -
-
-
-
- Symbol
-
-
-
-
- -
-
-
- Qt::Horizontal
-
-
-
- 40
- 20
-
-
-
-
-
-
- -
-
-
-
-
-
-
- -
-
-
- -
-
-
- true
-
-
-
- 1
-
-
-
-
- -
-
-
-
- 75
- true
-
-
-
- node tree:
-
-
-
- -
-
-
-
- 75
- true
-
-
-
- parsing times:
-
-
-
- -
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
- JKQTMathTextLabel
- QLabel
- jkqtmathtext/jkqtmathtext.h
-
-
-
-
-
- cmbTestset
- currentIndexChanged(int)
- TestForm
- updateMath()
-
-
- 130
- 20
-
-
- 421
- 36
-
-
-
-
- cmbFont
- currentIndexChanged(int)
- TestForm
- updateMath()
-
-
- 328
- 29
-
-
- 423
- 89
-
-
-
-
- chkBoxes
- clicked()
- TestForm
- updateMath()
-
-
- 790
- 27
-
-
- 424
- 187
-
-
-
-
- chkAntiAlias
- clicked()
- TestForm
- updateMath()
-
-
- 868
- 27
-
-
- 422
- 220
-
-
-
-
- chkAntiAliasHQ
- clicked()
- TestForm
- updateMath()
-
-
- 964
- 27
-
-
- 423
- 259
-
-
-
-
- chkAntiAliasText
- clicked()
- TestForm
- updateMath()
-
-
- 1067
- 27
-
-
- 424
- 302
-
-
-
-
- edtSizes
- textChanged(QString)
- TestForm
- updateMath()
-
-
- 679
- 29
-
-
- 422
- 160
-
-
-
-
- edtLatexPrefix
- textChanged(QString)
- TestForm
- updateMath()
-
-
- 141
- 48
-
-
- 520
- 140
-
-
-
-
- edtLatexPostfix
- textChanged(QString)
- TestForm
- updateMath()
-
-
- 200
- 49
-
-
- 519
- 118
-
-
-
-
- cmbUnicodeSerif
- currentFontChanged(QFont)
- TestForm
- updateMath()
-
-
- 416
- 54
-
-
- 519
- 201
-
-
-
-
- cmbUnicodeSans
- currentFontChanged(QFont)
- TestForm
- updateMath()
-
-
- 553
- 45
-
-
- 518
- 175
-
-
-
-
- cmbUnicodeFixed
- currentFontChanged(QFont)
- TestForm
- updateMath()
-
-
- 949
- 57
-
-
- 518
- 236
-
-
-
-
- cmbUnicodeSymbol
- currentFontChanged(QFont)
- TestForm
- updateMath()
-
-
- 1221
- 57
-
-
- 520
- 288
-
-
-
-
- chkSmoothTransform
- clicked()
- TestForm
- updateMath()
-
-
- 1181
- 27
-
-
- 519
- 317
-
-
-
-
- btnRender
- clicked()
- TestForm
- updateMath()
-
-
- 1187
- 83
-
-
- 617
- 380
-
-
-
-
-
- updateMath()
-
-
+
+
+ TestForm
+
+
+
+ 0
+ 0
+ 1238
+ 742
+
+
+
+ Form
+
+
+ -
+
+
+ true
+
+
+
+
+ 0
+ 0
+ 605
+ 616
+
+
+
+
-
+
+
+ TextLabel
+
+
+ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop
+
+
+
+
+
+
+
+ -
+
+
+
+ 75
+ true
+
+
+
+ render times (getSize()+getAscent()/draw()):
+
+
+
+ -
+
+
-
+
+
+ testset:
+
+
+
+ -
+
+
+ -1
+
+
+ 30
+
+
+
+ -
+
+
+ fonts:
+
+
+
+ -
+
+
+ 0
+
+
-
+
+ Symbol
+
+
+ -
+
+ XITS
+
+
+ -
+
+ STIX
+
+
+ -
+
+ Unicode
+
+
+ -
+
+ LaTeX
+
+
+ -
+
+ ASANA
+
+
+
+
+ -
+
+
+ size:
+
+
+
+ -
+
+
+ 90,30,20,10
+
+
+
+ -
+
+
+ boxes
+
+
+ true
+
+
+
+ -
+
+
+ anti-aliase
+
+
+ true
+
+
+
+ -
+
+
+ HQ anti-aliase
+
+
+
+ -
+
+
+ Text anti-aliase
+
+
+ true
+
+
+
+ -
+
+
+ smooth transform
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+
+
+ -
+
+
+ left(left[sqrt{2picdotint_{-infty}^infty f(x);mathrm{d}x}right]right)
+
+
+
+ -
+
+
-
+
+
+
+ 75
+ true
+
+
+
+ LaTeX source:
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+ -
+
+
+ false
+
+
+ &Render
+
+
+
+
+
+ -
+
+
+ true
+
+
+
+ -
+
+
+
+ 75
+ true
+
+
+
+ rendered result:
+
+
+
+ -
+
+
+
+ 75
+ true
+
+
+
+ HTML output:
+
+
+
+ -
+
+
-
+
+
+ latex prefix/postfix:
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ Symbol/Unicode fonts:
+
+
+
+ -
+
+
+
+ Times New Roman
+
+
+
+
+ -
+
+
+
+ Arial
+
+
+
+
+ -
+
+
+
+ Courier New
+
+
+
+
+ -
+
+
+ symbol font:
+
+
+
+ -
+
+
+
+ Symbol
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ true
+
+
+
+ 1
+
+
+
+
+ -
+
+
+
+ 75
+ true
+
+
+
+ node tree:
+
+
+
+ -
+
+
+
+ 75
+ true
+
+
+
+ parsing times:
+
+
+
+ -
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+ JKQTMathTextLabel
+ QLabel
+ jkqtmathtext/jkqtmathtext.h
+
+
+
+
+
+ cmbTestset
+ currentIndexChanged(int)
+ TestForm
+ updateMath()
+
+
+ 130
+ 20
+
+
+ 421
+ 36
+
+
+
+
+ cmbFont
+ currentIndexChanged(int)
+ TestForm
+ updateMath()
+
+
+ 328
+ 29
+
+
+ 423
+ 89
+
+
+
+
+ chkBoxes
+ clicked()
+ TestForm
+ updateMath()
+
+
+ 790
+ 27
+
+
+ 424
+ 187
+
+
+
+
+ chkAntiAlias
+ clicked()
+ TestForm
+ updateMath()
+
+
+ 868
+ 27
+
+
+ 422
+ 220
+
+
+
+
+ chkAntiAliasHQ
+ clicked()
+ TestForm
+ updateMath()
+
+
+ 964
+ 27
+
+
+ 423
+ 259
+
+
+
+
+ chkAntiAliasText
+ clicked()
+ TestForm
+ updateMath()
+
+
+ 1067
+ 27
+
+
+ 424
+ 302
+
+
+
+
+ edtSizes
+ textChanged(QString)
+ TestForm
+ updateMath()
+
+
+ 679
+ 29
+
+
+ 422
+ 160
+
+
+
+
+ edtLatexPrefix
+ textChanged(QString)
+ TestForm
+ updateMath()
+
+
+ 141
+ 48
+
+
+ 520
+ 140
+
+
+
+
+ edtLatexPostfix
+ textChanged(QString)
+ TestForm
+ updateMath()
+
+
+ 200
+ 49
+
+
+ 519
+ 118
+
+
+
+
+ cmbUnicodeSerif
+ currentFontChanged(QFont)
+ TestForm
+ updateMath()
+
+
+ 416
+ 54
+
+
+ 519
+ 201
+
+
+
+
+ cmbUnicodeSans
+ currentFontChanged(QFont)
+ TestForm
+ updateMath()
+
+
+ 553
+ 45
+
+
+ 518
+ 175
+
+
+
+
+ cmbUnicodeFixed
+ currentFontChanged(QFont)
+ TestForm
+ updateMath()
+
+
+ 949
+ 57
+
+
+ 518
+ 236
+
+
+
+
+ cmbUnicodeSymbol
+ currentFontChanged(QFont)
+ TestForm
+ updateMath()
+
+
+ 1221
+ 57
+
+
+ 520
+ 288
+
+
+
+
+ chkSmoothTransform
+ clicked()
+ TestForm
+ updateMath()
+
+
+ 1181
+ 27
+
+
+ 519
+ 317
+
+
+
+
+ btnRender
+ clicked()
+ TestForm
+ updateMath()
+
+
+ 1187
+ 83
+
+
+ 617
+ 380
+
+
+
+
+
+ updateMath()
+
+
diff --git a/test/jkqtplot_test/EmfEngine/CHANGES.txt b/examples/jkqtplot_test/EmfEngine/CHANGES.txt
similarity index 97%
rename from test/jkqtplot_test/EmfEngine/CHANGES.txt
rename to examples/jkqtplot_test/EmfEngine/CHANGES.txt
index b5c613903b..88faa95e9e 100644
--- a/test/jkqtplot_test/EmfEngine/CHANGES.txt
+++ b/examples/jkqtplot_test/EmfEngine/CHANGES.txt
@@ -1,66 +1,66 @@
-EmfEngine GNU GPL v. 3.0
-------------------------
+EmfEngine GNU GPL v. 3.0
+------------------------
26/07/2010 - Release 0.8
This release improves the support for Unix-like systems, using the GDI API provided by libEMF:
- - Fixes compilation issues.
+ - Fixes compilation issues.
- Fixed crash when exporting rotated text strings.
- - Fixed drawing of paths.
+ - Fixed drawing of paths.
- Added support for drawing images and tiled pixmaps.
------------------------
-
-30/08/2009 - Release 0.7:
- - Fixed crash when exporting text strings having a non available font family using the GDI+ backend.
- - Improved exporting of texts containing superscripts/subscripts.
-
-------------------------
-
-16/07/2009 - Release 0.6. Improvements for the GDI+ backend:
- - Implemented support for pens with custom dash patterns.
- - Fixed drawing of polygons.
- - Fixed drawing of pixmaps/images.
-
-------------------------
-
-25/05/2009 - Release 0.5:
-- Implemented drawPoints().
-- Improved GDI+ backend:
- - Fixed clipping.
- - Improved drawRects().
-
-------------------------
-
-07/05/2009 - Release 0.4:
-
-- Fixed compile errors with Visual Studio 2008.
-- Removed clipping in drawTextItem().
-- Improved the build system.
-- Added the "EMFENGINE_DLL" and "EMFENGINE_DLL_BUILD" preprocessor flags in order to be able to build using Visual Studio (thanks to David Stranz).
-
-------------------------
-
-22/04/2009 - Release 0.3:
-
-EmfEngine was completely rewritten using the Windows GDI+ API. The old implementation using Windows GDI (also provided by libEMF on Unix-like systems) is still available if you disable the HAVE_GDI_PLUS option in EmfEngine.pro.
-This new implementation adds the following features:
- - Antialiasing
- - Antialiased texts (if the option HAVE_ANTIALIASED_TEXT is enabled in EmfEngine.pro)
- - Transparent brushes
- - Support for Qt::LinearGradientPattern and Qt::RadialGradientPattern
-
-------------------------
-
-13/04/2009 - Release 0.2:
-
-- Implemented drawImage().
-- Implemented drawTiledPixmap().
-- Improved drawPixmap().
-- Implemented rendering of QBrush with style set to Qt::TexturePattern.
-- Improved paths handling in drawPath().
-- Fixed polyline drawing in drawPolygon().
-- Modified the example to make use of the new features.
-------------------------
-
-10/04/2009 - Release 0.1: Initial release.
-
+
+30/08/2009 - Release 0.7:
+ - Fixed crash when exporting text strings having a non available font family using the GDI+ backend.
+ - Improved exporting of texts containing superscripts/subscripts.
+
+------------------------
+
+16/07/2009 - Release 0.6. Improvements for the GDI+ backend:
+ - Implemented support for pens with custom dash patterns.
+ - Fixed drawing of polygons.
+ - Fixed drawing of pixmaps/images.
+
+------------------------
+
+25/05/2009 - Release 0.5:
+- Implemented drawPoints().
+- Improved GDI+ backend:
+ - Fixed clipping.
+ - Improved drawRects().
+
+------------------------
+
+07/05/2009 - Release 0.4:
+
+- Fixed compile errors with Visual Studio 2008.
+- Removed clipping in drawTextItem().
+- Improved the build system.
+- Added the "EMFENGINE_DLL" and "EMFENGINE_DLL_BUILD" preprocessor flags in order to be able to build using Visual Studio (thanks to David Stranz).
+
+------------------------
+
+22/04/2009 - Release 0.3:
+
+EmfEngine was completely rewritten using the Windows GDI+ API. The old implementation using Windows GDI (also provided by libEMF on Unix-like systems) is still available if you disable the HAVE_GDI_PLUS option in EmfEngine.pro.
+This new implementation adds the following features:
+ - Antialiasing
+ - Antialiased texts (if the option HAVE_ANTIALIASED_TEXT is enabled in EmfEngine.pro)
+ - Transparent brushes
+ - Support for Qt::LinearGradientPattern and Qt::RadialGradientPattern
+
+------------------------
+
+13/04/2009 - Release 0.2:
+
+- Implemented drawImage().
+- Implemented drawTiledPixmap().
+- Improved drawPixmap().
+- Implemented rendering of QBrush with style set to Qt::TexturePattern.
+- Improved paths handling in drawPath().
+- Fixed polyline drawing in drawPolygon().
+- Modified the example to make use of the new features.
+------------------------
+
+10/04/2009 - Release 0.1: Initial release.
+
diff --git a/test/jkqtplot_test/EmfEngine/COPYING.txt b/examples/jkqtplot_test/EmfEngine/COPYING.txt
similarity index 100%
rename from test/jkqtplot_test/EmfEngine/COPYING.txt
rename to examples/jkqtplot_test/EmfEngine/COPYING.txt
diff --git a/test/jkqtplot_test/EmfEngine/EmfEngine.pro b/examples/jkqtplot_test/EmfEngine/EmfEngine.pro
similarity index 79%
rename from test/jkqtplot_test/EmfEngine/EmfEngine.pro
rename to examples/jkqtplot_test/EmfEngine/EmfEngine.pro
index ca67c324d1..4615ffa569 100644
--- a/test/jkqtplot_test/EmfEngine/EmfEngine.pro
+++ b/examples/jkqtplot_test/EmfEngine/EmfEngine.pro
@@ -1,7 +1,7 @@
-include( config.pri )
-
-TEMPLATE = subdirs
-
-SUBDIRS = \
- src \
+include( config.pri )
+
+TEMPLATE = subdirs
+
+SUBDIRS = \
+ src \
example
\ No newline at end of file
diff --git a/test/jkqtplot_test/EmfEngine/EmfEngine.pro.user b/examples/jkqtplot_test/EmfEngine/EmfEngine.pro.user
similarity index 100%
rename from test/jkqtplot_test/EmfEngine/EmfEngine.pro.user
rename to examples/jkqtplot_test/EmfEngine/EmfEngine.pro.user
diff --git a/test/jkqtplot_test/EmfEngine/README.txt b/examples/jkqtplot_test/EmfEngine/README.txt
similarity index 98%
rename from test/jkqtplot_test/EmfEngine/README.txt
rename to examples/jkqtplot_test/EmfEngine/README.txt
index f692f0c502..0c9f27e674 100644
--- a/test/jkqtplot_test/EmfEngine/README.txt
+++ b/examples/jkqtplot_test/EmfEngine/README.txt
@@ -1,28 +1,28 @@
-EmfEngine GNU GPL v. 3.0
-------------------------
-AUTHOR: Ion Vasilief
-------------------------
-FEATURES: EmfEngine enables Qt based applications to easily export graphics created using the
- QPainter class to the Enhanced MetaFile format (EMF).
----------------------------------------------------------------------------
-DEPENDENCIES: You need Qt (http://www.qtsoftware.com) installed on your system in order to build EmfEngine.
- On Unix-like systems you also need libEMF (http://libemf.sourceforge.net/).
----------------------------------------------------------------------------
-COMPILING: EmfEngine uses qmake for the building process.
- qmake is part of a Qt distribution:
- qmake reads project files, that contain the options and rules how to build a certain project.
- A project file ends with the suffix "*.pro". Please read the qmake documentation for more details.
-
-After installing Qt on your system, type the following command lines:
-
- $ qmake
- $ make
-
-if you use MinGW, or:
-
- $ qmake -tp vc -r
-
-if you use Microsoft Visual Studio (this will generate Visual Studio .vcproj project files in the "src" and "example" folders).
----------------------------------------------------------------------------
-USE: a short demo application is provided in the "example" folder of the source archive.
----------------------------------------------------------------------------
+EmfEngine GNU GPL v. 3.0
+------------------------
+AUTHOR: Ion Vasilief
+------------------------
+FEATURES: EmfEngine enables Qt based applications to easily export graphics created using the
+ QPainter class to the Enhanced MetaFile format (EMF).
+---------------------------------------------------------------------------
+DEPENDENCIES: You need Qt (http://www.qtsoftware.com) installed on your system in order to build EmfEngine.
+ On Unix-like systems you also need libEMF (http://libemf.sourceforge.net/).
+---------------------------------------------------------------------------
+COMPILING: EmfEngine uses qmake for the building process.
+ qmake is part of a Qt distribution:
+ qmake reads project files, that contain the options and rules how to build a certain project.
+ A project file ends with the suffix "*.pro". Please read the qmake documentation for more details.
+
+After installing Qt on your system, type the following command lines:
+
+ $ qmake
+ $ make
+
+if you use MinGW, or:
+
+ $ qmake -tp vc -r
+
+if you use Microsoft Visual Studio (this will generate Visual Studio .vcproj project files in the "src" and "example" folders).
+---------------------------------------------------------------------------
+USE: a short demo application is provided in the "example" folder of the source archive.
+---------------------------------------------------------------------------
diff --git a/test/jkqtplot_test/EmfEngine/config.pri b/examples/jkqtplot_test/EmfEngine/config.pri
similarity index 96%
rename from test/jkqtplot_test/EmfEngine/config.pri
rename to examples/jkqtplot_test/EmfEngine/config.pri
index 97854bc883..68c8d3d697 100644
--- a/test/jkqtplot_test/EmfEngine/config.pri
+++ b/examples/jkqtplot_test/EmfEngine/config.pri
@@ -1,15 +1,15 @@
-CONFIG += qt warn_on thread
-CONFIG += release
-
-# Comment the following line if you want to build using the GDI backend
-win32:CONFIG += HAVE_GDI_PLUS
-
-# Uncomment the following line if you want to enable text antialiasing (works only with the GDI+ backend enabled)
-#DEFINES += HAVE_ANTIALIASED_TEXT
-
-# Comment the following line if you want to build EmfEngine statically
-#CONFIG += EmfEngineDll
-
-
-
-
+CONFIG += qt warn_on thread
+CONFIG += release
+
+# Comment the following line if you want to build using the GDI backend
+win32:CONFIG += HAVE_GDI_PLUS
+
+# Uncomment the following line if you want to enable text antialiasing (works only with the GDI+ backend enabled)
+#DEFINES += HAVE_ANTIALIASED_TEXT
+
+# Comment the following line if you want to build EmfEngine statically
+#CONFIG += EmfEngineDll
+
+
+
+
diff --git a/test/jkqtplot_test/EmfEngine/example/example.pro b/examples/jkqtplot_test/EmfEngine/example/example.pro
similarity index 95%
rename from test/jkqtplot_test/EmfEngine/example/example.pro
rename to examples/jkqtplot_test/EmfEngine/example/example.pro
index d359aa202c..96dc2ac58f 100644
--- a/test/jkqtplot_test/EmfEngine/example/example.pro
+++ b/examples/jkqtplot_test/EmfEngine/example/example.pro
@@ -1,23 +1,23 @@
-include( ../config.pri )
-
-TARGET = example
-TEMPLATE = app
-CONFIG += warn_on release thread
-win32: CONFIG += console
-
-MOC_DIR = ../tmp
-OBJECTS_DIR = ../tmp
-DESTDIR = ./
-
-INCLUDEPATH += ../src
-unix: INCLUDEPATH += /usr/local/include/libEMF
-
-LIBS += ../libEmfEngine.a
-
-win32: LIBS += -lgdi32
-unix: LIBS += /usr/local/lib/libEMF.a
-
-HEADERS = renderarea.h \
- pixmaps.h
-SOURCES = main.cpp \
- renderarea.cpp
+include( ../config.pri )
+
+TARGET = example
+TEMPLATE = app
+CONFIG += warn_on release thread
+win32: CONFIG += console
+
+MOC_DIR = ../tmp
+OBJECTS_DIR = ../tmp
+DESTDIR = ./
+
+INCLUDEPATH += ../src
+unix: INCLUDEPATH += /usr/local/include/libEMF
+
+LIBS += ../libEmfEngine.a
+
+win32: LIBS += -lgdi32
+unix: LIBS += /usr/local/lib/libEMF.a
+
+HEADERS = renderarea.h \
+ pixmaps.h
+SOURCES = main.cpp \
+ renderarea.cpp
diff --git a/test/jkqtplot_test/EmfEngine/example/main.cpp b/examples/jkqtplot_test/EmfEngine/example/main.cpp
similarity index 95%
rename from test/jkqtplot_test/EmfEngine/example/main.cpp
rename to examples/jkqtplot_test/EmfEngine/example/main.cpp
index af275cd9c7..1a364f193a 100644
--- a/test/jkqtplot_test/EmfEngine/example/main.cpp
+++ b/examples/jkqtplot_test/EmfEngine/example/main.cpp
@@ -1,20 +1,20 @@
-#include
-#include "renderarea.h"
-#include
-
-int main(int argc, char *argv[])
-{
- QApplication app(argc, argv);
- RenderArea area;
-
- area.setGeometry(100, 100, 600, 500);
- area.show();
-
- EmfPaintDevice emf(QSize(600, 500), QString("example.emf"));
- QPainter paint;
- paint.begin(&emf);
- area.draw(&paint);
- paint.end();
-
- return app.exec();
-}
+#include
+#include "renderarea.h"
+#include
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+ RenderArea area;
+
+ area.setGeometry(100, 100, 600, 500);
+ area.show();
+
+ EmfPaintDevice emf(QSize(600, 500), QString("example.emf"));
+ QPainter paint;
+ paint.begin(&emf);
+ area.draw(&paint);
+ paint.end();
+
+ return app.exec();
+}
diff --git a/test/jkqtplot_test/EmfEngine/example/pixmaps.h b/examples/jkqtplot_test/EmfEngine/example/pixmaps.h
similarity index 96%
rename from test/jkqtplot_test/EmfEngine/example/pixmaps.h
rename to examples/jkqtplot_test/EmfEngine/example/pixmaps.h
index 86a2aca988..2cda3c22dc 100644
--- a/test/jkqtplot_test/EmfEngine/example/pixmaps.h
+++ b/examples/jkqtplot_test/EmfEngine/example/pixmaps.h
@@ -1,805 +1,805 @@
-/* XPM */
-static const char * qt_logo_xpm[] = {
-"69 80 364 2",
-" c None",
-". c #0C481E",
-"+ c #135020",
-"@ c #3F832C",
-"# c #4D932F",
-"$ c #509730",
-"% c #559C31",
-"& c #5AA233",
-"* c #569E32",
-"= c #4D942F",
-"- c #468B2E",
-"; c #41852C",
-"> c #0E4B1F",
-", c #347629",
-"' c #60A934",
-") c #66B036",
-"! c #63AC35",
-"~ c #579F32",
-"{ c #4E9430",
-"] c #478C2E",
-"^ c #41862C",
-"/ c #124F20",
-"( c #59A133",
-"_ c #64AD35",
-": c #58A032",
-"< c #4F9530",
-"[ c #488D2E",
-"} c #42862C",
-"| c #4A8F2E",
-"1 c #64AE36",
-"2 c #509630",
-"3 c #488E2E",
-"4 c #42872C",
-"5 c #317328",
-"6 c #65AF36",
-"7 c #5AA333",
-"8 c #498E2E",
-"9 c #43872D",
-"0 c #175521",
-"a c #63AD35",
-"b c #5BA333",
-"c c #519830",
-"d c #498F2E",
-"e c #43882D",
-"f c #2E6F27",
-"g c #5CA533",
-"h c #529931",
-"i c #4A902F",
-"j c #44882D",
-"k c #40842C",
-"l c #5DA634",
-"m c #539A31",
-"n c #4B902F",
-"o c #44892D",
-"p c #5FA734",
-"q c #549B31",
-"r c #0D491E",
-"s c #589E37",
-"t c #70B04C",
-"u c #83BE5D",
-"v c #7CBB53",
-"w c #6DB43F",
-"x c #63AD36",
-"y c #286926",
-"z c #26622B",
-"A c #699665",
-"B c #D0E0CF",
-"C c #FFFFFF",
-"D c #FEFEFD",
-"E c #E5F2DD",
-"F c #C4E1B2",
-"G c #9DCD7F",
-"H c #69B23A",
-"I c #185722",
-"J c #114E20",
-"K c #7FA67A",
-"L c #EEF6E8",
-"M c #A7D18B",
-"N c #6BB23C",
-"O c #3A7D2B",
-"P c #0D481E",
-"Q c #1E5A26",
-"R c #D4E2D1",
-"S c #E0EFD6",
-"T c #76B84A",
-"U c #63AB35",
-"V c #397C2A",
-"W c #8DBE74",
-"X c #9ECD80",
-"Y c #8EC56B",
-"Z c #7DBC55",
-"` c #6DB33F",
-" . c #3F842C",
-".. c #175323",
-"+. c #D2E1D0",
-"@. c #EFF7EA",
-"#. c #83BF5D",
-"$. c #0D491F",
-"%. c #EAF1E9",
-"&. c #CBE4BA",
-"*. c #B9D1B6",
-"=. c #EFF7EB",
-"-. c #72B646",
-";. c #235F2A",
-">. c #65B036",
-",. c #1C5A22",
-"'. c #487E48",
-"). c #F8FAF9",
-"!. c #ADC6AB",
-"~. c #B7CFB4",
-"{. c #D3E8C5",
-"]. c #67B037",
-"^. c #246324",
-"/. c #4F844E",
-"(. c #104D20",
-"_. c #DBE8D9",
-":. c #CCE5BC",
-"<. c #7BBB52",
-"[. c #114E1F",
-"}. c #2A662F",
-"|. c #A2C09D",
-"1. c #A1CE83",
-"2. c #64AE35",
-"3. c #0F4D1F",
-"4. c #8DB289",
-"5. c #65AF35",
-"6. c #165321",
-"7. c #588A56",
-"8. c #E6F2DE",
-"9. c #6CB33E",
-"0. c #0C491E",
-"a. c #104B1F",
-"b. c #CCDDC8",
-"c. c #E8F3E0",
-"d. c #539B31",
-"e. c #DCE8DB",
-"f. c #BCD3B8",
-"g. c #81BE59",
-"h. c #2C6D26",
-"i. c #2E6932",
-"j. c #95C873",
-"k. c #3E832B",
-"l. c #1C5926",
-"m. c #347529",
-"n. c #1B5825",
-"o. c #EBF4E4",
-"p. c #98B993",
-"q. c #D4E9C7",
-"r. c #296A26",
-"s. c #457B44",
-"t. c #558853",
-"u. c #C9E3B8",
-"v. c #155220",
-"w. c #568A54",
-"x. c #FAFDF9",
-"y. c #2D6A2D",
-"z. c #0F4B1E",
-"A. c #53864F",
-"B. c #D9E6D7",
-"C. c #BCD2B9",
-"D. c #D5E3D2",
-"E. c #DAECCF",
-"F. c #8DC469",
-"G. c #82BF5B",
-"H. c #77B94D",
-"I. c #589F33",
-"J. c #A6C3A1",
-"K. c #A7D28C",
-"L. c #276826",
-"M. c #2D6831",
-"N. c #659363",
-"O. c #51854F",
-"P. c #C5E1B3",
-"Q. c #E3EBE0",
-"R. c #86C161",
-"S. c #FDFEFD",
-"T. c #A8C5A1",
-"U. c #C6E2B4",
-"V. c #145122",
-"W. c #FEFFFE",
-"X. c #6AB23B",
-"Y. c #C5D8C1",
-"Z. c #CFE2C8",
-"`. c #2C6C27",
-" + c #2B6530",
-".+ c #F8FBF6",
-"++ c #5BA334",
-"@+ c #91B48C",
-"#+ c #E2EFDA",
-"$+ c #1D5B22",
-"%+ c #497F49",
-"&+ c #F1F8ED",
-"*+ c #82AA7F",
-"=+ c #F1F8EC",
-"-+ c #458536",
-";+ c #2F6A33",
-">+ c #417841",
-",+ c #E7F0E2",
-"'+ c #BDD8B3",
-")+ c #C3DAB9",
-"!+ c #CBDFC4",
-"~+ c #DBE9D3",
-"{+ c #B7D9A1",
-"]+ c #649360",
-"^+ c #EAF4E3",
-"/+ c #78A274",
-"(+ c #478C2D",
-"_+ c #6F9C6C",
-":+ c #E3F1DB",
-"<+ c #0E4A1E",
-"[+ c #6D9B69",
-"}+ c #7DA578",
-"|+ c #DCEDD1",
-"1+ c #639260",
-"2+ c #7FBD57",
-"3+ c #61AA35",
-"4+ c #88AE84",
-"5+ c #D5E9C8",
-"6+ c #598B57",
-"7+ c #8CC468",
-"8+ c #97B792",
-"9+ c #CEE6BF",
-"0+ c #1A5821",
-"a+ c #9ACB7A",
-"b+ c #5AA132",
-"c+ c #C8E2B6",
-"d+ c #1E5D23",
-"e+ c #477D46",
-"f+ c #5FA834",
-"g+ c #90B38B",
-"h+ c #1E5C22",
-"i+ c #487D47",
-"j+ c #A9D28D",
-"k+ c #7AA476",
-"l+ c #D1E7C3",
-"m+ c #51844E",
-"n+ c #9ECD7F",
-"o+ c #679563",
-"p+ c #D7EBCB",
-"q+ c #175421",
-"r+ c #93C771",
-"s+ c #185621",
-"t+ c #558752",
-"u+ c #DEEED4",
-"v+ c #61915E",
-"w+ c #88C263",
-"x+ c #1F5E24",
-"y+ c #437B44",
-"z+ c #E5F1DC",
-"A+ c #0F4C1F",
-"B+ c #6A9867",
-"C+ c #276625",
-"D+ c #356E38",
-"E+ c #749F70",
-"F+ c #73B747",
-"G+ c #2D6E27",
-"H+ c #28642E",
-"I+ c #62AB34",
-"J+ c #68B139",
-"K+ c #1D5A26",
-"L+ c #5EA734",
-"M+ c #F7FBF4",
-"N+ c #145021",
-"O+ c #9EBD99",
-"P+ c #E7EFE5",
-"Q+ c #91C66F",
-"R+ c #DEE9DC",
-"S+ c #C2DFAF",
-"T+ c #B0D698",
-"U+ c #357829",
-"V+ c #195524",
-"W+ c #99CA79",
-"X+ c #578955",
-"Y+ c #D0E7C1",
-"Z+ c #37703A",
-"`+ c #71B645",
-" @ c #D1E7C2",
-".@ c #E0EFD7",
-"+@ c #478D2E",
-"@@ c #EBF5E5",
-"#@ c #4B902E",
-"$@ c #80BE59",
-"%@ c #579E32",
-"&@ c #ADC7A8",
-"*@ c #B8DAA1",
-"=@ c #F9FBF8",
-"-@ c #6EB440",
-";@ c #155321",
-">@ c #D6EAC9",
-",@ c #3D743E",
-"'@ c #C1DFB1",
-")@ c #538E44",
-"!@ c #437B42",
-"~@ c #CCDEC7",
-"{@ c #377A2A",
-"]@ c #195623",
-"^@ c #FCFDFB",
-"/@ c #94C873",
-"(@ c #4B922F",
-"_@ c #67B138",
-":@ c #62AB35",
-"<@ c #FBFDF9",
-"[@ c #5EA634",
-"}@ c #7EA77A",
-"|@ c #F0F7EB",
-"1@ c #8FC56D",
-"2@ c #3C7E2A",
-"3@ c #427941",
-"4@ c #97C977",
-"5@ c #6A9866",
-"6@ c #E7EEE5",
-"7@ c #E4ECE2",
-"8@ c #D9EBCD",
-"9@ c #EBF2EB",
-"0@ c #66AF36",
-"a@ c #236324",
-"b@ c #387139",
-"c@ c #BADBA4",
-"d@ c #1F5E23",
-"e@ c #4A8049",
-"f@ c #F2F8EE",
-"g@ c #83BF5C",
-"h@ c #2F6C31",
-"i@ c #C7DAC3",
-"j@ c #EDF6E7",
-"k@ c #9DCC7E",
-"l@ c #74B749",
-"m@ c #F2F7F2",
-"n@ c #E1F0D8",
-"o@ c #78B94E",
-"p@ c #AAC5A6",
-"q@ c #A5D189",
-"r@ c #6AB23C",
-"s@ c #62AD35",
-"t@ c #266725",
-"u@ c #FDFEFC",
-"v@ c #6C9A68",
-"w@ c #29642E",
-"x@ c #CEE6BE",
-"y@ c #62AC35",
-"z@ c #AFD595",
-"A@ c #77A172",
-"B@ c #D5E8CD",
-"C@ c #B6D9A1",
-"D@ c #25602B",
-"E@ c #FAFCFA",
-"F@ c #185521",
-"G@ c #5B8C59",
-"H@ c #A2C19E",
-"I@ c #155221",
-"J@ c #8CB284",
-"K@ c #3D812B",
-"L@ c #417F37",
-"M@ c #679A5C",
-"N@ c #97BF8A",
-"O@ c #C8E1B7",
-"P@ c #BBDCA5",
-"Q@ c #89C264",
-"R@ c #45892D",
-"S@ c #5BA433",
-"T@ c #519831",
-"U@ c #5CA433",
-"V@ c #5DA534",
-"W@ c #4B912F",
-" . . + @ # $ % & * = - ; ",
-" . . . . > , ' ) ) ) ) ) ) ) ) ) ) ! ~ { ] ^ ",
-" . . . . / ( ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) _ : < [ } ",
-" . . . . . | ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) 1 ( 2 3 4 ",
-" . . . . . 5 ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) 6 7 $ 8 9 ",
-" . . . . 0 a ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) 6 b c d e ",
-" . . . . . f ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) g h i j ",
-" . . . . . k ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) l m n o ",
-" . . . . . h ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) p q ",
-" . . . . r ! ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ' * s t u v w ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) x 3 y z A B C C C C D E F G H ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) c I J K C C C C C C C C C C C L M N ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) O P Q R C C C C C C C C C C C C C C S T ) ) ) ) ) ) ) ) U V V W X Y Z ` ) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) .. ..+.C C C C C C C C C C C C C C C C @.#.) ) ) ) ) ) ) { . $.%.C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) # P $.*.C C C C C C C C C C C C C C C C C C =.-.) ) ) ) ) ) V . ;.C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) >.,.. '.C C C C C C C C C ).!.~.C C C C C C C C {.].) ) ) ) ) ^.. /.C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) e . (._.C C C C C C C C :.<.e [.}.|.C C C C C C C 1.) ) ) ) 2.3.. 4.C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) 5.6.. 7.C C C C C C C C 8.9.) ) h 0.a.b.C C C C C C c.].) ) ) d.. . e.C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) $ . . f.C C C C C C C C g.) ) ) ) h.. i.C C C C C C C j.) ) ) k.. l.C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) m.. n.C C C C C C C C o.) ) ) ) ) 7 . . p.C C C C C C q.) ) ) r.. s.C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) 0 . t.C C C C C C C C u.) ) ) ) ) ) v.. w.C C C C C C x.y.z.A.B.C.D.C C C C C E.F.G.H.` ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) I.. . J.C C C C C C C C K.) ) ) ) ) ) L.. M.C C C C C C C N.. O.C C C C C C C C C C C C C P.) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) 3 . . Q.C C C C C C C C R.) ) ) ) ) ) O . J S.C C C C C C T.. O.C C C C C C C C C C C C C U.) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) O . V.C C C C C C C C W.X.) ) ) ) ) ) # . . Y.C C C C C C Z.. O.C C C C C C C C C C C C C U.) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) `.. +C C C C C C C C .+) ) ) ) ) ) ) ++. . @+C C C C C C #+. O.C C C C C C C C C C C C C U.) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) $+. %+C C C C C C C C &+) ) ) ) ) ) ) ' . . *+C C C C C C =+{ -+;+>+C C C C C C ,+'+)+!+~+{+) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) + . ]+C C C C C C C C ^+) ) ) ) ) ) ) 1 . . /+C C C C C C S.].(+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) z.. _+C C C C C C C C :+) ) ) ) ) ) ) ) <+. [+C C C C C C C -.(+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) 2.. . }+C C C C C C C C |+) ) ) ) ) ) ) ) [.. 1+C C C C C C C 2+(+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) 3+. . 4+C C C C C C C C 5+) ) ) ) ) ) ) ) 6.. 6+C C C C C C C 7+(+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) g . . 8+C C C C C C C C 9+) ) ) ) ) ) ) ) 0+. /.C C C C C C C a+(+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) b+. . |.C C C C C C C C c+) ) ) ) ) ) ) ) d+. e+C C C C C C C M (+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) f+. . g+C C C C C C C C &.) ) ) ) ) ) ) ) h+. i+C C C C C C C j+(+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) 5.0.. k+C C C C C C C C l+) ) ) ) ) ) ) ) 0+. m+C C C C C C C n+(+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) [.. o+C C C C C C C C p+) ) ) ) ) ) ) ) q+. 7.C C C C C C C r+(+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) s+. t+C C C C C C C C u+) ) ) ) ) ) ) ) / . v+C C C C C C C w+(+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) x+. y+C C C C C C C C z+) ) ) ) ) ) ) ) A+. B+C C C C C C C Z (+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) C+. D+C C C C C C C C o.) ) ) ) ) ) ) >.. . E+C C C C C C C F+(+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) G+. H+C C C C C C C C &+) ) ) ) ) ) ) I+. . K C C C C C C C J+(+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) m.. K+C C C C C C C C .+) ) ) ) ) ) ) L+. . 4+C C C C C C M+) (+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) O . N+C C C C C C C C C F+) ) ) ) ) ) : . . O+C C C C C C c.) (+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) (+. 0.P+C C C C C C C C Q+) ) ) ) ) ) (+. . R+C C C C C C S+) (+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) g . . p.C C C C C C C C T+) ) ) ) ) ) U+. V+C C C C C C C W+) (+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) 0 . X+C C C C C C C C Y+) ) ) ) ) ) ^.. Z+C C C C C C D `+) (+. / C C C C C C @) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) G+. H+C C C C C C C C @.) ) ) ) ) ) / . ]+C C C C C C .@) ) +@. / C C C C C C @@) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) #@. $.D.C C C C C C C C $@) ) ) ) %@. . &@C C C C C C *@) ) = . $.=@C C C C C W.-@) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) 5.;@. v+C C C C C C C C >@) ) ) ) L.. ,@C C C C C C C Y ) ) ~ . . R C C C C C C '@)@!@/+~@) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) {@. ]@^@C C C C C C C C /@) ) (@. / _.C C C C C C 8._@) ) :@. . &@C C C C C C C C C C <@) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) [@[.. }@C C C C C C C C |@1@2@(.3@*.C C C C C C C 4@) ) ) ) ,.. 5@C C C C C C C C C C x.) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) } . / e.C C C C C C C C C 6@7@C C C C C C C C 8@) ) ) ) ) 8 . N+9@C C C C C C C C C <@) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) 0@a@. b@S.C C C C C C C C C C C C C C C C C L F+) ) ) ) ) 0@y . '.=@C C C C C C C z+c@) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) 3+d@. e@C C C C C C C C C C C C C C C C f@g@) ) ) ) ) ) ) ) j ^.h@g+i@=@j@P.k@l@) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) 3+a@. %+m@C C C C C C C C C C C C C n@o@) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) 0@9 [.K+p@C C C C C C C C C C o.q@r@) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) s@[ t@;.A P+C C C C C C u@-@) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) 1 [.. v@C C C C C C C r+) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) `.. w@C C C C C C C x@) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) y@ ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) [ . P _.C C C C C C C z@F+) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ~ ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) :@z.. A@C C C C C C C C D B@C@) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) < ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) f . D@E@C C C C C C C C C 8@) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) - ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) 3+F@. G@C C C C C C C C C 8@) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) y@ ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) m <+P H@C C C C C C C C 8@) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) n ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) # $+I@J@^@C C C C C C 8@) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ' ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) 0@= K@L@M@N@O@U.P@M Q@) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) 3+ ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) L+ ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) 6 ~ o ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) 6 b c i R@ ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) 6 S@T@i o ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) U@h i o ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) g h i o ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) V@h i o ",
-" . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) V@m n o ",
-" . . / ) ) ) ) ) ) ) ) ) ) ) ) l m n o ",
-" . / ) ) ) ) ) ) L+m W@o ",
-" v.L+m W@R@ "};
-
-/* XPM */
-static const char * brick_xpm[] = {
-"32 16 338 2",
-" c #ECDAA8",
-". c #EEDDA8",
-"+ c #F0E0A8",
-"@ c #F0E2A8",
-"# c #F2E3A8",
-"$ c #F2E4A8",
-"% c #F1E3A8",
-"& c #F1E2A8",
-"* c #EEDEA8",
-"= c #EEDBA8",
-"- c #EBD9A8",
-"; c #EAD6A8",
-"> c #E9D4A8",
-", c #E7D1A8",
-"' c #E6CDA8",
-") c #E6CFA8",
-"! c #E7D0A8",
-"~ c #E8D2A8",
-"{ c #E6CEA8",
-"] c #E4CCA8",
-"^ c #E3CAA8",
-"/ c #E2C7A8",
-"( c #E1C6A8",
-"_ c #E1C5A8",
-": c #E4CBA8",
-"< c #EBD7A8",
-"[ c #EFDFA8",
-"} c #473600",
-"| c #ECDBA8",
-"1 c #E7D083",
-"2 c #EBD783",
-"3 c #EDD983",
-"4 c #EEDC83",
-"5 c #F0DF83",
-"6 c #F1E283",
-"7 c #EDDA83",
-"8 c #EBD683",
-"9 c #E5CC83",
-"0 c #E4C983",
-"a c #E2C683",
-"b c #E0C183",
-"c c #DDBD83",
-"d c #DEBE83",
-"e c #E0C283",
-"f c #DFBF83",
-"g c #DCBC83",
-"h c #D9B683",
-"i c #D7B283",
-"j c #D5AF83",
-"k c #D6AF83",
-"l c #D7B383",
-"m c #654D00",
-"n c #463400",
-"o c #E9D283",
-"p c #E4C84D",
-"q c #E8CD4D",
-"r c #EAD24D",
-"s c #EDD84D",
-"t c #F1DF4D",
-"u c #F0DC4D",
-"v c #EBD34D",
-"w c #DFBE4D",
-"x c #DAB64D",
-"y c #D9B44D",
-"z c #D8B24D",
-"A c #D4AC4D",
-"B c #D1A44D",
-"C c #CFA14D",
-"D c #D1A54D",
-"E c #D2A64D",
-"F c #CA984D",
-"G c #C6924D",
-"H c #C6904D",
-"I c #C48F4D",
-"J c #C6914D",
-"K c #C9964D",
-"L c #D7AF4D",
-"M c #8D6900",
-"N c #634B00",
-"O c #EBD583",
-"P c #E5CA4D",
-"Q c #E2C000",
-"R c #E4C400",
-"S c #EBD100",
-"T c #EFD800",
-"U c #EDD400",
-"V c #E6C800",
-"W c #DCB600",
-"X c #D4A800",
-"Y c #CB9700",
-"Z c #C48B00",
-"` c #C38800",
-" . c #C28700",
-".. c #BC7C00",
-"+. c #B87500",
-"@. c #B97700",
-"#. c #B77300",
-"$. c #B46E00",
-"%. c #AF6300",
-"&. c #AB5E00",
-"*. c #AD6000",
-"=. c #AA5B00",
-"-. c #A95A00",
-";. c #AC5E00",
-">. c #B36C00",
-",. c #BB7900",
-"'. c #C08400",
-"). c #8A6400",
-"!. c #634900",
-"~. c #ECD883",
-"{. c #E8CE4D",
-"]. c #E3C300",
-"^. c #E8CC00",
-"/. c #F1DD00",
-"(. c #EDD500",
-"_. c #E5C600",
-":. c #D4A700",
-"<. c #CA9500",
-"[. c #C08200",
-"}. c #BD7E00",
-"|. c #BC7B00",
-"1. c #B67200",
-"2. c #B36B00",
-"3. c #B26A00",
-"4. c #B06600",
-"5. c #AB5F00",
-"6. c #A65500",
-"7. c #A45000",
-"8. c #A65400",
-"9. c #B06500",
-"0. c #B57000",
-"a. c #BA7800",
-"b. c #886000",
-"c. c #624800",
-"d. c #E9D14D",
-"e. c #E4C500",
-"f. c #EBD200",
-"g. c #F1DC00",
-"h. c #F0DB00",
-"i. c #ECD400",
-"j. c #E2C200",
-"k. c #D6AC00",
-"l. c #C48A00",
-"m. c #BF8200",
-"n. c #B77400",
-"o. c #B36A00",
-"p. c #AF6500",
-"q. c #AD6100",
-"r. c #AC5F00",
-"s. c #AF6400",
-"t. c #AB5C00",
-"u. c #A14A00",
-"v. c #A04900",
-"w. c #A45100",
-"x. c #AD5F00",
-"y. c #B56F00",
-"z. c #835500",
-"A. c #5E4000",
-"B. c #432F00",
-"C. c #F4E7A8",
-"D. c #F0E083",
-"E. c #EAD34D",
-"F. c #E5C700",
-"G. c #ECD300",
-"H. c #EFD900",
-"I. c #DAB300",
-"J. c #CD9C00",
-"K. c #BE8000",
-"L. c #A95800",
-"M. c #A85800",
-"N. c #A75500",
-"O. c #AA5C00",
-"P. c #A75600",
-"Q. c #A24C00",
-"R. c #A55200",
-"S. c #AB5D00",
-"T. c #B06700",
-"U. c #7E4D00",
-"V. c #593800",
-"W. c #3F2800",
-"X. c #F5E8A8",
-"Y. c #EBD74D",
-"Z. c #E9CF00",
-"`. c #E0BD00",
-" + c #D7AE00",
-".+ c #CE9D00",
-"++ c #C89200",
-"@+ c #C58C00",
-"#+ c #BF8100",
-"$+ c #A24D00",
-"%+ c #A85700",
-"&+ c #A95900",
-"*+ c #B26900",
-"=+ c #7D4B00",
-"-+ c #583500",
-";+ c #3D2600",
-">+ c #F3E6A8",
-",+ c #EED94D",
-"'+ c #E9CE00",
-")+ c #E5C500",
-"!+ c #DBB500",
-"~+ c #D1A100",
-"{+ c #C79000",
-"]+ c #C18400",
-"^+ c #C08300",
-"/+ c #B97500",
-"(+ c #A04800",
-"_+ c #9D4300",
-":+ c #9F4700",
-"<+ c #A34F00",
-"[+ c #A65300",
-"}+ c #A44F00",
-"|+ c #AC6000",
-"1+ c #AE6200",
-"2+ c #B16700",
-"3+ c #7C4A00",
-"4+ c #583600",
-"5+ c #3D2500",
-"6+ c #EFDC4D",
-"7+ c #D8AF00",
-"8+ c #CF9F00",
-"9+ c #C58D00",
-"0+ c #BA7900",
-"a+ c #B67100",
-"b+ c #9C4100",
-"c+ c #9C4200",
-"d+ c #9E4500",
-"e+ c #A14B00",
-"f+ c #9F4800",
-"g+ c #AE6400",
-"h+ c #B46C00",
-"i+ c #7D4C00",
-"j+ c #F2E283",
-"k+ c #E5C800",
-"l+ c #E7CA00",
-"m+ c #DEB900",
-"n+ c #D6AA00",
-"o+ c #D1A200",
-"p+ c #C79100",
-"q+ c #BB7C00",
-"r+ c #B46F00",
-"s+ c #B16900",
-"t+ c #A34D00",
-"u+ c #A04700",
-"v+ c #9B4000",
-"w+ c #9F4500",
-"x+ c #9E4400",
-"y+ c #A24E00",
-"z+ c #7F5000",
-"A+ c #5A3900",
-"B+ c #3E2800",
-"C+ c #F2E5A8",
-"D+ c #EFDD83",
-"E+ c #E7CD4D",
-"F+ c #DDB800",
-"G+ c #DBB400",
-"H+ c #D2A300",
-"I+ c #C99400",
-"J+ c #9E4600",
-"K+ c #9B4100",
-"L+ c #993C00",
-"M+ c #9F4600",
-"N+ c #9A3F00",
-"O+ c #5B3C00",
-"P+ c #412D00",
-"Q+ c #F0E1A8",
-"R+ c #EAD483",
-"S+ c #DDBC4D",
-"T+ c #CF9E00",
-"U+ c #D5AB00",
-"V+ c #CE9C00",
-"W+ c #C99200",
-"X+ c #C28600",
-"Y+ c #B97600",
-"Z+ c #9B3F00",
-"`+ c #B16800",
-" @ c #805100",
-".@ c #5D3F00",
-"+@ c #443100",
-"@@ c #8C6500",
-"#@ c #8A6300",
-"$@ c #917000",
-"%@ c #927200",
-"&@ c #906E00",
-"*@ c #906F00",
-"=@ c #8E6900",
-"-@ c #885E00",
-";@ c #825400",
-">@ c #7B4800",
-",@ c #753B00",
-"'@ c #713400",
-")@ c #6F3200",
-"!@ c #703400",
-"~@ c #713600",
-"{@ c #703300",
-"]@ c #6F3100",
-"^@ c #723600",
-"/@ c #753E00",
-"(@ c #784200",
-"_@ c #794500",
-":@ c #835700",
-"<@ c #5F4200",
-"[@ c #443200",
-"}@ c #604400",
-"|@ c #5F4300",
-"1@ c #624900",
-"2@ c #634A00",
-"3@ c #654C00",
-"4@ c #5B3D00",
-"5@ c #573400",
-"6@ c #532D00",
-"7@ c #512800",
-"8@ c #4E2400",
-"9@ c #502700",
-"0@ c #502800",
-"a@ c #502600",
-"b@ c #522A00",
-"c@ c #542F00",
-"d@ c #553100",
-"e@ c #573300",
-"f@ c #593900",
-"g@ c #5B3B00",
-"h@ c #5C3D00",
-"i@ c #5E4200",
-"j@ c #604500",
-"k@ c #433100",
-"l@ c #422D00",
-"m@ c #422F00",
-"n@ c #3E2700",
-"o@ c #3D2400",
-"p@ c #3B2300",
-"q@ c #391F00",
-"r@ c #391D00",
-"s@ c #391E00",
-"t@ c #381C00",
-"u@ c #381B00",
-"v@ c #402B00",
-"w@ c #453400",
-" . + @ # $ % & + * = - ; > , ' ) ! ~ ! { ] ^ / ( _ : ~ < = [ } ",
-"| 1 2 3 4 5 6 5 7 8 1 9 0 a b c d e e f g h i j k k l g 0 1 m n ",
-"* o p q r s t u v p w x y z A B C D E C F G H I I J K C L M N } ",
-"@ O P Q R S T U V W X Y Z ` ...+.@.#.$.%.&.*.=.-.;.>.,.'.).!.} ",
-"% ~.{.].^.T /.(._.W :.<.[.}.|.1.2.2.$.3.4.5.=.6.7.8.9.0.a.b.c.n ",
-"$ 4 d.e.f.g.h.i.j.k.Y l.m.n.o.p.q.r.s.4.&.t.6.u.v.w.x.>.y.z.A.B.",
-"C.D.E.F.G.H.f.e.I.J.l.m.K.>.L.M.N.w.O.&.8.P.P.Q.v.R.S.T.2.U.V.W.",
-"X.6 Y.V Z.^.`. +.+++@+#+K.2.R.Q.Q.$+M.M.$+7.%+P.N.M.&+*.*+=+-+;+",
-">+6 ,+'+Z.)+!+~+{+]+^+}./+*+P.(+_+:+<+[+Q.}+-.|+*.1+3.3.2+3+4+5+",
-"$ 6 6+S '+Q 7+8+9+0+0.a+>.1+%+u.b+c+d+e+f+Q.M.g+2+h+@.+.2.i+V.;+",
-">+j+s k+l+m+n+o+p+q+r+s+*.6.t+u+c+v+_+w+x+_+y+1+*+>.h+2.*+z+A+B+",
-"C+D+E+I.F+G+ +H+I+m.1.4.8.v.u+J+K+L+_+M+N+L+M+L.9.s.1+s.2+z+O+P+",
-"Q+R+S+T+U+ +X V+W+X+Y+4.[+:+J+u.:+N+_+_+Z+d+$+N.S.S.g+2+`+ @.@+@",
-"* 1 @@#@$@%@&@*@=@-@;@>@,@'@)@!@~@{@]@)@!@^@/@(@_@>@=+z+z+:@<@[@",
-"| c.}@|@1@2@2@3@c.4@V.5@6@7@8@9@0@a@8@8@b@c@d@e@5@f@g@g@h@i@j@k@",
-"l@m@B.B.B.[@[@[@P+n@;+o@p@q@r@s@s@t@u@t@s@o@n@n@B+v@l@B.B.[@w@[@"};
+/* XPM */
+static const char * qt_logo_xpm[] = {
+"69 80 364 2",
+" c None",
+". c #0C481E",
+"+ c #135020",
+"@ c #3F832C",
+"# c #4D932F",
+"$ c #509730",
+"% c #559C31",
+"& c #5AA233",
+"* c #569E32",
+"= c #4D942F",
+"- c #468B2E",
+"; c #41852C",
+"> c #0E4B1F",
+", c #347629",
+"' c #60A934",
+") c #66B036",
+"! c #63AC35",
+"~ c #579F32",
+"{ c #4E9430",
+"] c #478C2E",
+"^ c #41862C",
+"/ c #124F20",
+"( c #59A133",
+"_ c #64AD35",
+": c #58A032",
+"< c #4F9530",
+"[ c #488D2E",
+"} c #42862C",
+"| c #4A8F2E",
+"1 c #64AE36",
+"2 c #509630",
+"3 c #488E2E",
+"4 c #42872C",
+"5 c #317328",
+"6 c #65AF36",
+"7 c #5AA333",
+"8 c #498E2E",
+"9 c #43872D",
+"0 c #175521",
+"a c #63AD35",
+"b c #5BA333",
+"c c #519830",
+"d c #498F2E",
+"e c #43882D",
+"f c #2E6F27",
+"g c #5CA533",
+"h c #529931",
+"i c #4A902F",
+"j c #44882D",
+"k c #40842C",
+"l c #5DA634",
+"m c #539A31",
+"n c #4B902F",
+"o c #44892D",
+"p c #5FA734",
+"q c #549B31",
+"r c #0D491E",
+"s c #589E37",
+"t c #70B04C",
+"u c #83BE5D",
+"v c #7CBB53",
+"w c #6DB43F",
+"x c #63AD36",
+"y c #286926",
+"z c #26622B",
+"A c #699665",
+"B c #D0E0CF",
+"C c #FFFFFF",
+"D c #FEFEFD",
+"E c #E5F2DD",
+"F c #C4E1B2",
+"G c #9DCD7F",
+"H c #69B23A",
+"I c #185722",
+"J c #114E20",
+"K c #7FA67A",
+"L c #EEF6E8",
+"M c #A7D18B",
+"N c #6BB23C",
+"O c #3A7D2B",
+"P c #0D481E",
+"Q c #1E5A26",
+"R c #D4E2D1",
+"S c #E0EFD6",
+"T c #76B84A",
+"U c #63AB35",
+"V c #397C2A",
+"W c #8DBE74",
+"X c #9ECD80",
+"Y c #8EC56B",
+"Z c #7DBC55",
+"` c #6DB33F",
+" . c #3F842C",
+".. c #175323",
+"+. c #D2E1D0",
+"@. c #EFF7EA",
+"#. c #83BF5D",
+"$. c #0D491F",
+"%. c #EAF1E9",
+"&. c #CBE4BA",
+"*. c #B9D1B6",
+"=. c #EFF7EB",
+"-. c #72B646",
+";. c #235F2A",
+">. c #65B036",
+",. c #1C5A22",
+"'. c #487E48",
+"). c #F8FAF9",
+"!. c #ADC6AB",
+"~. c #B7CFB4",
+"{. c #D3E8C5",
+"]. c #67B037",
+"^. c #246324",
+"/. c #4F844E",
+"(. c #104D20",
+"_. c #DBE8D9",
+":. c #CCE5BC",
+"<. c #7BBB52",
+"[. c #114E1F",
+"}. c #2A662F",
+"|. c #A2C09D",
+"1. c #A1CE83",
+"2. c #64AE35",
+"3. c #0F4D1F",
+"4. c #8DB289",
+"5. c #65AF35",
+"6. c #165321",
+"7. c #588A56",
+"8. c #E6F2DE",
+"9. c #6CB33E",
+"0. c #0C491E",
+"a. c #104B1F",
+"b. c #CCDDC8",
+"c. c #E8F3E0",
+"d. c #539B31",
+"e. c #DCE8DB",
+"f. c #BCD3B8",
+"g. c #81BE59",
+"h. c #2C6D26",
+"i. c #2E6932",
+"j. c #95C873",
+"k. c #3E832B",
+"l. c #1C5926",
+"m. c #347529",
+"n. c #1B5825",
+"o. c #EBF4E4",
+"p. c #98B993",
+"q. c #D4E9C7",
+"r. c #296A26",
+"s. c #457B44",
+"t. c #558853",
+"u. c #C9E3B8",
+"v. c #155220",
+"w. c #568A54",
+"x. c #FAFDF9",
+"y. c #2D6A2D",
+"z. c #0F4B1E",
+"A. c #53864F",
+"B. c #D9E6D7",
+"C. c #BCD2B9",
+"D. c #D5E3D2",
+"E. c #DAECCF",
+"F. c #8DC469",
+"G. c #82BF5B",
+"H. c #77B94D",
+"I. c #589F33",
+"J. c #A6C3A1",
+"K. c #A7D28C",
+"L. c #276826",
+"M. c #2D6831",
+"N. c #659363",
+"O. c #51854F",
+"P. c #C5E1B3",
+"Q. c #E3EBE0",
+"R. c #86C161",
+"S. c #FDFEFD",
+"T. c #A8C5A1",
+"U. c #C6E2B4",
+"V. c #145122",
+"W. c #FEFFFE",
+"X. c #6AB23B",
+"Y. c #C5D8C1",
+"Z. c #CFE2C8",
+"`. c #2C6C27",
+" + c #2B6530",
+".+ c #F8FBF6",
+"++ c #5BA334",
+"@+ c #91B48C",
+"#+ c #E2EFDA",
+"$+ c #1D5B22",
+"%+ c #497F49",
+"&+ c #F1F8ED",
+"*+ c #82AA7F",
+"=+ c #F1F8EC",
+"-+ c #458536",
+";+ c #2F6A33",
+">+ c #417841",
+",+ c #E7F0E2",
+"'+ c #BDD8B3",
+")+ c #C3DAB9",
+"!+ c #CBDFC4",
+"~+ c #DBE9D3",
+"{+ c #B7D9A1",
+"]+ c #649360",
+"^+ c #EAF4E3",
+"/+ c #78A274",
+"(+ c #478C2D",
+"_+ c #6F9C6C",
+":+ c #E3F1DB",
+"<+ c #0E4A1E",
+"[+ c #6D9B69",
+"}+ c #7DA578",
+"|+ c #DCEDD1",
+"1+ c #639260",
+"2+ c #7FBD57",
+"3+ c #61AA35",
+"4+ c #88AE84",
+"5+ c #D5E9C8",
+"6+ c #598B57",
+"7+ c #8CC468",
+"8+ c #97B792",
+"9+ c #CEE6BF",
+"0+ c #1A5821",
+"a+ c #9ACB7A",
+"b+ c #5AA132",
+"c+ c #C8E2B6",
+"d+ c #1E5D23",
+"e+ c #477D46",
+"f+ c #5FA834",
+"g+ c #90B38B",
+"h+ c #1E5C22",
+"i+ c #487D47",
+"j+ c #A9D28D",
+"k+ c #7AA476",
+"l+ c #D1E7C3",
+"m+ c #51844E",
+"n+ c #9ECD7F",
+"o+ c #679563",
+"p+ c #D7EBCB",
+"q+ c #175421",
+"r+ c #93C771",
+"s+ c #185621",
+"t+ c #558752",
+"u+ c #DEEED4",
+"v+ c #61915E",
+"w+ c #88C263",
+"x+ c #1F5E24",
+"y+ c #437B44",
+"z+ c #E5F1DC",
+"A+ c #0F4C1F",
+"B+ c #6A9867",
+"C+ c #276625",
+"D+ c #356E38",
+"E+ c #749F70",
+"F+ c #73B747",
+"G+ c #2D6E27",
+"H+ c #28642E",
+"I+ c #62AB34",
+"J+ c #68B139",
+"K+ c #1D5A26",
+"L+ c #5EA734",
+"M+ c #F7FBF4",
+"N+ c #145021",
+"O+ c #9EBD99",
+"P+ c #E7EFE5",
+"Q+ c #91C66F",
+"R+ c #DEE9DC",
+"S+ c #C2DFAF",
+"T+ c #B0D698",
+"U+ c #357829",
+"V+ c #195524",
+"W+ c #99CA79",
+"X+ c #578955",
+"Y+ c #D0E7C1",
+"Z+ c #37703A",
+"`+ c #71B645",
+" @ c #D1E7C2",
+".@ c #E0EFD7",
+"+@ c #478D2E",
+"@@ c #EBF5E5",
+"#@ c #4B902E",
+"$@ c #80BE59",
+"%@ c #579E32",
+"&@ c #ADC7A8",
+"*@ c #B8DAA1",
+"=@ c #F9FBF8",
+"-@ c #6EB440",
+";@ c #155321",
+">@ c #D6EAC9",
+",@ c #3D743E",
+"'@ c #C1DFB1",
+")@ c #538E44",
+"!@ c #437B42",
+"~@ c #CCDEC7",
+"{@ c #377A2A",
+"]@ c #195623",
+"^@ c #FCFDFB",
+"/@ c #94C873",
+"(@ c #4B922F",
+"_@ c #67B138",
+":@ c #62AB35",
+"<@ c #FBFDF9",
+"[@ c #5EA634",
+"}@ c #7EA77A",
+"|@ c #F0F7EB",
+"1@ c #8FC56D",
+"2@ c #3C7E2A",
+"3@ c #427941",
+"4@ c #97C977",
+"5@ c #6A9866",
+"6@ c #E7EEE5",
+"7@ c #E4ECE2",
+"8@ c #D9EBCD",
+"9@ c #EBF2EB",
+"0@ c #66AF36",
+"a@ c #236324",
+"b@ c #387139",
+"c@ c #BADBA4",
+"d@ c #1F5E23",
+"e@ c #4A8049",
+"f@ c #F2F8EE",
+"g@ c #83BF5C",
+"h@ c #2F6C31",
+"i@ c #C7DAC3",
+"j@ c #EDF6E7",
+"k@ c #9DCC7E",
+"l@ c #74B749",
+"m@ c #F2F7F2",
+"n@ c #E1F0D8",
+"o@ c #78B94E",
+"p@ c #AAC5A6",
+"q@ c #A5D189",
+"r@ c #6AB23C",
+"s@ c #62AD35",
+"t@ c #266725",
+"u@ c #FDFEFC",
+"v@ c #6C9A68",
+"w@ c #29642E",
+"x@ c #CEE6BE",
+"y@ c #62AC35",
+"z@ c #AFD595",
+"A@ c #77A172",
+"B@ c #D5E8CD",
+"C@ c #B6D9A1",
+"D@ c #25602B",
+"E@ c #FAFCFA",
+"F@ c #185521",
+"G@ c #5B8C59",
+"H@ c #A2C19E",
+"I@ c #155221",
+"J@ c #8CB284",
+"K@ c #3D812B",
+"L@ c #417F37",
+"M@ c #679A5C",
+"N@ c #97BF8A",
+"O@ c #C8E1B7",
+"P@ c #BBDCA5",
+"Q@ c #89C264",
+"R@ c #45892D",
+"S@ c #5BA433",
+"T@ c #519831",
+"U@ c #5CA433",
+"V@ c #5DA534",
+"W@ c #4B912F",
+" . . + @ # $ % & * = - ; ",
+" . . . . > , ' ) ) ) ) ) ) ) ) ) ) ! ~ { ] ^ ",
+" . . . . / ( ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) _ : < [ } ",
+" . . . . . | ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) 1 ( 2 3 4 ",
+" . . . . . 5 ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) 6 7 $ 8 9 ",
+" . . . . 0 a ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) 6 b c d e ",
+" . . . . . f ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) g h i j ",
+" . . . . . k ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) l m n o ",
+" . . . . . h ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) p q ",
+" . . . . r ! ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ' * s t u v w ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) x 3 y z A B C C C C D E F G H ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) c I J K C C C C C C C C C C C L M N ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) O P Q R C C C C C C C C C C C C C C S T ) ) ) ) ) ) ) ) U V V W X Y Z ` ) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) .. ..+.C C C C C C C C C C C C C C C C @.#.) ) ) ) ) ) ) { . $.%.C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) # P $.*.C C C C C C C C C C C C C C C C C C =.-.) ) ) ) ) ) V . ;.C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) >.,.. '.C C C C C C C C C ).!.~.C C C C C C C C {.].) ) ) ) ) ^.. /.C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) e . (._.C C C C C C C C :.<.e [.}.|.C C C C C C C 1.) ) ) ) 2.3.. 4.C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) 5.6.. 7.C C C C C C C C 8.9.) ) h 0.a.b.C C C C C C c.].) ) ) d.. . e.C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) $ . . f.C C C C C C C C g.) ) ) ) h.. i.C C C C C C C j.) ) ) k.. l.C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) m.. n.C C C C C C C C o.) ) ) ) ) 7 . . p.C C C C C C q.) ) ) r.. s.C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) 0 . t.C C C C C C C C u.) ) ) ) ) ) v.. w.C C C C C C x.y.z.A.B.C.D.C C C C C E.F.G.H.` ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) I.. . J.C C C C C C C C K.) ) ) ) ) ) L.. M.C C C C C C C N.. O.C C C C C C C C C C C C C P.) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) 3 . . Q.C C C C C C C C R.) ) ) ) ) ) O . J S.C C C C C C T.. O.C C C C C C C C C C C C C U.) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) O . V.C C C C C C C C W.X.) ) ) ) ) ) # . . Y.C C C C C C Z.. O.C C C C C C C C C C C C C U.) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) `.. +C C C C C C C C .+) ) ) ) ) ) ) ++. . @+C C C C C C #+. O.C C C C C C C C C C C C C U.) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) $+. %+C C C C C C C C &+) ) ) ) ) ) ) ' . . *+C C C C C C =+{ -+;+>+C C C C C C ,+'+)+!+~+{+) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) + . ]+C C C C C C C C ^+) ) ) ) ) ) ) 1 . . /+C C C C C C S.].(+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) z.. _+C C C C C C C C :+) ) ) ) ) ) ) ) <+. [+C C C C C C C -.(+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) 2.. . }+C C C C C C C C |+) ) ) ) ) ) ) ) [.. 1+C C C C C C C 2+(+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) 3+. . 4+C C C C C C C C 5+) ) ) ) ) ) ) ) 6.. 6+C C C C C C C 7+(+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) g . . 8+C C C C C C C C 9+) ) ) ) ) ) ) ) 0+. /.C C C C C C C a+(+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) b+. . |.C C C C C C C C c+) ) ) ) ) ) ) ) d+. e+C C C C C C C M (+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) f+. . g+C C C C C C C C &.) ) ) ) ) ) ) ) h+. i+C C C C C C C j+(+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) 5.0.. k+C C C C C C C C l+) ) ) ) ) ) ) ) 0+. m+C C C C C C C n+(+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) [.. o+C C C C C C C C p+) ) ) ) ) ) ) ) q+. 7.C C C C C C C r+(+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) s+. t+C C C C C C C C u+) ) ) ) ) ) ) ) / . v+C C C C C C C w+(+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) x+. y+C C C C C C C C z+) ) ) ) ) ) ) ) A+. B+C C C C C C C Z (+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) C+. D+C C C C C C C C o.) ) ) ) ) ) ) >.. . E+C C C C C C C F+(+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) G+. H+C C C C C C C C &+) ) ) ) ) ) ) I+. . K C C C C C C C J+(+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) m.. K+C C C C C C C C .+) ) ) ) ) ) ) L+. . 4+C C C C C C M+) (+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) O . N+C C C C C C C C C F+) ) ) ) ) ) : . . O+C C C C C C c.) (+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) (+. 0.P+C C C C C C C C Q+) ) ) ) ) ) (+. . R+C C C C C C S+) (+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) g . . p.C C C C C C C C T+) ) ) ) ) ) U+. V+C C C C C C C W+) (+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) 0 . X+C C C C C C C C Y+) ) ) ) ) ) ^.. Z+C C C C C C D `+) (+. / C C C C C C @) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) G+. H+C C C C C C C C @.) ) ) ) ) ) / . ]+C C C C C C .@) ) +@. / C C C C C C @@) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) #@. $.D.C C C C C C C C $@) ) ) ) %@. . &@C C C C C C *@) ) = . $.=@C C C C C W.-@) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) 5.;@. v+C C C C C C C C >@) ) ) ) L.. ,@C C C C C C C Y ) ) ~ . . R C C C C C C '@)@!@/+~@) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) {@. ]@^@C C C C C C C C /@) ) (@. / _.C C C C C C 8._@) ) :@. . &@C C C C C C C C C C <@) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) [@[.. }@C C C C C C C C |@1@2@(.3@*.C C C C C C C 4@) ) ) ) ,.. 5@C C C C C C C C C C x.) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) } . / e.C C C C C C C C C 6@7@C C C C C C C C 8@) ) ) ) ) 8 . N+9@C C C C C C C C C <@) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) 0@a@. b@S.C C C C C C C C C C C C C C C C C L F+) ) ) ) ) 0@y . '.=@C C C C C C C z+c@) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) 3+d@. e@C C C C C C C C C C C C C C C C f@g@) ) ) ) ) ) ) ) j ^.h@g+i@=@j@P.k@l@) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) 3+a@. %+m@C C C C C C C C C C C C C n@o@) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) 0@9 [.K+p@C C C C C C C C C C o.q@r@) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) s@[ t@;.A P+C C C C C C u@-@) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) 1 [.. v@C C C C C C C r+) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) `.. w@C C C C C C C x@) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) y@ ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) [ . P _.C C C C C C C z@F+) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ~ ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) :@z.. A@C C C C C C C C D B@C@) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) < ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) f . D@E@C C C C C C C C C 8@) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) - ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) 3+F@. G@C C C C C C C C C 8@) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) y@ ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) m <+P H@C C C C C C C C 8@) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) n ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) # $+I@J@^@C C C C C C 8@) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ' ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) 0@= K@L@M@N@O@U.P@M Q@) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) 3+ ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) L+ ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) 6 ~ o ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) 6 b c i R@ ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) 6 S@T@i o ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) U@h i o ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) g h i o ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) V@h i o ",
+" . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) V@m n o ",
+" . . / ) ) ) ) ) ) ) ) ) ) ) ) l m n o ",
+" . / ) ) ) ) ) ) L+m W@o ",
+" v.L+m W@R@ "};
+
+/* XPM */
+static const char * brick_xpm[] = {
+"32 16 338 2",
+" c #ECDAA8",
+". c #EEDDA8",
+"+ c #F0E0A8",
+"@ c #F0E2A8",
+"# c #F2E3A8",
+"$ c #F2E4A8",
+"% c #F1E3A8",
+"& c #F1E2A8",
+"* c #EEDEA8",
+"= c #EEDBA8",
+"- c #EBD9A8",
+"; c #EAD6A8",
+"> c #E9D4A8",
+", c #E7D1A8",
+"' c #E6CDA8",
+") c #E6CFA8",
+"! c #E7D0A8",
+"~ c #E8D2A8",
+"{ c #E6CEA8",
+"] c #E4CCA8",
+"^ c #E3CAA8",
+"/ c #E2C7A8",
+"( c #E1C6A8",
+"_ c #E1C5A8",
+": c #E4CBA8",
+"< c #EBD7A8",
+"[ c #EFDFA8",
+"} c #473600",
+"| c #ECDBA8",
+"1 c #E7D083",
+"2 c #EBD783",
+"3 c #EDD983",
+"4 c #EEDC83",
+"5 c #F0DF83",
+"6 c #F1E283",
+"7 c #EDDA83",
+"8 c #EBD683",
+"9 c #E5CC83",
+"0 c #E4C983",
+"a c #E2C683",
+"b c #E0C183",
+"c c #DDBD83",
+"d c #DEBE83",
+"e c #E0C283",
+"f c #DFBF83",
+"g c #DCBC83",
+"h c #D9B683",
+"i c #D7B283",
+"j c #D5AF83",
+"k c #D6AF83",
+"l c #D7B383",
+"m c #654D00",
+"n c #463400",
+"o c #E9D283",
+"p c #E4C84D",
+"q c #E8CD4D",
+"r c #EAD24D",
+"s c #EDD84D",
+"t c #F1DF4D",
+"u c #F0DC4D",
+"v c #EBD34D",
+"w c #DFBE4D",
+"x c #DAB64D",
+"y c #D9B44D",
+"z c #D8B24D",
+"A c #D4AC4D",
+"B c #D1A44D",
+"C c #CFA14D",
+"D c #D1A54D",
+"E c #D2A64D",
+"F c #CA984D",
+"G c #C6924D",
+"H c #C6904D",
+"I c #C48F4D",
+"J c #C6914D",
+"K c #C9964D",
+"L c #D7AF4D",
+"M c #8D6900",
+"N c #634B00",
+"O c #EBD583",
+"P c #E5CA4D",
+"Q c #E2C000",
+"R c #E4C400",
+"S c #EBD100",
+"T c #EFD800",
+"U c #EDD400",
+"V c #E6C800",
+"W c #DCB600",
+"X c #D4A800",
+"Y c #CB9700",
+"Z c #C48B00",
+"` c #C38800",
+" . c #C28700",
+".. c #BC7C00",
+"+. c #B87500",
+"@. c #B97700",
+"#. c #B77300",
+"$. c #B46E00",
+"%. c #AF6300",
+"&. c #AB5E00",
+"*. c #AD6000",
+"=. c #AA5B00",
+"-. c #A95A00",
+";. c #AC5E00",
+">. c #B36C00",
+",. c #BB7900",
+"'. c #C08400",
+"). c #8A6400",
+"!. c #634900",
+"~. c #ECD883",
+"{. c #E8CE4D",
+"]. c #E3C300",
+"^. c #E8CC00",
+"/. c #F1DD00",
+"(. c #EDD500",
+"_. c #E5C600",
+":. c #D4A700",
+"<. c #CA9500",
+"[. c #C08200",
+"}. c #BD7E00",
+"|. c #BC7B00",
+"1. c #B67200",
+"2. c #B36B00",
+"3. c #B26A00",
+"4. c #B06600",
+"5. c #AB5F00",
+"6. c #A65500",
+"7. c #A45000",
+"8. c #A65400",
+"9. c #B06500",
+"0. c #B57000",
+"a. c #BA7800",
+"b. c #886000",
+"c. c #624800",
+"d. c #E9D14D",
+"e. c #E4C500",
+"f. c #EBD200",
+"g. c #F1DC00",
+"h. c #F0DB00",
+"i. c #ECD400",
+"j. c #E2C200",
+"k. c #D6AC00",
+"l. c #C48A00",
+"m. c #BF8200",
+"n. c #B77400",
+"o. c #B36A00",
+"p. c #AF6500",
+"q. c #AD6100",
+"r. c #AC5F00",
+"s. c #AF6400",
+"t. c #AB5C00",
+"u. c #A14A00",
+"v. c #A04900",
+"w. c #A45100",
+"x. c #AD5F00",
+"y. c #B56F00",
+"z. c #835500",
+"A. c #5E4000",
+"B. c #432F00",
+"C. c #F4E7A8",
+"D. c #F0E083",
+"E. c #EAD34D",
+"F. c #E5C700",
+"G. c #ECD300",
+"H. c #EFD900",
+"I. c #DAB300",
+"J. c #CD9C00",
+"K. c #BE8000",
+"L. c #A95800",
+"M. c #A85800",
+"N. c #A75500",
+"O. c #AA5C00",
+"P. c #A75600",
+"Q. c #A24C00",
+"R. c #A55200",
+"S. c #AB5D00",
+"T. c #B06700",
+"U. c #7E4D00",
+"V. c #593800",
+"W. c #3F2800",
+"X. c #F5E8A8",
+"Y. c #EBD74D",
+"Z. c #E9CF00",
+"`. c #E0BD00",
+" + c #D7AE00",
+".+ c #CE9D00",
+"++ c #C89200",
+"@+ c #C58C00",
+"#+ c #BF8100",
+"$+ c #A24D00",
+"%+ c #A85700",
+"&+ c #A95900",
+"*+ c #B26900",
+"=+ c #7D4B00",
+"-+ c #583500",
+";+ c #3D2600",
+">+ c #F3E6A8",
+",+ c #EED94D",
+"'+ c #E9CE00",
+")+ c #E5C500",
+"!+ c #DBB500",
+"~+ c #D1A100",
+"{+ c #C79000",
+"]+ c #C18400",
+"^+ c #C08300",
+"/+ c #B97500",
+"(+ c #A04800",
+"_+ c #9D4300",
+":+ c #9F4700",
+"<+ c #A34F00",
+"[+ c #A65300",
+"}+ c #A44F00",
+"|+ c #AC6000",
+"1+ c #AE6200",
+"2+ c #B16700",
+"3+ c #7C4A00",
+"4+ c #583600",
+"5+ c #3D2500",
+"6+ c #EFDC4D",
+"7+ c #D8AF00",
+"8+ c #CF9F00",
+"9+ c #C58D00",
+"0+ c #BA7900",
+"a+ c #B67100",
+"b+ c #9C4100",
+"c+ c #9C4200",
+"d+ c #9E4500",
+"e+ c #A14B00",
+"f+ c #9F4800",
+"g+ c #AE6400",
+"h+ c #B46C00",
+"i+ c #7D4C00",
+"j+ c #F2E283",
+"k+ c #E5C800",
+"l+ c #E7CA00",
+"m+ c #DEB900",
+"n+ c #D6AA00",
+"o+ c #D1A200",
+"p+ c #C79100",
+"q+ c #BB7C00",
+"r+ c #B46F00",
+"s+ c #B16900",
+"t+ c #A34D00",
+"u+ c #A04700",
+"v+ c #9B4000",
+"w+ c #9F4500",
+"x+ c #9E4400",
+"y+ c #A24E00",
+"z+ c #7F5000",
+"A+ c #5A3900",
+"B+ c #3E2800",
+"C+ c #F2E5A8",
+"D+ c #EFDD83",
+"E+ c #E7CD4D",
+"F+ c #DDB800",
+"G+ c #DBB400",
+"H+ c #D2A300",
+"I+ c #C99400",
+"J+ c #9E4600",
+"K+ c #9B4100",
+"L+ c #993C00",
+"M+ c #9F4600",
+"N+ c #9A3F00",
+"O+ c #5B3C00",
+"P+ c #412D00",
+"Q+ c #F0E1A8",
+"R+ c #EAD483",
+"S+ c #DDBC4D",
+"T+ c #CF9E00",
+"U+ c #D5AB00",
+"V+ c #CE9C00",
+"W+ c #C99200",
+"X+ c #C28600",
+"Y+ c #B97600",
+"Z+ c #9B3F00",
+"`+ c #B16800",
+" @ c #805100",
+".@ c #5D3F00",
+"+@ c #443100",
+"@@ c #8C6500",
+"#@ c #8A6300",
+"$@ c #917000",
+"%@ c #927200",
+"&@ c #906E00",
+"*@ c #906F00",
+"=@ c #8E6900",
+"-@ c #885E00",
+";@ c #825400",
+">@ c #7B4800",
+",@ c #753B00",
+"'@ c #713400",
+")@ c #6F3200",
+"!@ c #703400",
+"~@ c #713600",
+"{@ c #703300",
+"]@ c #6F3100",
+"^@ c #723600",
+"/@ c #753E00",
+"(@ c #784200",
+"_@ c #794500",
+":@ c #835700",
+"<@ c #5F4200",
+"[@ c #443200",
+"}@ c #604400",
+"|@ c #5F4300",
+"1@ c #624900",
+"2@ c #634A00",
+"3@ c #654C00",
+"4@ c #5B3D00",
+"5@ c #573400",
+"6@ c #532D00",
+"7@ c #512800",
+"8@ c #4E2400",
+"9@ c #502700",
+"0@ c #502800",
+"a@ c #502600",
+"b@ c #522A00",
+"c@ c #542F00",
+"d@ c #553100",
+"e@ c #573300",
+"f@ c #593900",
+"g@ c #5B3B00",
+"h@ c #5C3D00",
+"i@ c #5E4200",
+"j@ c #604500",
+"k@ c #433100",
+"l@ c #422D00",
+"m@ c #422F00",
+"n@ c #3E2700",
+"o@ c #3D2400",
+"p@ c #3B2300",
+"q@ c #391F00",
+"r@ c #391D00",
+"s@ c #391E00",
+"t@ c #381C00",
+"u@ c #381B00",
+"v@ c #402B00",
+"w@ c #453400",
+" . + @ # $ % & + * = - ; > , ' ) ! ~ ! { ] ^ / ( _ : ~ < = [ } ",
+"| 1 2 3 4 5 6 5 7 8 1 9 0 a b c d e e f g h i j k k l g 0 1 m n ",
+"* o p q r s t u v p w x y z A B C D E C F G H I I J K C L M N } ",
+"@ O P Q R S T U V W X Y Z ` ...+.@.#.$.%.&.*.=.-.;.>.,.'.).!.} ",
+"% ~.{.].^.T /.(._.W :.<.[.}.|.1.2.2.$.3.4.5.=.6.7.8.9.0.a.b.c.n ",
+"$ 4 d.e.f.g.h.i.j.k.Y l.m.n.o.p.q.r.s.4.&.t.6.u.v.w.x.>.y.z.A.B.",
+"C.D.E.F.G.H.f.e.I.J.l.m.K.>.L.M.N.w.O.&.8.P.P.Q.v.R.S.T.2.U.V.W.",
+"X.6 Y.V Z.^.`. +.+++@+#+K.2.R.Q.Q.$+M.M.$+7.%+P.N.M.&+*.*+=+-+;+",
+">+6 ,+'+Z.)+!+~+{+]+^+}./+*+P.(+_+:+<+[+Q.}+-.|+*.1+3.3.2+3+4+5+",
+"$ 6 6+S '+Q 7+8+9+0+0.a+>.1+%+u.b+c+d+e+f+Q.M.g+2+h+@.+.2.i+V.;+",
+">+j+s k+l+m+n+o+p+q+r+s+*.6.t+u+c+v+_+w+x+_+y+1+*+>.h+2.*+z+A+B+",
+"C+D+E+I.F+G+ +H+I+m.1.4.8.v.u+J+K+L+_+M+N+L+M+L.9.s.1+s.2+z+O+P+",
+"Q+R+S+T+U+ +X V+W+X+Y+4.[+:+J+u.:+N+_+_+Z+d+$+N.S.S.g+2+`+ @.@+@",
+"* 1 @@#@$@%@&@*@=@-@;@>@,@'@)@!@~@{@]@)@!@^@/@(@_@>@=+z+z+:@<@[@",
+"| c.}@|@1@2@2@3@c.4@V.5@6@7@8@9@0@a@8@8@b@c@d@e@5@f@g@g@h@i@j@k@",
+"l@m@B.B.B.[@[@[@P+n@;+o@p@q@r@s@s@t@u@t@s@o@n@n@B+v@l@B.B.[@w@[@"};
diff --git a/test/jkqtplot_test/EmfEngine/example/renderarea.cpp b/examples/jkqtplot_test/EmfEngine/example/renderarea.cpp
similarity index 96%
rename from test/jkqtplot_test/EmfEngine/example/renderarea.cpp
rename to examples/jkqtplot_test/EmfEngine/example/renderarea.cpp
index 8da2317e9b..7e84574de4 100644
--- a/test/jkqtplot_test/EmfEngine/example/renderarea.cpp
+++ b/examples/jkqtplot_test/EmfEngine/example/renderarea.cpp
@@ -1,135 +1,135 @@
-#include
-#include "renderarea.h"
-#include "pixmaps.h"
-
-RenderArea::RenderArea(QWidget *parent)
- : QWidget(parent)
-{
- setBackgroundRole(QPalette::Base);
- setAutoFillBackground(true);
-
- setFixedWidth(600);
- setFixedHeight(500);
-}
-
-void RenderArea::draw(QPainter *painter)
-{
- static const QPoint points[4] = {
- QPoint(10, 80),
- QPoint(20, 10),
- QPoint(80, 30),
- QPoint(90, 70)
- };
-
- QRect rect(10, 20, 80, 60);
-
- QPainterPath path;
- path.moveTo(20, 80);
- path.lineTo(20, 30);
- path.cubicTo(80, 0, 50, 50, 80, 80);
-
- int startAngle = 20 * 16;
- int arcLength = 120 * 16;
-
- QLinearGradient linearGrad(QPointF(0, 0), QPointF(100, 100));
- linearGrad.setColorAt(0, Qt::black);
- linearGrad.setColorAt(1, Qt::red);
-
- QRadialGradient radialGrad(QPointF(50, 50), 40, QPointF(75, 50));
- radialGrad.setColorAt(0, Qt::white);
- radialGrad.setColorAt(0.5, Qt::black);
- radialGrad.setColorAt(1, Qt::red);
-
- /*QConicalGradient conGrad(QPointF(50, 50), 90);
- conGrad.setColorAt(0, Qt::blue);
- conGrad.setColorAt(0.5, Qt::red);
- conGrad.setColorAt(1, Qt::green);
- QBrush brush = QBrush(conGrad);*/
-
- QBrush brush = QBrush(Qt::gray);
- int brushStyle = Qt::NoBrush;
- int penStyle = Qt::NoPen;
- int shape = Rect;
- int drawnRects = 0;
- for (int x = 0; x < width(); x += 100){
- for (int y = 0; y < height(); y += 100){
- painter->save();
- painter->setRenderHint(QPainter::Antialiasing);
-
- shape = (shape + 1)%14;
-
- penStyle = (penStyle + 1)%4;
- if(!penStyle)
- penStyle = 1;
-
- if (shape == RoundedRect && drawnRects < 2){
- if (drawnRects == 0)
- painter->setBrush(QBrush(linearGrad));
- else if (drawnRects == 1)
- painter->setBrush(QBrush(radialGrad));
- drawnRects++;
- } else {
- brushStyle = (brushStyle + 1)%14;
- if(!brushStyle)
- brushStyle = 1;
- brush.setStyle((Qt::BrushStyle)brushStyle);
- painter->setBrush(brush);
- }
-
- painter->setPen(QPen(Qt::black, 2, (Qt::PenStyle)penStyle, Qt::FlatCap, Qt::MiterJoin));
- painter->translate(x, y);
- switch (shape) {
- case Line:
- painter->drawLine(rect.bottomLeft(), rect.topRight());
- break;
- case Polyline:
- painter->drawPolyline(points, 4);
- break;
- case Polygon:
- painter->drawPolygon(points, 4);
- break;
- case Rect:
- painter->drawRect(rect);
- break;
- case RoundedRect:
- painter->drawRoundedRect(rect, 25, 25, Qt::RelativeSize);
- break;
- case Ellipse:
- painter->drawEllipse(rect);
- break;
- case Arc:
- painter->drawArc(rect, startAngle, arcLength);
- break;
- case Chord:
- painter->drawChord(rect, startAngle, arcLength);
- break;
- case Pie:
- painter->drawPie(rect, startAngle, arcLength);
- break;
- case Path:
- painter->drawPath(path);
- break;
- case Text:
- painter->drawText(rect, Qt::AlignCenter, "EmfEngine demo");
- break;
- case Pixmap:
- painter->drawPixmap(10, 10, QPixmap(qt_logo_xpm));
- break;
- case TiledPixmap:
- painter->drawTiledPixmap (QRect(10, 10, 64, 64), QPixmap(brick_xpm));
- break;
- }
- painter->restore();
- }
- }
-
- painter->setPen(Qt::darkGray);
- painter->setBrush(Qt::NoBrush);
- painter->drawRect(QRect(9, 9, width() - 18, height() - 18));
-}
-
-void RenderArea::paintEvent(QPaintEvent * /* event */)
-{
- QPainter painter(this);
- draw(&painter);
-}
+#include
+#include "renderarea.h"
+#include "pixmaps.h"
+
+RenderArea::RenderArea(QWidget *parent)
+ : QWidget(parent)
+{
+ setBackgroundRole(QPalette::Base);
+ setAutoFillBackground(true);
+
+ setFixedWidth(600);
+ setFixedHeight(500);
+}
+
+void RenderArea::draw(QPainter *painter)
+{
+ static const QPoint points[4] = {
+ QPoint(10, 80),
+ QPoint(20, 10),
+ QPoint(80, 30),
+ QPoint(90, 70)
+ };
+
+ QRect rect(10, 20, 80, 60);
+
+ QPainterPath path;
+ path.moveTo(20, 80);
+ path.lineTo(20, 30);
+ path.cubicTo(80, 0, 50, 50, 80, 80);
+
+ int startAngle = 20 * 16;
+ int arcLength = 120 * 16;
+
+ QLinearGradient linearGrad(QPointF(0, 0), QPointF(100, 100));
+ linearGrad.setColorAt(0, Qt::black);
+ linearGrad.setColorAt(1, Qt::red);
+
+ QRadialGradient radialGrad(QPointF(50, 50), 40, QPointF(75, 50));
+ radialGrad.setColorAt(0, Qt::white);
+ radialGrad.setColorAt(0.5, Qt::black);
+ radialGrad.setColorAt(1, Qt::red);
+
+ /*QConicalGradient conGrad(QPointF(50, 50), 90);
+ conGrad.setColorAt(0, Qt::blue);
+ conGrad.setColorAt(0.5, Qt::red);
+ conGrad.setColorAt(1, Qt::green);
+ QBrush brush = QBrush(conGrad);*/
+
+ QBrush brush = QBrush(Qt::gray);
+ int brushStyle = Qt::NoBrush;
+ int penStyle = Qt::NoPen;
+ int shape = Rect;
+ int drawnRects = 0;
+ for (int x = 0; x < width(); x += 100){
+ for (int y = 0; y < height(); y += 100){
+ painter->save();
+ painter->setRenderHint(QPainter::Antialiasing);
+
+ shape = (shape + 1)%14;
+
+ penStyle = (penStyle + 1)%4;
+ if(!penStyle)
+ penStyle = 1;
+
+ if (shape == RoundedRect && drawnRects < 2){
+ if (drawnRects == 0)
+ painter->setBrush(QBrush(linearGrad));
+ else if (drawnRects == 1)
+ painter->setBrush(QBrush(radialGrad));
+ drawnRects++;
+ } else {
+ brushStyle = (brushStyle + 1)%14;
+ if(!brushStyle)
+ brushStyle = 1;
+ brush.setStyle((Qt::BrushStyle)brushStyle);
+ painter->setBrush(brush);
+ }
+
+ painter->setPen(QPen(Qt::black, 2, (Qt::PenStyle)penStyle, Qt::FlatCap, Qt::MiterJoin));
+ painter->translate(x, y);
+ switch (shape) {
+ case Line:
+ painter->drawLine(rect.bottomLeft(), rect.topRight());
+ break;
+ case Polyline:
+ painter->drawPolyline(points, 4);
+ break;
+ case Polygon:
+ painter->drawPolygon(points, 4);
+ break;
+ case Rect:
+ painter->drawRect(rect);
+ break;
+ case RoundedRect:
+ painter->drawRoundedRect(rect, 25, 25, Qt::RelativeSize);
+ break;
+ case Ellipse:
+ painter->drawEllipse(rect);
+ break;
+ case Arc:
+ painter->drawArc(rect, startAngle, arcLength);
+ break;
+ case Chord:
+ painter->drawChord(rect, startAngle, arcLength);
+ break;
+ case Pie:
+ painter->drawPie(rect, startAngle, arcLength);
+ break;
+ case Path:
+ painter->drawPath(path);
+ break;
+ case Text:
+ painter->drawText(rect, Qt::AlignCenter, "EmfEngine demo");
+ break;
+ case Pixmap:
+ painter->drawPixmap(10, 10, QPixmap(qt_logo_xpm));
+ break;
+ case TiledPixmap:
+ painter->drawTiledPixmap (QRect(10, 10, 64, 64), QPixmap(brick_xpm));
+ break;
+ }
+ painter->restore();
+ }
+ }
+
+ painter->setPen(Qt::darkGray);
+ painter->setBrush(Qt::NoBrush);
+ painter->drawRect(QRect(9, 9, width() - 18, height() - 18));
+}
+
+void RenderArea::paintEvent(QPaintEvent * /* event */)
+{
+ QPainter painter(this);
+ draw(&painter);
+}
diff --git a/test/jkqtplot_test/QTeXEngine/example/renderarea.h b/examples/jkqtplot_test/EmfEngine/example/renderarea.h
similarity index 95%
rename from test/jkqtplot_test/QTeXEngine/example/renderarea.h
rename to examples/jkqtplot_test/EmfEngine/example/renderarea.h
index bc0b00e0fa..52626f5f1b 100644
--- a/test/jkqtplot_test/QTeXEngine/example/renderarea.h
+++ b/examples/jkqtplot_test/EmfEngine/example/renderarea.h
@@ -1,19 +1,19 @@
-#ifndef RENDERAREA_H
-#define RENDERAREA_H
-
-#include
-
-class RenderArea : public QWidget
-{
-public:
- enum Shape { Line, Polyline, Polygon, Rect, RoundedRect, Ellipse, Arc,
- Chord, Pie, Path, Text, Pixmap, TiledPixmap };
-
- RenderArea(QWidget *parent = 0);
- void draw(QPainter *painter);
-
-protected:
- void paintEvent(QPaintEvent *event);
-};
-
-#endif
+#ifndef RENDERAREA_H
+#define RENDERAREA_H
+
+#include
+
+class RenderArea : public QWidget
+{
+public:
+ enum Shape { Line, Polyline, Polygon, Rect, RoundedRect, Ellipse, Arc,
+ Chord, Pie, Path, Text, Pixmap, TiledPixmap };
+
+ RenderArea(QWidget *parent = 0);
+ void draw(QPainter *painter);
+
+protected:
+ void paintEvent(QPaintEvent *event);
+};
+
+#endif
diff --git a/test/jkqtplot_test/EmfEngine/src/EmfEngine.cpp b/examples/jkqtplot_test/EmfEngine/src/EmfEngine.cpp
similarity index 96%
rename from test/jkqtplot_test/EmfEngine/src/EmfEngine.cpp
rename to examples/jkqtplot_test/EmfEngine/src/EmfEngine.cpp
index 754b4332de..3e84eafda4 100644
--- a/test/jkqtplot_test/EmfEngine/src/EmfEngine.cpp
+++ b/examples/jkqtplot_test/EmfEngine/src/EmfEngine.cpp
@@ -1,659 +1,659 @@
-/***************************************************************************
- File : EmfEngine.cpp
- Project : EmfEngine
- --------------------------------------------------------------------
- Copyright : (C) 2009 - 2010 by Ion Vasilief
- Email (use @ for *) : ion_vasilief*yahoo.fr
- Description : Enables the export of QPainter grafics to
- Windows Enhanced Metafiles (.emf) by using GDI calls
- ***************************************************************************/
-
-/***************************************************************************
- * *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 3 of the License, or *
- * (at your option) any later version. *
- * *
- * This program is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
- * GNU General Public License for more details. *
- * *
- * You should have received a copy of the GNU General Public License *
- * along with this program; if not, write to the Free Software *
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, *
- * Boston, MA 02110-1301 USA *
- * *
- ***************************************************************************/
-#include "EmfEngine.h"
-
-EmfPaintEngine::EmfPaintEngine(const QString& f) : QPaintEngine(QPaintEngine::AllFeatures)
-{
- fname = f;
-}
-
-bool EmfPaintEngine::begin(QPaintDevice* p)
-{
- if (!p)
- return false;
-
- setPaintDevice(p);
-
- HWND desktop = GetDesktopWindow();
- HDC dc = GetDC(desktop);
- PCSTR description = "Metafile created\0with EmfEngine\0";
-
- metaDC = CreateEnhMetaFileA(dc, fname.toLocal8Bit().data(), &d_rect, description);//create null rectangle metafile
-
- d_rect.left = 0;
- d_rect.top = 0;
- d_rect.right = 100*p->width()*GetDeviceCaps(metaDC, HORZSIZE)/(double)GetDeviceCaps(metaDC, HORZRES);
- d_rect.bottom = 100*p->height()*GetDeviceCaps(metaDC, VERTSIZE)/(double)GetDeviceCaps(metaDC, VERTRES);
-
- end();//delete the dummy metafile
-
- metaDC = CreateEnhMetaFileA(dc, fname.toLocal8Bit().data(), &d_rect, description);
-
- SetWindowExtEx(metaDC, p->width(), p->height(), 0);
- SetViewportExtEx(metaDC, p->width(), p->height(), 0);
-
- return true;
-}
-
-bool EmfPaintEngine::end()
-{
- HENHMETAFILE metafile = CloseEnhMetaFile( metaDC );
- DeleteEnhMetaFile( metafile );
- DeleteDC( metaDC );
- return true;
-}
-
-void EmfPaintEngine::drawPoints ( const QPointF * points, int pointCount )
-{
- setClipping();
-
- QColor color = painter()->pen().color();
- HBRUSH wbrush = CreateSolidBrush(RGB(color.red(), color.green(), color.blue()));
- SelectObject(metaDC, wbrush);
-
- int lw = painter()->pen().width();
- QMatrix m = painter()->worldMatrix();
- for (int i = 0; i < pointCount; i++){
- QPointF p = m.map(points[i]);
- int x = qRound(p.x());
- int y = qRound(p.y());
- Rectangle(metaDC, x, y, x + lw, y + lw);
- }
-
- resetClipping();
- DeleteObject(wbrush);
-}
-
-void EmfPaintEngine::drawLines ( const QLineF * lines, int lineCount )
-{
- setClipping();
-
- HPEN wpen = convertPen(painter()->pen());
- SelectObject(metaDC, wpen);
-
- QMatrix m = painter()->worldMatrix();
-
- for (int i = 0; i < lineCount; i++) {
- POINT *pts = new POINT[2];
-
- QPointF p1 = m.map(lines[i].p1());
- QPointF p2 = m.map(lines[i].p2());
-
- pts[0].x = qRound(p1.x());
- pts[0].y = qRound(p1.y());
- pts[1].x = qRound(p2.x());
- pts[1].y = qRound(p2.y());
- Polyline(metaDC, pts, 2);
- delete [] pts;
- }
-
- resetClipping();
- DeleteObject(wpen);
-}
-
-void EmfPaintEngine::drawPolygon ( const QPointF * points, int pointCount, PolygonDrawMode mode )
-{
- setClipping();
-
- HPEN wpen = convertPen(painter()->pen());
- SelectObject(metaDC, wpen);
- HBRUSH wbrush = convertBrush(painter()->brush());
- SelectObject(metaDC, wbrush);
-
- POINT *pts = new POINT[pointCount];
- QMatrix m = painter()->worldMatrix();
- for (int i = 0; i < pointCount; i++){
- QPointF p = m.map (points[i]);
- pts[i].x = qRound(p.x());
- pts[i].y = qRound(p.y());
- }
-
- if (mode == QPaintEngine::PolylineMode)
- Polyline(metaDC, pts, pointCount);
- else if (mode == QPaintEngine::OddEvenMode)
- Polygon(metaDC, pts, pointCount);
- else
- qWarning("EmfEngine: drawPolygon with unsupported mode.\n");
-
- resetClipping();
- delete [] pts;
- DeleteObject(wpen);
- DeleteObject(wbrush);
-}
-
-void EmfPaintEngine::drawTextItem ( const QPointF & p, const QTextItem & textItem )
-{
- setClipping();
-
- SetBkMode( metaDC, TRANSPARENT );
-
- QFont f = textItem.font();
- QFontMetrics fm(f);
- HFONT wfont = CreateFontA(fm.height() - 1, fm.averageCharWidth(), 0, 0,
- 10*f.weight(), f.italic(), f.underline (), f.strikeOut(),
- DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
- DEFAULT_QUALITY, DEFAULT_PITCH, f.family().toAscii().data());
- SelectObject( metaDC, wfont);
-
- QColor colour = painter()->pen().color();
- SetTextColor( metaDC, RGB(colour.red(), colour.green(), colour.blue()));
-
- QString text = textItem.text();
- int size = text.size();
-
- QMatrix m = painter()->worldMatrix();
-
- XFORM xf;
- xf.eM11 = m.m11();
- xf.eM12 = m.m12();
- xf.eM21 = m.m21();
- xf.eM22 = m.m22();
- xf.eDx = m.dx();
- xf.eDy = m.dy();
- SetWorldTransform(metaDC, &xf);
-
-#ifdef Q_WS_WIN
- wchar_t *wtext = (wchar_t *)malloc(size*sizeof(wchar_t));
- if (!wtext){
- qWarning("EmfEngine: Not enough memory in drawTextItem().");
- return;
- }
-
- size = text.toWCharArray(wtext);
- TextOutW(metaDC, qRound(p.x()), qRound(p.y() - 0.85*fm.height()), wtext, size);
- free(wtext);
-#else
- TextOutA(metaDC, qRound(p.x()), qRound(p.y() - 0.85*fm.height()), text.toLocal8Bit().data(), size);
-#endif
-
- xf.eM11 = 1.0;
- xf.eM12 = 0.0;
- xf.eM21 = 0.0;
- xf.eM22 = 1.0;
- xf.eDx = 0.0;
- xf.eDy = 0.0;
- SetWorldTransform(metaDC, &xf);
-
- resetClipping();
- DeleteObject(wfont);
-}
-
-void EmfPaintEngine::drawRects ( const QRectF * rects, int rectCount )
-{
- setClipping();
-
- HPEN wpen = convertPen(painter()->pen());
- SelectObject(metaDC, wpen);
- HBRUSH wbrush = convertBrush(painter()->brush());
- SelectObject(metaDC, wbrush);
-
- QMatrix m = painter()->worldMatrix();
- for (int i = 0; i < rectCount; i++){
- QRectF r = m.mapRect(rects[i]);
- Rectangle(metaDC, qRound(r.left()), qRound(r.top()), qRound(r.right()), qRound(r.bottom()));
- }
-
- resetClipping();
- DeleteObject(wpen);
- DeleteObject(wbrush);
-}
-
-void EmfPaintEngine::drawEllipse ( const QRectF & rect )
-{
- setClipping();
-
- HPEN wpen = convertPen(painter()->pen());
- SelectObject(metaDC, wpen);
- HBRUSH wbrush = convertBrush(painter()->brush());
- SelectObject(metaDC, wbrush);
-
- QRectF r = painter()->worldMatrix().mapRect(rect);
- Ellipse(metaDC, qRound(r.left()), qRound(r.top()), qRound(r.right()), qRound(r.bottom()));
-
- resetClipping();
- DeleteObject(wpen);
- DeleteObject(wbrush);
-}
-
-void EmfPaintEngine::drawPath ( const QPainterPath & path )
-{
- setClipping();
-
- int points = path.elementCount();
- POINT *pts = new POINT[points];
- BYTE *types = new BYTE[points];
-
- POINT *bzs = new POINT[3];
- int bez = 0;
-
- BeginPath(metaDC);
-
- QMatrix m = painter()->worldMatrix();
- for (int i = 0; i < points; i++){
- QPainterPath::Element el = path.elementAt(i);
- QPointF p = m.map(QPointF(el.x, el.y));
- int x = qRound(p.x());
- int y = qRound(p.y());
- pts[i].x = x;
- pts[i].y = y;
-
- switch(el.type){
- case QPainterPath::MoveToElement:
- types[i] = PT_MOVETO;
- #ifndef Q_WS_WIN
- MoveToEx (metaDC, x, y, 0);
- #endif
- break;
-
- case QPainterPath::LineToElement:
- types[i] = PT_LINETO;
- #ifndef Q_WS_WIN
- LineTo(metaDC, x, y);
- #endif
- break;
-
- case QPainterPath::CurveToElement:
- types[i] = PT_BEZIERTO;
- #ifndef Q_WS_WIN
- bzs[bez] = pts[i];
- bez++;
- #endif
- break;
-
- case QPainterPath::CurveToDataElement:
- types[i] = PT_BEZIERTO;
- #ifndef Q_WS_WIN
- bzs[bez] = pts[i];
- if (bez == 2){
- PolyBezierTo(metaDC, bzs, 3);
- bez = 0;
- } else
- bez++;
- #endif
- break;
- }
- }
-
- HPEN wpen = convertPen(painter()->pen());
- SelectObject(metaDC, wpen);
-#ifdef Q_WS_WIN
- PolyDraw(metaDC, pts, types, points);
-#else
- StrokePath(metaDC);
-#endif
-
- HBRUSH wbrush = convertBrush(painter()->brush());
- SelectObject(metaDC, wbrush);
-
- EndPath(metaDC);
-
- if(QPoint(pts[0].x, pts[0].y) == QPoint(pts[points - 1].x, pts[points - 1].y))
- StrokeAndFillPath(metaDC);
- else {
- FillPath(metaDC);
- #ifdef Q_WS_WIN
- PolyDraw(metaDC, pts, types, points);
- #else
- StrokePath(metaDC);
- #endif
- }
-
- resetClipping();
- DeleteObject(wbrush);
- DeleteObject(wpen);
- delete [] pts;
- delete [] types;
-}
-
-void EmfPaintEngine::drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &)
-{
- setClipping();
-
- QMatrix m = painter()->worldMatrix();
- QPointF p = m.map(r.topLeft());
- int x = qRound(p.x());
- int y = qRound(p.y());
- int width = qRound(r.width());
- int height = qRound(r.height());
-
-#ifdef Q_WS_WIN
- HBITMAP hbtmp = nullptr;
- DWORD op = SRCCOPY;
- if (pm.hasAlpha()){
- QImage image = pm.scaled(width, height).toImage();
- image.invertPixels();
- hbtmp = QPixmap::fromImage (image).toWinHBITMAP();
- op = SRCINVERT;
- } else
- hbtmp = pm.scaled(width, height).toWinHBITMAP();
-
- HDC hDC = CreateCompatibleDC(metaDC);
- SelectObject(hDC, hbtmp);
-
- BitBlt(metaDC, x, y, width, height, hDC, 0, 0, op);
- DeleteObject(hbtmp);
- DeleteDC(hDC);
-#else
- QImage image = pm.scaled(width, height).toImage();
- for (int i = 0; i < width; i++){
- for (int j = 0; j < height; j++){
- QRgb rgb = image.pixel(i, j);
- if (qAlpha(rgb) == 255)
- SetPixel(metaDC, x + i, y + j, RGB(qRed(rgb), qGreen(rgb), qBlue(rgb)));
- }
- }
-#endif
- resetClipping();
-}
-
-void EmfPaintEngine::drawTiledPixmap(const QRectF &r, const QPixmap & pix, const QPointF &)
-{
- setClipping();
-
-#ifdef Q_WS_WIN
- HBITMAP hBmp = pix.toWinHBITMAP();
- HBRUSH wbrush = CreatePatternBrush(hBmp);
-
- QMatrix m = painter()->worldMatrix();
- QRectF dr = m.mapRect(r);
-
- RECT rect;
- rect.left = qRound(dr.left());
- rect.top = qRound(dr.top());
- rect.right = qRound(dr.right());
- rect.bottom = qRound(dr.bottom());
-
- FillRect(metaDC, &rect, wbrush);
-
- DeleteObject(hBmp);
- DeleteObject(wbrush);
-#else
- int width = qRound(r.width());
- int height = qRound(r.height());
-
- QPixmap pixmap(width, height);
- QPainter p(&pixmap);
- p.drawTiledPixmap(0, 0, width, height, pix);
- p.end();
-
- drawPixmap(r, pixmap, QRectF());
-#endif
-
- resetClipping();
-}
-
-void EmfPaintEngine::drawImage(const QRectF & r, const QImage & image, const QRectF &, Qt::ImageConversionFlags flags)
-{
- QMatrix m = painter()->worldMatrix();
- QPointF p = m.map(r.topLeft());
- int x = qRound(p.x());
- int y = qRound(p.y());
- int width = qRound(r.width());
- int height = qRound(r.height());
-
-#ifdef Q_WS_WIN
- setClipping();
- QPixmap pix = QPixmap::fromImage (image.scaled(width, height), flags);
-
- HBITMAP hbtmp = pix.toWinHBITMAP();
- HDC hDC = CreateCompatibleDC(metaDC);
- SelectObject(hDC, hbtmp);
- BitBlt(metaDC, x, y, width, height, hDC, 0, 0, SRCCOPY);
- DeleteObject(hbtmp);
- DeleteDC(hDC);
-
- resetClipping();
-#else
- QImage imag = image.scaled(width, height);
- for (int i = 0; i < width; i++){
- for (int j = 0; j < height; j++){
- QRgb rgb = imag.pixel(i, j);
- if (qAlpha(rgb) == 255)
- SetPixel(metaDC, x + i, y + j, RGB(qRed(rgb), qGreen(rgb), qBlue(rgb)));
- }
- }
-#endif
-}
-
-void EmfPaintEngine::setClipping()
-{
-#ifdef Q_WS_WIN
- if (painter()->hasClipping()) {
- QRect rect = painter()->clipRegion().boundingRect();
- HRGN hrgn = CreateRectRgn(rect.left(), rect.top(), rect.right(), rect.bottom());
- SelectClipRgn(metaDC, hrgn);
- DeleteObject(hrgn);
- }
-#endif
-}
-
-void EmfPaintEngine::resetClipping()
-{
-#ifdef Q_WS_WIN
- if (painter()->hasClipping())
- SelectClipRgn(metaDC, nullptr);
-#endif
-}
-
-HPEN EmfPaintEngine::convertPen(const QPen& pen)
-{
- INT style = PS_nullptr;
- switch (pen.style()){
- case Qt::SolidLine:
- style = PS_SOLID;
- break;
-
- case Qt::DashLine:
- style = PS_DASH;
- break;
-
- case Qt::DotLine:
- style = PS_DOT;
- break;
-
- case Qt::DashDotLine:
- style = PS_DASHDOT;
- break;
-
- case Qt::DashDotDotLine:
- style = PS_DASHDOTDOT;
- break;
-
- default:
- break;
- }
-
- INT capStyle = PS_ENDCAP_FLAT;
- switch (pen.capStyle()){
- case Qt::FlatCap:
- break;
-
- case Qt::SquareCap:
- capStyle = PS_ENDCAP_SQUARE;
- break;
-
- case Qt::RoundCap:
- capStyle = PS_ENDCAP_ROUND;
- break;
-
- default:
- break;
- }
-
- INT joinStyle = PS_JOIN_MITER;
- switch (pen.joinStyle()){
- case Qt::MiterJoin:
- break;
-
- case Qt::BevelJoin:
- joinStyle = PS_JOIN_BEVEL;
- break;
-
- case Qt::RoundJoin:
- joinStyle = PS_JOIN_ROUND;
- break;
-
- case Qt::SvgMiterJoin:
- joinStyle = PS_JOIN_MITER;
- break;
-
- default:
- break;
- }
-
- LOGBRUSH lbrush = {BS_SOLID, RGB(pen.color().red(),pen.color().green(),pen.color().blue()), 0};
- return ExtCreatePen(PS_GEOMETRIC | style | capStyle | joinStyle, pen.width(), &lbrush, 0, nullptr);
-}
-
-HBRUSH EmfPaintEngine::convertBrush(const QBrush& brush)
-{
- LOGBRUSH lbrush = {BS_nullptr, 0, 0};
-
- if (!brush.color().alpha())
- return CreateBrushIndirect( &lbrush );
-
- if (brush.color().alpha() < 255){//semi-transparent brush color
- qWarning ("Semi-transparent brushes are not supported by EmfEngine.");
-
- #ifdef Q_WS_WIN
- QPixmap pix(4, 4);
- pix.fill(Qt::white);
- QPainter p;
- p.begin(&pix);
- p.setPen(QPen(Qt::NoPen));
- p.setBrush(brush);
- p.drawRect(QRect(0, 0, 4, 4));
- p.end();
-
- HBITMAP hBmp = pix.toWinHBITMAP();
- HBRUSH wbrush = CreatePatternBrush(hBmp);
- DeleteObject(hBmp);
- return wbrush;
- #endif
- }
-
- LONG lbHatch = HS_HORIZONTAL;
- UINT lbStyle = BS_HATCHED;
- switch(brush.style()){
- case Qt::NoBrush:
- lbStyle = BS_nullptr;
- break;
-
- case Qt::SolidPattern:
- lbStyle = BS_SOLID;
- break;
-
- case Qt::Dense1Pattern:
- case Qt::Dense2Pattern:
- case Qt::Dense3Pattern:
- case Qt::Dense4Pattern:
- case Qt::Dense5Pattern:
- case Qt::Dense6Pattern:
- case Qt::Dense7Pattern:
- {
- #ifdef Q_WS_WIN
- QPixmap pix(4, 4);
- pix.fill(Qt::white);
- QPainter p;
- p.begin(&pix);
- p.setPen(QPen(Qt::NoPen));
- p.setBrush(brush);
- p.drawRect(QRect(0, 0, 4, 4));
- p.end();
-
- HBITMAP hbm = pix.toWinHBITMAP();
- HBRUSH wbrush = CreatePatternBrush(hbm);
- DeleteObject(hbm);
- return wbrush;
- #endif
- }
- break;
-
- case Qt::HorPattern:
- break;
-
- case Qt::VerPattern:
- lbHatch = HS_VERTICAL;
- break;
-
- case Qt::CrossPattern:
- lbHatch = HS_CROSS;
- break;
-
- case Qt::BDiagPattern:
- lbHatch = HS_BDIAGONAL;
- break;
-
- case Qt::FDiagPattern:
- lbHatch = HS_FDIAGONAL;
- break;
-
- case Qt::DiagCrossPattern:
- lbHatch = HS_DIAGCROSS;
- break;
-
- case Qt::LinearGradientPattern:
- {
- qWarning("EmfEngine: Qt::LinearGradientPattern is not supported.");
- return CreateBrushIndirect( &lbrush );
- }
- break;
-
- case Qt::ConicalGradientPattern:
- {
- qWarning("EmfEngine: Qt::ConicalGradientPattern is not supported.");
- return CreateBrushIndirect( &lbrush );
- }
- break;
-
- case Qt::RadialGradientPattern:
- {
- qWarning("EmfEngine: Qt::RadialGradientPattern is not supported.");
- return CreateBrushIndirect( &lbrush );
- }
-
- case Qt::TexturePattern:
- #ifdef Q_WS_WIN
- {
- HBITMAP hbm = brush.texture().toWinHBITMAP();
- HBRUSH wbrush = CreatePatternBrush(hbm);
- DeleteObject(hbm);
- return wbrush;
- }
- #endif
- break;
-
- default:
- lbStyle = BS_SOLID;
- break;
- }
-
- LOGBRUSH logbrush = {lbStyle, RGB(brush.color().red(), brush.color().green(), brush.color().blue()), lbHatch};
- return CreateBrushIndirect( &logbrush );
-}
+/***************************************************************************
+ File : EmfEngine.cpp
+ Project : EmfEngine
+ --------------------------------------------------------------------
+ Copyright : (C) 2009 - 2010 by Ion Vasilief
+ Email (use @ for *) : ion_vasilief*yahoo.fr
+ Description : Enables the export of QPainter grafics to
+ Windows Enhanced Metafiles (.emf) by using GDI calls
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 3 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the Free Software *
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, *
+ * Boston, MA 02110-1301 USA *
+ * *
+ ***************************************************************************/
+#include "EmfEngine.h"
+
+EmfPaintEngine::EmfPaintEngine(const QString& f) : QPaintEngine(QPaintEngine::AllFeatures)
+{
+ fname = f;
+}
+
+bool EmfPaintEngine::begin(QPaintDevice* p)
+{
+ if (!p)
+ return false;
+
+ setPaintDevice(p);
+
+ HWND desktop = GetDesktopWindow();
+ HDC dc = GetDC(desktop);
+ PCSTR description = "Metafile created\0with EmfEngine\0";
+
+ metaDC = CreateEnhMetaFileA(dc, fname.toLocal8Bit().data(), &d_rect, description);//create null rectangle metafile
+
+ d_rect.left = 0;
+ d_rect.top = 0;
+ d_rect.right = 100*p->width()*GetDeviceCaps(metaDC, HORZSIZE)/(double)GetDeviceCaps(metaDC, HORZRES);
+ d_rect.bottom = 100*p->height()*GetDeviceCaps(metaDC, VERTSIZE)/(double)GetDeviceCaps(metaDC, VERTRES);
+
+ end();//delete the dummy metafile
+
+ metaDC = CreateEnhMetaFileA(dc, fname.toLocal8Bit().data(), &d_rect, description);
+
+ SetWindowExtEx(metaDC, p->width(), p->height(), 0);
+ SetViewportExtEx(metaDC, p->width(), p->height(), 0);
+
+ return true;
+}
+
+bool EmfPaintEngine::end()
+{
+ HENHMETAFILE metafile = CloseEnhMetaFile( metaDC );
+ DeleteEnhMetaFile( metafile );
+ DeleteDC( metaDC );
+ return true;
+}
+
+void EmfPaintEngine::drawPoints ( const QPointF * points, int pointCount )
+{
+ setClipping();
+
+ QColor color = painter()->pen().color();
+ HBRUSH wbrush = CreateSolidBrush(RGB(color.red(), color.green(), color.blue()));
+ SelectObject(metaDC, wbrush);
+
+ int lw = painter()->pen().width();
+ QMatrix m = painter()->worldMatrix();
+ for (int i = 0; i < pointCount; i++){
+ QPointF p = m.map(points[i]);
+ int x = qRound(p.x());
+ int y = qRound(p.y());
+ Rectangle(metaDC, x, y, x + lw, y + lw);
+ }
+
+ resetClipping();
+ DeleteObject(wbrush);
+}
+
+void EmfPaintEngine::drawLines ( const QLineF * lines, int lineCount )
+{
+ setClipping();
+
+ HPEN wpen = convertPen(painter()->pen());
+ SelectObject(metaDC, wpen);
+
+ QMatrix m = painter()->worldMatrix();
+
+ for (int i = 0; i < lineCount; i++) {
+ POINT *pts = new POINT[2];
+
+ QPointF p1 = m.map(lines[i].p1());
+ QPointF p2 = m.map(lines[i].p2());
+
+ pts[0].x = qRound(p1.x());
+ pts[0].y = qRound(p1.y());
+ pts[1].x = qRound(p2.x());
+ pts[1].y = qRound(p2.y());
+ Polyline(metaDC, pts, 2);
+ delete [] pts;
+ }
+
+ resetClipping();
+ DeleteObject(wpen);
+}
+
+void EmfPaintEngine::drawPolygon ( const QPointF * points, int pointCount, PolygonDrawMode mode )
+{
+ setClipping();
+
+ HPEN wpen = convertPen(painter()->pen());
+ SelectObject(metaDC, wpen);
+ HBRUSH wbrush = convertBrush(painter()->brush());
+ SelectObject(metaDC, wbrush);
+
+ POINT *pts = new POINT[pointCount];
+ QMatrix m = painter()->worldMatrix();
+ for (int i = 0; i < pointCount; i++){
+ QPointF p = m.map (points[i]);
+ pts[i].x = qRound(p.x());
+ pts[i].y = qRound(p.y());
+ }
+
+ if (mode == QPaintEngine::PolylineMode)
+ Polyline(metaDC, pts, pointCount);
+ else if (mode == QPaintEngine::OddEvenMode)
+ Polygon(metaDC, pts, pointCount);
+ else
+ qWarning("EmfEngine: drawPolygon with unsupported mode.\n");
+
+ resetClipping();
+ delete [] pts;
+ DeleteObject(wpen);
+ DeleteObject(wbrush);
+}
+
+void EmfPaintEngine::drawTextItem ( const QPointF & p, const QTextItem & textItem )
+{
+ setClipping();
+
+ SetBkMode( metaDC, TRANSPARENT );
+
+ QFont f = textItem.font();
+ QFontMetrics fm(f);
+ HFONT wfont = CreateFontA(fm.height() - 1, fm.averageCharWidth(), 0, 0,
+ 10*f.weight(), f.italic(), f.underline (), f.strikeOut(),
+ DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
+ DEFAULT_QUALITY, DEFAULT_PITCH, f.family().toAscii().data());
+ SelectObject( metaDC, wfont);
+
+ QColor colour = painter()->pen().color();
+ SetTextColor( metaDC, RGB(colour.red(), colour.green(), colour.blue()));
+
+ QString text = textItem.text();
+ int size = text.size();
+
+ QMatrix m = painter()->worldMatrix();
+
+ XFORM xf;
+ xf.eM11 = m.m11();
+ xf.eM12 = m.m12();
+ xf.eM21 = m.m21();
+ xf.eM22 = m.m22();
+ xf.eDx = m.dx();
+ xf.eDy = m.dy();
+ SetWorldTransform(metaDC, &xf);
+
+#ifdef Q_WS_WIN
+ wchar_t *wtext = (wchar_t *)malloc(size*sizeof(wchar_t));
+ if (!wtext){
+ qWarning("EmfEngine: Not enough memory in drawTextItem().");
+ return;
+ }
+
+ size = text.toWCharArray(wtext);
+ TextOutW(metaDC, qRound(p.x()), qRound(p.y() - 0.85*fm.height()), wtext, size);
+ free(wtext);
+#else
+ TextOutA(metaDC, qRound(p.x()), qRound(p.y() - 0.85*fm.height()), text.toLocal8Bit().data(), size);
+#endif
+
+ xf.eM11 = 1.0;
+ xf.eM12 = 0.0;
+ xf.eM21 = 0.0;
+ xf.eM22 = 1.0;
+ xf.eDx = 0.0;
+ xf.eDy = 0.0;
+ SetWorldTransform(metaDC, &xf);
+
+ resetClipping();
+ DeleteObject(wfont);
+}
+
+void EmfPaintEngine::drawRects ( const QRectF * rects, int rectCount )
+{
+ setClipping();
+
+ HPEN wpen = convertPen(painter()->pen());
+ SelectObject(metaDC, wpen);
+ HBRUSH wbrush = convertBrush(painter()->brush());
+ SelectObject(metaDC, wbrush);
+
+ QMatrix m = painter()->worldMatrix();
+ for (int i = 0; i < rectCount; i++){
+ QRectF r = m.mapRect(rects[i]);
+ Rectangle(metaDC, qRound(r.left()), qRound(r.top()), qRound(r.right()), qRound(r.bottom()));
+ }
+
+ resetClipping();
+ DeleteObject(wpen);
+ DeleteObject(wbrush);
+}
+
+void EmfPaintEngine::drawEllipse ( const QRectF & rect )
+{
+ setClipping();
+
+ HPEN wpen = convertPen(painter()->pen());
+ SelectObject(metaDC, wpen);
+ HBRUSH wbrush = convertBrush(painter()->brush());
+ SelectObject(metaDC, wbrush);
+
+ QRectF r = painter()->worldMatrix().mapRect(rect);
+ Ellipse(metaDC, qRound(r.left()), qRound(r.top()), qRound(r.right()), qRound(r.bottom()));
+
+ resetClipping();
+ DeleteObject(wpen);
+ DeleteObject(wbrush);
+}
+
+void EmfPaintEngine::drawPath ( const QPainterPath & path )
+{
+ setClipping();
+
+ int points = path.elementCount();
+ POINT *pts = new POINT[points];
+ BYTE *types = new BYTE[points];
+
+ POINT *bzs = new POINT[3];
+ int bez = 0;
+
+ BeginPath(metaDC);
+
+ QMatrix m = painter()->worldMatrix();
+ for (int i = 0; i < points; i++){
+ QPainterPath::Element el = path.elementAt(i);
+ QPointF p = m.map(QPointF(el.x, el.y));
+ int x = qRound(p.x());
+ int y = qRound(p.y());
+ pts[i].x = x;
+ pts[i].y = y;
+
+ switch(el.type){
+ case QPainterPath::MoveToElement:
+ types[i] = PT_MOVETO;
+ #ifndef Q_WS_WIN
+ MoveToEx (metaDC, x, y, 0);
+ #endif
+ break;
+
+ case QPainterPath::LineToElement:
+ types[i] = PT_LINETO;
+ #ifndef Q_WS_WIN
+ LineTo(metaDC, x, y);
+ #endif
+ break;
+
+ case QPainterPath::CurveToElement:
+ types[i] = PT_BEZIERTO;
+ #ifndef Q_WS_WIN
+ bzs[bez] = pts[i];
+ bez++;
+ #endif
+ break;
+
+ case QPainterPath::CurveToDataElement:
+ types[i] = PT_BEZIERTO;
+ #ifndef Q_WS_WIN
+ bzs[bez] = pts[i];
+ if (bez == 2){
+ PolyBezierTo(metaDC, bzs, 3);
+ bez = 0;
+ } else
+ bez++;
+ #endif
+ break;
+ }
+ }
+
+ HPEN wpen = convertPen(painter()->pen());
+ SelectObject(metaDC, wpen);
+#ifdef Q_WS_WIN
+ PolyDraw(metaDC, pts, types, points);
+#else
+ StrokePath(metaDC);
+#endif
+
+ HBRUSH wbrush = convertBrush(painter()->brush());
+ SelectObject(metaDC, wbrush);
+
+ EndPath(metaDC);
+
+ if(QPoint(pts[0].x, pts[0].y) == QPoint(pts[points - 1].x, pts[points - 1].y))
+ StrokeAndFillPath(metaDC);
+ else {
+ FillPath(metaDC);
+ #ifdef Q_WS_WIN
+ PolyDraw(metaDC, pts, types, points);
+ #else
+ StrokePath(metaDC);
+ #endif
+ }
+
+ resetClipping();
+ DeleteObject(wbrush);
+ DeleteObject(wpen);
+ delete [] pts;
+ delete [] types;
+}
+
+void EmfPaintEngine::drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &)
+{
+ setClipping();
+
+ QMatrix m = painter()->worldMatrix();
+ QPointF p = m.map(r.topLeft());
+ int x = qRound(p.x());
+ int y = qRound(p.y());
+ int width = qRound(r.width());
+ int height = qRound(r.height());
+
+#ifdef Q_WS_WIN
+ HBITMAP hbtmp = nullptr;
+ DWORD op = SRCCOPY;
+ if (pm.hasAlpha()){
+ QImage image = pm.scaled(width, height).toImage();
+ image.invertPixels();
+ hbtmp = QPixmap::fromImage (image).toWinHBITMAP();
+ op = SRCINVERT;
+ } else
+ hbtmp = pm.scaled(width, height).toWinHBITMAP();
+
+ HDC hDC = CreateCompatibleDC(metaDC);
+ SelectObject(hDC, hbtmp);
+
+ BitBlt(metaDC, x, y, width, height, hDC, 0, 0, op);
+ DeleteObject(hbtmp);
+ DeleteDC(hDC);
+#else
+ QImage image = pm.scaled(width, height).toImage();
+ for (int i = 0; i < width; i++){
+ for (int j = 0; j < height; j++){
+ QRgb rgb = image.pixel(i, j);
+ if (qAlpha(rgb) == 255)
+ SetPixel(metaDC, x + i, y + j, RGB(qRed(rgb), qGreen(rgb), qBlue(rgb)));
+ }
+ }
+#endif
+ resetClipping();
+}
+
+void EmfPaintEngine::drawTiledPixmap(const QRectF &r, const QPixmap & pix, const QPointF &)
+{
+ setClipping();
+
+#ifdef Q_WS_WIN
+ HBITMAP hBmp = pix.toWinHBITMAP();
+ HBRUSH wbrush = CreatePatternBrush(hBmp);
+
+ QMatrix m = painter()->worldMatrix();
+ QRectF dr = m.mapRect(r);
+
+ RECT rect;
+ rect.left = qRound(dr.left());
+ rect.top = qRound(dr.top());
+ rect.right = qRound(dr.right());
+ rect.bottom = qRound(dr.bottom());
+
+ FillRect(metaDC, &rect, wbrush);
+
+ DeleteObject(hBmp);
+ DeleteObject(wbrush);
+#else
+ int width = qRound(r.width());
+ int height = qRound(r.height());
+
+ QPixmap pixmap(width, height);
+ QPainter p(&pixmap);
+ p.drawTiledPixmap(0, 0, width, height, pix);
+ p.end();
+
+ drawPixmap(r, pixmap, QRectF());
+#endif
+
+ resetClipping();
+}
+
+void EmfPaintEngine::drawImage(const QRectF & r, const QImage & image, const QRectF &, Qt::ImageConversionFlags flags)
+{
+ QMatrix m = painter()->worldMatrix();
+ QPointF p = m.map(r.topLeft());
+ int x = qRound(p.x());
+ int y = qRound(p.y());
+ int width = qRound(r.width());
+ int height = qRound(r.height());
+
+#ifdef Q_WS_WIN
+ setClipping();
+ QPixmap pix = QPixmap::fromImage (image.scaled(width, height), flags);
+
+ HBITMAP hbtmp = pix.toWinHBITMAP();
+ HDC hDC = CreateCompatibleDC(metaDC);
+ SelectObject(hDC, hbtmp);
+ BitBlt(metaDC, x, y, width, height, hDC, 0, 0, SRCCOPY);
+ DeleteObject(hbtmp);
+ DeleteDC(hDC);
+
+ resetClipping();
+#else
+ QImage imag = image.scaled(width, height);
+ for (int i = 0; i < width; i++){
+ for (int j = 0; j < height; j++){
+ QRgb rgb = imag.pixel(i, j);
+ if (qAlpha(rgb) == 255)
+ SetPixel(metaDC, x + i, y + j, RGB(qRed(rgb), qGreen(rgb), qBlue(rgb)));
+ }
+ }
+#endif
+}
+
+void EmfPaintEngine::setClipping()
+{
+#ifdef Q_WS_WIN
+ if (painter()->hasClipping()) {
+ QRect rect = painter()->clipRegion().boundingRect();
+ HRGN hrgn = CreateRectRgn(rect.left(), rect.top(), rect.right(), rect.bottom());
+ SelectClipRgn(metaDC, hrgn);
+ DeleteObject(hrgn);
+ }
+#endif
+}
+
+void EmfPaintEngine::resetClipping()
+{
+#ifdef Q_WS_WIN
+ if (painter()->hasClipping())
+ SelectClipRgn(metaDC, nullptr);
+#endif
+}
+
+HPEN EmfPaintEngine::convertPen(const QPen& pen)
+{
+ INT style = PS_nullptr;
+ switch (pen.style()){
+ case Qt::SolidLine:
+ style = PS_SOLID;
+ break;
+
+ case Qt::DashLine:
+ style = PS_DASH;
+ break;
+
+ case Qt::DotLine:
+ style = PS_DOT;
+ break;
+
+ case Qt::DashDotLine:
+ style = PS_DASHDOT;
+ break;
+
+ case Qt::DashDotDotLine:
+ style = PS_DASHDOTDOT;
+ break;
+
+ default:
+ break;
+ }
+
+ INT capStyle = PS_ENDCAP_FLAT;
+ switch (pen.capStyle()){
+ case Qt::FlatCap:
+ break;
+
+ case Qt::SquareCap:
+ capStyle = PS_ENDCAP_SQUARE;
+ break;
+
+ case Qt::RoundCap:
+ capStyle = PS_ENDCAP_ROUND;
+ break;
+
+ default:
+ break;
+ }
+
+ INT joinStyle = PS_JOIN_MITER;
+ switch (pen.joinStyle()){
+ case Qt::MiterJoin:
+ break;
+
+ case Qt::BevelJoin:
+ joinStyle = PS_JOIN_BEVEL;
+ break;
+
+ case Qt::RoundJoin:
+ joinStyle = PS_JOIN_ROUND;
+ break;
+
+ case Qt::SvgMiterJoin:
+ joinStyle = PS_JOIN_MITER;
+ break;
+
+ default:
+ break;
+ }
+
+ LOGBRUSH lbrush = {BS_SOLID, RGB(pen.color().red(),pen.color().green(),pen.color().blue()), 0};
+ return ExtCreatePen(PS_GEOMETRIC | style | capStyle | joinStyle, pen.width(), &lbrush, 0, nullptr);
+}
+
+HBRUSH EmfPaintEngine::convertBrush(const QBrush& brush)
+{
+ LOGBRUSH lbrush = {BS_nullptr, 0, 0};
+
+ if (!brush.color().alpha())
+ return CreateBrushIndirect( &lbrush );
+
+ if (brush.color().alpha() < 255){//semi-transparent brush color
+ qWarning ("Semi-transparent brushes are not supported by EmfEngine.");
+
+ #ifdef Q_WS_WIN
+ QPixmap pix(4, 4);
+ pix.fill(Qt::white);
+ QPainter p;
+ p.begin(&pix);
+ p.setPen(QPen(Qt::NoPen));
+ p.setBrush(brush);
+ p.drawRect(QRect(0, 0, 4, 4));
+ p.end();
+
+ HBITMAP hBmp = pix.toWinHBITMAP();
+ HBRUSH wbrush = CreatePatternBrush(hBmp);
+ DeleteObject(hBmp);
+ return wbrush;
+ #endif
+ }
+
+ LONG lbHatch = HS_HORIZONTAL;
+ UINT lbStyle = BS_HATCHED;
+ switch(brush.style()){
+ case Qt::NoBrush:
+ lbStyle = BS_nullptr;
+ break;
+
+ case Qt::SolidPattern:
+ lbStyle = BS_SOLID;
+ break;
+
+ case Qt::Dense1Pattern:
+ case Qt::Dense2Pattern:
+ case Qt::Dense3Pattern:
+ case Qt::Dense4Pattern:
+ case Qt::Dense5Pattern:
+ case Qt::Dense6Pattern:
+ case Qt::Dense7Pattern:
+ {
+ #ifdef Q_WS_WIN
+ QPixmap pix(4, 4);
+ pix.fill(Qt::white);
+ QPainter p;
+ p.begin(&pix);
+ p.setPen(QPen(Qt::NoPen));
+ p.setBrush(brush);
+ p.drawRect(QRect(0, 0, 4, 4));
+ p.end();
+
+ HBITMAP hbm = pix.toWinHBITMAP();
+ HBRUSH wbrush = CreatePatternBrush(hbm);
+ DeleteObject(hbm);
+ return wbrush;
+ #endif
+ }
+ break;
+
+ case Qt::HorPattern:
+ break;
+
+ case Qt::VerPattern:
+ lbHatch = HS_VERTICAL;
+ break;
+
+ case Qt::CrossPattern:
+ lbHatch = HS_CROSS;
+ break;
+
+ case Qt::BDiagPattern:
+ lbHatch = HS_BDIAGONAL;
+ break;
+
+ case Qt::FDiagPattern:
+ lbHatch = HS_FDIAGONAL;
+ break;
+
+ case Qt::DiagCrossPattern:
+ lbHatch = HS_DIAGCROSS;
+ break;
+
+ case Qt::LinearGradientPattern:
+ {
+ qWarning("EmfEngine: Qt::LinearGradientPattern is not supported.");
+ return CreateBrushIndirect( &lbrush );
+ }
+ break;
+
+ case Qt::ConicalGradientPattern:
+ {
+ qWarning("EmfEngine: Qt::ConicalGradientPattern is not supported.");
+ return CreateBrushIndirect( &lbrush );
+ }
+ break;
+
+ case Qt::RadialGradientPattern:
+ {
+ qWarning("EmfEngine: Qt::RadialGradientPattern is not supported.");
+ return CreateBrushIndirect( &lbrush );
+ }
+
+ case Qt::TexturePattern:
+ #ifdef Q_WS_WIN
+ {
+ HBITMAP hbm = brush.texture().toWinHBITMAP();
+ HBRUSH wbrush = CreatePatternBrush(hbm);
+ DeleteObject(hbm);
+ return wbrush;
+ }
+ #endif
+ break;
+
+ default:
+ lbStyle = BS_SOLID;
+ break;
+ }
+
+ LOGBRUSH logbrush = {lbStyle, RGB(brush.color().red(), brush.color().green(), brush.color().blue()), lbHatch};
+ return CreateBrushIndirect( &logbrush );
+}
diff --git a/test/jkqtplot_test/EmfEngine/src/EmfEngine.h b/examples/jkqtplot_test/EmfEngine/src/EmfEngine.h
similarity index 97%
rename from test/jkqtplot_test/EmfEngine/src/EmfEngine.h
rename to examples/jkqtplot_test/EmfEngine/src/EmfEngine.h
index 1191e5176c..b434f1ce82 100644
--- a/test/jkqtplot_test/EmfEngine/src/EmfEngine.h
+++ b/examples/jkqtplot_test/EmfEngine/src/EmfEngine.h
@@ -1,138 +1,138 @@
-/***************************************************************************
- File : EmfEngine.h
- Project : EmfEngine
- --------------------------------------------------------------------
- Copyright : (C) 2009 - 2010 by Ion Vasilief
- Email (use @ for *) : ion_vasilief*yahoo.fr
- Description : Enables the export of QPainter grafics to
- Windows Enhanced Metafiles (.emf)
- ***************************************************************************/
-
-/***************************************************************************
- * *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 3 of the License, or *
- * (at your option) any later version. *
- * *
- * This program is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
- * GNU General Public License for more details. *
- * *
- * You should have received a copy of the GNU General Public License *
- * along with this program; if not, write to the Free Software *
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, *
- * Boston, MA 02110-1301 USA *
- * *
- ***************************************************************************/
-
-#ifndef EMFENGINE_H
-#define EMFENGINE_H
-
-#include
-#include
-
-#ifdef Q_WS_WIN
- #include
-#endif
-
-#ifdef EMFENGINE_DLL
-# ifdef EMFENGINE_DLL_BUILD
-# define EMFENGINELIB_EXPORT Q_DECL_EXPORT
-# else
-# define EMFENGINELIB_EXPORT Q_DECL_IMPORT
-# endif
-#else
-# define EMFENGINELIB_EXPORT
-#endif
-
-#ifdef HAVE_GDIPLUS
- #include
- using namespace Gdiplus;
-#else
- #ifdef Q_WS_X11
- #include
- #endif
-
- #ifdef Q_WS_MAC
- #include
- #endif
-
- #undef min
- #undef max
-#endif
-
-class EmfPaintEngine : public QPaintEngine
-{
-public:
- EmfPaintEngine(const QString&);
- ~EmfPaintEngine(){};
- virtual bool begin(QPaintDevice*);
- virtual bool end();
- virtual void updateState( const QPaintEngineState & ) {};
- virtual void drawEllipse(const QRectF &);
- virtual void drawImage(const QRectF& r, const QImage& im, const QRectF& sr) {drawPixmap(r,QPixmap::fromImage(im),sr);};
- virtual QPaintEngine::Type type() const {return QPaintEngine::User;};
- virtual void drawPoints ( const QPointF * points, int pointCount );
- virtual void drawLines ( const QLineF * , int );
- virtual void drawPath ( const QPainterPath & path );
- virtual void drawPolygon ( const QPointF * , int , PolygonDrawMode );
- virtual void drawTextItem ( const QPointF & , const QTextItem & );
- virtual void drawRects ( const QRectF * , int );
- virtual void drawPixmap ( const QRectF &, const QPixmap &, const QRectF &);
- virtual void drawTiledPixmap(const QRectF &, const QPixmap &, const QPointF &);
- virtual void drawImage(const QRectF &, const QImage &, const QRectF &, Qt::ImageConversionFlags);
-
-#ifdef HAVE_GDIPLUS
- Graphics *graphicsObject(){return d_grx;};
- GraphicsPath *convertPath (const QPainterPath & path);
-#endif
-
-private:
-#ifdef HAVE_GDIPLUS
- Metafile *metafile;
- Graphics *d_grx;
- GdiplusStartupInput gdiplusStartupInput;
- ULONG_PTR gdiplusToken;
-
- //! Converts a QPen to a GDI+ Pen structure
- Pen *convertPen(const QPen& pen);
- //! Converts a QBrush to a GDI+ Brush structure
- Brush *convertBrush(const QBrush& brush, GraphicsPath *origPath = nullptr);
- //! Draws pixmap pix in a given rectangle
- void drawPixmap(const QPixmap &pix, const RectF &p);
- //! Constructs a texture brush based on pixmap pix
- TextureBrush *textureBrush(const QPixmap & pix);
-#else
- //! Converts a QPen to a HPEN structure
- HPEN convertPen(const QPen&);
- //! Converts a QBrush to a HBRUSH structure
- HBRUSH convertBrush(const QBrush&);
- //! Pointer to the metafile device context
- HDC metaDC;
- RECT d_rect;
-#endif
- //! Name of the output metafile
- QString fname;
-
- void setClipping();
- void resetClipping();
-};
-
-class EMFENGINELIB_EXPORT EmfPaintDevice : public QPaintDevice
-{
-public:
- EmfPaintDevice(const QSize& s, const QString& fileName);
- ~EmfPaintDevice();
- virtual QPaintEngine * paintEngine () const;
-
-protected:
- virtual int metric ( PaintDeviceMetric ) const;
-
-private:
- //! Size in pixels
- QSize d_size;
- EmfPaintEngine* engine;
-};
-#endif
+/***************************************************************************
+ File : EmfEngine.h
+ Project : EmfEngine
+ --------------------------------------------------------------------
+ Copyright : (C) 2009 - 2010 by Ion Vasilief
+ Email (use @ for *) : ion_vasilief*yahoo.fr
+ Description : Enables the export of QPainter grafics to
+ Windows Enhanced Metafiles (.emf)
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 3 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the Free Software *
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, *
+ * Boston, MA 02110-1301 USA *
+ * *
+ ***************************************************************************/
+
+#ifndef EMFENGINE_H
+#define EMFENGINE_H
+
+#include
+#include
+
+#ifdef Q_WS_WIN
+ #include
+#endif
+
+#ifdef EMFENGINE_DLL
+# ifdef EMFENGINE_DLL_BUILD
+# define EMFENGINELIB_EXPORT Q_DECL_EXPORT
+# else
+# define EMFENGINELIB_EXPORT Q_DECL_IMPORT
+# endif
+#else
+# define EMFENGINELIB_EXPORT
+#endif
+
+#ifdef HAVE_GDIPLUS
+ #include
+ using namespace Gdiplus;
+#else
+ #ifdef Q_WS_X11
+ #include
+ #endif
+
+ #ifdef Q_WS_MAC
+ #include
+ #endif
+
+ #undef min
+ #undef max
+#endif
+
+class EmfPaintEngine : public QPaintEngine
+{
+public:
+ EmfPaintEngine(const QString&);
+ ~EmfPaintEngine(){};
+ virtual bool begin(QPaintDevice*);
+ virtual bool end();
+ virtual void updateState( const QPaintEngineState & ) {};
+ virtual void drawEllipse(const QRectF &);
+ virtual void drawImage(const QRectF& r, const QImage& im, const QRectF& sr) {drawPixmap(r,QPixmap::fromImage(im),sr);};
+ virtual QPaintEngine::Type type() const {return QPaintEngine::User;};
+ virtual void drawPoints ( const QPointF * points, int pointCount );
+ virtual void drawLines ( const QLineF * , int );
+ virtual void drawPath ( const QPainterPath & path );
+ virtual void drawPolygon ( const QPointF * , int , PolygonDrawMode );
+ virtual void drawTextItem ( const QPointF & , const QTextItem & );
+ virtual void drawRects ( const QRectF * , int );
+ virtual void drawPixmap ( const QRectF &, const QPixmap &, const QRectF &);
+ virtual void drawTiledPixmap(const QRectF &, const QPixmap &, const QPointF &);
+ virtual void drawImage(const QRectF &, const QImage &, const QRectF &, Qt::ImageConversionFlags);
+
+#ifdef HAVE_GDIPLUS
+ Graphics *graphicsObject(){return d_grx;};
+ GraphicsPath *convertPath (const QPainterPath & path);
+#endif
+
+private:
+#ifdef HAVE_GDIPLUS
+ Metafile *metafile;
+ Graphics *d_grx;
+ GdiplusStartupInput gdiplusStartupInput;
+ ULONG_PTR gdiplusToken;
+
+ //! Converts a QPen to a GDI+ Pen structure
+ Pen *convertPen(const QPen& pen);
+ //! Converts a QBrush to a GDI+ Brush structure
+ Brush *convertBrush(const QBrush& brush, GraphicsPath *origPath = nullptr);
+ //! Draws pixmap pix in a given rectangle
+ void drawPixmap(const QPixmap &pix, const RectF &p);
+ //! Constructs a texture brush based on pixmap pix
+ TextureBrush *textureBrush(const QPixmap & pix);
+#else
+ //! Converts a QPen to a HPEN structure
+ HPEN convertPen(const QPen&);
+ //! Converts a QBrush to a HBRUSH structure
+ HBRUSH convertBrush(const QBrush&);
+ //! Pointer to the metafile device context
+ HDC metaDC;
+ RECT d_rect;
+#endif
+ //! Name of the output metafile
+ QString fname;
+
+ void setClipping();
+ void resetClipping();
+};
+
+class EMFENGINELIB_EXPORT EmfPaintDevice : public QPaintDevice
+{
+public:
+ EmfPaintDevice(const QSize& s, const QString& fileName);
+ ~EmfPaintDevice();
+ virtual QPaintEngine * paintEngine () const;
+
+protected:
+ virtual int metric ( PaintDeviceMetric ) const;
+
+private:
+ //! Size in pixels
+ QSize d_size;
+ EmfPaintEngine* engine;
+};
+#endif
diff --git a/test/jkqtplot_test/EmfEngine/src/EmfPaintDevice.cpp b/examples/jkqtplot_test/EmfEngine/src/EmfPaintDevice.cpp
similarity index 97%
rename from test/jkqtplot_test/EmfEngine/src/EmfPaintDevice.cpp
rename to examples/jkqtplot_test/EmfEngine/src/EmfPaintDevice.cpp
index e94daa52d4..efcee0999b 100644
--- a/test/jkqtplot_test/EmfEngine/src/EmfPaintDevice.cpp
+++ b/examples/jkqtplot_test/EmfEngine/src/EmfPaintDevice.cpp
@@ -1,78 +1,78 @@
-/***************************************************************************
- File : EmfPaintDevice.cpp
- Project : EmfEngine
- --------------------------------------------------------------------
- Copyright : (C) 2009 -2010 by Ion Vasilief
- Email (use @ for *) : ion_vasilief*yahoo.fr
- Description : Enables the export of QPainter grafics to
- Windows Enhanced Metafiles (.emf) by using GDI calls
- ***************************************************************************/
-
-/***************************************************************************
- * *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 3 of the License, or *
- * (at your option) any later version. *
- * *
- * This program is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
- * GNU General Public License for more details. *
- * *
- * You should have received a copy of the GNU General Public License *
- * along with this program; if not, write to the Free Software *
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, *
- * Boston, MA 02110-1301 USA *
- * *
- ***************************************************************************/
-#include "EmfEngine.h"
-
-#include
-#include
-
-EmfPaintDevice::EmfPaintDevice(const QSize& s, const QString& fileName) : QPaintDevice(),
-d_size(s)
-{
- engine = new EmfPaintEngine(fileName);
-}
-
-EmfPaintDevice::~EmfPaintDevice()
-{
- delete engine;
-}
-
-QPaintEngine * EmfPaintDevice::paintEngine () const
-{
- return engine;
-}
-
-int EmfPaintDevice::metric ( PaintDeviceMetric metric ) const
-{
- int xdpi = QApplication::desktop()->logicalDpiX();
- int ydpi = QApplication::desktop()->logicalDpiY();
-
- switch (metric){
- case QPaintDevice::PdmWidth:
- return d_size.width();
- case QPaintDevice::PdmHeight:
- return d_size.height();
- case QPaintDevice::PdmWidthMM:
- return int(25.4*d_size.width()/(double)xdpi);
- case QPaintDevice::PdmHeightMM:
- return int(25.4*d_size.height()/(double)ydpi);
- case QPaintDevice::PdmNumColors:
- return 65536;//should it be millions?
- case QPaintDevice::PdmDepth:
- return 32;
- case QPaintDevice::PdmDpiX:
- case QPaintDevice::PdmPhysicalDpiX:
- return xdpi;
- case QPaintDevice::PdmDpiY:
- case QPaintDevice::PdmPhysicalDpiY:
- return ydpi;
- default:
- qWarning ("EmfPaintDevice::Strange metric asked");
- return 0;
- }
-}
+/***************************************************************************
+ File : EmfPaintDevice.cpp
+ Project : EmfEngine
+ --------------------------------------------------------------------
+ Copyright : (C) 2009 -2010 by Ion Vasilief
+ Email (use @ for *) : ion_vasilief*yahoo.fr
+ Description : Enables the export of QPainter grafics to
+ Windows Enhanced Metafiles (.emf) by using GDI calls
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 3 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the Free Software *
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, *
+ * Boston, MA 02110-1301 USA *
+ * *
+ ***************************************************************************/
+#include "EmfEngine.h"
+
+#include
+#include
+
+EmfPaintDevice::EmfPaintDevice(const QSize& s, const QString& fileName) : QPaintDevice(),
+d_size(s)
+{
+ engine = new EmfPaintEngine(fileName);
+}
+
+EmfPaintDevice::~EmfPaintDevice()
+{
+ delete engine;
+}
+
+QPaintEngine * EmfPaintDevice::paintEngine () const
+{
+ return engine;
+}
+
+int EmfPaintDevice::metric ( PaintDeviceMetric metric ) const
+{
+ int xdpi = QApplication::desktop()->logicalDpiX();
+ int ydpi = QApplication::desktop()->logicalDpiY();
+
+ switch (metric){
+ case QPaintDevice::PdmWidth:
+ return d_size.width();
+ case QPaintDevice::PdmHeight:
+ return d_size.height();
+ case QPaintDevice::PdmWidthMM:
+ return int(25.4*d_size.width()/(double)xdpi);
+ case QPaintDevice::PdmHeightMM:
+ return int(25.4*d_size.height()/(double)ydpi);
+ case QPaintDevice::PdmNumColors:
+ return 65536;//should it be millions?
+ case QPaintDevice::PdmDepth:
+ return 32;
+ case QPaintDevice::PdmDpiX:
+ case QPaintDevice::PdmPhysicalDpiX:
+ return xdpi;
+ case QPaintDevice::PdmDpiY:
+ case QPaintDevice::PdmPhysicalDpiY:
+ return ydpi;
+ default:
+ qWarning ("EmfPaintDevice::Strange metric asked");
+ return 0;
+ }
+}
diff --git a/test/jkqtplot_test/EmfEngine/src/src.pro b/examples/jkqtplot_test/EmfEngine/src/src.pro
similarity index 95%
rename from test/jkqtplot_test/EmfEngine/src/src.pro
rename to examples/jkqtplot_test/EmfEngine/src/src.pro
index 04eb2dcb7c..c7909b765f 100644
--- a/test/jkqtplot_test/EmfEngine/src/src.pro
+++ b/examples/jkqtplot_test/EmfEngine/src/src.pro
@@ -1,26 +1,26 @@
-# qmake project file for building the EmfEngine libraries
-
-include( ../config.pri )
-
-TARGET = EmfEngine
-TEMPLATE = lib
-
-MOC_DIR = ../tmp
-OBJECTS_DIR = ../tmp
-DESTDIR = ../
-
-contains(CONFIG, EmfEngineDll) {
- CONFIG += dll
- DEFINES += EMFENGINE_DLL EMFENGINE_DLL_BUILD
-} else {
- CONFIG += staticlib
-}
-
-HEADERS = EmfEngine.h
-
-SOURCES += EmfEngine.cpp
-SOURCES += EmfPaintDevice.cpp
-
-win32: LIBS += -lgdi32
-unix: LIBS += /usr/local/lib/libEMF.a
-unix: INCLUDEPATH += /usr/local/include/libEMF
+# qmake project file for building the EmfEngine libraries
+
+include( ../config.pri )
+
+TARGET = EmfEngine
+TEMPLATE = lib
+
+MOC_DIR = ../tmp
+OBJECTS_DIR = ../tmp
+DESTDIR = ../
+
+contains(CONFIG, EmfEngineDll) {
+ CONFIG += dll
+ DEFINES += EMFENGINE_DLL EMFENGINE_DLL_BUILD
+} else {
+ CONFIG += staticlib
+}
+
+HEADERS = EmfEngine.h
+
+SOURCES += EmfEngine.cpp
+SOURCES += EmfPaintDevice.cpp
+
+win32: LIBS += -lgdi32
+unix: LIBS += /usr/local/lib/libEMF.a
+unix: INCLUDEPATH += /usr/local/include/libEMF
diff --git a/test/jkqtplot_test/QTeXEngine/CHANGES.txt b/examples/jkqtplot_test/QTeXEngine/CHANGES.txt
similarity index 85%
rename from test/jkqtplot_test/QTeXEngine/CHANGES.txt
rename to examples/jkqtplot_test/QTeXEngine/CHANGES.txt
index 596001efe6..17d116a237 100644
--- a/test/jkqtplot_test/QTeXEngine/CHANGES.txt
+++ b/examples/jkqtplot_test/QTeXEngine/CHANGES.txt
@@ -1,16 +1,16 @@
-QTeXEngine GNU GPL v. 3.0
-------------------------
-
-09/11/2010 - Release 0.3:
- Fixed a bug leading to the creation of empty drawing paths.
-
-------------------------
-
-17/08/2009 - Release 0.2:
-- Improved handling of text strings.
-- Added several useful output options.
-- Added Doxygen configuration files.
-
-------------------------
-
+QTeXEngine GNU GPL v. 3.0
+------------------------
+
+09/11/2010 - Release 0.3:
+ Fixed a bug leading to the creation of empty drawing paths.
+
+------------------------
+
+17/08/2009 - Release 0.2:
+- Improved handling of text strings.
+- Added several useful output options.
+- Added Doxygen configuration files.
+
+------------------------
+
05/08/2009 - Release 0.1: Initial release.
\ No newline at end of file
diff --git a/test/jkqtplot_test/QTeXEngine/COPYING.txt b/examples/jkqtplot_test/QTeXEngine/COPYING.txt
similarity index 100%
rename from test/jkqtplot_test/QTeXEngine/COPYING.txt
rename to examples/jkqtplot_test/QTeXEngine/COPYING.txt
diff --git a/test/jkqtplot_test/QTeXEngine/QTeXEngine.pro b/examples/jkqtplot_test/QTeXEngine/QTeXEngine.pro
similarity index 84%
rename from test/jkqtplot_test/QTeXEngine/QTeXEngine.pro
rename to examples/jkqtplot_test/QTeXEngine/QTeXEngine.pro
index 979aa5f314..47053a1854 100644
--- a/test/jkqtplot_test/QTeXEngine/QTeXEngine.pro
+++ b/examples/jkqtplot_test/QTeXEngine/QTeXEngine.pro
@@ -1,8 +1,8 @@
-include( config.pri )
-
-TEMPLATE = subdirs
-
-SUBDIRS = \
- src \
- example \
+include( config.pri )
+
+TEMPLATE = subdirs
+
+SUBDIRS = \
+ src \
+ example \
test
\ No newline at end of file
diff --git a/test/jkqtplot_test/QTeXEngine/README.txt b/examples/jkqtplot_test/QTeXEngine/README.txt
similarity index 97%
rename from test/jkqtplot_test/QTeXEngine/README.txt
rename to examples/jkqtplot_test/QTeXEngine/README.txt
index f07fa16d5b..0572cc900a 100644
--- a/test/jkqtplot_test/QTeXEngine/README.txt
+++ b/examples/jkqtplot_test/QTeXEngine/README.txt
@@ -1,28 +1,28 @@
-QTeXEngine GNU GPL v. 3.0
-------------------------
-AUTHOR: Ion Vasilief
-------------------------
-FEATURES: QTeXEngine enables Qt based applications to easily export graphics created using the
- QPainter class to the .tex format using Pgf/TikZ packages (http://sourceforge.net/projects/pgf/).
----------------------------------------------------------------------------
-DEPENDENCIES: You need Qt (http://www.qtsoftware.com) installed on your system in order to build QTeXEngine.
----------------------------------------------------------------------------
-COMPILING: QTeXEngine uses qmake for the building process.
- qmake is part of a Qt distribution:
- qmake reads project files, that contain the options and rules how to build a certain project.
- A project file ends with the suffix "*.pro". Please read the qmake documentation for more details.
-
-After installing Qt on your system, type the following command lines:
-
- $ qmake
- $ make
-
-if you use MinGW, or:
-
- $ qmake -tp vc -r
-
-if you use Microsoft Visual Studio (this will generate Visual Studio .vcproj project files in the "src" and "example" folders).
-
----------------------------------------------------------------------------
-USE: a short demo application is provided in the "example" folder of the source archive.
----------------------------------------------------------------------------
+QTeXEngine GNU GPL v. 3.0
+------------------------
+AUTHOR: Ion Vasilief
+------------------------
+FEATURES: QTeXEngine enables Qt based applications to easily export graphics created using the
+ QPainter class to the .tex format using Pgf/TikZ packages (http://sourceforge.net/projects/pgf/).
+---------------------------------------------------------------------------
+DEPENDENCIES: You need Qt (http://www.qtsoftware.com) installed on your system in order to build QTeXEngine.
+---------------------------------------------------------------------------
+COMPILING: QTeXEngine uses qmake for the building process.
+ qmake is part of a Qt distribution:
+ qmake reads project files, that contain the options and rules how to build a certain project.
+ A project file ends with the suffix "*.pro". Please read the qmake documentation for more details.
+
+After installing Qt on your system, type the following command lines:
+
+ $ qmake
+ $ make
+
+if you use MinGW, or:
+
+ $ qmake -tp vc -r
+
+if you use Microsoft Visual Studio (this will generate Visual Studio .vcproj project files in the "src" and "example" folders).
+
+---------------------------------------------------------------------------
+USE: a short demo application is provided in the "example" folder of the source archive.
+---------------------------------------------------------------------------
diff --git a/test/jkqtplot_test/QTeXEngine/config.pri b/examples/jkqtplot_test/QTeXEngine/config.pri
similarity index 95%
rename from test/jkqtplot_test/QTeXEngine/config.pri
rename to examples/jkqtplot_test/QTeXEngine/config.pri
index 5d53579c83..b5433e2bcd 100644
--- a/test/jkqtplot_test/QTeXEngine/config.pri
+++ b/examples/jkqtplot_test/QTeXEngine/config.pri
@@ -1,9 +1,9 @@
-CONFIG += qt warn_on thread
-CONFIG += release
-
-# Comment the lines bellow if you want to build QTeXEngine statically
-#CONFIG += QTeXEngineDll
-
-
-
-
+CONFIG += qt warn_on thread
+CONFIG += release
+
+# Comment the lines bellow if you want to build QTeXEngine statically
+#CONFIG += QTeXEngineDll
+
+
+
+
diff --git a/test/jkqtplot_test/QTeXEngine/doc/Doxyfile b/examples/jkqtplot_test/QTeXEngine/doc/Doxyfile
similarity index 97%
rename from test/jkqtplot_test/QTeXEngine/doc/Doxyfile
rename to examples/jkqtplot_test/QTeXEngine/doc/Doxyfile
index e8be17b4eb..229b66af13 100644
--- a/test/jkqtplot_test/QTeXEngine/doc/Doxyfile
+++ b/examples/jkqtplot_test/QTeXEngine/doc/Doxyfile
@@ -1,222 +1,222 @@
-#---------------------------------------------------------------------------
-# Project related configuration options
-#---------------------------------------------------------------------------
-PROJECT_NAME = QTeXEngine
-PROJECT_NUMBER = 0.2
-OUTPUT_DIRECTORY = .
-CREATE_SUBDIRS = NO
-OUTPUT_LANGUAGE = English
-USE_WINDOWS_ENCODING = NO
-BRIEF_MEMBER_DESC = YES
-REPEAT_BRIEF = YES
-ABBREVIATE_BRIEF =
-ALWAYS_DETAILED_SEC = NO
-INLINE_INHERITED_MEMB = NO
-FULL_PATH_NAMES = YES
-STRIP_FROM_PATH =
-STRIP_FROM_INC_PATH =
-SHORT_NAMES = NO
-JAVADOC_AUTOBRIEF = NO
-MULTILINE_CPP_IS_BRIEF = NO
-DETAILS_AT_TOP = YES
-INHERIT_DOCS = YES
-DISTRIBUTE_GROUP_DOC = NO
-TAB_SIZE = 4
-ALIASES =
-OPTIMIZE_OUTPUT_FOR_C = NO
-OPTIMIZE_OUTPUT_JAVA = NO
-SUBGROUPING = YES
-#---------------------------------------------------------------------------
-# Build related configuration options
-#---------------------------------------------------------------------------
-EXTRACT_ALL = YES
-EXTRACT_PRIVATE = YES
-EXTRACT_STATIC = YES
-EXTRACT_LOCAL_CLASSES = YES
-EXTRACT_LOCAL_METHODS = NO
-HIDE_UNDOC_MEMBERS = NO
-HIDE_UNDOC_CLASSES = NO
-HIDE_FRIEND_COMPOUNDS = NO
-HIDE_IN_BODY_DOCS = NO
-INTERNAL_DOCS = NO
-CASE_SENSE_NAMES = YES
-HIDE_SCOPE_NAMES = NO
-SHOW_INCLUDE_FILES = YES
-INLINE_INFO = YES
-SORT_MEMBER_DOCS = YES
-SORT_BRIEF_DOCS = YES
-SORT_BY_SCOPE_NAME = NO
-GENERATE_TODOLIST = YES
-GENERATE_TESTLIST = YES
-GENERATE_BUGLIST = YES
-GENERATE_DEPRECATEDLIST= YES
-ENABLED_SECTIONS =
-MAX_INITIALIZER_LINES = 30
-SHOW_USED_FILES = YES
-SHOW_DIRECTORIES = YES
-FILE_VERSION_FILTER =
-#---------------------------------------------------------------------------
-# configuration options related to warning and progress messages
-#---------------------------------------------------------------------------
-QUIET = NO
-WARNINGS = YES
-WARN_IF_UNDOCUMENTED = YES
-WARN_IF_DOC_ERROR = YES
-WARN_NO_PARAMDOC = NO
-WARN_FORMAT = "$file:$line: $text"
-WARN_LOGFILE =
-#---------------------------------------------------------------------------
-# configuration options related to the input files
-#---------------------------------------------------------------------------
-INPUT = ../src .
-FILE_PATTERNS = *.cpp \
- *.h \
- *.txt \
- *.dox
-RECURSIVE = yes
-EXCLUDE =
-EXCLUDE_SYMLINKS = NO
-EXCLUDE_PATTERNS = *moc_*
-EXAMPLE_PATH = ../README.txt ../COPYING.txt
-EXAMPLE_PATTERNS =
-EXAMPLE_RECURSIVE = NO
-IMAGE_PATH =
-INPUT_FILTER =
-FILTER_PATTERNS =
-FILTER_SOURCE_FILES = NO
-#---------------------------------------------------------------------------
-# configuration options related to source browsing
-#---------------------------------------------------------------------------
-SOURCE_BROWSER = NO
-INLINE_SOURCES = NO
-STRIP_CODE_COMMENTS = YES
-REFERENCED_BY_RELATION = YES
-REFERENCES_RELATION = YES
-VERBATIM_HEADERS = YES
-#---------------------------------------------------------------------------
-# configuration options related to the alphabetical class index
-#---------------------------------------------------------------------------
-ALPHABETICAL_INDEX = YES
-COLS_IN_ALPHA_INDEX = 5
-IGNORE_PREFIX =
-#---------------------------------------------------------------------------
-# configuration options related to the HTML output
-#---------------------------------------------------------------------------
-GENERATE_HTML = YES
-HTML_OUTPUT = html
-HTML_FILE_EXTENSION = .html
-HTML_HEADER =
-HTML_FOOTER =
-HTML_STYLESHEET =
-HTML_ALIGN_MEMBERS = YES
-GENERATE_HTMLHELP = NO
-CHM_FILE =
-HHC_LOCATION =
-GENERATE_CHI = NO
-BINARY_TOC = NO
-TOC_EXPAND = NO
-DISABLE_INDEX = NO
-ENUM_VALUES_PER_LINE = 4
-GENERATE_TREEVIEW = NO
-TREEVIEW_WIDTH = 250
-#---------------------------------------------------------------------------
-# configuration options related to the LaTeX output
-#---------------------------------------------------------------------------
-GENERATE_LATEX = NO
-LATEX_OUTPUT = latex
-LATEX_CMD_NAME = latex
-MAKEINDEX_CMD_NAME = makeindex
-COMPACT_LATEX = NO
-PAPER_TYPE = a4wide
-EXTRA_PACKAGES =
-LATEX_HEADER =
-PDF_HYPERLINKS = NO
-USE_PDFLATEX = NO
-LATEX_BATCHMODE = NO
-LATEX_HIDE_INDICES = NO
-#---------------------------------------------------------------------------
-# configuration options related to the RTF output
-#---------------------------------------------------------------------------
-GENERATE_RTF = NO
-RTF_OUTPUT = rtf
-COMPACT_RTF = NO
-RTF_HYPERLINKS = NO
-RTF_STYLESHEET_FILE =
-RTF_EXTENSIONS_FILE =
-#---------------------------------------------------------------------------
-# configuration options related to the man page output
-#---------------------------------------------------------------------------
-GENERATE_MAN = NO
-MAN_OUTPUT = man
-MAN_EXTENSION = .3
-MAN_LINKS = NO
-#---------------------------------------------------------------------------
-# configuration options related to the XML output
-#---------------------------------------------------------------------------
-GENERATE_XML = NO
-XML_OUTPUT = xml
-XML_SCHEMA =
-XML_DTD =
-XML_PROGRAMLISTING = YES
-#---------------------------------------------------------------------------
-# configuration options for the AutoGen Definitions output
-#---------------------------------------------------------------------------
-GENERATE_AUTOGEN_DEF = NO
-#---------------------------------------------------------------------------
-# configuration options related to the Perl module output
-#---------------------------------------------------------------------------
-GENERATE_PERLMOD = NO
-PERLMOD_LATEX = NO
-PERLMOD_PRETTY = YES
-PERLMOD_MAKEVAR_PREFIX =
-#---------------------------------------------------------------------------
-# Configuration options related to the preprocessor
-#---------------------------------------------------------------------------
-ENABLE_PREPROCESSING = YES
-MACRO_EXPANSION = NO
-EXPAND_ONLY_PREDEF = NO
-SEARCH_INCLUDES = YES
-INCLUDE_PATH =
-INCLUDE_FILE_PATTERNS =
-PREDEFINED =
-EXPAND_AS_DEFINED =
-SKIP_FUNCTION_MACROS = YES
-#---------------------------------------------------------------------------
-# Configuration::additions related to external references
-#---------------------------------------------------------------------------
-TAGFILES =
-GENERATE_TAGFILE =
-ALLEXTERNALS = NO
-EXTERNAL_GROUPS = YES
-PERL_PATH = /usr/bin/perl
-#---------------------------------------------------------------------------
-# Configuration options related to the dot tool
-#---------------------------------------------------------------------------
-CLASS_DIAGRAMS = YES
-HIDE_UNDOC_RELATIONS = YES
-# recommendation: install graphviz and use HAVE_DOT = YES
-HAVE_DOT = NO
-CLASS_GRAPH = YES
-COLLABORATION_GRAPH = YES
-GROUP_GRAPHS = YES
-UML_LOOK = NO
-TEMPLATE_RELATIONS = NO
-INCLUDE_GRAPH = YES
-INCLUDED_BY_GRAPH = YES
-CALL_GRAPH = NO
-GRAPHICAL_HIERARCHY = YES
-DIRECTORY_GRAPH = YES
-DOT_IMAGE_FORMAT = png
-DOT_PATH =
-DOTFILE_DIRS =
-MAX_DOT_GRAPH_WIDTH = 1024
-MAX_DOT_GRAPH_HEIGHT = 1024
-MAX_DOT_GRAPH_DEPTH = 1000
-DOT_TRANSPARENT = NO
-DOT_MULTI_TARGETS = NO
-GENERATE_LEGEND = YES
-DOT_CLEANUP = YES
-#---------------------------------------------------------------------------
-# Configuration::additions related to the search engine
-#---------------------------------------------------------------------------
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+PROJECT_NAME = QTeXEngine
+PROJECT_NUMBER = 0.2
+OUTPUT_DIRECTORY = .
+CREATE_SUBDIRS = NO
+OUTPUT_LANGUAGE = English
+USE_WINDOWS_ENCODING = NO
+BRIEF_MEMBER_DESC = YES
+REPEAT_BRIEF = YES
+ABBREVIATE_BRIEF =
+ALWAYS_DETAILED_SEC = NO
+INLINE_INHERITED_MEMB = NO
+FULL_PATH_NAMES = YES
+STRIP_FROM_PATH =
+STRIP_FROM_INC_PATH =
+SHORT_NAMES = NO
+JAVADOC_AUTOBRIEF = NO
+MULTILINE_CPP_IS_BRIEF = NO
+DETAILS_AT_TOP = YES
+INHERIT_DOCS = YES
+DISTRIBUTE_GROUP_DOC = NO
+TAB_SIZE = 4
+ALIASES =
+OPTIMIZE_OUTPUT_FOR_C = NO
+OPTIMIZE_OUTPUT_JAVA = NO
+SUBGROUPING = YES
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+EXTRACT_ALL = YES
+EXTRACT_PRIVATE = YES
+EXTRACT_STATIC = YES
+EXTRACT_LOCAL_CLASSES = YES
+EXTRACT_LOCAL_METHODS = NO
+HIDE_UNDOC_MEMBERS = NO
+HIDE_UNDOC_CLASSES = NO
+HIDE_FRIEND_COMPOUNDS = NO
+HIDE_IN_BODY_DOCS = NO
+INTERNAL_DOCS = NO
+CASE_SENSE_NAMES = YES
+HIDE_SCOPE_NAMES = NO
+SHOW_INCLUDE_FILES = YES
+INLINE_INFO = YES
+SORT_MEMBER_DOCS = YES
+SORT_BRIEF_DOCS = YES
+SORT_BY_SCOPE_NAME = NO
+GENERATE_TODOLIST = YES
+GENERATE_TESTLIST = YES
+GENERATE_BUGLIST = YES
+GENERATE_DEPRECATEDLIST= YES
+ENABLED_SECTIONS =
+MAX_INITIALIZER_LINES = 30
+SHOW_USED_FILES = YES
+SHOW_DIRECTORIES = YES
+FILE_VERSION_FILTER =
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+QUIET = NO
+WARNINGS = YES
+WARN_IF_UNDOCUMENTED = YES
+WARN_IF_DOC_ERROR = YES
+WARN_NO_PARAMDOC = NO
+WARN_FORMAT = "$file:$line: $text"
+WARN_LOGFILE =
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+INPUT = ../src .
+FILE_PATTERNS = *.cpp \
+ *.h \
+ *.txt \
+ *.dox
+RECURSIVE = yes
+EXCLUDE =
+EXCLUDE_SYMLINKS = NO
+EXCLUDE_PATTERNS = *moc_*
+EXAMPLE_PATH = ../README.txt ../COPYING.txt
+EXAMPLE_PATTERNS =
+EXAMPLE_RECURSIVE = NO
+IMAGE_PATH =
+INPUT_FILTER =
+FILTER_PATTERNS =
+FILTER_SOURCE_FILES = NO
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+SOURCE_BROWSER = NO
+INLINE_SOURCES = NO
+STRIP_CODE_COMMENTS = YES
+REFERENCED_BY_RELATION = YES
+REFERENCES_RELATION = YES
+VERBATIM_HEADERS = YES
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+ALPHABETICAL_INDEX = YES
+COLS_IN_ALPHA_INDEX = 5
+IGNORE_PREFIX =
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+GENERATE_HTML = YES
+HTML_OUTPUT = html
+HTML_FILE_EXTENSION = .html
+HTML_HEADER =
+HTML_FOOTER =
+HTML_STYLESHEET =
+HTML_ALIGN_MEMBERS = YES
+GENERATE_HTMLHELP = NO
+CHM_FILE =
+HHC_LOCATION =
+GENERATE_CHI = NO
+BINARY_TOC = NO
+TOC_EXPAND = NO
+DISABLE_INDEX = NO
+ENUM_VALUES_PER_LINE = 4
+GENERATE_TREEVIEW = NO
+TREEVIEW_WIDTH = 250
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+GENERATE_LATEX = NO
+LATEX_OUTPUT = latex
+LATEX_CMD_NAME = latex
+MAKEINDEX_CMD_NAME = makeindex
+COMPACT_LATEX = NO
+PAPER_TYPE = a4wide
+EXTRA_PACKAGES =
+LATEX_HEADER =
+PDF_HYPERLINKS = NO
+USE_PDFLATEX = NO
+LATEX_BATCHMODE = NO
+LATEX_HIDE_INDICES = NO
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+GENERATE_RTF = NO
+RTF_OUTPUT = rtf
+COMPACT_RTF = NO
+RTF_HYPERLINKS = NO
+RTF_STYLESHEET_FILE =
+RTF_EXTENSIONS_FILE =
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+GENERATE_MAN = NO
+MAN_OUTPUT = man
+MAN_EXTENSION = .3
+MAN_LINKS = NO
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+GENERATE_XML = NO
+XML_OUTPUT = xml
+XML_SCHEMA =
+XML_DTD =
+XML_PROGRAMLISTING = YES
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+GENERATE_AUTOGEN_DEF = NO
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+GENERATE_PERLMOD = NO
+PERLMOD_LATEX = NO
+PERLMOD_PRETTY = YES
+PERLMOD_MAKEVAR_PREFIX =
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+ENABLE_PREPROCESSING = YES
+MACRO_EXPANSION = NO
+EXPAND_ONLY_PREDEF = NO
+SEARCH_INCLUDES = YES
+INCLUDE_PATH =
+INCLUDE_FILE_PATTERNS =
+PREDEFINED =
+EXPAND_AS_DEFINED =
+SKIP_FUNCTION_MACROS = YES
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+TAGFILES =
+GENERATE_TAGFILE =
+ALLEXTERNALS = NO
+EXTERNAL_GROUPS = YES
+PERL_PATH = /usr/bin/perl
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+CLASS_DIAGRAMS = YES
+HIDE_UNDOC_RELATIONS = YES
+# recommendation: install graphviz and use HAVE_DOT = YES
+HAVE_DOT = NO
+CLASS_GRAPH = YES
+COLLABORATION_GRAPH = YES
+GROUP_GRAPHS = YES
+UML_LOOK = NO
+TEMPLATE_RELATIONS = NO
+INCLUDE_GRAPH = YES
+INCLUDED_BY_GRAPH = YES
+CALL_GRAPH = NO
+GRAPHICAL_HIERARCHY = YES
+DIRECTORY_GRAPH = YES
+DOT_IMAGE_FORMAT = png
+DOT_PATH =
+DOTFILE_DIRS =
+MAX_DOT_GRAPH_WIDTH = 1024
+MAX_DOT_GRAPH_HEIGHT = 1024
+MAX_DOT_GRAPH_DEPTH = 1000
+DOT_TRANSPARENT = NO
+DOT_MULTI_TARGETS = NO
+GENERATE_LEGEND = YES
+DOT_CLEANUP = YES
+#---------------------------------------------------------------------------
+# Configuration::additions related to the search engine
+#---------------------------------------------------------------------------
SEARCHENGINE = NO
diff --git a/test/jkqtplot_test/QTeXEngine/doc/html/QTeXEngine_8h-source.html b/examples/jkqtplot_test/QTeXEngine/doc/html/QTeXEngine_8h-source.html
similarity index 100%
rename from test/jkqtplot_test/QTeXEngine/doc/html/QTeXEngine_8h-source.html
rename to examples/jkqtplot_test/QTeXEngine/doc/html/QTeXEngine_8h-source.html
diff --git a/test/jkqtplot_test/QTeXEngine/doc/html/QTeXEngine_8h.html b/examples/jkqtplot_test/QTeXEngine/doc/html/QTeXEngine_8h.html
similarity index 100%
rename from test/jkqtplot_test/QTeXEngine/doc/html/QTeXEngine_8h.html
rename to examples/jkqtplot_test/QTeXEngine/doc/html/QTeXEngine_8h.html
diff --git a/test/jkqtplot_test/QTeXEngine/doc/html/QTeXPaintDevice_8cpp.html b/examples/jkqtplot_test/QTeXEngine/doc/html/QTeXPaintDevice_8cpp.html
similarity index 100%
rename from test/jkqtplot_test/QTeXEngine/doc/html/QTeXPaintDevice_8cpp.html
rename to examples/jkqtplot_test/QTeXEngine/doc/html/QTeXPaintDevice_8cpp.html
diff --git a/test/jkqtplot_test/QTeXEngine/doc/html/QTeXPaintEngine_8cpp.html b/examples/jkqtplot_test/QTeXEngine/doc/html/QTeXPaintEngine_8cpp.html
similarity index 100%
rename from test/jkqtplot_test/QTeXEngine/doc/html/QTeXPaintEngine_8cpp.html
rename to examples/jkqtplot_test/QTeXEngine/doc/html/QTeXPaintEngine_8cpp.html
diff --git a/test/jkqtplot_test/QTeXEngine/doc/html/annotated.html b/examples/jkqtplot_test/QTeXEngine/doc/html/annotated.html
similarity index 100%
rename from test/jkqtplot_test/QTeXEngine/doc/html/annotated.html
rename to examples/jkqtplot_test/QTeXEngine/doc/html/annotated.html
diff --git a/test/jkqtplot_test/QTeXEngine/doc/html/classQTeXPaintDevice-members.html b/examples/jkqtplot_test/QTeXEngine/doc/html/classQTeXPaintDevice-members.html
similarity index 100%
rename from test/jkqtplot_test/QTeXEngine/doc/html/classQTeXPaintDevice-members.html
rename to examples/jkqtplot_test/QTeXEngine/doc/html/classQTeXPaintDevice-members.html
diff --git a/test/jkqtplot_test/QTeXEngine/doc/html/classQTeXPaintDevice.html b/examples/jkqtplot_test/QTeXEngine/doc/html/classQTeXPaintDevice.html
similarity index 100%
rename from test/jkqtplot_test/QTeXEngine/doc/html/classQTeXPaintDevice.html
rename to examples/jkqtplot_test/QTeXEngine/doc/html/classQTeXPaintDevice.html
diff --git a/test/jkqtplot_test/QTeXEngine/doc/html/classQTeXPaintEngine-members.html b/examples/jkqtplot_test/QTeXEngine/doc/html/classQTeXPaintEngine-members.html
similarity index 100%
rename from test/jkqtplot_test/QTeXEngine/doc/html/classQTeXPaintEngine-members.html
rename to examples/jkqtplot_test/QTeXEngine/doc/html/classQTeXPaintEngine-members.html
diff --git a/test/jkqtplot_test/QTeXEngine/doc/html/classQTeXPaintEngine.html b/examples/jkqtplot_test/QTeXEngine/doc/html/classQTeXPaintEngine.html
similarity index 100%
rename from test/jkqtplot_test/QTeXEngine/doc/html/classQTeXPaintEngine.html
rename to examples/jkqtplot_test/QTeXEngine/doc/html/classQTeXPaintEngine.html
diff --git a/test/jkqtplot_test/QTeXEngine/doc/html/classes.html b/examples/jkqtplot_test/QTeXEngine/doc/html/classes.html
similarity index 100%
rename from test/jkqtplot_test/QTeXEngine/doc/html/classes.html
rename to examples/jkqtplot_test/QTeXEngine/doc/html/classes.html
diff --git a/test/jkqtplot_test/QTeXEngine/doc/html/dir_def0c14f7261295f36d3de237dcfedeb.html b/examples/jkqtplot_test/QTeXEngine/doc/html/dir_def0c14f7261295f36d3de237dcfedeb.html
similarity index 100%
rename from test/jkqtplot_test/QTeXEngine/doc/html/dir_def0c14f7261295f36d3de237dcfedeb.html
rename to examples/jkqtplot_test/QTeXEngine/doc/html/dir_def0c14f7261295f36d3de237dcfedeb.html
diff --git a/test/jkqtplot_test/QTeXEngine/doc/html/dirs.html b/examples/jkqtplot_test/QTeXEngine/doc/html/dirs.html
similarity index 100%
rename from test/jkqtplot_test/QTeXEngine/doc/html/dirs.html
rename to examples/jkqtplot_test/QTeXEngine/doc/html/dirs.html
diff --git a/test/jkqtplot_test/QTeXEngine/doc/html/doxygen.css b/examples/jkqtplot_test/QTeXEngine/doc/html/doxygen.css
similarity index 100%
rename from test/jkqtplot_test/QTeXEngine/doc/html/doxygen.css
rename to examples/jkqtplot_test/QTeXEngine/doc/html/doxygen.css
diff --git a/test/jkqtplot_test/QTeXEngine/doc/html/doxygen.png b/examples/jkqtplot_test/QTeXEngine/doc/html/doxygen.png
similarity index 100%
rename from test/jkqtplot_test/QTeXEngine/doc/html/doxygen.png
rename to examples/jkqtplot_test/QTeXEngine/doc/html/doxygen.png
diff --git a/test/jkqtplot_test/QTeXEngine/doc/html/files.html b/examples/jkqtplot_test/QTeXEngine/doc/html/files.html
similarity index 100%
rename from test/jkqtplot_test/QTeXEngine/doc/html/files.html
rename to examples/jkqtplot_test/QTeXEngine/doc/html/files.html
diff --git a/test/jkqtplot_test/QTeXEngine/doc/html/functions.html b/examples/jkqtplot_test/QTeXEngine/doc/html/functions.html
similarity index 100%
rename from test/jkqtplot_test/QTeXEngine/doc/html/functions.html
rename to examples/jkqtplot_test/QTeXEngine/doc/html/functions.html
diff --git a/test/jkqtplot_test/QTeXEngine/doc/html/functions_enum.html b/examples/jkqtplot_test/QTeXEngine/doc/html/functions_enum.html
similarity index 100%
rename from test/jkqtplot_test/QTeXEngine/doc/html/functions_enum.html
rename to examples/jkqtplot_test/QTeXEngine/doc/html/functions_enum.html
diff --git a/test/jkqtplot_test/QTeXEngine/doc/html/functions_eval.html b/examples/jkqtplot_test/QTeXEngine/doc/html/functions_eval.html
similarity index 100%
rename from test/jkqtplot_test/QTeXEngine/doc/html/functions_eval.html
rename to examples/jkqtplot_test/QTeXEngine/doc/html/functions_eval.html
diff --git a/test/jkqtplot_test/QTeXEngine/doc/html/functions_func.html b/examples/jkqtplot_test/QTeXEngine/doc/html/functions_func.html
similarity index 100%
rename from test/jkqtplot_test/QTeXEngine/doc/html/functions_func.html
rename to examples/jkqtplot_test/QTeXEngine/doc/html/functions_func.html
diff --git a/test/jkqtplot_test/QTeXEngine/doc/html/functions_vars.html b/examples/jkqtplot_test/QTeXEngine/doc/html/functions_vars.html
similarity index 100%
rename from test/jkqtplot_test/QTeXEngine/doc/html/functions_vars.html
rename to examples/jkqtplot_test/QTeXEngine/doc/html/functions_vars.html
diff --git a/test/jkqtplot_test/QTeXEngine/doc/html/gtexenginelicense.html b/examples/jkqtplot_test/QTeXEngine/doc/html/gtexenginelicense.html
similarity index 100%
rename from test/jkqtplot_test/QTeXEngine/doc/html/gtexenginelicense.html
rename to examples/jkqtplot_test/QTeXEngine/doc/html/gtexenginelicense.html
diff --git a/test/jkqtplot_test/QTeXEngine/doc/html/index.html b/examples/jkqtplot_test/QTeXEngine/doc/html/index.html
similarity index 100%
rename from test/jkqtplot_test/QTeXEngine/doc/html/index.html
rename to examples/jkqtplot_test/QTeXEngine/doc/html/index.html
diff --git a/test/jkqtplot_test/QTeXEngine/doc/html/pages.html b/examples/jkqtplot_test/QTeXEngine/doc/html/pages.html
similarity index 100%
rename from test/jkqtplot_test/QTeXEngine/doc/html/pages.html
rename to examples/jkqtplot_test/QTeXEngine/doc/html/pages.html
diff --git a/test/jkqtplot_test/QTeXEngine/doc/html/qtexengine_8dox.html b/examples/jkqtplot_test/QTeXEngine/doc/html/qtexengine_8dox.html
similarity index 100%
rename from test/jkqtplot_test/QTeXEngine/doc/html/qtexengine_8dox.html
rename to examples/jkqtplot_test/QTeXEngine/doc/html/qtexengine_8dox.html
diff --git a/test/jkqtplot_test/QTeXEngine/doc/html/qtexengineinstall.html b/examples/jkqtplot_test/QTeXEngine/doc/html/qtexengineinstall.html
similarity index 100%
rename from test/jkqtplot_test/QTeXEngine/doc/html/qtexengineinstall.html
rename to examples/jkqtplot_test/QTeXEngine/doc/html/qtexengineinstall.html
diff --git a/test/jkqtplot_test/QTeXEngine/doc/html/tab_b.gif b/examples/jkqtplot_test/QTeXEngine/doc/html/tab_b.gif
similarity index 100%
rename from test/jkqtplot_test/QTeXEngine/doc/html/tab_b.gif
rename to examples/jkqtplot_test/QTeXEngine/doc/html/tab_b.gif
diff --git a/test/jkqtplot_test/QTeXEngine/doc/html/tab_l.gif b/examples/jkqtplot_test/QTeXEngine/doc/html/tab_l.gif
similarity index 100%
rename from test/jkqtplot_test/QTeXEngine/doc/html/tab_l.gif
rename to examples/jkqtplot_test/QTeXEngine/doc/html/tab_l.gif
diff --git a/test/jkqtplot_test/QTeXEngine/doc/html/tab_r.gif b/examples/jkqtplot_test/QTeXEngine/doc/html/tab_r.gif
similarity index 100%
rename from test/jkqtplot_test/QTeXEngine/doc/html/tab_r.gif
rename to examples/jkqtplot_test/QTeXEngine/doc/html/tab_r.gif
diff --git a/test/jkqtplot_test/QTeXEngine/doc/html/tabs.css b/examples/jkqtplot_test/QTeXEngine/doc/html/tabs.css
similarity index 100%
rename from test/jkqtplot_test/QTeXEngine/doc/html/tabs.css
rename to examples/jkqtplot_test/QTeXEngine/doc/html/tabs.css
diff --git a/test/jkqtplot_test/QTeXEngine/doc/qtexengine.dox b/examples/jkqtplot_test/QTeXEngine/doc/qtexengine.dox
similarity index 100%
rename from test/jkqtplot_test/QTeXEngine/doc/qtexengine.dox
rename to examples/jkqtplot_test/QTeXEngine/doc/qtexengine.dox
diff --git a/test/jkqtplot_test/QTeXEngine/example/example.pro b/examples/jkqtplot_test/QTeXEngine/example/example.pro
similarity index 95%
rename from test/jkqtplot_test/QTeXEngine/example/example.pro
rename to examples/jkqtplot_test/QTeXEngine/example/example.pro
index c8c62e9a9c..8f071bb0ec 100644
--- a/test/jkqtplot_test/QTeXEngine/example/example.pro
+++ b/examples/jkqtplot_test/QTeXEngine/example/example.pro
@@ -1,15 +1,15 @@
-TARGET = example
-TEMPLATE = app
-CONFIG += warn_on release thread
-
-MOC_DIR = ../tmp
-OBJECTS_DIR = ../tmp
-DESTDIR = ./
-
-INCLUDEPATH += ../src
-LIBS += ../libQTeXEngine.a
-
-HEADERS = renderarea.h \
- pixmaps.h
-SOURCES = main.cpp \
- renderarea.cpp
+TARGET = example
+TEMPLATE = app
+CONFIG += warn_on release thread
+
+MOC_DIR = ../tmp
+OBJECTS_DIR = ../tmp
+DESTDIR = ./
+
+INCLUDEPATH += ../src
+LIBS += ../libQTeXEngine.a
+
+HEADERS = renderarea.h \
+ pixmaps.h
+SOURCES = main.cpp \
+ renderarea.cpp
diff --git a/test/jkqtplot_test/QTeXEngine/example/main.cpp b/examples/jkqtplot_test/QTeXEngine/example/main.cpp
similarity index 95%
rename from test/jkqtplot_test/QTeXEngine/example/main.cpp
rename to examples/jkqtplot_test/QTeXEngine/example/main.cpp
index 7e3d9cd2c9..33a076e2dd 100644
--- a/test/jkqtplot_test/QTeXEngine/example/main.cpp
+++ b/examples/jkqtplot_test/QTeXEngine/example/main.cpp
@@ -1,21 +1,21 @@
-#include
-#include "renderarea.h"
-#include
-
-int main(int argc, char *argv[])
-{
- QApplication app(argc, argv);
- RenderArea area;
-
- area.setGeometry(100, 100, 600, 500);
- area.show();
-
- QTeXPaintDevice tex(QString("example.tex"), QSize(600, 500));
- tex.setDocumentMode();
- QPainter paint;
- paint.begin(&tex);
- area.draw(&paint);
- paint.end();
-
- return app.exec();
-}
+#include
+#include "renderarea.h"
+#include
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+ RenderArea area;
+
+ area.setGeometry(100, 100, 600, 500);
+ area.show();
+
+ QTeXPaintDevice tex(QString("example.tex"), QSize(600, 500));
+ tex.setDocumentMode();
+ QPainter paint;
+ paint.begin(&tex);
+ area.draw(&paint);
+ paint.end();
+
+ return app.exec();
+}
diff --git a/test/jkqtplot_test/QTeXEngine/example/pixmaps.h b/examples/jkqtplot_test/QTeXEngine/example/pixmaps.h
similarity index 96%
rename from test/jkqtplot_test/QTeXEngine/example/pixmaps.h
rename to examples/jkqtplot_test/QTeXEngine/example/pixmaps.h
index 86a2aca988..2cda3c22dc 100644
--- a/test/jkqtplot_test/QTeXEngine/example/pixmaps.h
+++ b/examples/jkqtplot_test/QTeXEngine/example/pixmaps.h
@@ -1,805 +1,805 @@
-/* XPM */
-static const char * qt_logo_xpm[] = {
-"69 80 364 2",
-" c None",
-". c #0C481E",
-"+ c #135020",
-"@ c #3F832C",
-"# c #4D932F",
-"$ c #509730",
-"% c #559C31",
-"& c #5AA233",
-"* c #569E32",
-"= c #4D942F",
-"- c #468B2E",
-"; c #41852C",
-"> c #0E4B1F",
-", c #347629",
-"' c #60A934",
-") c #66B036",
-"! c #63AC35",
-"~ c #579F32",
-"{ c #4E9430",
-"] c #478C2E",
-"^ c #41862C",
-"/ c #124F20",
-"( c #59A133",
-"_ c #64AD35",
-": c #58A032",
-"< c #4F9530",
-"[ c #488D2E",
-"} c #42862C",
-"| c #4A8F2E",
-"1 c #64AE36",
-"2 c #509630",
-"3 c #488E2E",
-"4 c #42872C",
-"5 c #317328",
-"6 c #65AF36",
-"7 c #5AA333",
-"8 c #498E2E",
-"9 c #43872D",
-"0 c #175521",
-"a c #63AD35",
-"b c #5BA333",
-"c c #519830",
-"d c #498F2E",
-"e c #43882D",
-"f c #2E6F27",
-"g c #5CA533",
-"h c #529931",
-"i c #4A902F",
-"j c #44882D",
-"k c #40842C",
-"l c #5DA634",
-"m c #539A31",
-"n c #4B902F",
-"o c #44892D",
-"p c #5FA734",
-"q c #549B31",
-"r c #0D491E",
-"s c #589E37",
-"t c #70B04C",
-"u c #83BE5D",
-"v c #7CBB53",
-"w c #6DB43F",
-"x c #63AD36",
-"y c #286926",
-"z c #26622B",
-"A c #699665",
-"B c #D0E0CF",
-"C c #FFFFFF",
-"D c #FEFEFD",
-"E c #E5F2DD",
-"F c #C4E1B2",
-"G c #9DCD7F",
-"H c #69B23A",
-"I c #185722",
-"J c #114E20",
-"K c #7FA67A",
-"L c #EEF6E8",
-"M c #A7D18B",
-"N c #6BB23C",
-"O c #3A7D2B",
-"P c #0D481E",
-"Q c #1E5A26",
-"R c #D4E2D1",
-"S c #E0EFD6",
-"T c #76B84A",
-"U c #63AB35",
-"V c #397C2A",
-"W c #8DBE74",
-"X c #9ECD80",
-"Y c #8EC56B",
-"Z c #7DBC55",
-"` c #6DB33F",
-" . c #3F842C",
-".. c #175323",
-"+. c #D2E1D0",
-"@. c #EFF7EA",
-"#. c #83BF5D",
-"$. c #0D491F",
-"%. c #EAF1E9",
-"&. c #CBE4BA",
-"*. c #B9D1B6",
-"=. c #EFF7EB",
-"-. c #72B646",
-";. c #235F2A",
-">. c #65B036",
-",. c #1C5A22",
-"'. c #487E48",
-"). c #F8FAF9",
-"!. c #ADC6AB",
-"~. c #B7CFB4",
-"{. c #D3E8C5",
-"]. c #67B037",
-"^. c #246324",
-"/. c #4F844E",
-"(. c #104D20",
-"_. c #DBE8D9",
-":. c #CCE5BC",
-"<. c #7BBB52",
-"[. c #114E1F",
-"}. c #2A662F",
-"|. c #A2C09D",
-"1. c #A1CE83",
-"2. c #64AE35",
-"3. c #0F4D1F",
-"4. c #8DB289",
-"5. c #65AF35",
-"6. c #165321",
-"7. c #588A56",
-"8. c #E6F2DE",
-"9. c #6CB33E",
-"0. c #0C491E",
-"a. c #104B1F",
-"b. c #CCDDC8",
-"c. c #E8F3E0",
-"d. c #539B31",
-"e. c #DCE8DB",
-"f. c #BCD3B8",
-"g. c #81BE59",
-"h. c #2C6D26",
-"i. c #2E6932",
-"j. c #95C873",
-"k. c #3E832B",
-"l. c #1C5926",
-"m. c #347529",
-"n. c #1B5825",
-"o. c #EBF4E4",
-"p. c #98B993",
-"q. c #D4E9C7",
-"r. c #296A26",
-"s. c #457B44",
-"t. c #558853",
-"u. c #C9E3B8",
-"v. c #155220",
-"w. c #568A54",
-"x. c #FAFDF9",
-"y. c #2D6A2D",
-"z. c #0F4B1E",
-"A. c #53864F",
-"B. c #D9E6D7",
-"C. c #BCD2B9",
-"D. c #D5E3D2",
-"E. c #DAECCF",
-"F. c #8DC469",
-"G. c #82BF5B",
-"H. c #77B94D",
-"I. c #589F33",
-"J. c #A6C3A1",
-"K. c #A7D28C",
-"L. c #276826",
-"M. c #2D6831",
-"N. c #659363",
-"O. c #51854F",
-"P. c #C5E1B3",
-"Q. c #E3EBE0",
-"R. c #86C161",
-"S. c #FDFEFD",
-"T. c #A8C5A1",
-"U. c #C6E2B4",
-"V. c #145122",
-"W. c #FEFFFE",
-"X. c #6AB23B",
-"Y. c #C5D8C1",
-"Z. c #CFE2C8",
-"`. c #2C6C27",
-" + c #2B6530",
-".+ c #F8FBF6",
-"++ c #5BA334",
-"@+ c #91B48C",
-"#+ c #E2EFDA",
-"$+ c #1D5B22",
-"%+ c #497F49",
-"&+ c #F1F8ED",
-"*+ c #82AA7F",
-"=+ c #F1F8EC",
-"-+ c #458536",
-";+ c #2F6A33",
-">+ c #417841",
-",+ c #E7F0E2",
-"'+ c #BDD8B3",
-")+ c #C3DAB9",
-"!+ c #CBDFC4",
-"~+ c #DBE9D3",
-"{+ c #B7D9A1",
-"]+ c #649360",
-"^+ c #EAF4E3",
-"/+ c #78A274",
-"(+ c #478C2D",
-"_+ c #6F9C6C",
-":+ c #E3F1DB",
-"<+ c #0E4A1E",
-"[+ c #6D9B69",
-"}+ c #7DA578",
-"|+ c #DCEDD1",
-"1+ c #639260",
-"2+ c #7FBD57",
-"3+ c #61AA35",
-"4+ c #88AE84",
-"5+ c #D5E9C8",
-"6+ c #598B57",
-"7+ c #8CC468",
-"8+ c #97B792",
-"9+ c #CEE6BF",
-"0+ c #1A5821",
-"a+ c #9ACB7A",
-"b+ c #5AA132",
-"c+ c #C8E2B6",
-"d+ c #1E5D23",
-"e+ c #477D46",
-"f+ c #5FA834",
-"g+ c #90B38B",
-"h+ c #1E5C22",
-"i+ c #487D47",
-"j+ c #A9D28D",
-"k+ c #7AA476",
-"l+ c #D1E7C3",
-"m+ c #51844E",
-"n+ c #9ECD7F",
-"o+ c #679563",
-"p+ c #D7EBCB",
-"q+ c #175421",
-"r+ c #93C771",
-"s+ c #185621",
-"t+ c #558752",
-"u+ c #DEEED4",
-"v+ c #61915E",
-"w+ c #88C263",
-"x+ c #1F5E24",
-"y+ c #437B44",
-"z+ c #E5F1DC",
-"A+ c #0F4C1F",
-"B+ c #6A9867",
-"C+ c #276625",
-"D+ c #356E38",
-"E+ c #749F70",
-"F+ c #73B747",
-"G+ c #2D6E27",
-"H+ c #28642E",
-"I+ c #62AB34",
-"J+ c #68B139",
-"K+ c #1D5A26",
-"L+ c #5EA734",
-"M+ c #F7FBF4",
-"N+ c #145021",
-"O+ c #9EBD99",
-"P+ c #E7EFE5",
-"Q+ c #91C66F",
-"R+ c #DEE9DC",
-"S+ c #C2DFAF",
-"T+ c #B0D698",
-"U+ c #357829",
-"V+ c #195524",
-"W+ c #99CA79",
-"X+ c #578955",
-"Y+ c #D0E7C1",
-"Z+ c #37703A",
-"`+ c #71B645",
-" @ c #D1E7C2",
-".@ c #E0EFD7",
-"+@ c #478D2E",
-"@@ c #EBF5E5",
-"#@ c #4B902E",
-"$@ c #80BE59",
-"%@ c #579E32",
-"&@ c #ADC7A8",
-"*@ c #B8DAA1",
-"=@ c #F9FBF8",
-"-@ c #6EB440",
-";@ c #155321",
-">@ c #D6EAC9",
-",@ c #3D743E",
-"'@ c #C1DFB1",
-")@ c #538E44",
-"!@ c #437B42",
-"~@ c #CCDEC7",
-"{@ c #377A2A",
-"]@ c #195623",
-"^@ c #FCFDFB",
-"/@ c #94C873",
-"(@ c #4B922F",
-"_@ c #67B138",
-":@ c #62AB35",
-"<@ c #FBFDF9",
-"[@ c #5EA634",
-"}@ c #7EA77A",
-"|@ c #F0F7EB",
-"1@ c #8FC56D",
-"2@ c #3C7E2A",
-"3@ c #427941",
-"4@ c #97C977",
-"5@ c #6A9866",
-"6@ c #E7EEE5",
-"7@ c #E4ECE2",
-"8@ c #D9EBCD",
-"9@ c #EBF2EB",
-"0@ c #66AF36",
-"a@ c #236324",
-"b@ c #387139",
-"c@ c #BADBA4",
-"d@ c #1F5E23",
-"e@ c #4A8049",
-"f@ c #F2F8EE",
-"g@ c #83BF5C",
-"h@ c #2F6C31",
-"i@ c #C7DAC3",
-"j@ c #EDF6E7",
-"k@ c #9DCC7E",
-"l@ c #74B749",
-"m@ c #F2F7F2",
-"n@ c #E1F0D8",
-"o@ c #78B94E",
-"p@ c #AAC5A6",
-"q@ c #A5D189",
-"r@ c #6AB23C",
-"s@ c #62AD35",
-"t@ c #266725",
-"u@ c #FDFEFC",
-"v@ c #6C9A68",
-"w@ c #29642E",
-"x@ c #CEE6BE",
-"y@ c #62AC35",
-"z@ c #AFD595",
-"A@ c #77A172",
-"B@ c #D5E8CD",
-"C@ c #B6D9A1",
-"D@ c #25602B",
-"E@ c #FAFCFA",
-"F@ c #185521",
-"G@ c #5B8C59",
-"H@ c #A2C19E",
-"I@ c #155221",
-"J@ c #8CB284",
-"K@ c #3D812B",
-"L@ c #417F37",
-"M@ c #679A5C",
-"N@ c #97BF8A",
-"O@ c #C8E1B7",
-"P@ c #BBDCA5",
-"Q@ c #89C264",
-"R@ c #45892D",
-"S@ c #5BA433",
-"T@ c #519831",
-"U@ c #5CA433",
-"V@ c #5DA534",
-"W@ c #4B912F",
-" . . + @ # $ % & * = - ; ",
-" . . . . > , ' ) ) ) ) ) ) ) ) ) ) ! ~ { ] ^ ",
-" . . . . / ( ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) _ : < [ } ",
-" . . . . . | ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) 1 ( 2 3 4 ",
-" . . . . . 5 ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) 6 7 $ 8 9 ",
-" . . . . 0 a ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) 6 b c d e ",
-" . . . . . f ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) g h i j ",
-" . . . . . k ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) l m n o ",
-" . . . . . h ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) p q ",
-" . . . . r ! ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ' * s t u v w ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) x 3 y z A B C C C C D E F G H ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) c I J K C C C C C C C C C C C L M N ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) O P Q R C C C C C C C C C C C C C C S T ) ) ) ) ) ) ) ) U V V W X Y Z ` ) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) .. ..+.C C C C C C C C C C C C C C C C @.#.) ) ) ) ) ) ) { . $.%.C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) # P $.*.C C C C C C C C C C C C C C C C C C =.-.) ) ) ) ) ) V . ;.C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) >.,.. '.C C C C C C C C C ).!.~.C C C C C C C C {.].) ) ) ) ) ^.. /.C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) e . (._.C C C C C C C C :.<.e [.}.|.C C C C C C C 1.) ) ) ) 2.3.. 4.C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) 5.6.. 7.C C C C C C C C 8.9.) ) h 0.a.b.C C C C C C c.].) ) ) d.. . e.C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) $ . . f.C C C C C C C C g.) ) ) ) h.. i.C C C C C C C j.) ) ) k.. l.C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) m.. n.C C C C C C C C o.) ) ) ) ) 7 . . p.C C C C C C q.) ) ) r.. s.C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) 0 . t.C C C C C C C C u.) ) ) ) ) ) v.. w.C C C C C C x.y.z.A.B.C.D.C C C C C E.F.G.H.` ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) I.. . J.C C C C C C C C K.) ) ) ) ) ) L.. M.C C C C C C C N.. O.C C C C C C C C C C C C C P.) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) 3 . . Q.C C C C C C C C R.) ) ) ) ) ) O . J S.C C C C C C T.. O.C C C C C C C C C C C C C U.) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) O . V.C C C C C C C C W.X.) ) ) ) ) ) # . . Y.C C C C C C Z.. O.C C C C C C C C C C C C C U.) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) `.. +C C C C C C C C .+) ) ) ) ) ) ) ++. . @+C C C C C C #+. O.C C C C C C C C C C C C C U.) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) $+. %+C C C C C C C C &+) ) ) ) ) ) ) ' . . *+C C C C C C =+{ -+;+>+C C C C C C ,+'+)+!+~+{+) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) + . ]+C C C C C C C C ^+) ) ) ) ) ) ) 1 . . /+C C C C C C S.].(+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) z.. _+C C C C C C C C :+) ) ) ) ) ) ) ) <+. [+C C C C C C C -.(+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) 2.. . }+C C C C C C C C |+) ) ) ) ) ) ) ) [.. 1+C C C C C C C 2+(+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) 3+. . 4+C C C C C C C C 5+) ) ) ) ) ) ) ) 6.. 6+C C C C C C C 7+(+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) g . . 8+C C C C C C C C 9+) ) ) ) ) ) ) ) 0+. /.C C C C C C C a+(+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) b+. . |.C C C C C C C C c+) ) ) ) ) ) ) ) d+. e+C C C C C C C M (+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) f+. . g+C C C C C C C C &.) ) ) ) ) ) ) ) h+. i+C C C C C C C j+(+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) 5.0.. k+C C C C C C C C l+) ) ) ) ) ) ) ) 0+. m+C C C C C C C n+(+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) [.. o+C C C C C C C C p+) ) ) ) ) ) ) ) q+. 7.C C C C C C C r+(+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) s+. t+C C C C C C C C u+) ) ) ) ) ) ) ) / . v+C C C C C C C w+(+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) x+. y+C C C C C C C C z+) ) ) ) ) ) ) ) A+. B+C C C C C C C Z (+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) C+. D+C C C C C C C C o.) ) ) ) ) ) ) >.. . E+C C C C C C C F+(+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) G+. H+C C C C C C C C &+) ) ) ) ) ) ) I+. . K C C C C C C C J+(+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) m.. K+C C C C C C C C .+) ) ) ) ) ) ) L+. . 4+C C C C C C M+) (+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) O . N+C C C C C C C C C F+) ) ) ) ) ) : . . O+C C C C C C c.) (+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) (+. 0.P+C C C C C C C C Q+) ) ) ) ) ) (+. . R+C C C C C C S+) (+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) g . . p.C C C C C C C C T+) ) ) ) ) ) U+. V+C C C C C C C W+) (+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) 0 . X+C C C C C C C C Y+) ) ) ) ) ) ^.. Z+C C C C C C D `+) (+. / C C C C C C @) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) G+. H+C C C C C C C C @.) ) ) ) ) ) / . ]+C C C C C C .@) ) +@. / C C C C C C @@) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) #@. $.D.C C C C C C C C $@) ) ) ) %@. . &@C C C C C C *@) ) = . $.=@C C C C C W.-@) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) 5.;@. v+C C C C C C C C >@) ) ) ) L.. ,@C C C C C C C Y ) ) ~ . . R C C C C C C '@)@!@/+~@) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) {@. ]@^@C C C C C C C C /@) ) (@. / _.C C C C C C 8._@) ) :@. . &@C C C C C C C C C C <@) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) [@[.. }@C C C C C C C C |@1@2@(.3@*.C C C C C C C 4@) ) ) ) ,.. 5@C C C C C C C C C C x.) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) } . / e.C C C C C C C C C 6@7@C C C C C C C C 8@) ) ) ) ) 8 . N+9@C C C C C C C C C <@) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) 0@a@. b@S.C C C C C C C C C C C C C C C C C L F+) ) ) ) ) 0@y . '.=@C C C C C C C z+c@) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) 3+d@. e@C C C C C C C C C C C C C C C C f@g@) ) ) ) ) ) ) ) j ^.h@g+i@=@j@P.k@l@) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) 3+a@. %+m@C C C C C C C C C C C C C n@o@) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) 0@9 [.K+p@C C C C C C C C C C o.q@r@) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) s@[ t@;.A P+C C C C C C u@-@) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) 1 [.. v@C C C C C C C r+) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) `.. w@C C C C C C C x@) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) y@ ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) [ . P _.C C C C C C C z@F+) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ~ ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) :@z.. A@C C C C C C C C D B@C@) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) < ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) f . D@E@C C C C C C C C C 8@) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) - ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) 3+F@. G@C C C C C C C C C 8@) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) y@ ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) m <+P H@C C C C C C C C 8@) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) n ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) # $+I@J@^@C C C C C C 8@) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ' ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) 0@= K@L@M@N@O@U.P@M Q@) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) 3+ ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) L+ ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) 6 ~ o ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) 6 b c i R@ ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) 6 S@T@i o ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) U@h i o ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) g h i o ",
-" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) V@h i o ",
-" . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) V@m n o ",
-" . . / ) ) ) ) ) ) ) ) ) ) ) ) l m n o ",
-" . / ) ) ) ) ) ) L+m W@o ",
-" v.L+m W@R@ "};
-
-/* XPM */
-static const char * brick_xpm[] = {
-"32 16 338 2",
-" c #ECDAA8",
-". c #EEDDA8",
-"+ c #F0E0A8",
-"@ c #F0E2A8",
-"# c #F2E3A8",
-"$ c #F2E4A8",
-"% c #F1E3A8",
-"& c #F1E2A8",
-"* c #EEDEA8",
-"= c #EEDBA8",
-"- c #EBD9A8",
-"; c #EAD6A8",
-"> c #E9D4A8",
-", c #E7D1A8",
-"' c #E6CDA8",
-") c #E6CFA8",
-"! c #E7D0A8",
-"~ c #E8D2A8",
-"{ c #E6CEA8",
-"] c #E4CCA8",
-"^ c #E3CAA8",
-"/ c #E2C7A8",
-"( c #E1C6A8",
-"_ c #E1C5A8",
-": c #E4CBA8",
-"< c #EBD7A8",
-"[ c #EFDFA8",
-"} c #473600",
-"| c #ECDBA8",
-"1 c #E7D083",
-"2 c #EBD783",
-"3 c #EDD983",
-"4 c #EEDC83",
-"5 c #F0DF83",
-"6 c #F1E283",
-"7 c #EDDA83",
-"8 c #EBD683",
-"9 c #E5CC83",
-"0 c #E4C983",
-"a c #E2C683",
-"b c #E0C183",
-"c c #DDBD83",
-"d c #DEBE83",
-"e c #E0C283",
-"f c #DFBF83",
-"g c #DCBC83",
-"h c #D9B683",
-"i c #D7B283",
-"j c #D5AF83",
-"k c #D6AF83",
-"l c #D7B383",
-"m c #654D00",
-"n c #463400",
-"o c #E9D283",
-"p c #E4C84D",
-"q c #E8CD4D",
-"r c #EAD24D",
-"s c #EDD84D",
-"t c #F1DF4D",
-"u c #F0DC4D",
-"v c #EBD34D",
-"w c #DFBE4D",
-"x c #DAB64D",
-"y c #D9B44D",
-"z c #D8B24D",
-"A c #D4AC4D",
-"B c #D1A44D",
-"C c #CFA14D",
-"D c #D1A54D",
-"E c #D2A64D",
-"F c #CA984D",
-"G c #C6924D",
-"H c #C6904D",
-"I c #C48F4D",
-"J c #C6914D",
-"K c #C9964D",
-"L c #D7AF4D",
-"M c #8D6900",
-"N c #634B00",
-"O c #EBD583",
-"P c #E5CA4D",
-"Q c #E2C000",
-"R c #E4C400",
-"S c #EBD100",
-"T c #EFD800",
-"U c #EDD400",
-"V c #E6C800",
-"W c #DCB600",
-"X c #D4A800",
-"Y c #CB9700",
-"Z c #C48B00",
-"` c #C38800",
-" . c #C28700",
-".. c #BC7C00",
-"+. c #B87500",
-"@. c #B97700",
-"#. c #B77300",
-"$. c #B46E00",
-"%. c #AF6300",
-"&. c #AB5E00",
-"*. c #AD6000",
-"=. c #AA5B00",
-"-. c #A95A00",
-";. c #AC5E00",
-">. c #B36C00",
-",. c #BB7900",
-"'. c #C08400",
-"). c #8A6400",
-"!. c #634900",
-"~. c #ECD883",
-"{. c #E8CE4D",
-"]. c #E3C300",
-"^. c #E8CC00",
-"/. c #F1DD00",
-"(. c #EDD500",
-"_. c #E5C600",
-":. c #D4A700",
-"<. c #CA9500",
-"[. c #C08200",
-"}. c #BD7E00",
-"|. c #BC7B00",
-"1. c #B67200",
-"2. c #B36B00",
-"3. c #B26A00",
-"4. c #B06600",
-"5. c #AB5F00",
-"6. c #A65500",
-"7. c #A45000",
-"8. c #A65400",
-"9. c #B06500",
-"0. c #B57000",
-"a. c #BA7800",
-"b. c #886000",
-"c. c #624800",
-"d. c #E9D14D",
-"e. c #E4C500",
-"f. c #EBD200",
-"g. c #F1DC00",
-"h. c #F0DB00",
-"i. c #ECD400",
-"j. c #E2C200",
-"k. c #D6AC00",
-"l. c #C48A00",
-"m. c #BF8200",
-"n. c #B77400",
-"o. c #B36A00",
-"p. c #AF6500",
-"q. c #AD6100",
-"r. c #AC5F00",
-"s. c #AF6400",
-"t. c #AB5C00",
-"u. c #A14A00",
-"v. c #A04900",
-"w. c #A45100",
-"x. c #AD5F00",
-"y. c #B56F00",
-"z. c #835500",
-"A. c #5E4000",
-"B. c #432F00",
-"C. c #F4E7A8",
-"D. c #F0E083",
-"E. c #EAD34D",
-"F. c #E5C700",
-"G. c #ECD300",
-"H. c #EFD900",
-"I. c #DAB300",
-"J. c #CD9C00",
-"K. c #BE8000",
-"L. c #A95800",
-"M. c #A85800",
-"N. c #A75500",
-"O. c #AA5C00",
-"P. c #A75600",
-"Q. c #A24C00",
-"R. c #A55200",
-"S. c #AB5D00",
-"T. c #B06700",
-"U. c #7E4D00",
-"V. c #593800",
-"W. c #3F2800",
-"X. c #F5E8A8",
-"Y. c #EBD74D",
-"Z. c #E9CF00",
-"`. c #E0BD00",
-" + c #D7AE00",
-".+ c #CE9D00",
-"++ c #C89200",
-"@+ c #C58C00",
-"#+ c #BF8100",
-"$+ c #A24D00",
-"%+ c #A85700",
-"&+ c #A95900",
-"*+ c #B26900",
-"=+ c #7D4B00",
-"-+ c #583500",
-";+ c #3D2600",
-">+ c #F3E6A8",
-",+ c #EED94D",
-"'+ c #E9CE00",
-")+ c #E5C500",
-"!+ c #DBB500",
-"~+ c #D1A100",
-"{+ c #C79000",
-"]+ c #C18400",
-"^+ c #C08300",
-"/+ c #B97500",
-"(+ c #A04800",
-"_+ c #9D4300",
-":+ c #9F4700",
-"<+ c #A34F00",
-"[+ c #A65300",
-"}+ c #A44F00",
-"|+ c #AC6000",
-"1+ c #AE6200",
-"2+ c #B16700",
-"3+ c #7C4A00",
-"4+ c #583600",
-"5+ c #3D2500",
-"6+ c #EFDC4D",
-"7+ c #D8AF00",
-"8+ c #CF9F00",
-"9+ c #C58D00",
-"0+ c #BA7900",
-"a+ c #B67100",
-"b+ c #9C4100",
-"c+ c #9C4200",
-"d+ c #9E4500",
-"e+ c #A14B00",
-"f+ c #9F4800",
-"g+ c #AE6400",
-"h+ c #B46C00",
-"i+ c #7D4C00",
-"j+ c #F2E283",
-"k+ c #E5C800",
-"l+ c #E7CA00",
-"m+ c #DEB900",
-"n+ c #D6AA00",
-"o+ c #D1A200",
-"p+ c #C79100",
-"q+ c #BB7C00",
-"r+ c #B46F00",
-"s+ c #B16900",
-"t+ c #A34D00",
-"u+ c #A04700",
-"v+ c #9B4000",
-"w+ c #9F4500",
-"x+ c #9E4400",
-"y+ c #A24E00",
-"z+ c #7F5000",
-"A+ c #5A3900",
-"B+ c #3E2800",
-"C+ c #F2E5A8",
-"D+ c #EFDD83",
-"E+ c #E7CD4D",
-"F+ c #DDB800",
-"G+ c #DBB400",
-"H+ c #D2A300",
-"I+ c #C99400",
-"J+ c #9E4600",
-"K+ c #9B4100",
-"L+ c #993C00",
-"M+ c #9F4600",
-"N+ c #9A3F00",
-"O+ c #5B3C00",
-"P+ c #412D00",
-"Q+ c #F0E1A8",
-"R+ c #EAD483",
-"S+ c #DDBC4D",
-"T+ c #CF9E00",
-"U+ c #D5AB00",
-"V+ c #CE9C00",
-"W+ c #C99200",
-"X+ c #C28600",
-"Y+ c #B97600",
-"Z+ c #9B3F00",
-"`+ c #B16800",
-" @ c #805100",
-".@ c #5D3F00",
-"+@ c #443100",
-"@@ c #8C6500",
-"#@ c #8A6300",
-"$@ c #917000",
-"%@ c #927200",
-"&@ c #906E00",
-"*@ c #906F00",
-"=@ c #8E6900",
-"-@ c #885E00",
-";@ c #825400",
-">@ c #7B4800",
-",@ c #753B00",
-"'@ c #713400",
-")@ c #6F3200",
-"!@ c #703400",
-"~@ c #713600",
-"{@ c #703300",
-"]@ c #6F3100",
-"^@ c #723600",
-"/@ c #753E00",
-"(@ c #784200",
-"_@ c #794500",
-":@ c #835700",
-"<@ c #5F4200",
-"[@ c #443200",
-"}@ c #604400",
-"|@ c #5F4300",
-"1@ c #624900",
-"2@ c #634A00",
-"3@ c #654C00",
-"4@ c #5B3D00",
-"5@ c #573400",
-"6@ c #532D00",
-"7@ c #512800",
-"8@ c #4E2400",
-"9@ c #502700",
-"0@ c #502800",
-"a@ c #502600",
-"b@ c #522A00",
-"c@ c #542F00",
-"d@ c #553100",
-"e@ c #573300",
-"f@ c #593900",
-"g@ c #5B3B00",
-"h@ c #5C3D00",
-"i@ c #5E4200",
-"j@ c #604500",
-"k@ c #433100",
-"l@ c #422D00",
-"m@ c #422F00",
-"n@ c #3E2700",
-"o@ c #3D2400",
-"p@ c #3B2300",
-"q@ c #391F00",
-"r@ c #391D00",
-"s@ c #391E00",
-"t@ c #381C00",
-"u@ c #381B00",
-"v@ c #402B00",
-"w@ c #453400",
-" . + @ # $ % & + * = - ; > , ' ) ! ~ ! { ] ^ / ( _ : ~ < = [ } ",
-"| 1 2 3 4 5 6 5 7 8 1 9 0 a b c d e e f g h i j k k l g 0 1 m n ",
-"* o p q r s t u v p w x y z A B C D E C F G H I I J K C L M N } ",
-"@ O P Q R S T U V W X Y Z ` ...+.@.#.$.%.&.*.=.-.;.>.,.'.).!.} ",
-"% ~.{.].^.T /.(._.W :.<.[.}.|.1.2.2.$.3.4.5.=.6.7.8.9.0.a.b.c.n ",
-"$ 4 d.e.f.g.h.i.j.k.Y l.m.n.o.p.q.r.s.4.&.t.6.u.v.w.x.>.y.z.A.B.",
-"C.D.E.F.G.H.f.e.I.J.l.m.K.>.L.M.N.w.O.&.8.P.P.Q.v.R.S.T.2.U.V.W.",
-"X.6 Y.V Z.^.`. +.+++@+#+K.2.R.Q.Q.$+M.M.$+7.%+P.N.M.&+*.*+=+-+;+",
-">+6 ,+'+Z.)+!+~+{+]+^+}./+*+P.(+_+:+<+[+Q.}+-.|+*.1+3.3.2+3+4+5+",
-"$ 6 6+S '+Q 7+8+9+0+0.a+>.1+%+u.b+c+d+e+f+Q.M.g+2+h+@.+.2.i+V.;+",
-">+j+s k+l+m+n+o+p+q+r+s+*.6.t+u+c+v+_+w+x+_+y+1+*+>.h+2.*+z+A+B+",
-"C+D+E+I.F+G+ +H+I+m.1.4.8.v.u+J+K+L+_+M+N+L+M+L.9.s.1+s.2+z+O+P+",
-"Q+R+S+T+U+ +X V+W+X+Y+4.[+:+J+u.:+N+_+_+Z+d+$+N.S.S.g+2+`+ @.@+@",
-"* 1 @@#@$@%@&@*@=@-@;@>@,@'@)@!@~@{@]@)@!@^@/@(@_@>@=+z+z+:@<@[@",
-"| c.}@|@1@2@2@3@c.4@V.5@6@7@8@9@0@a@8@8@b@c@d@e@5@f@g@g@h@i@j@k@",
-"l@m@B.B.B.[@[@[@P+n@;+o@p@q@r@s@s@t@u@t@s@o@n@n@B+v@l@B.B.[@w@[@"};
+/* XPM */
+static const char * qt_logo_xpm[] = {
+"69 80 364 2",
+" c None",
+". c #0C481E",
+"+ c #135020",
+"@ c #3F832C",
+"# c #4D932F",
+"$ c #509730",
+"% c #559C31",
+"& c #5AA233",
+"* c #569E32",
+"= c #4D942F",
+"- c #468B2E",
+"; c #41852C",
+"> c #0E4B1F",
+", c #347629",
+"' c #60A934",
+") c #66B036",
+"! c #63AC35",
+"~ c #579F32",
+"{ c #4E9430",
+"] c #478C2E",
+"^ c #41862C",
+"/ c #124F20",
+"( c #59A133",
+"_ c #64AD35",
+": c #58A032",
+"< c #4F9530",
+"[ c #488D2E",
+"} c #42862C",
+"| c #4A8F2E",
+"1 c #64AE36",
+"2 c #509630",
+"3 c #488E2E",
+"4 c #42872C",
+"5 c #317328",
+"6 c #65AF36",
+"7 c #5AA333",
+"8 c #498E2E",
+"9 c #43872D",
+"0 c #175521",
+"a c #63AD35",
+"b c #5BA333",
+"c c #519830",
+"d c #498F2E",
+"e c #43882D",
+"f c #2E6F27",
+"g c #5CA533",
+"h c #529931",
+"i c #4A902F",
+"j c #44882D",
+"k c #40842C",
+"l c #5DA634",
+"m c #539A31",
+"n c #4B902F",
+"o c #44892D",
+"p c #5FA734",
+"q c #549B31",
+"r c #0D491E",
+"s c #589E37",
+"t c #70B04C",
+"u c #83BE5D",
+"v c #7CBB53",
+"w c #6DB43F",
+"x c #63AD36",
+"y c #286926",
+"z c #26622B",
+"A c #699665",
+"B c #D0E0CF",
+"C c #FFFFFF",
+"D c #FEFEFD",
+"E c #E5F2DD",
+"F c #C4E1B2",
+"G c #9DCD7F",
+"H c #69B23A",
+"I c #185722",
+"J c #114E20",
+"K c #7FA67A",
+"L c #EEF6E8",
+"M c #A7D18B",
+"N c #6BB23C",
+"O c #3A7D2B",
+"P c #0D481E",
+"Q c #1E5A26",
+"R c #D4E2D1",
+"S c #E0EFD6",
+"T c #76B84A",
+"U c #63AB35",
+"V c #397C2A",
+"W c #8DBE74",
+"X c #9ECD80",
+"Y c #8EC56B",
+"Z c #7DBC55",
+"` c #6DB33F",
+" . c #3F842C",
+".. c #175323",
+"+. c #D2E1D0",
+"@. c #EFF7EA",
+"#. c #83BF5D",
+"$. c #0D491F",
+"%. c #EAF1E9",
+"&. c #CBE4BA",
+"*. c #B9D1B6",
+"=. c #EFF7EB",
+"-. c #72B646",
+";. c #235F2A",
+">. c #65B036",
+",. c #1C5A22",
+"'. c #487E48",
+"). c #F8FAF9",
+"!. c #ADC6AB",
+"~. c #B7CFB4",
+"{. c #D3E8C5",
+"]. c #67B037",
+"^. c #246324",
+"/. c #4F844E",
+"(. c #104D20",
+"_. c #DBE8D9",
+":. c #CCE5BC",
+"<. c #7BBB52",
+"[. c #114E1F",
+"}. c #2A662F",
+"|. c #A2C09D",
+"1. c #A1CE83",
+"2. c #64AE35",
+"3. c #0F4D1F",
+"4. c #8DB289",
+"5. c #65AF35",
+"6. c #165321",
+"7. c #588A56",
+"8. c #E6F2DE",
+"9. c #6CB33E",
+"0. c #0C491E",
+"a. c #104B1F",
+"b. c #CCDDC8",
+"c. c #E8F3E0",
+"d. c #539B31",
+"e. c #DCE8DB",
+"f. c #BCD3B8",
+"g. c #81BE59",
+"h. c #2C6D26",
+"i. c #2E6932",
+"j. c #95C873",
+"k. c #3E832B",
+"l. c #1C5926",
+"m. c #347529",
+"n. c #1B5825",
+"o. c #EBF4E4",
+"p. c #98B993",
+"q. c #D4E9C7",
+"r. c #296A26",
+"s. c #457B44",
+"t. c #558853",
+"u. c #C9E3B8",
+"v. c #155220",
+"w. c #568A54",
+"x. c #FAFDF9",
+"y. c #2D6A2D",
+"z. c #0F4B1E",
+"A. c #53864F",
+"B. c #D9E6D7",
+"C. c #BCD2B9",
+"D. c #D5E3D2",
+"E. c #DAECCF",
+"F. c #8DC469",
+"G. c #82BF5B",
+"H. c #77B94D",
+"I. c #589F33",
+"J. c #A6C3A1",
+"K. c #A7D28C",
+"L. c #276826",
+"M. c #2D6831",
+"N. c #659363",
+"O. c #51854F",
+"P. c #C5E1B3",
+"Q. c #E3EBE0",
+"R. c #86C161",
+"S. c #FDFEFD",
+"T. c #A8C5A1",
+"U. c #C6E2B4",
+"V. c #145122",
+"W. c #FEFFFE",
+"X. c #6AB23B",
+"Y. c #C5D8C1",
+"Z. c #CFE2C8",
+"`. c #2C6C27",
+" + c #2B6530",
+".+ c #F8FBF6",
+"++ c #5BA334",
+"@+ c #91B48C",
+"#+ c #E2EFDA",
+"$+ c #1D5B22",
+"%+ c #497F49",
+"&+ c #F1F8ED",
+"*+ c #82AA7F",
+"=+ c #F1F8EC",
+"-+ c #458536",
+";+ c #2F6A33",
+">+ c #417841",
+",+ c #E7F0E2",
+"'+ c #BDD8B3",
+")+ c #C3DAB9",
+"!+ c #CBDFC4",
+"~+ c #DBE9D3",
+"{+ c #B7D9A1",
+"]+ c #649360",
+"^+ c #EAF4E3",
+"/+ c #78A274",
+"(+ c #478C2D",
+"_+ c #6F9C6C",
+":+ c #E3F1DB",
+"<+ c #0E4A1E",
+"[+ c #6D9B69",
+"}+ c #7DA578",
+"|+ c #DCEDD1",
+"1+ c #639260",
+"2+ c #7FBD57",
+"3+ c #61AA35",
+"4+ c #88AE84",
+"5+ c #D5E9C8",
+"6+ c #598B57",
+"7+ c #8CC468",
+"8+ c #97B792",
+"9+ c #CEE6BF",
+"0+ c #1A5821",
+"a+ c #9ACB7A",
+"b+ c #5AA132",
+"c+ c #C8E2B6",
+"d+ c #1E5D23",
+"e+ c #477D46",
+"f+ c #5FA834",
+"g+ c #90B38B",
+"h+ c #1E5C22",
+"i+ c #487D47",
+"j+ c #A9D28D",
+"k+ c #7AA476",
+"l+ c #D1E7C3",
+"m+ c #51844E",
+"n+ c #9ECD7F",
+"o+ c #679563",
+"p+ c #D7EBCB",
+"q+ c #175421",
+"r+ c #93C771",
+"s+ c #185621",
+"t+ c #558752",
+"u+ c #DEEED4",
+"v+ c #61915E",
+"w+ c #88C263",
+"x+ c #1F5E24",
+"y+ c #437B44",
+"z+ c #E5F1DC",
+"A+ c #0F4C1F",
+"B+ c #6A9867",
+"C+ c #276625",
+"D+ c #356E38",
+"E+ c #749F70",
+"F+ c #73B747",
+"G+ c #2D6E27",
+"H+ c #28642E",
+"I+ c #62AB34",
+"J+ c #68B139",
+"K+ c #1D5A26",
+"L+ c #5EA734",
+"M+ c #F7FBF4",
+"N+ c #145021",
+"O+ c #9EBD99",
+"P+ c #E7EFE5",
+"Q+ c #91C66F",
+"R+ c #DEE9DC",
+"S+ c #C2DFAF",
+"T+ c #B0D698",
+"U+ c #357829",
+"V+ c #195524",
+"W+ c #99CA79",
+"X+ c #578955",
+"Y+ c #D0E7C1",
+"Z+ c #37703A",
+"`+ c #71B645",
+" @ c #D1E7C2",
+".@ c #E0EFD7",
+"+@ c #478D2E",
+"@@ c #EBF5E5",
+"#@ c #4B902E",
+"$@ c #80BE59",
+"%@ c #579E32",
+"&@ c #ADC7A8",
+"*@ c #B8DAA1",
+"=@ c #F9FBF8",
+"-@ c #6EB440",
+";@ c #155321",
+">@ c #D6EAC9",
+",@ c #3D743E",
+"'@ c #C1DFB1",
+")@ c #538E44",
+"!@ c #437B42",
+"~@ c #CCDEC7",
+"{@ c #377A2A",
+"]@ c #195623",
+"^@ c #FCFDFB",
+"/@ c #94C873",
+"(@ c #4B922F",
+"_@ c #67B138",
+":@ c #62AB35",
+"<@ c #FBFDF9",
+"[@ c #5EA634",
+"}@ c #7EA77A",
+"|@ c #F0F7EB",
+"1@ c #8FC56D",
+"2@ c #3C7E2A",
+"3@ c #427941",
+"4@ c #97C977",
+"5@ c #6A9866",
+"6@ c #E7EEE5",
+"7@ c #E4ECE2",
+"8@ c #D9EBCD",
+"9@ c #EBF2EB",
+"0@ c #66AF36",
+"a@ c #236324",
+"b@ c #387139",
+"c@ c #BADBA4",
+"d@ c #1F5E23",
+"e@ c #4A8049",
+"f@ c #F2F8EE",
+"g@ c #83BF5C",
+"h@ c #2F6C31",
+"i@ c #C7DAC3",
+"j@ c #EDF6E7",
+"k@ c #9DCC7E",
+"l@ c #74B749",
+"m@ c #F2F7F2",
+"n@ c #E1F0D8",
+"o@ c #78B94E",
+"p@ c #AAC5A6",
+"q@ c #A5D189",
+"r@ c #6AB23C",
+"s@ c #62AD35",
+"t@ c #266725",
+"u@ c #FDFEFC",
+"v@ c #6C9A68",
+"w@ c #29642E",
+"x@ c #CEE6BE",
+"y@ c #62AC35",
+"z@ c #AFD595",
+"A@ c #77A172",
+"B@ c #D5E8CD",
+"C@ c #B6D9A1",
+"D@ c #25602B",
+"E@ c #FAFCFA",
+"F@ c #185521",
+"G@ c #5B8C59",
+"H@ c #A2C19E",
+"I@ c #155221",
+"J@ c #8CB284",
+"K@ c #3D812B",
+"L@ c #417F37",
+"M@ c #679A5C",
+"N@ c #97BF8A",
+"O@ c #C8E1B7",
+"P@ c #BBDCA5",
+"Q@ c #89C264",
+"R@ c #45892D",
+"S@ c #5BA433",
+"T@ c #519831",
+"U@ c #5CA433",
+"V@ c #5DA534",
+"W@ c #4B912F",
+" . . + @ # $ % & * = - ; ",
+" . . . . > , ' ) ) ) ) ) ) ) ) ) ) ! ~ { ] ^ ",
+" . . . . / ( ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) _ : < [ } ",
+" . . . . . | ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) 1 ( 2 3 4 ",
+" . . . . . 5 ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) 6 7 $ 8 9 ",
+" . . . . 0 a ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) 6 b c d e ",
+" . . . . . f ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) g h i j ",
+" . . . . . k ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) l m n o ",
+" . . . . . h ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) p q ",
+" . . . . r ! ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ' * s t u v w ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) x 3 y z A B C C C C D E F G H ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) c I J K C C C C C C C C C C C L M N ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) O P Q R C C C C C C C C C C C C C C S T ) ) ) ) ) ) ) ) U V V W X Y Z ` ) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) .. ..+.C C C C C C C C C C C C C C C C @.#.) ) ) ) ) ) ) { . $.%.C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) # P $.*.C C C C C C C C C C C C C C C C C C =.-.) ) ) ) ) ) V . ;.C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) >.,.. '.C C C C C C C C C ).!.~.C C C C C C C C {.].) ) ) ) ) ^.. /.C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) e . (._.C C C C C C C C :.<.e [.}.|.C C C C C C C 1.) ) ) ) 2.3.. 4.C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) 5.6.. 7.C C C C C C C C 8.9.) ) h 0.a.b.C C C C C C c.].) ) ) d.. . e.C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) $ . . f.C C C C C C C C g.) ) ) ) h.. i.C C C C C C C j.) ) ) k.. l.C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) m.. n.C C C C C C C C o.) ) ) ) ) 7 . . p.C C C C C C q.) ) ) r.. s.C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) 0 . t.C C C C C C C C u.) ) ) ) ) ) v.. w.C C C C C C x.y.z.A.B.C.D.C C C C C E.F.G.H.` ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) I.. . J.C C C C C C C C K.) ) ) ) ) ) L.. M.C C C C C C C N.. O.C C C C C C C C C C C C C P.) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) 3 . . Q.C C C C C C C C R.) ) ) ) ) ) O . J S.C C C C C C T.. O.C C C C C C C C C C C C C U.) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) O . V.C C C C C C C C W.X.) ) ) ) ) ) # . . Y.C C C C C C Z.. O.C C C C C C C C C C C C C U.) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) `.. +C C C C C C C C .+) ) ) ) ) ) ) ++. . @+C C C C C C #+. O.C C C C C C C C C C C C C U.) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) $+. %+C C C C C C C C &+) ) ) ) ) ) ) ' . . *+C C C C C C =+{ -+;+>+C C C C C C ,+'+)+!+~+{+) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) + . ]+C C C C C C C C ^+) ) ) ) ) ) ) 1 . . /+C C C C C C S.].(+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) z.. _+C C C C C C C C :+) ) ) ) ) ) ) ) <+. [+C C C C C C C -.(+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) 2.. . }+C C C C C C C C |+) ) ) ) ) ) ) ) [.. 1+C C C C C C C 2+(+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) 3+. . 4+C C C C C C C C 5+) ) ) ) ) ) ) ) 6.. 6+C C C C C C C 7+(+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) g . . 8+C C C C C C C C 9+) ) ) ) ) ) ) ) 0+. /.C C C C C C C a+(+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) b+. . |.C C C C C C C C c+) ) ) ) ) ) ) ) d+. e+C C C C C C C M (+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) f+. . g+C C C C C C C C &.) ) ) ) ) ) ) ) h+. i+C C C C C C C j+(+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) 5.0.. k+C C C C C C C C l+) ) ) ) ) ) ) ) 0+. m+C C C C C C C n+(+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) [.. o+C C C C C C C C p+) ) ) ) ) ) ) ) q+. 7.C C C C C C C r+(+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) s+. t+C C C C C C C C u+) ) ) ) ) ) ) ) / . v+C C C C C C C w+(+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) x+. y+C C C C C C C C z+) ) ) ) ) ) ) ) A+. B+C C C C C C C Z (+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) C+. D+C C C C C C C C o.) ) ) ) ) ) ) >.. . E+C C C C C C C F+(+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) G+. H+C C C C C C C C &+) ) ) ) ) ) ) I+. . K C C C C C C C J+(+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) m.. K+C C C C C C C C .+) ) ) ) ) ) ) L+. . 4+C C C C C C M+) (+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) O . N+C C C C C C C C C F+) ) ) ) ) ) : . . O+C C C C C C c.) (+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) (+. 0.P+C C C C C C C C Q+) ) ) ) ) ) (+. . R+C C C C C C S+) (+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) g . . p.C C C C C C C C T+) ) ) ) ) ) U+. V+C C C C C C C W+) (+. / C C C C C C &.) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) 0 . X+C C C C C C C C Y+) ) ) ) ) ) ^.. Z+C C C C C C D `+) (+. / C C C C C C @) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) G+. H+C C C C C C C C @.) ) ) ) ) ) / . ]+C C C C C C .@) ) +@. / C C C C C C @@) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) #@. $.D.C C C C C C C C $@) ) ) ) %@. . &@C C C C C C *@) ) = . $.=@C C C C C W.-@) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) 5.;@. v+C C C C C C C C >@) ) ) ) L.. ,@C C C C C C C Y ) ) ~ . . R C C C C C C '@)@!@/+~@) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) {@. ]@^@C C C C C C C C /@) ) (@. / _.C C C C C C 8._@) ) :@. . &@C C C C C C C C C C <@) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) [@[.. }@C C C C C C C C |@1@2@(.3@*.C C C C C C C 4@) ) ) ) ,.. 5@C C C C C C C C C C x.) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) } . / e.C C C C C C C C C 6@7@C C C C C C C C 8@) ) ) ) ) 8 . N+9@C C C C C C C C C <@) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) 0@a@. b@S.C C C C C C C C C C C C C C C C C L F+) ) ) ) ) 0@y . '.=@C C C C C C C z+c@) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) 3+d@. e@C C C C C C C C C C C C C C C C f@g@) ) ) ) ) ) ) ) j ^.h@g+i@=@j@P.k@l@) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) 3+a@. %+m@C C C C C C C C C C C C C n@o@) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) 0@9 [.K+p@C C C C C C C C C C o.q@r@) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) s@[ t@;.A P+C C C C C C u@-@) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) 1 [.. v@C C C C C C C r+) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) `.. w@C C C C C C C x@) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) y@ ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) [ . P _.C C C C C C C z@F+) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ~ ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) :@z.. A@C C C C C C C C D B@C@) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) < ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) f . D@E@C C C C C C C C C 8@) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) - ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) 3+F@. G@C C C C C C C C C 8@) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) y@ ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) m <+P H@C C C C C C C C 8@) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) n ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) # $+I@J@^@C C C C C C 8@) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ' ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) 0@= K@L@M@N@O@U.P@M Q@) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) 3+ ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) L+ ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) 6 ~ o ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) 6 b c i R@ ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) 6 S@T@i o ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) U@h i o ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) g h i o ",
+" . . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) V@h i o ",
+" . . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) V@m n o ",
+" . . / ) ) ) ) ) ) ) ) ) ) ) ) l m n o ",
+" . / ) ) ) ) ) ) L+m W@o ",
+" v.L+m W@R@ "};
+
+/* XPM */
+static const char * brick_xpm[] = {
+"32 16 338 2",
+" c #ECDAA8",
+". c #EEDDA8",
+"+ c #F0E0A8",
+"@ c #F0E2A8",
+"# c #F2E3A8",
+"$ c #F2E4A8",
+"% c #F1E3A8",
+"& c #F1E2A8",
+"* c #EEDEA8",
+"= c #EEDBA8",
+"- c #EBD9A8",
+"; c #EAD6A8",
+"> c #E9D4A8",
+", c #E7D1A8",
+"' c #E6CDA8",
+") c #E6CFA8",
+"! c #E7D0A8",
+"~ c #E8D2A8",
+"{ c #E6CEA8",
+"] c #E4CCA8",
+"^ c #E3CAA8",
+"/ c #E2C7A8",
+"( c #E1C6A8",
+"_ c #E1C5A8",
+": c #E4CBA8",
+"< c #EBD7A8",
+"[ c #EFDFA8",
+"} c #473600",
+"| c #ECDBA8",
+"1 c #E7D083",
+"2 c #EBD783",
+"3 c #EDD983",
+"4 c #EEDC83",
+"5 c #F0DF83",
+"6 c #F1E283",
+"7 c #EDDA83",
+"8 c #EBD683",
+"9 c #E5CC83",
+"0 c #E4C983",
+"a c #E2C683",
+"b c #E0C183",
+"c c #DDBD83",
+"d c #DEBE83",
+"e c #E0C283",
+"f c #DFBF83",
+"g c #DCBC83",
+"h c #D9B683",
+"i c #D7B283",
+"j c #D5AF83",
+"k c #D6AF83",
+"l c #D7B383",
+"m c #654D00",
+"n c #463400",
+"o c #E9D283",
+"p c #E4C84D",
+"q c #E8CD4D",
+"r c #EAD24D",
+"s c #EDD84D",
+"t c #F1DF4D",
+"u c #F0DC4D",
+"v c #EBD34D",
+"w c #DFBE4D",
+"x c #DAB64D",
+"y c #D9B44D",
+"z c #D8B24D",
+"A c #D4AC4D",
+"B c #D1A44D",
+"C c #CFA14D",
+"D c #D1A54D",
+"E c #D2A64D",
+"F c #CA984D",
+"G c #C6924D",
+"H c #C6904D",
+"I c #C48F4D",
+"J c #C6914D",
+"K c #C9964D",
+"L c #D7AF4D",
+"M c #8D6900",
+"N c #634B00",
+"O c #EBD583",
+"P c #E5CA4D",
+"Q c #E2C000",
+"R c #E4C400",
+"S c #EBD100",
+"T c #EFD800",
+"U c #EDD400",
+"V c #E6C800",
+"W c #DCB600",
+"X c #D4A800",
+"Y c #CB9700",
+"Z c #C48B00",
+"` c #C38800",
+" . c #C28700",
+".. c #BC7C00",
+"+. c #B87500",
+"@. c #B97700",
+"#. c #B77300",
+"$. c #B46E00",
+"%. c #AF6300",
+"&. c #AB5E00",
+"*. c #AD6000",
+"=. c #AA5B00",
+"-. c #A95A00",
+";. c #AC5E00",
+">. c #B36C00",
+",. c #BB7900",
+"'. c #C08400",
+"). c #8A6400",
+"!. c #634900",
+"~. c #ECD883",
+"{. c #E8CE4D",
+"]. c #E3C300",
+"^. c #E8CC00",
+"/. c #F1DD00",
+"(. c #EDD500",
+"_. c #E5C600",
+":. c #D4A700",
+"<. c #CA9500",
+"[. c #C08200",
+"}. c #BD7E00",
+"|. c #BC7B00",
+"1. c #B67200",
+"2. c #B36B00",
+"3. c #B26A00",
+"4. c #B06600",
+"5. c #AB5F00",
+"6. c #A65500",
+"7. c #A45000",
+"8. c #A65400",
+"9. c #B06500",
+"0. c #B57000",
+"a. c #BA7800",
+"b. c #886000",
+"c. c #624800",
+"d. c #E9D14D",
+"e. c #E4C500",
+"f. c #EBD200",
+"g. c #F1DC00",
+"h. c #F0DB00",
+"i. c #ECD400",
+"j. c #E2C200",
+"k. c #D6AC00",
+"l. c #C48A00",
+"m. c #BF8200",
+"n. c #B77400",
+"o. c #B36A00",
+"p. c #AF6500",
+"q. c #AD6100",
+"r. c #AC5F00",
+"s. c #AF6400",
+"t. c #AB5C00",
+"u. c #A14A00",
+"v. c #A04900",
+"w. c #A45100",
+"x. c #AD5F00",
+"y. c #B56F00",
+"z. c #835500",
+"A. c #5E4000",
+"B. c #432F00",
+"C. c #F4E7A8",
+"D. c #F0E083",
+"E. c #EAD34D",
+"F. c #E5C700",
+"G. c #ECD300",
+"H. c #EFD900",
+"I. c #DAB300",
+"J. c #CD9C00",
+"K. c #BE8000",
+"L. c #A95800",
+"M. c #A85800",
+"N. c #A75500",
+"O. c #AA5C00",
+"P. c #A75600",
+"Q. c #A24C00",
+"R. c #A55200",
+"S. c #AB5D00",
+"T. c #B06700",
+"U. c #7E4D00",
+"V. c #593800",
+"W. c #3F2800",
+"X. c #F5E8A8",
+"Y. c #EBD74D",
+"Z. c #E9CF00",
+"`. c #E0BD00",
+" + c #D7AE00",
+".+ c #CE9D00",
+"++ c #C89200",
+"@+ c #C58C00",
+"#+ c #BF8100",
+"$+ c #A24D00",
+"%+ c #A85700",
+"&+ c #A95900",
+"*+ c #B26900",
+"=+ c #7D4B00",
+"-+ c #583500",
+";+ c #3D2600",
+">+ c #F3E6A8",
+",+ c #EED94D",
+"'+ c #E9CE00",
+")+ c #E5C500",
+"!+ c #DBB500",
+"~+ c #D1A100",
+"{+ c #C79000",
+"]+ c #C18400",
+"^+ c #C08300",
+"/+ c #B97500",
+"(+ c #A04800",
+"_+ c #9D4300",
+":+ c #9F4700",
+"<+ c #A34F00",
+"[+ c #A65300",
+"}+ c #A44F00",
+"|+ c #AC6000",
+"1+ c #AE6200",
+"2+ c #B16700",
+"3+ c #7C4A00",
+"4+ c #583600",
+"5+ c #3D2500",
+"6+ c #EFDC4D",
+"7+ c #D8AF00",
+"8+ c #CF9F00",
+"9+ c #C58D00",
+"0+ c #BA7900",
+"a+ c #B67100",
+"b+ c #9C4100",
+"c+ c #9C4200",
+"d+ c #9E4500",
+"e+ c #A14B00",
+"f+ c #9F4800",
+"g+ c #AE6400",
+"h+ c #B46C00",
+"i+ c #7D4C00",
+"j+ c #F2E283",
+"k+ c #E5C800",
+"l+ c #E7CA00",
+"m+ c #DEB900",
+"n+ c #D6AA00",
+"o+ c #D1A200",
+"p+ c #C79100",
+"q+ c #BB7C00",
+"r+ c #B46F00",
+"s+ c #B16900",
+"t+ c #A34D00",
+"u+ c #A04700",
+"v+ c #9B4000",
+"w+ c #9F4500",
+"x+ c #9E4400",
+"y+ c #A24E00",
+"z+ c #7F5000",
+"A+ c #5A3900",
+"B+ c #3E2800",
+"C+ c #F2E5A8",
+"D+ c #EFDD83",
+"E+ c #E7CD4D",
+"F+ c #DDB800",
+"G+ c #DBB400",
+"H+ c #D2A300",
+"I+ c #C99400",
+"J+ c #9E4600",
+"K+ c #9B4100",
+"L+ c #993C00",
+"M+ c #9F4600",
+"N+ c #9A3F00",
+"O+ c #5B3C00",
+"P+ c #412D00",
+"Q+ c #F0E1A8",
+"R+ c #EAD483",
+"S+ c #DDBC4D",
+"T+ c #CF9E00",
+"U+ c #D5AB00",
+"V+ c #CE9C00",
+"W+ c #C99200",
+"X+ c #C28600",
+"Y+ c #B97600",
+"Z+ c #9B3F00",
+"`+ c #B16800",
+" @ c #805100",
+".@ c #5D3F00",
+"+@ c #443100",
+"@@ c #8C6500",
+"#@ c #8A6300",
+"$@ c #917000",
+"%@ c #927200",
+"&@ c #906E00",
+"*@ c #906F00",
+"=@ c #8E6900",
+"-@ c #885E00",
+";@ c #825400",
+">@ c #7B4800",
+",@ c #753B00",
+"'@ c #713400",
+")@ c #6F3200",
+"!@ c #703400",
+"~@ c #713600",
+"{@ c #703300",
+"]@ c #6F3100",
+"^@ c #723600",
+"/@ c #753E00",
+"(@ c #784200",
+"_@ c #794500",
+":@ c #835700",
+"<@ c #5F4200",
+"[@ c #443200",
+"}@ c #604400",
+"|@ c #5F4300",
+"1@ c #624900",
+"2@ c #634A00",
+"3@ c #654C00",
+"4@ c #5B3D00",
+"5@ c #573400",
+"6@ c #532D00",
+"7@ c #512800",
+"8@ c #4E2400",
+"9@ c #502700",
+"0@ c #502800",
+"a@ c #502600",
+"b@ c #522A00",
+"c@ c #542F00",
+"d@ c #553100",
+"e@ c #573300",
+"f@ c #593900",
+"g@ c #5B3B00",
+"h@ c #5C3D00",
+"i@ c #5E4200",
+"j@ c #604500",
+"k@ c #433100",
+"l@ c #422D00",
+"m@ c #422F00",
+"n@ c #3E2700",
+"o@ c #3D2400",
+"p@ c #3B2300",
+"q@ c #391F00",
+"r@ c #391D00",
+"s@ c #391E00",
+"t@ c #381C00",
+"u@ c #381B00",
+"v@ c #402B00",
+"w@ c #453400",
+" . + @ # $ % & + * = - ; > , ' ) ! ~ ! { ] ^ / ( _ : ~ < = [ } ",
+"| 1 2 3 4 5 6 5 7 8 1 9 0 a b c d e e f g h i j k k l g 0 1 m n ",
+"* o p q r s t u v p w x y z A B C D E C F G H I I J K C L M N } ",
+"@ O P Q R S T U V W X Y Z ` ...+.@.#.$.%.&.*.=.-.;.>.,.'.).!.} ",
+"% ~.{.].^.T /.(._.W :.<.[.}.|.1.2.2.$.3.4.5.=.6.7.8.9.0.a.b.c.n ",
+"$ 4 d.e.f.g.h.i.j.k.Y l.m.n.o.p.q.r.s.4.&.t.6.u.v.w.x.>.y.z.A.B.",
+"C.D.E.F.G.H.f.e.I.J.l.m.K.>.L.M.N.w.O.&.8.P.P.Q.v.R.S.T.2.U.V.W.",
+"X.6 Y.V Z.^.`. +.+++@+#+K.2.R.Q.Q.$+M.M.$+7.%+P.N.M.&+*.*+=+-+;+",
+">+6 ,+'+Z.)+!+~+{+]+^+}./+*+P.(+_+:+<+[+Q.}+-.|+*.1+3.3.2+3+4+5+",
+"$ 6 6+S '+Q 7+8+9+0+0.a+>.1+%+u.b+c+d+e+f+Q.M.g+2+h+@.+.2.i+V.;+",
+">+j+s k+l+m+n+o+p+q+r+s+*.6.t+u+c+v+_+w+x+_+y+1+*+>.h+2.*+z+A+B+",
+"C+D+E+I.F+G+ +H+I+m.1.4.8.v.u+J+K+L+_+M+N+L+M+L.9.s.1+s.2+z+O+P+",
+"Q+R+S+T+U+ +X V+W+X+Y+4.[+:+J+u.:+N+_+_+Z+d+$+N.S.S.g+2+`+ @.@+@",
+"* 1 @@#@$@%@&@*@=@-@;@>@,@'@)@!@~@{@]@)@!@^@/@(@_@>@=+z+z+:@<@[@",
+"| c.}@|@1@2@2@3@c.4@V.5@6@7@8@9@0@a@8@8@b@c@d@e@5@f@g@g@h@i@j@k@",
+"l@m@B.B.B.[@[@[@P+n@;+o@p@q@r@s@s@t@u@t@s@o@n@n@B+v@l@B.B.[@w@[@"};
diff --git a/test/jkqtplot_test/QTeXEngine/example/renderarea.cpp b/examples/jkqtplot_test/QTeXEngine/example/renderarea.cpp
similarity index 96%
rename from test/jkqtplot_test/QTeXEngine/example/renderarea.cpp
rename to examples/jkqtplot_test/QTeXEngine/example/renderarea.cpp
index 4c4068ff10..9518250e13 100644
--- a/test/jkqtplot_test/QTeXEngine/example/renderarea.cpp
+++ b/examples/jkqtplot_test/QTeXEngine/example/renderarea.cpp
@@ -1,134 +1,134 @@
-#include
-#include "renderarea.h"
-#include "pixmaps.h"
-
-RenderArea::RenderArea(QWidget *parent)
- : QWidget(parent)
-{
- setBackgroundRole(QPalette::Base);
- setAutoFillBackground(true);
-
- setFixedWidth(600);
- setFixedHeight(500);
-}
-
-void RenderArea::draw(QPainter *painter)
-{
- static const QPoint points[4] = {
- QPoint(10, 80),
- QPoint(20, 10),
- QPoint(80, 30),
- QPoint(90, 70)
- };
-
- QRect rect(10, 20, 80, 60);
-
- QPainterPath path;
- path.moveTo(20, 80);
- path.lineTo(20, 30);
- path.cubicTo(80, 0, 50, 50, 80, 80);
-
- int startAngle = 20 * 16;
- int arcLength = 120 * 16;
-
- QLinearGradient linearGrad(QPointF(0, 0), QPointF(100, 100));
- linearGrad.setColorAt(0, Qt::black);
- linearGrad.setColorAt(1, Qt::red);
-
- QRadialGradient radialGrad(QPointF(50, 50), 50, QPointF(50, 50));
- radialGrad.setColorAt(0, Qt::red);
- radialGrad.setColorAt(1, Qt::green);
-
- /*QConicalGradient conGrad(QPointF(50, 50), 90);
- conGrad.setColorAt(0, Qt::blue);
- conGrad.setColorAt(0.5, Qt::red);
- conGrad.setColorAt(1, Qt::green);
- QBrush brush = QBrush(conGrad);*/
-
- QBrush brush = QBrush(Qt::gray);
- int brushStyle = Qt::NoBrush;
- int penStyle = Qt::NoPen;
- int shape = Rect;
- int drawnRects = 0;
- for (int x = 0; x < width(); x += 100){
- for (int y = 0; y < height(); y += 100){
- painter->save();
- painter->setRenderHint(QPainter::Antialiasing);
-
- shape = (shape + 1)%14;
-
- penStyle = (penStyle + 1)%4;
- if(!penStyle)
- penStyle = 1;
-
- if (shape == RoundedRect && drawnRects < 2){
- if (drawnRects == 0)
- painter->setBrush(QBrush(linearGrad));
- else if (drawnRects == 1)
- painter->setBrush(QBrush(radialGrad));
- drawnRects++;
- } else {
- brushStyle = (brushStyle + 1)%14;
- if(!brushStyle)
- brushStyle = 1;
- brush.setStyle((Qt::BrushStyle)brushStyle);
- painter->setBrush(brush);
- }
-
- painter->setPen(QPen(Qt::black, 2, (Qt::PenStyle)penStyle, Qt::FlatCap, Qt::MiterJoin));
- painter->translate(x, y);
- switch (shape) {
- case Line:
- painter->drawLine(rect.bottomLeft(), rect.topRight());
- break;
- case Polyline:
- painter->drawPolyline(points, 4);
- break;
- case Polygon:
- painter->drawPolygon(points, 4);
- break;
- case Rect:
- painter->drawRect(rect);
- break;
- case RoundedRect:
- painter->drawRoundedRect(rect, 25, 25, Qt::RelativeSize);
- break;
- case Ellipse:
- painter->drawEllipse(rect);
- break;
- case Arc:
- painter->drawArc(rect, startAngle, arcLength);
- break;
- case Chord:
- painter->drawChord(rect, startAngle, arcLength);
- break;
- case Pie:
- painter->drawPie(rect, startAngle, arcLength);
- break;
- case Path:
- painter->drawPath(path);
- break;
- case Text:
- painter->drawText(rect, Qt::AlignCenter, "QTeXEngine");
- break;
- case Pixmap:
- painter->drawPixmap(10, 10, QPixmap(qt_logo_xpm));
- break;
- case TiledPixmap:
- painter->drawTiledPixmap (QRect(10, 10, 64, 64), QPixmap(brick_xpm));
- break;
- }
- painter->restore();
- }
- }
-
- painter->setPen(Qt::darkGray);
- painter->setBrush(Qt::NoBrush);
- painter->drawRect(QRect(9, 9, width() - 18, height() - 18));
-}
-
-void RenderArea::paintEvent(QPaintEvent * /* event */)
-{
- QPainter painter(this);
- draw(&painter);
-}
+#include
+#include "renderarea.h"
+#include "pixmaps.h"
+
+RenderArea::RenderArea(QWidget *parent)
+ : QWidget(parent)
+{
+ setBackgroundRole(QPalette::Base);
+ setAutoFillBackground(true);
+
+ setFixedWidth(600);
+ setFixedHeight(500);
+}
+
+void RenderArea::draw(QPainter *painter)
+{
+ static const QPoint points[4] = {
+ QPoint(10, 80),
+ QPoint(20, 10),
+ QPoint(80, 30),
+ QPoint(90, 70)
+ };
+
+ QRect rect(10, 20, 80, 60);
+
+ QPainterPath path;
+ path.moveTo(20, 80);
+ path.lineTo(20, 30);
+ path.cubicTo(80, 0, 50, 50, 80, 80);
+
+ int startAngle = 20 * 16;
+ int arcLength = 120 * 16;
+
+ QLinearGradient linearGrad(QPointF(0, 0), QPointF(100, 100));
+ linearGrad.setColorAt(0, Qt::black);
+ linearGrad.setColorAt(1, Qt::red);
+
+ QRadialGradient radialGrad(QPointF(50, 50), 50, QPointF(50, 50));
+ radialGrad.setColorAt(0, Qt::red);
+ radialGrad.setColorAt(1, Qt::green);
+
+ /*QConicalGradient conGrad(QPointF(50, 50), 90);
+ conGrad.setColorAt(0, Qt::blue);
+ conGrad.setColorAt(0.5, Qt::red);
+ conGrad.setColorAt(1, Qt::green);
+ QBrush brush = QBrush(conGrad);*/
+
+ QBrush brush = QBrush(Qt::gray);
+ int brushStyle = Qt::NoBrush;
+ int penStyle = Qt::NoPen;
+ int shape = Rect;
+ int drawnRects = 0;
+ for (int x = 0; x < width(); x += 100){
+ for (int y = 0; y < height(); y += 100){
+ painter->save();
+ painter->setRenderHint(QPainter::Antialiasing);
+
+ shape = (shape + 1)%14;
+
+ penStyle = (penStyle + 1)%4;
+ if(!penStyle)
+ penStyle = 1;
+
+ if (shape == RoundedRect && drawnRects < 2){
+ if (drawnRects == 0)
+ painter->setBrush(QBrush(linearGrad));
+ else if (drawnRects == 1)
+ painter->setBrush(QBrush(radialGrad));
+ drawnRects++;
+ } else {
+ brushStyle = (brushStyle + 1)%14;
+ if(!brushStyle)
+ brushStyle = 1;
+ brush.setStyle((Qt::BrushStyle)brushStyle);
+ painter->setBrush(brush);
+ }
+
+ painter->setPen(QPen(Qt::black, 2, (Qt::PenStyle)penStyle, Qt::FlatCap, Qt::MiterJoin));
+ painter->translate(x, y);
+ switch (shape) {
+ case Line:
+ painter->drawLine(rect.bottomLeft(), rect.topRight());
+ break;
+ case Polyline:
+ painter->drawPolyline(points, 4);
+ break;
+ case Polygon:
+ painter->drawPolygon(points, 4);
+ break;
+ case Rect:
+ painter->drawRect(rect);
+ break;
+ case RoundedRect:
+ painter->drawRoundedRect(rect, 25, 25, Qt::RelativeSize);
+ break;
+ case Ellipse:
+ painter->drawEllipse(rect);
+ break;
+ case Arc:
+ painter->drawArc(rect, startAngle, arcLength);
+ break;
+ case Chord:
+ painter->drawChord(rect, startAngle, arcLength);
+ break;
+ case Pie:
+ painter->drawPie(rect, startAngle, arcLength);
+ break;
+ case Path:
+ painter->drawPath(path);
+ break;
+ case Text:
+ painter->drawText(rect, Qt::AlignCenter, "QTeXEngine");
+ break;
+ case Pixmap:
+ painter->drawPixmap(10, 10, QPixmap(qt_logo_xpm));
+ break;
+ case TiledPixmap:
+ painter->drawTiledPixmap (QRect(10, 10, 64, 64), QPixmap(brick_xpm));
+ break;
+ }
+ painter->restore();
+ }
+ }
+
+ painter->setPen(Qt::darkGray);
+ painter->setBrush(Qt::NoBrush);
+ painter->drawRect(QRect(9, 9, width() - 18, height() - 18));
+}
+
+void RenderArea::paintEvent(QPaintEvent * /* event */)
+{
+ QPainter painter(this);
+ draw(&painter);
+}
diff --git a/test/jkqtplot_test/EmfEngine/example/renderarea.h b/examples/jkqtplot_test/QTeXEngine/example/renderarea.h
similarity index 95%
rename from test/jkqtplot_test/EmfEngine/example/renderarea.h
rename to examples/jkqtplot_test/QTeXEngine/example/renderarea.h
index bc0b00e0fa..52626f5f1b 100644
--- a/test/jkqtplot_test/EmfEngine/example/renderarea.h
+++ b/examples/jkqtplot_test/QTeXEngine/example/renderarea.h
@@ -1,19 +1,19 @@
-#ifndef RENDERAREA_H
-#define RENDERAREA_H
-
-#include
-
-class RenderArea : public QWidget
-{
-public:
- enum Shape { Line, Polyline, Polygon, Rect, RoundedRect, Ellipse, Arc,
- Chord, Pie, Path, Text, Pixmap, TiledPixmap };
-
- RenderArea(QWidget *parent = 0);
- void draw(QPainter *painter);
-
-protected:
- void paintEvent(QPaintEvent *event);
-};
-
-#endif
+#ifndef RENDERAREA_H
+#define RENDERAREA_H
+
+#include
+
+class RenderArea : public QWidget
+{
+public:
+ enum Shape { Line, Polyline, Polygon, Rect, RoundedRect, Ellipse, Arc,
+ Chord, Pie, Path, Text, Pixmap, TiledPixmap };
+
+ RenderArea(QWidget *parent = 0);
+ void draw(QPainter *painter);
+
+protected:
+ void paintEvent(QPaintEvent *event);
+};
+
+#endif
diff --git a/test/jkqtplot_test/QTeXEngine/src/QTeXEngine.h b/examples/jkqtplot_test/QTeXEngine/src/QTeXEngine.h
similarity index 97%
rename from test/jkqtplot_test/QTeXEngine/src/QTeXEngine.h
rename to examples/jkqtplot_test/QTeXEngine/src/QTeXEngine.h
index b6ad0f0db8..8fd55e22cf 100644
--- a/test/jkqtplot_test/QTeXEngine/src/QTeXEngine.h
+++ b/examples/jkqtplot_test/QTeXEngine/src/QTeXEngine.h
@@ -1,166 +1,166 @@
-/***************************************************************************
- File : QTeXEngine.h
- Project : QTeXEngine GNU GPL v. 3.0
- --------------------------------------------------------------------
- Copyright : (C) 2009 by Ion Vasilief
- Email (use @ for *) : ion_vasilief*yahoo.fr
- Description : Enables the export of QPainter grafics to .tex files
- ***************************************************************************/
-
-/***************************************************************************
- * *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 3 of the License, or *
- * (at your option) any later version. *
- * *
- * This program is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
- * GNU General Public License for more details. *
- * *
- * You should have received a copy of the GNU General Public License *
- * along with this program; if not, write to the Free Software *
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, *
- * Boston, MA 02110-1301 USA *
- * *
- ***************************************************************************/
-
-#ifndef Q_TEX_ENGINE_H
-#define Q_TEX_ENGINE_H
-
-#include
-#include
-#include
-
-class QFile;
-class QTeXPaintEngine;
-
-class QTeXPaintDevice : public QPaintDevice
-{
-public:
- enum Unit{pt, bp, mm, cm, in, ex, em};
- enum OutputMode{Tikz, Pgf};
-
- QTeXPaintDevice(const QString& fileName, const QSize& s = QSize(), Unit u = pt);
- ~QTeXPaintDevice();
-
- virtual QPaintEngine * paintEngine () const;
- //! Set color mode (Color or GrayScale)
- void setColorMode(QPrinter::ColorMode mode);
- //! Set output mode (Tikz or Pgf)
- void setOutputMode(OutputMode mode);
- //! Set length unit
- void setUnit(Unit u);
- //! Set size
- void setSize(const QSize& s){d_size = s;};
- //! Enables/Disables document tags
- void setDocumentMode(bool on = true);
- //! Enables/Disables escaping of special characters in texts
- void setEscapeTextMode(bool on = true);
- //! Enables/Disables exporting of font sizes
- void exportFontSizes(bool on = true);
- //! Set horizontal alignment
- void setTextHorizontalAlignment(Qt::Alignment alignment);
-
-protected:
- virtual int metric ( PaintDeviceMetric ) const;
-
-private:
- //! Size in pixels
- QSize d_size;
- QTeXPaintEngine* engine;
-};
-
-class QTeXPaintEngine : public QPaintEngine
-{
-public:
- QTeXPaintEngine(const QString&, QTeXPaintDevice::Unit u = QTeXPaintDevice::pt);
- ~QTeXPaintEngine(){};
- virtual bool begin(QPaintDevice*);
- virtual bool end();
- virtual void updateState( const QPaintEngineState & ) {};
- virtual void drawEllipse(const QRectF &);
- virtual QPaintEngine::Type type() const {return QPaintEngine::User;};
- virtual void drawPoints ( const QPointF * points, int pointCount );
- virtual void drawLines ( const QLineF * , int );
- virtual void drawPath ( const QPainterPath & path );
- virtual void drawPolygon ( const QPointF * , int , PolygonDrawMode );
- virtual void drawTextItem ( const QPointF & , const QTextItem & );
- virtual void drawRects ( const QRectF * , int );
- virtual void drawPixmap ( const QRectF &, const QPixmap &, const QRectF &);
- virtual void drawImage(const QRectF &, const QImage &, const QRectF &, Qt::ImageConversionFlags);
-
- //! Set length unit
- void setUnit(QTeXPaintDevice::Unit u){d_unit = u;};
- //! Enables/Disables gray scale output
- void setGrayScale(bool on = true){d_gray_scale = on;};
- //! Set output syntax
- void setOutputMode(QTeXPaintDevice::OutputMode mode){d_pgf_mode = (mode == QTeXPaintDevice::Pgf) ? true : false;};
- void setDocumentMode(bool on = true){d_document_mode = on;};
- //! Enables/Disables escaping of special characters in texts
- void setEscapeTextMode(bool on = true){d_escape_text = on;};
- void exportFontSizes(bool on = true){d_font_size = on;};
- void setTextHorizontalAlignment(Qt::Alignment alignment){d_horizontal_alignment = alignment;};
-
-private:
- enum Shape{Line, Polygon, Polyline, Rect, Ellipse, Path, Points};
- //! Returns true if draw operation has NoBrush and NoPen
- bool emptyStringOperation();
- QString unit();
- double unitFactor();
- double resFactorX();
- double resFactorY();
-
- QString pgfPoint(const QPointF& p);
- QString tikzPoint(const QPointF& p);
-
- QPointF convertPoint(const QPointF& p);
- QString color(const QColor& col);
- QString defineColor(const QColor& c, const QString& name);
-
- QString pgfPen(const QPen& pen);
- QString tikzPen(const QPen& pen);
-
- QString pgfBrush(const QBrush& brush);
- QString tikzBrush(const QBrush& brush);
-
- QString beginScope();
- QString endScope();
-
- QString clipPath();
- bool changedClipping();
-
- QString path(const QPainterPath & path);
- QString pgfPath(const QPainterPath & path);
- QString tikzPath(const QPainterPath & path);
-
- QString drawShape(Shape shape, const QString & path);
- QString drawPgfShape(Shape shape, const QString & path);
- QString drawTikzShape(Shape shape, const QString & path);
-
- //! Draws pixmap pix in a given rectangle
- void drawPixmap(const QPixmap &pix, const QRectF &p);
- void writeToFile(const QString& s);
- QString indentString(const QString& s);
- //! Returns true if a new color command should be added
- bool addNewBrushColor();
- bool addNewPatternColor();
- bool addNewPenColor();
-
- QFile *file;
- //! Name of the output file
- QString fname;
- int d_pixmap_index;
- bool d_pgf_mode;
- bool d_open_scope;
- bool d_gray_scale;
- bool d_document_mode;
- bool d_escape_text;
- bool d_font_size;
- QPainterPath d_clip_path;
- QColor d_current_color, d_pattern_color;
- QTeXPaintDevice::Unit d_unit;
- Qt::Alignment d_horizontal_alignment;
-};
-#endif
+/***************************************************************************
+ File : QTeXEngine.h
+ Project : QTeXEngine GNU GPL v. 3.0
+ --------------------------------------------------------------------
+ Copyright : (C) 2009 by Ion Vasilief
+ Email (use @ for *) : ion_vasilief*yahoo.fr
+ Description : Enables the export of QPainter grafics to .tex files
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 3 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the Free Software *
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, *
+ * Boston, MA 02110-1301 USA *
+ * *
+ ***************************************************************************/
+
+#ifndef Q_TEX_ENGINE_H
+#define Q_TEX_ENGINE_H
+
+#include
+#include
+#include
+
+class QFile;
+class QTeXPaintEngine;
+
+class QTeXPaintDevice : public QPaintDevice
+{
+public:
+ enum Unit{pt, bp, mm, cm, in, ex, em};
+ enum OutputMode{Tikz, Pgf};
+
+ QTeXPaintDevice(const QString& fileName, const QSize& s = QSize(), Unit u = pt);
+ ~QTeXPaintDevice();
+
+ virtual QPaintEngine * paintEngine () const;
+ //! Set color mode (Color or GrayScale)
+ void setColorMode(QPrinter::ColorMode mode);
+ //! Set output mode (Tikz or Pgf)
+ void setOutputMode(OutputMode mode);
+ //! Set length unit
+ void setUnit(Unit u);
+ //! Set size
+ void setSize(const QSize& s){d_size = s;};
+ //! Enables/Disables document tags
+ void setDocumentMode(bool on = true);
+ //! Enables/Disables escaping of special characters in texts
+ void setEscapeTextMode(bool on = true);
+ //! Enables/Disables exporting of font sizes
+ void exportFontSizes(bool on = true);
+ //! Set horizontal alignment
+ void setTextHorizontalAlignment(Qt::Alignment alignment);
+
+protected:
+ virtual int metric ( PaintDeviceMetric ) const;
+
+private:
+ //! Size in pixels
+ QSize d_size;
+ QTeXPaintEngine* engine;
+};
+
+class QTeXPaintEngine : public QPaintEngine
+{
+public:
+ QTeXPaintEngine(const QString&, QTeXPaintDevice::Unit u = QTeXPaintDevice::pt);
+ ~QTeXPaintEngine(){};
+ virtual bool begin(QPaintDevice*);
+ virtual bool end();
+ virtual void updateState( const QPaintEngineState & ) {};
+ virtual void drawEllipse(const QRectF &);
+ virtual QPaintEngine::Type type() const {return QPaintEngine::User;};
+ virtual void drawPoints ( const QPointF * points, int pointCount );
+ virtual void drawLines ( const QLineF * , int );
+ virtual void drawPath ( const QPainterPath & path );
+ virtual void drawPolygon ( const QPointF * , int , PolygonDrawMode );
+ virtual void drawTextItem ( const QPointF & , const QTextItem & );
+ virtual void drawRects ( const QRectF * , int );
+ virtual void drawPixmap ( const QRectF &, const QPixmap &, const QRectF &);
+ virtual void drawImage(const QRectF &, const QImage &, const QRectF &, Qt::ImageConversionFlags);
+
+ //! Set length unit
+ void setUnit(QTeXPaintDevice::Unit u){d_unit = u;};
+ //! Enables/Disables gray scale output
+ void setGrayScale(bool on = true){d_gray_scale = on;};
+ //! Set output syntax
+ void setOutputMode(QTeXPaintDevice::OutputMode mode){d_pgf_mode = (mode == QTeXPaintDevice::Pgf) ? true : false;};
+ void setDocumentMode(bool on = true){d_document_mode = on;};
+ //! Enables/Disables escaping of special characters in texts
+ void setEscapeTextMode(bool on = true){d_escape_text = on;};
+ void exportFontSizes(bool on = true){d_font_size = on;};
+ void setTextHorizontalAlignment(Qt::Alignment alignment){d_horizontal_alignment = alignment;};
+
+private:
+ enum Shape{Line, Polygon, Polyline, Rect, Ellipse, Path, Points};
+ //! Returns true if draw operation has NoBrush and NoPen
+ bool emptyStringOperation();
+ QString unit();
+ double unitFactor();
+ double resFactorX();
+ double resFactorY();
+
+ QString pgfPoint(const QPointF& p);
+ QString tikzPoint(const QPointF& p);
+
+ QPointF convertPoint(const QPointF& p);
+ QString color(const QColor& col);
+ QString defineColor(const QColor& c, const QString& name);
+
+ QString pgfPen(const QPen& pen);
+ QString tikzPen(const QPen& pen);
+
+ QString pgfBrush(const QBrush& brush);
+ QString tikzBrush(const QBrush& brush);
+
+ QString beginScope();
+ QString endScope();
+
+ QString clipPath();
+ bool changedClipping();
+
+ QString path(const QPainterPath & path);
+ QString pgfPath(const QPainterPath & path);
+ QString tikzPath(const QPainterPath & path);
+
+ QString drawShape(Shape shape, const QString & path);
+ QString drawPgfShape(Shape shape, const QString & path);
+ QString drawTikzShape(Shape shape, const QString & path);
+
+ //! Draws pixmap pix in a given rectangle
+ void drawPixmap(const QPixmap &pix, const QRectF &p);
+ void writeToFile(const QString& s);
+ QString indentString(const QString& s);
+ //! Returns true if a new color command should be added
+ bool addNewBrushColor();
+ bool addNewPatternColor();
+ bool addNewPenColor();
+
+ QFile *file;
+ //! Name of the output file
+ QString fname;
+ int d_pixmap_index;
+ bool d_pgf_mode;
+ bool d_open_scope;
+ bool d_gray_scale;
+ bool d_document_mode;
+ bool d_escape_text;
+ bool d_font_size;
+ QPainterPath d_clip_path;
+ QColor d_current_color, d_pattern_color;
+ QTeXPaintDevice::Unit d_unit;
+ Qt::Alignment d_horizontal_alignment;
+};
+#endif
diff --git a/test/jkqtplot_test/QTeXEngine/src/QTeXPaintDevice.cpp b/examples/jkqtplot_test/QTeXEngine/src/QTeXPaintDevice.cpp
similarity index 97%
rename from test/jkqtplot_test/QTeXEngine/src/QTeXPaintDevice.cpp
rename to examples/jkqtplot_test/QTeXEngine/src/QTeXPaintDevice.cpp
index 04ca7be415..e42630abe0 100644
--- a/test/jkqtplot_test/QTeXEngine/src/QTeXPaintDevice.cpp
+++ b/examples/jkqtplot_test/QTeXEngine/src/QTeXPaintDevice.cpp
@@ -1,118 +1,118 @@
-/***************************************************************************
- File : QTeXPaintDevice.cpp
- Project : QTeXEngine GNU GPL v. 3.0
- --------------------------------------------------------------------
- Copyright : (C) 2009 by Ion Vasilief
- Email (use @ for *) : ion_vasilief*yahoo.fr
- Description : Enables the export of QPainter grafics to .tex files
- ***************************************************************************/
-
-/***************************************************************************
- * *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 3 of the License, or *
- * (at your option) any later version. *
- * *
- * This program is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
- * GNU General Public License for more details. *
- * *
- * You should have received a copy of the GNU General Public License *
- * along with this program; if not, write to the Free Software *
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, *
- * Boston, MA 02110-1301 USA *
- * *
- ***************************************************************************/
-
-#include "QTeXEngine.h"
-
-#include
-#include
-
-QTeXPaintDevice::QTeXPaintDevice(const QString& fileName, const QSize& s, Unit u)
-: QPaintDevice()
-{
- d_size = s;
-
- if (!d_size.isValid())
- d_size = QSize(500, 400);
-
- engine = new QTeXPaintEngine(fileName, u);
-}
-
-QTeXPaintDevice::~QTeXPaintDevice()
-{
- delete engine;
-}
-
-QPaintEngine * QTeXPaintDevice::paintEngine () const
-{
- return engine;
-}
-
-void QTeXPaintDevice::setColorMode(QPrinter::ColorMode mode)
-{
- engine->setGrayScale(mode == QPrinter::GrayScale);
-}
-
-void QTeXPaintDevice::setOutputMode(OutputMode mode)
-{
- engine->setOutputMode(mode);
-}
-
-void QTeXPaintDevice::setUnit(Unit u)
-{
- engine->setUnit(u);
-}
-
-void QTeXPaintDevice::setDocumentMode(bool on)
-{
- engine->setDocumentMode(on);
-}
-
-void QTeXPaintDevice::setEscapeTextMode(bool on)
-{
- engine->setEscapeTextMode(on);
-}
-
-void QTeXPaintDevice::exportFontSizes(bool on)
-{
- engine->exportFontSizes(on);
-}
-
-void QTeXPaintDevice::setTextHorizontalAlignment(Qt::Alignment alignment)
-{
- engine->setTextHorizontalAlignment(alignment);
-}
-
-int QTeXPaintDevice::metric ( PaintDeviceMetric metric ) const
-{
- QDesktopWidget *desktop = QApplication::desktop();
- int dpi_x = desktop->logicalDpiX();
- int dpi_y = desktop->logicalDpiY();
- switch (metric){
- case QPaintDevice::PdmWidth:
- return d_size.width();
- case QPaintDevice::PdmHeight:
- return d_size.height();
- case QPaintDevice::PdmWidthMM:
- return int(25.4*d_size.width()/(double)dpi_x);
- case QPaintDevice::PdmHeightMM:
- return int(25.4*d_size.height()/(double)dpi_y);
- case QPaintDevice::PdmNumColors:
- return 65536;//should it be millions?
- case QPaintDevice::PdmDepth:
- return 32;
- case QPaintDevice::PdmDpiX:
- case QPaintDevice::PdmPhysicalDpiX:
- return dpi_x;
- case QPaintDevice::PdmDpiY:
- case QPaintDevice::PdmPhysicalDpiY:
- return dpi_y;
- default:
- qWarning ("QTeXPaintDevice::Unknown metric asked");
- return 0;
- }
-}
+/***************************************************************************
+ File : QTeXPaintDevice.cpp
+ Project : QTeXEngine GNU GPL v. 3.0
+ --------------------------------------------------------------------
+ Copyright : (C) 2009 by Ion Vasilief
+ Email (use @ for *) : ion_vasilief*yahoo.fr
+ Description : Enables the export of QPainter grafics to .tex files
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 3 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the Free Software *
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, *
+ * Boston, MA 02110-1301 USA *
+ * *
+ ***************************************************************************/
+
+#include "QTeXEngine.h"
+
+#include
+#include
+
+QTeXPaintDevice::QTeXPaintDevice(const QString& fileName, const QSize& s, Unit u)
+: QPaintDevice()
+{
+ d_size = s;
+
+ if (!d_size.isValid())
+ d_size = QSize(500, 400);
+
+ engine = new QTeXPaintEngine(fileName, u);
+}
+
+QTeXPaintDevice::~QTeXPaintDevice()
+{
+ delete engine;
+}
+
+QPaintEngine * QTeXPaintDevice::paintEngine () const
+{
+ return engine;
+}
+
+void QTeXPaintDevice::setColorMode(QPrinter::ColorMode mode)
+{
+ engine->setGrayScale(mode == QPrinter::GrayScale);
+}
+
+void QTeXPaintDevice::setOutputMode(OutputMode mode)
+{
+ engine->setOutputMode(mode);
+}
+
+void QTeXPaintDevice::setUnit(Unit u)
+{
+ engine->setUnit(u);
+}
+
+void QTeXPaintDevice::setDocumentMode(bool on)
+{
+ engine->setDocumentMode(on);
+}
+
+void QTeXPaintDevice::setEscapeTextMode(bool on)
+{
+ engine->setEscapeTextMode(on);
+}
+
+void QTeXPaintDevice::exportFontSizes(bool on)
+{
+ engine->exportFontSizes(on);
+}
+
+void QTeXPaintDevice::setTextHorizontalAlignment(Qt::Alignment alignment)
+{
+ engine->setTextHorizontalAlignment(alignment);
+}
+
+int QTeXPaintDevice::metric ( PaintDeviceMetric metric ) const
+{
+ QDesktopWidget *desktop = QApplication::desktop();
+ int dpi_x = desktop->logicalDpiX();
+ int dpi_y = desktop->logicalDpiY();
+ switch (metric){
+ case QPaintDevice::PdmWidth:
+ return d_size.width();
+ case QPaintDevice::PdmHeight:
+ return d_size.height();
+ case QPaintDevice::PdmWidthMM:
+ return int(25.4*d_size.width()/(double)dpi_x);
+ case QPaintDevice::PdmHeightMM:
+ return int(25.4*d_size.height()/(double)dpi_y);
+ case QPaintDevice::PdmNumColors:
+ return 65536;//should it be millions?
+ case QPaintDevice::PdmDepth:
+ return 32;
+ case QPaintDevice::PdmDpiX:
+ case QPaintDevice::PdmPhysicalDpiX:
+ return dpi_x;
+ case QPaintDevice::PdmDpiY:
+ case QPaintDevice::PdmPhysicalDpiY:
+ return dpi_y;
+ default:
+ qWarning ("QTeXPaintDevice::Unknown metric asked");
+ return 0;
+ }
+}
diff --git a/test/jkqtplot_test/QTeXEngine/src/QTeXPaintEngine.cpp b/examples/jkqtplot_test/QTeXEngine/src/QTeXPaintEngine.cpp
similarity index 95%
rename from test/jkqtplot_test/QTeXEngine/src/QTeXPaintEngine.cpp
rename to examples/jkqtplot_test/QTeXEngine/src/QTeXPaintEngine.cpp
index 2032bd78a2..8fcc1dfea5 100644
--- a/test/jkqtplot_test/QTeXEngine/src/QTeXPaintEngine.cpp
+++ b/examples/jkqtplot_test/QTeXEngine/src/QTeXPaintEngine.cpp
@@ -1,1121 +1,1121 @@
-/***************************************************************************
- File : QTeXPaintEngine.cpp
- Project : QTeXEngine GNU GPL v. 3.0
- --------------------------------------------------------------------
- Copyright : (C) 2009 by Ion Vasilief
- Email (use @ for *) : ion_vasilief*yahoo.fr
- Description : Enables the export of QPainter grafics to .tex files
- ***************************************************************************/
-
-/***************************************************************************
- * *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 3 of the License, or *
- * (at your option) any later version. *
- * *
- * This program is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
- * GNU General Public License for more details. *
- * *
- * You should have received a copy of the GNU General Public License *
- * along with this program; if not, write to the Free Software *
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, *
- * Boston, MA 02110-1301 USA *
- * *
- ***************************************************************************/
-
-#include "QTeXEngine.h"
-
-#include
-#include
-#include
-#include
-
-QTeXPaintEngine::QTeXPaintEngine(const QString& f, QTeXPaintDevice::Unit u)
-: QPaintEngine(QPaintEngine::AllFeatures),
-fname(f),
-d_pixmap_index(1),
-d_unit(u)
-{
- d_pgf_mode = false;
- d_open_scope = false;
- d_gray_scale = false;
- d_document_mode = false;
- d_escape_text = true;
- d_font_size = true;
- d_clip_path = QPainterPath();
- d_current_color = QColor();
- d_pattern_color = QColor();
- d_horizontal_alignment = Qt::AlignHCenter;
-}
-
-bool QTeXPaintEngine::begin(QPaintDevice* p)
-{
- setPaintDevice(p);
- file = new QFile(fname);
- if (file->open(QIODevice::WriteOnly)){
- QTextStream t(file);
- t.setCodec("UTF-8");
- if (d_document_mode){
- t << "\\documentclass{article}\n";
- t << "\\usepackage[left=0.2cm,top=0.1cm,right=0.2cm,nohead,nofoot]{geometry}\n";
-
- if (d_pgf_mode){
- t << "\\usepackage{pgf}\n";
- t << "\\usepgflibrary{patterns}\n";
- } else {
- t << "\\usepackage{tikz}\n";
- t << "\\usetikzlibrary{patterns}\n";
- }
-
- t << "\\usepackage{ulem}\n";//used for striked out fonts (\sout command)
- t << "\\begin{document}\n";
- }
-
- QString pictureEnv = "\\begin{tikzpicture}{0";
- if (d_pgf_mode)
- pictureEnv = "\\begin{pgfpicture}{0";
-
- QString u = unit();
- t << pictureEnv + u + "}{0" + u + "}{";
- t << QString::number(p->width()) + u + "}{";
- t << QString::number(p->height()) + u + "}\n";
-
- if (!d_pgf_mode){
- QPainterPath path;
- path.addRect(QRect(0, 0, p->width(), p->height()));
- t << "\t\\clip" + tikzPath(path);
- }
- return true;
- }
-
- delete file;
- return false;
-}
-
-bool QTeXPaintEngine::end()
-{
- QTextStream t(file);
- t.setCodec("UTF-8");
- if (d_open_scope)
- t << endScope();
-
- if (d_pgf_mode)
- t << "\\end{pgfpicture}\n";
- else
- t << "\\end{tikzpicture}\n";
-
- if (d_document_mode)
- t << "\\end{document}\n";
-
- file->close();
- return true;
-}
-
-void QTeXPaintEngine::drawPoints ( const QPointF * points, int pointCount )
-{
- if (emptyStringOperation())
- return;
-
- QMatrix m = painter()->worldMatrix();
- double lw = painter()->pen().widthF();
-
- QString s = QString::null;
- if (addNewPenColor()){
- d_current_color = painter()->pen().color();
- s = color(d_current_color);
- }
-
- for (int i = 0; i < pointCount; i++){
- QPointF p = m.map(points[i]);
- if (d_pgf_mode){
- QString path = pgfPoint(convertPoint(p));
- path += pgfPoint(QPointF(lw, lw)) + "\n";
- s += "\\pgfrect[fill]" + path;
- } else {
- QString path = tikzPoint(convertPoint(p));
- path += " rectangle " + tikzPoint(convertPoint(QPointF(p.x() + lw, p.y() + lw))) + ";\n";
- s += "\\fill " + path;
- }
- }
-
- writeToFile(s);
-}
-
-void QTeXPaintEngine::drawLines ( const QLineF * lines, int lineCount )
-{
- if (painter()->pen().style() == Qt::NoPen)
- return;
-
- QString s;
- for (int i = 0; i < lineCount; i++){
- QPainterPath path(lines[i].p1());
- path.lineTo(lines[i].p2());
-
- s += drawShape(Line, this->path(path));
- }
-
- writeToFile(s);
-}
-
-void QTeXPaintEngine::drawPolygon ( const QPointF * points, int pointCount, PolygonDrawMode mode )
-{
- if (emptyStringOperation())
- return;
-
- QVector pts;
- for (int i = 0; i < pointCount; i++)
- pts << points[i];
-
- QPainterPath path;
- path.addPolygon(QPolygonF(pts));
- if (mode != QPaintEngine::PolylineMode)
- path.closeSubpath ();
-
- QString s;;
- if (mode != QPaintEngine::PolylineMode){
- path.closeSubpath ();
- s += drawShape(Polygon, this->path(path));
- } else
- s += drawShape(Polyline, this->path(path));
-
- writeToFile(s);
-}
-
-void QTeXPaintEngine::drawTextItem ( const QPointF & p, const QTextItem & textItem )
-{
- QString s = QString::null;
- if (addNewPenColor()){
- s = color(painter()->pen().color());
- d_current_color = painter()->pen().color();
- }
-
- QMatrix m = painter()->worldMatrix();
-
- s += "\\pgftext[";
-
- QPointF origin = p;
- switch(d_horizontal_alignment){
- case Qt::AlignLeft:
- s += "left";
- break;
-
- case Qt::AlignHCenter:
- case Qt::AlignJustify:
- origin = QPointF(p.x() + 0.5*textItem.width(), p.y());
- s += "center";
- break;
-
- case Qt::AlignRight:
- origin = QPointF(p.x() + textItem.width(), p.y());
- s += "right";
- break;
-
- default:
- break;
- }
-
- s += ", base, at=";
- s += pgfPoint(convertPoint(m.map(origin)));
-
- if (painter()->transform().isRotating ()){
- double angle = 180.0/M_PI*acos(m.m11());
- if (m.m11() != 0.0 && m.m12() > 0)
- angle = -angle;
- s += ",rotate=" + QString::number(angle);
- }
- s += "]{";
-
- QFont f = textItem.font();
- if (d_font_size)
- s += "\\fontsize{" + QString::number(int(f.pointSizeF())) + "}{0}\\selectfont{";
-
- if (f.underline())
- s += "\\underline{";
- if (f.italic())
- s += "\\textit{";
- if (f.bold())
- s += "\\textbf{";
- if (f.strikeOut())
- s += "\\sout{";
-
- QString text = textItem.text();
- text.remove(QRegExp("~\\"));
- if (d_escape_text){
- text.replace("$", "\\$");
- text.replace("_", "\\_");
- text.replace("{", "\\{");
- text.replace("}", "\\}");
- text.replace("^", "\\^");
- text.replace("&", "\\&");
- text.replace("%", "\\%");
- text.replace("#", "\\#");
- }
-
- s += text;
- if (d_font_size)
- s += "}";
-
- if (f.italic())
- s += "}";
- if (f.bold())
- s += "}";
- if (f.underline())
- s += "}";
- if (f.strikeOut())
- s += "}";
-
- s += "}\n";
-
- writeToFile(s);
-}
-
-void QTeXPaintEngine::drawRects ( const QRectF * rects, int rectCount )
-{
- if (emptyStringOperation())
- return;
-
- QString s;
- for (int i = 0; i < rectCount; i++){
- QPainterPath path;
- path.addPolygon(QPolygonF(rects[i]));
- s += drawShape(Path, this->path(path));
- }
-
- writeToFile(s);
-}
-
-void QTeXPaintEngine::drawEllipse ( const QRectF & rect )
-{
- if (emptyStringOperation())
- return;
-
- QPointF p = painter()->worldMatrix().map(rect.bottomLeft());
-
- QString path;
- if (d_pgf_mode){
- path = pgfPoint(convertPoint(QPointF(p.x() + 0.5*rect.width(), p.y() - 0.5*rect.height())));
- path += pgfPoint(QPointF(0, 0.5*rect.height()*resFactorY()));
- path += pgfPoint(QPointF(0.5*rect.width()*resFactorX(), 0)) + "\n";
- } else {
- path = tikzPoint(convertPoint(QPointF(p.x() + 0.5*rect.width(), p.y() - 0.5*rect.height())));
- path += " ellipse (";
- QString u = unit();
- path += QString::number(0.5*rect.width()*resFactorX()) + u + " and ";
- path += QString::number(0.5*rect.height()*resFactorY()) + u + ");\n";
- }
-
- writeToFile(drawShape(Ellipse, path));
-}
-
-void QTeXPaintEngine::drawPath ( const QPainterPath & path )
-{
- if (emptyStringOperation())
- return;
-
- writeToFile(drawShape(Path, this->path(path)));
-}
-
-QString QTeXPaintEngine::drawPgfShape(Shape shape, const QString & path)
-{
- if (path.isEmpty())
- return QString::null;
-
- QString stroke_command = path + "\\pgfstroke\n";
- QString fill_command = path + "\\pgffill\n";
- switch(shape){
- case Line:
- case Polygon:
- case Polyline:
- case Path:
- case Points:
- break;
-
- case Rect:
- stroke_command = "\\pgfrect[stroke]" + path;
- fill_command = "\\pgfrect[fill]" + path;
- break;
-
- case Ellipse:
- stroke_command = "\\pgfellipse[stroke]" + path;
- fill_command = "\\pgfellipse[fill]" + path;
- break;
- }
-
- QString s = QString::null;
- if (shape != Line && shape != Polyline && painter()->brush().style() != Qt::NoBrush){
- // fill the background
- s += pgfBrush(painter()->brush());
- s += fill_command;
- }
-
- if (painter()->pen().style() != Qt::NoPen){// draw the contour
- s += pgfPen(painter()->pen());
- s += stroke_command;
- }
-
- return s;
-}
-
-QString QTeXPaintEngine::drawShape(Shape shape, const QString & path)
-{
- if (d_pgf_mode)
- return drawPgfShape(shape, path);
-
- return drawTikzShape(shape, path);
-}
-
-QString QTeXPaintEngine::drawTikzShape(Shape shape, const QString & path)
-{
- QString s = QString::null;
- if (path.isEmpty())
- return s;
-
- if (shape != Line && shape != Polyline && painter()->brush().style() != Qt::NoBrush)
- // fill the background
- s += tikzBrush(painter()->brush()) + path;
- if (painter()->pen().style() != Qt::NoPen)// draw the contour
- s += tikzPen(painter()->pen()) + path;
-
- return s;
-}
-
-void QTeXPaintEngine::drawImage(const QRectF & r, const QImage & image, const QRectF & sr, Qt::ImageConversionFlags flags)
-{
- drawPixmap(QPixmap::fromImage(image, flags).copy(sr.toAlignedRect()), r);
-}
-
-void QTeXPaintEngine::drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr)
-{
- drawPixmap(pm.copy(sr.toAlignedRect()), r);
-}
-
-void QTeXPaintEngine::drawPixmap(const QPixmap &pix, const QRectF &r)
-{
- QFileInfo fi(*file);
-
- QString base = fi.baseName() + "-images-";
- base += QDateTime::currentDateTime().toString("ddMMyy-hhmmss");
- if (!fi.dir().exists(base)){
- if (!fi.dir().mkdir(base))
- return;
- }
-
- QString name = fi.dir().absolutePath();
- name += "/" + base + "/image" + QString::number(d_pixmap_index);
- name = QDir::cleanPath(name);
- if (!pix.save(name + ".png", "PNG"))
- return;
-
- d_pixmap_index++;
-
- QTextStream t(file);
- t.setCodec("UTF-8");
-
- t << "\\pgfputat";
- t << pgfPoint(convertPoint(painter()->worldMatrix().map(r.bottomLeft())));
- t << "{\\pgfimage[interpolate=false,width=";
-
- QString u = unit();
- t << QString::number(r.width()*resFactorX()) + u + ",height=";
- t << QString::number(r.height()*resFactorY()) + u + "]{";
- t << name;
- t << "}}\n";
-}
-
-QString QTeXPaintEngine::clipPath()
-{
- if (painter()->hasClipping()){
- QPainterPath path = painter()->clipPath().simplified();
- if (path.elementCount() > 1000)//latex has a limited main memory size
- return QString::null;
-
- if (d_pgf_mode)
- return pgfPath(path) + "\\pgfclip\n";
- else
- return "\\clip" + tikzPath(path);
- }
- return QString::null;
-}
-
-QString QTeXPaintEngine::defineColor(const QColor& c, const QString& name)
-{
- QString col = "\\definecolor{" + name + "}{";
- if (d_gray_scale){
- col += "gray}{";
- double gray = qGray(c.rgb())/255.0;
- col += QString::number(gray) + "}\n";
- } else {
- col += "rgb}{";
- col += QString::number(c.redF()) + ",";
- col += QString::number(c.greenF()) + ",";
- col += QString::number(c.blueF()) + "}\n";
- }
- return col;
-}
-
-QString QTeXPaintEngine::tikzBrush(const QBrush& brush)
-{
- QString options = QString::null;
- if (addNewPatternColor()){
- options = defineColor(brush.color(), "c");
- d_pattern_color = brush.color();
- }
-
- options += "\\fill [pattern color=c, pattern=";
-
- switch(brush.style()){
- case Qt::NoBrush:
- return QString::null;
- break;
-
- case Qt::SolidPattern:
- {
- QString s = QString::null;
- if (addNewBrushColor()){
- d_current_color = brush.color();
- s = color(brush.color());
- }
-
- s += "\\fill";
-
- double alpha = painter()->brush().color().alphaF();
- if(alpha > 0.0 && alpha < 1.0)
- s += "[opacity=" + QString::number(alpha) + "]";
-
- return s;
- }
- break;
-
- case Qt::Dense1Pattern:
- case Qt::Dense2Pattern:
- case Qt::Dense3Pattern:
- case Qt::Dense4Pattern:
- options += "crosshatch dots";
- break;
-
- case Qt::Dense5Pattern:
- case Qt::Dense6Pattern:
- case Qt::Dense7Pattern:
- options += "dots";
- break;
-
- case Qt::HorPattern:
- options += "horizontal lines";
- break;
- case Qt::VerPattern:
- options += "vertical lines";
- break;
- case Qt::CrossPattern:
- options += "grid";
- break;
- case Qt::BDiagPattern:
- options += "north east lines";
- break;
- case Qt::FDiagPattern:
- options += "north west lines";
- break;
- case Qt::DiagCrossPattern:
- options += "crosshatch";
- break;
-
- case Qt::LinearGradientPattern:
- {
- const QLinearGradient *qtgradient = (const QLinearGradient *)brush.gradient();
- QGradientStops stops = qtgradient->stops();
-
- QString lc = defineColor(stops.first().second, "lc");
- QString rc = defineColor(stops.last().second, "rc");
-
- QMatrix m = painter()->worldMatrix();
- QPointF sp = m.map(qtgradient->start());
- QPointF ep = m.map(qtgradient->finalStop());
-
- options = lc + rc + "\\fill [";
- options += "left color=lc, ";
- options += "right color=rc, ";
- options += "shading angle=" + QString::number(-QLineF(sp, ep).angle());
- }
- break;
-
- case Qt::RadialGradientPattern:
- {
- const QRadialGradient *qtgradient = (const QRadialGradient *)brush.gradient();
- QGradientStops stops = qtgradient->stops();
-
- QString colors;
- int count = stops.count();
- colors += defineColor(stops[0].second, "c1");
- colors += defineColor(stops[count - 1].second, "c2");
-
- /*for (int i = 0; i < count; i++){
- QGradientStop stop = stops[i];
- colors += defineColor(stop.second, "c" + QString::number(i + 1));
- }*/
-
- options = colors + "\\fill [";
- options += "inner color=c1, ";
- options += "outer color=c2, ";
- options += "shading=radial";
- qWarning("QTeXEngine: Uncentered Qt::RadialGradientPattern with more than two colors not supported.");
-
- }
- break;
-
- case Qt::ConicalGradientPattern:
- {
- qWarning("QTeXEngine: Qt::ConicalGradientPattern is not supported.");
- return QString::null;
- }
- break;
-
- default:
- break;
- }
- return options + "]";
-}
-
-QString QTeXPaintEngine::pgfBrush(const QBrush& brush)
-{
- QString s = QString::null;
- QColor c = brush.color();
- QString col = defineColor(c, "c");
- QString command = "\\pgfsetfillpattern{";
- switch(brush.style()){
- case Qt::NoBrush:
- break;
-
- case Qt::SolidPattern:
- s += color(c);
- break;
-
- case Qt::Dense1Pattern:
- case Qt::Dense2Pattern:
- case Qt::Dense3Pattern:
- case Qt::Dense4Pattern:
- s += col + command + "crosshatch dots}{c}\n";
- break;
-
- case Qt::Dense5Pattern:
- case Qt::Dense6Pattern:
- case Qt::Dense7Pattern:
- s += col + command + "dots}{c}\n";
- break;
-
- case Qt::HorPattern:
- s += col + command + "horizontal lines}{c}\n";
- break;
- case Qt::VerPattern:
- s += col + command + "vertical lines}{c}\n";
- break;
- case Qt::CrossPattern:
- s += col + command + "grid}{c}\n";
- break;
- case Qt::BDiagPattern:
- s += col + command + "north east lines}{c}\n";
- break;
- case Qt::FDiagPattern:
- s += col + command + "north west lines}{c}\n";
- break;
- case Qt::DiagCrossPattern:
- s += col + command + "crosshatch}{c}\n";
- break;
-
- default:
- break;
- }
- return s;
-}
-
-QString QTeXPaintEngine::path(const QPainterPath & path)
-{
- if (path.isEmpty ())
- return QString::null;
-
- if (d_pgf_mode)
- return pgfPath(path);
-
- return tikzPath(path);
-}
-
-QString QTeXPaintEngine::pgfPath(const QPainterPath & path)
-{
- QString s = QString::null;
- int points = path.elementCount();
- QMatrix m = painter()->worldMatrix();
- int curvePoints = 0;
- for (int i = 0; i < points; i++){
- QPainterPath::Element el = path.elementAt(i);
- QPointF p = m.map(QPointF(el.x, el.y));
-
- switch(el.type){
- case QPainterPath::MoveToElement:
- s += "\\pgfmoveto" + pgfPoint(convertPoint(p)) + "\n";
- break;
-
- case QPainterPath::LineToElement:
- s += "\\pgflineto" + pgfPoint(convertPoint(p)) + "\n";
- break;
-
- case QPainterPath::CurveToElement:
- s += "\\pgfcurveto" + pgfPoint(convertPoint(p));
- curvePoints = 0;
- break;
-
- case QPainterPath::CurveToDataElement:
- s += pgfPoint(convertPoint(p));
- curvePoints++;
- if (curvePoints == 2)
- s += "\n";
- break;
- }
- }
- return s;
-}
-
-QString QTeXPaintEngine::tikzPath(const QPainterPath & path)
-{
- QString s = QString::null;
- if (path.isEmpty())
- return s;
-
- int points = path.elementCount();
- QMatrix m = painter()->worldMatrix();
- int curvePoints = 0;
- for (int i = 0; i < points; i++){
- QPainterPath::Element el = path.elementAt(i);
- QPointF p = m.map(QPointF(el.x, el.y));
- switch(el.type){
- case QPainterPath::MoveToElement:
- s += tikzPoint(convertPoint(p));
- break;
-
- case QPainterPath::LineToElement:
- s += " -- " + tikzPoint(convertPoint(p));
- break;
-
- case QPainterPath::CurveToElement:
- s += " .. controls " + tikzPoint(convertPoint(p));
- curvePoints = 0;
- break;
-
- case QPainterPath::CurveToDataElement:
- curvePoints++;
- if (curvePoints == 1)
- s += " and " + tikzPoint(convertPoint(p));
- else if (curvePoints == 2)
- s += " .. " + tikzPoint(convertPoint(p));
- break;
- }
- }
- return s + ";\n";
-}
-
-QPointF QTeXPaintEngine::convertPoint( const QPointF& p)
-{
- return QPointF(resFactorX()*p.x(), paintDevice()->height() - resFactorY()*p.y());
-}
-
-double QTeXPaintEngine::unitFactor()
-{
- double factor = 1.0;
- switch (d_unit){
- case QTeXPaintDevice::pt:
- factor = 72.27;
- break;
- case QTeXPaintDevice::bp:
- factor = 72;
- break;
- case QTeXPaintDevice::mm:
- factor = 25.4;
- break;
- case QTeXPaintDevice::cm:
- factor = 2.54;
- break;
- case QTeXPaintDevice::in:
- case QTeXPaintDevice::ex:
- case QTeXPaintDevice::em:
- break;
- }
- return factor;
-}
-
-double QTeXPaintEngine::resFactorX()
-{
- return unitFactor()/(double)paintDevice()->logicalDpiX();
-}
-
-double QTeXPaintEngine::resFactorY()
-{
- return unitFactor()/(double)paintDevice()->logicalDpiY();
-}
-
-QString QTeXPaintEngine::pgfPoint( const QPointF& p)
-{
- QString u = unit();
- QString s = "{\\pgfpoint{" + QString::number(p.x());
- s += u + "}{" + QString::number(p.y()) + u + "}}";
- return s;
-}
-
-QString QTeXPaintEngine::tikzPoint(const QPointF & p)
-{
- QString u = unit();
- QString s = "(" + QString::number(p.x());
- s += u + "," + QString::number(p.y()) + u + ")";
- return s;
-}
-
-QString QTeXPaintEngine::color( const QColor& col)
-{
- QString s = "\\color[";
- if (d_gray_scale){
- s += "gray]{";
- double gray = qGray(col.rgb())/255.0;
- s += QString::number(gray) + "}\n";
- } else {
- s += "rgb]{";
- s += QString::number(col.redF()) + ",";
- s += QString::number(col.greenF()) + ",";
- s += QString::number(col.blueF()) + "}\n";
- }
-
- return s;
-}
-
-QString QTeXPaintEngine::pgfPen(const QPen& pen)
-{
- QString s = QString::null;
- if (pen.style() == Qt::NoPen)
- return s;
-
- s += color(pen.color());
- s += "\\pgfsetlinewidth{" + QString::number(painter()->pen().widthF()) + "pt}\n";
-
- QString aux = "\\pgfsetdash{";
- QString term = "}{0cm}\n";
-
- double space_length = 0.08*pen.widthF();
- double dot_length = 0.3*space_length;
- double dash_length = 1.5*space_length;
-
- QString dash = "{" + QString::number(dash_length) + "cm}";
- QString dot = "{" + QString::number(dot_length) + "cm}";
- QString space = "{" + QString::number(space_length) + "cm}";
-
- switch (pen.style()){
- case Qt::SolidLine:
- break;
- case Qt::DashLine:
- s += aux + dash + space + term;
- break;
- case Qt::DotLine:
- s += aux + dot + space + term;
- break;
- case Qt::DashDotLine:
- s += aux + dash + space + dot + space + term;
- break;
- case Qt::DashDotDotLine:
- s += aux + dash + space + dot + space + dot + space + term;
- break;
-
- case Qt::CustomDashLine:
- {
- s += aux;
- QVector pattern = pen.dashPattern();
- int count = pattern.count();
- QString u = unit();
- for (int i = 0; i < count; i++)
- s += "{" + QString::number(pattern[i]) + u + "}";
-
- s += term;
- break;
- }
-
- default:
- break;
- }
-
- switch (pen.joinStyle()){
- case Qt::MiterJoin:
- s += "\\pgfsetmiterjoin\n";
- //s += "\\pgfsetmiterlimit{" + QString::number(pen.miterLimit()) + "pt}\n";
- break;
- case Qt::BevelJoin:
- s += "\\pgfsetbeveljoin\n";
- break;
- case Qt::RoundJoin:
- s += "\\pgfsetroundjoin\n";
- break;
- case Qt::SvgMiterJoin:
- s += "\\pgfsetmiterjoin\n";
- break;
- default:
- break;
- }
-
- switch (pen.capStyle()){
- case Qt::FlatCap:
- s += "\\pgfsetrectcap\n";
- break;
- case Qt::SquareCap:
- s += "\\pgfsetrectcap\n";
- break;
- case Qt::RoundCap:
- s += "\\pgfsetroundcap\n";
- break;
- default:
- break;
- }
-
- return s;
-}
-
-QString QTeXPaintEngine::tikzPen(const QPen& pen)
-{
- if (pen.style() == Qt::NoPen)
- return QString::null;
-
- QString col = QString::null;
- if (addNewPenColor()){
- col = color(pen.color());
- d_current_color = pen.color();
- }
-
- QString options = "[line width=";
- options += QString::number(painter()->pen().widthF()) + "pt, ";
-
- double space_length = 0.08*pen.widthF();
- double dot_length = 0.3*space_length;
- double dash_length = 1.5*space_length;
-
- QString dash = "on " + QString::number(dash_length) + "cm";
- QString dot = "on " + QString::number(dot_length) + "cm";
- QString space = " off " + QString::number(space_length) + "cm";
-
- QString aux = "dash pattern=";
- QString term = ", dash phase=0pt, ";
- switch (pen.style()){
- case Qt::SolidLine:
- break;
- case Qt::DashLine:
- options += aux + dash + space + term;
- break;
- case Qt::DotLine:
- options += aux + dot + space + term;
- break;
- case Qt::DashDotLine:
- options += aux + dash + space + dot + space + term;
- break;
- case Qt::DashDotDotLine:
- options += aux + dash + space + dot + space + dot + space + term;
- break;
-
- case Qt::CustomDashLine:
- {
- options += aux;
- QVector pattern = pen.dashPattern();
- int count = pattern.count();
- QString u = unit();
- for (int i = 0; i < count; i++){
- QString s = "on ";
- if (i%2)
- s = " off ";
- options += s + QString::number(pattern[i]) + u;
- }
-
- options += term;
- break;
- }
-
- default:
- break;
- }
-
- options += "line join=";
- switch (pen.joinStyle()){
- case Qt::MiterJoin:
- options += "miter, ";
- break;
- case Qt::BevelJoin:
- options += "bevel, ";
- break;
- case Qt::RoundJoin:
- options += "round, ";
- break;
- case Qt::SvgMiterJoin:
- options += "miter, ";
- break;
- default:
- break;
- }
-
- options += "line cap=";
- switch (pen.capStyle()){
- case Qt::FlatCap:
- options += "rect]";
- break;
- case Qt::SquareCap:
- options += "rect]";
- break;
- case Qt::RoundCap:
- options += "round]";
- break;
- default:
- break;
- }
-
- return col + "\\draw" + options;
-}
-
-QString QTeXPaintEngine::indentString(const QString& s)
-{
- QStringList lst = s.split("\n", QString::SkipEmptyParts);
- for(int i = 0; i < lst.count(); i++)
- lst[i].prepend("\t");
-
- return lst.join("\n") + "\n";
-}
-
-QString QTeXPaintEngine::beginScope()
-{
- QString s = "\\begin{scope}\n";
- if (d_pgf_mode)
- s = "\\begin{pgfscope}\n";
-
- if (painter()->hasClipping()){
- QString clip = clipPath();
- if (!clip.isEmpty())
- s += indentString(clip);
- }
-
- d_pattern_color = QColor();
- d_current_color = QColor();
- return s;
-}
-
-QString QTeXPaintEngine::endScope()
-{
- if (d_pgf_mode)
- return "\\end{pgfscope}\n";
-
- return "\\end{scope}\n";
-}
-
-void QTeXPaintEngine::writeToFile(const QString& s)
-{
- QTextStream t(file);
- t.setCodec("UTF-8");
-
- if (d_pgf_mode){
- t << beginScope();
- t << indentString(s);
- t << endScope();
- return;
- }
-
- QString scope;
- if (d_open_scope)
- scope = endScope();
-
- if (changedClipping()){
- scope += beginScope();
- scope += indentString(s);
- t << scope;
-
- d_open_scope = true;
-
- if (painter()->hasClipping())
- d_clip_path = painter()->clipPath();
- else
- d_clip_path = QPainterPath();
- } else
- t << indentString(s);
-}
-
-bool QTeXPaintEngine::emptyStringOperation()
-{
- if ((painter()->brush().style() == Qt::NoBrush ||
- (painter()->brush().color().alpha() == 0)) &&
- painter()->pen().style() == Qt::NoPen)
- return true;
-
- return false;
-}
-
-bool QTeXPaintEngine::changedClipping()
-{
- QPainterPath clipPath = QPainterPath();
- if (painter()->hasClipping()){
- if (painter()->clipPath().elementCount() > 1000)
- return false;
- clipPath = painter()->clipPath();
- }
-
- if (clipPath != d_clip_path)
- return true;
-
- return false;
-}
-
-bool QTeXPaintEngine::addNewPatternColor()
-{
- Qt::BrushStyle style = painter()->brush().style();
- if (style <= Qt::SolidPattern || style >= Qt::LinearGradientPattern)
- return false;
-
- if (!d_pattern_color.isValid() ||
- d_pattern_color != painter()->brush().color())
- return true;
-
- return false;
-}
-
-bool QTeXPaintEngine::addNewBrushColor()
-{
- if (!d_current_color.isValid() || changedClipping() ||
- d_current_color.name() != painter()->brush().color().name())
- return true;
-
- return false;
-}
-
-bool QTeXPaintEngine::addNewPenColor()
-{
- if (!d_current_color.isValid() ||
- (changedClipping() && painter()->brush().style() == Qt::NoBrush) ||
- d_current_color.name() != painter()->pen().color().name())
- return true;
-
- return false;
-}
-
-QString QTeXPaintEngine::unit()
-{
- switch (d_unit){
- case QTeXPaintDevice::pt:
- return "pt";
- break;
- case QTeXPaintDevice::bp:
- return "bp";
- break;
- case QTeXPaintDevice::mm:
- return "mm";
- break;
- case QTeXPaintDevice::cm:
- return "cm";
- break;
- case QTeXPaintDevice::in:
- return "in";
- break;
- case QTeXPaintDevice::ex:
- return "ex";
- break;
- case QTeXPaintDevice::em:
- return "em";
- break;
- }
- return "pt";
-}
+/***************************************************************************
+ File : QTeXPaintEngine.cpp
+ Project : QTeXEngine GNU GPL v. 3.0
+ --------------------------------------------------------------------
+ Copyright : (C) 2009 by Ion Vasilief
+ Email (use @ for *) : ion_vasilief*yahoo.fr
+ Description : Enables the export of QPainter grafics to .tex files
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 3 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the Free Software *
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, *
+ * Boston, MA 02110-1301 USA *
+ * *
+ ***************************************************************************/
+
+#include "QTeXEngine.h"
+
+#include
+#include
+#include
+#include
+
+QTeXPaintEngine::QTeXPaintEngine(const QString& f, QTeXPaintDevice::Unit u)
+: QPaintEngine(QPaintEngine::AllFeatures),
+fname(f),
+d_pixmap_index(1),
+d_unit(u)
+{
+ d_pgf_mode = false;
+ d_open_scope = false;
+ d_gray_scale = false;
+ d_document_mode = false;
+ d_escape_text = true;
+ d_font_size = true;
+ d_clip_path = QPainterPath();
+ d_current_color = QColor();
+ d_pattern_color = QColor();
+ d_horizontal_alignment = Qt::AlignHCenter;
+}
+
+bool QTeXPaintEngine::begin(QPaintDevice* p)
+{
+ setPaintDevice(p);
+ file = new QFile(fname);
+ if (file->open(QIODevice::WriteOnly)){
+ QTextStream t(file);
+ t.setCodec("UTF-8");
+ if (d_document_mode){
+ t << "\\documentclass{article}\n";
+ t << "\\usepackage[left=0.2cm,top=0.1cm,right=0.2cm,nohead,nofoot]{geometry}\n";
+
+ if (d_pgf_mode){
+ t << "\\usepackage{pgf}\n";
+ t << "\\usepgflibrary{patterns}\n";
+ } else {
+ t << "\\usepackage{tikz}\n";
+ t << "\\usetikzlibrary{patterns}\n";
+ }
+
+ t << "\\usepackage{ulem}\n";//used for striked out fonts (\sout command)
+ t << "\\begin{document}\n";
+ }
+
+ QString pictureEnv = "\\begin{tikzpicture}{0";
+ if (d_pgf_mode)
+ pictureEnv = "\\begin{pgfpicture}{0";
+
+ QString u = unit();
+ t << pictureEnv + u + "}{0" + u + "}{";
+ t << QString::number(p->width()) + u + "}{";
+ t << QString::number(p->height()) + u + "}\n";
+
+ if (!d_pgf_mode){
+ QPainterPath path;
+ path.addRect(QRect(0, 0, p->width(), p->height()));
+ t << "\t\\clip" + tikzPath(path);
+ }
+ return true;
+ }
+
+ delete file;
+ return false;
+}
+
+bool QTeXPaintEngine::end()
+{
+ QTextStream t(file);
+ t.setCodec("UTF-8");
+ if (d_open_scope)
+ t << endScope();
+
+ if (d_pgf_mode)
+ t << "\\end{pgfpicture}\n";
+ else
+ t << "\\end{tikzpicture}\n";
+
+ if (d_document_mode)
+ t << "\\end{document}\n";
+
+ file->close();
+ return true;
+}
+
+void QTeXPaintEngine::drawPoints ( const QPointF * points, int pointCount )
+{
+ if (emptyStringOperation())
+ return;
+
+ QMatrix m = painter()->worldMatrix();
+ double lw = painter()->pen().widthF();
+
+ QString s = QString::null;
+ if (addNewPenColor()){
+ d_current_color = painter()->pen().color();
+ s = color(d_current_color);
+ }
+
+ for (int i = 0; i < pointCount; i++){
+ QPointF p = m.map(points[i]);
+ if (d_pgf_mode){
+ QString path = pgfPoint(convertPoint(p));
+ path += pgfPoint(QPointF(lw, lw)) + "\n";
+ s += "\\pgfrect[fill]" + path;
+ } else {
+ QString path = tikzPoint(convertPoint(p));
+ path += " rectangle " + tikzPoint(convertPoint(QPointF(p.x() + lw, p.y() + lw))) + ";\n";
+ s += "\\fill " + path;
+ }
+ }
+
+ writeToFile(s);
+}
+
+void QTeXPaintEngine::drawLines ( const QLineF * lines, int lineCount )
+{
+ if (painter()->pen().style() == Qt::NoPen)
+ return;
+
+ QString s;
+ for (int i = 0; i < lineCount; i++){
+ QPainterPath path(lines[i].p1());
+ path.lineTo(lines[i].p2());
+
+ s += drawShape(Line, this->path(path));
+ }
+
+ writeToFile(s);
+}
+
+void QTeXPaintEngine::drawPolygon ( const QPointF * points, int pointCount, PolygonDrawMode mode )
+{
+ if (emptyStringOperation())
+ return;
+
+ QVector pts;
+ for (int i = 0; i < pointCount; i++)
+ pts << points[i];
+
+ QPainterPath path;
+ path.addPolygon(QPolygonF(pts));
+ if (mode != QPaintEngine::PolylineMode)
+ path.closeSubpath ();
+
+ QString s;;
+ if (mode != QPaintEngine::PolylineMode){
+ path.closeSubpath ();
+ s += drawShape(Polygon, this->path(path));
+ } else
+ s += drawShape(Polyline, this->path(path));
+
+ writeToFile(s);
+}
+
+void QTeXPaintEngine::drawTextItem ( const QPointF & p, const QTextItem & textItem )
+{
+ QString s = QString::null;
+ if (addNewPenColor()){
+ s = color(painter()->pen().color());
+ d_current_color = painter()->pen().color();
+ }
+
+ QMatrix m = painter()->worldMatrix();
+
+ s += "\\pgftext[";
+
+ QPointF origin = p;
+ switch(d_horizontal_alignment){
+ case Qt::AlignLeft:
+ s += "left";
+ break;
+
+ case Qt::AlignHCenter:
+ case Qt::AlignJustify:
+ origin = QPointF(p.x() + 0.5*textItem.width(), p.y());
+ s += "center";
+ break;
+
+ case Qt::AlignRight:
+ origin = QPointF(p.x() + textItem.width(), p.y());
+ s += "right";
+ break;
+
+ default:
+ break;
+ }
+
+ s += ", base, at=";
+ s += pgfPoint(convertPoint(m.map(origin)));
+
+ if (painter()->transform().isRotating ()){
+ double angle = 180.0/M_PI*acos(m.m11());
+ if (m.m11() != 0.0 && m.m12() > 0)
+ angle = -angle;
+ s += ",rotate=" + QString::number(angle);
+ }
+ s += "]{";
+
+ QFont f = textItem.font();
+ if (d_font_size)
+ s += "\\fontsize{" + QString::number(int(f.pointSizeF())) + "}{0}\\selectfont{";
+
+ if (f.underline())
+ s += "\\underline{";
+ if (f.italic())
+ s += "\\textit{";
+ if (f.bold())
+ s += "\\textbf{";
+ if (f.strikeOut())
+ s += "\\sout{";
+
+ QString text = textItem.text();
+ text.remove(QRegExp("~\\"));
+ if (d_escape_text){
+ text.replace("$", "\\$");
+ text.replace("_", "\\_");
+ text.replace("{", "\\{");
+ text.replace("}", "\\}");
+ text.replace("^", "\\^");
+ text.replace("&", "\\&");
+ text.replace("%", "\\%");
+ text.replace("#", "\\#");
+ }
+
+ s += text;
+ if (d_font_size)
+ s += "}";
+
+ if (f.italic())
+ s += "}";
+ if (f.bold())
+ s += "}";
+ if (f.underline())
+ s += "}";
+ if (f.strikeOut())
+ s += "}";
+
+ s += "}\n";
+
+ writeToFile(s);
+}
+
+void QTeXPaintEngine::drawRects ( const QRectF * rects, int rectCount )
+{
+ if (emptyStringOperation())
+ return;
+
+ QString s;
+ for (int i = 0; i < rectCount; i++){
+ QPainterPath path;
+ path.addPolygon(QPolygonF(rects[i]));
+ s += drawShape(Path, this->path(path));
+ }
+
+ writeToFile(s);
+}
+
+void QTeXPaintEngine::drawEllipse ( const QRectF & rect )
+{
+ if (emptyStringOperation())
+ return;
+
+ QPointF p = painter()->worldMatrix().map(rect.bottomLeft());
+
+ QString path;
+ if (d_pgf_mode){
+ path = pgfPoint(convertPoint(QPointF(p.x() + 0.5*rect.width(), p.y() - 0.5*rect.height())));
+ path += pgfPoint(QPointF(0, 0.5*rect.height()*resFactorY()));
+ path += pgfPoint(QPointF(0.5*rect.width()*resFactorX(), 0)) + "\n";
+ } else {
+ path = tikzPoint(convertPoint(QPointF(p.x() + 0.5*rect.width(), p.y() - 0.5*rect.height())));
+ path += " ellipse (";
+ QString u = unit();
+ path += QString::number(0.5*rect.width()*resFactorX()) + u + " and ";
+ path += QString::number(0.5*rect.height()*resFactorY()) + u + ");\n";
+ }
+
+ writeToFile(drawShape(Ellipse, path));
+}
+
+void QTeXPaintEngine::drawPath ( const QPainterPath & path )
+{
+ if (emptyStringOperation())
+ return;
+
+ writeToFile(drawShape(Path, this->path(path)));
+}
+
+QString QTeXPaintEngine::drawPgfShape(Shape shape, const QString & path)
+{
+ if (path.isEmpty())
+ return QString::null;
+
+ QString stroke_command = path + "\\pgfstroke\n";
+ QString fill_command = path + "\\pgffill\n";
+ switch(shape){
+ case Line:
+ case Polygon:
+ case Polyline:
+ case Path:
+ case Points:
+ break;
+
+ case Rect:
+ stroke_command = "\\pgfrect[stroke]" + path;
+ fill_command = "\\pgfrect[fill]" + path;
+ break;
+
+ case Ellipse:
+ stroke_command = "\\pgfellipse[stroke]" + path;
+ fill_command = "\\pgfellipse[fill]" + path;
+ break;
+ }
+
+ QString s = QString::null;
+ if (shape != Line && shape != Polyline && painter()->brush().style() != Qt::NoBrush){
+ // fill the background
+ s += pgfBrush(painter()->brush());
+ s += fill_command;
+ }
+
+ if (painter()->pen().style() != Qt::NoPen){// draw the contour
+ s += pgfPen(painter()->pen());
+ s += stroke_command;
+ }
+
+ return s;
+}
+
+QString QTeXPaintEngine::drawShape(Shape shape, const QString & path)
+{
+ if (d_pgf_mode)
+ return drawPgfShape(shape, path);
+
+ return drawTikzShape(shape, path);
+}
+
+QString QTeXPaintEngine::drawTikzShape(Shape shape, const QString & path)
+{
+ QString s = QString::null;
+ if (path.isEmpty())
+ return s;
+
+ if (shape != Line && shape != Polyline && painter()->brush().style() != Qt::NoBrush)
+ // fill the background
+ s += tikzBrush(painter()->brush()) + path;
+ if (painter()->pen().style() != Qt::NoPen)// draw the contour
+ s += tikzPen(painter()->pen()) + path;
+
+ return s;
+}
+
+void QTeXPaintEngine::drawImage(const QRectF & r, const QImage & image, const QRectF & sr, Qt::ImageConversionFlags flags)
+{
+ drawPixmap(QPixmap::fromImage(image, flags).copy(sr.toAlignedRect()), r);
+}
+
+void QTeXPaintEngine::drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr)
+{
+ drawPixmap(pm.copy(sr.toAlignedRect()), r);
+}
+
+void QTeXPaintEngine::drawPixmap(const QPixmap &pix, const QRectF &r)
+{
+ QFileInfo fi(*file);
+
+ QString base = fi.baseName() + "-images-";
+ base += QDateTime::currentDateTime().toString("ddMMyy-hhmmss");
+ if (!fi.dir().exists(base)){
+ if (!fi.dir().mkdir(base))
+ return;
+ }
+
+ QString name = fi.dir().absolutePath();
+ name += "/" + base + "/image" + QString::number(d_pixmap_index);
+ name = QDir::cleanPath(name);
+ if (!pix.save(name + ".png", "PNG"))
+ return;
+
+ d_pixmap_index++;
+
+ QTextStream t(file);
+ t.setCodec("UTF-8");
+
+ t << "\\pgfputat";
+ t << pgfPoint(convertPoint(painter()->worldMatrix().map(r.bottomLeft())));
+ t << "{\\pgfimage[interpolate=false,width=";
+
+ QString u = unit();
+ t << QString::number(r.width()*resFactorX()) + u + ",height=";
+ t << QString::number(r.height()*resFactorY()) + u + "]{";
+ t << name;
+ t << "}}\n";
+}
+
+QString QTeXPaintEngine::clipPath()
+{
+ if (painter()->hasClipping()){
+ QPainterPath path = painter()->clipPath().simplified();
+ if (path.elementCount() > 1000)//latex has a limited main memory size
+ return QString::null;
+
+ if (d_pgf_mode)
+ return pgfPath(path) + "\\pgfclip\n";
+ else
+ return "\\clip" + tikzPath(path);
+ }
+ return QString::null;
+}
+
+QString QTeXPaintEngine::defineColor(const QColor& c, const QString& name)
+{
+ QString col = "\\definecolor{" + name + "}{";
+ if (d_gray_scale){
+ col += "gray}{";
+ double gray = qGray(c.rgb())/255.0;
+ col += QString::number(gray) + "}\n";
+ } else {
+ col += "rgb}{";
+ col += QString::number(c.redF()) + ",";
+ col += QString::number(c.greenF()) + ",";
+ col += QString::number(c.blueF()) + "}\n";
+ }
+ return col;
+}
+
+QString QTeXPaintEngine::tikzBrush(const QBrush& brush)
+{
+ QString options = QString::null;
+ if (addNewPatternColor()){
+ options = defineColor(brush.color(), "c");
+ d_pattern_color = brush.color();
+ }
+
+ options += "\\fill [pattern color=c, pattern=";
+
+ switch(brush.style()){
+ case Qt::NoBrush:
+ return QString::null;
+ break;
+
+ case Qt::SolidPattern:
+ {
+ QString s = QString::null;
+ if (addNewBrushColor()){
+ d_current_color = brush.color();
+ s = color(brush.color());
+ }
+
+ s += "\\fill";
+
+ double alpha = painter()->brush().color().alphaF();
+ if(alpha > 0.0 && alpha < 1.0)
+ s += "[opacity=" + QString::number(alpha) + "]";
+
+ return s;
+ }
+ break;
+
+ case Qt::Dense1Pattern:
+ case Qt::Dense2Pattern:
+ case Qt::Dense3Pattern:
+ case Qt::Dense4Pattern:
+ options += "crosshatch dots";
+ break;
+
+ case Qt::Dense5Pattern:
+ case Qt::Dense6Pattern:
+ case Qt::Dense7Pattern:
+ options += "dots";
+ break;
+
+ case Qt::HorPattern:
+ options += "horizontal lines";
+ break;
+ case Qt::VerPattern:
+ options += "vertical lines";
+ break;
+ case Qt::CrossPattern:
+ options += "grid";
+ break;
+ case Qt::BDiagPattern:
+ options += "north east lines";
+ break;
+ case Qt::FDiagPattern:
+ options += "north west lines";
+ break;
+ case Qt::DiagCrossPattern:
+ options += "crosshatch";
+ break;
+
+ case Qt::LinearGradientPattern:
+ {
+ const QLinearGradient *qtgradient = (const QLinearGradient *)brush.gradient();
+ QGradientStops stops = qtgradient->stops();
+
+ QString lc = defineColor(stops.first().second, "lc");
+ QString rc = defineColor(stops.last().second, "rc");
+
+ QMatrix m = painter()->worldMatrix();
+ QPointF sp = m.map(qtgradient->start());
+ QPointF ep = m.map(qtgradient->finalStop());
+
+ options = lc + rc + "\\fill [";
+ options += "left color=lc, ";
+ options += "right color=rc, ";
+ options += "shading angle=" + QString::number(-QLineF(sp, ep).angle());
+ }
+ break;
+
+ case Qt::RadialGradientPattern:
+ {
+ const QRadialGradient *qtgradient = (const QRadialGradient *)brush.gradient();
+ QGradientStops stops = qtgradient->stops();
+
+ QString colors;
+ int count = stops.count();
+ colors += defineColor(stops[0].second, "c1");
+ colors += defineColor(stops[count - 1].second, "c2");
+
+ /*for (int i = 0; i < count; i++){
+ QGradientStop stop = stops[i];
+ colors += defineColor(stop.second, "c" + QString::number(i + 1));
+ }*/
+
+ options = colors + "\\fill [";
+ options += "inner color=c1, ";
+ options += "outer color=c2, ";
+ options += "shading=radial";
+ qWarning("QTeXEngine: Uncentered Qt::RadialGradientPattern with more than two colors not supported.");
+
+ }
+ break;
+
+ case Qt::ConicalGradientPattern:
+ {
+ qWarning("QTeXEngine: Qt::ConicalGradientPattern is not supported.");
+ return QString::null;
+ }
+ break;
+
+ default:
+ break;
+ }
+ return options + "]";
+}
+
+QString QTeXPaintEngine::pgfBrush(const QBrush& brush)
+{
+ QString s = QString::null;
+ QColor c = brush.color();
+ QString col = defineColor(c, "c");
+ QString command = "\\pgfsetfillpattern{";
+ switch(brush.style()){
+ case Qt::NoBrush:
+ break;
+
+ case Qt::SolidPattern:
+ s += color(c);
+ break;
+
+ case Qt::Dense1Pattern:
+ case Qt::Dense2Pattern:
+ case Qt::Dense3Pattern:
+ case Qt::Dense4Pattern:
+ s += col + command + "crosshatch dots}{c}\n";
+ break;
+
+ case Qt::Dense5Pattern:
+ case Qt::Dense6Pattern:
+ case Qt::Dense7Pattern:
+ s += col + command + "dots}{c}\n";
+ break;
+
+ case Qt::HorPattern:
+ s += col + command + "horizontal lines}{c}\n";
+ break;
+ case Qt::VerPattern:
+ s += col + command + "vertical lines}{c}\n";
+ break;
+ case Qt::CrossPattern:
+ s += col + command + "grid}{c}\n";
+ break;
+ case Qt::BDiagPattern:
+ s += col + command + "north east lines}{c}\n";
+ break;
+ case Qt::FDiagPattern:
+ s += col + command + "north west lines}{c}\n";
+ break;
+ case Qt::DiagCrossPattern:
+ s += col + command + "crosshatch}{c}\n";
+ break;
+
+ default:
+ break;
+ }
+ return s;
+}
+
+QString QTeXPaintEngine::path(const QPainterPath & path)
+{
+ if (path.isEmpty ())
+ return QString::null;
+
+ if (d_pgf_mode)
+ return pgfPath(path);
+
+ return tikzPath(path);
+}
+
+QString QTeXPaintEngine::pgfPath(const QPainterPath & path)
+{
+ QString s = QString::null;
+ int points = path.elementCount();
+ QMatrix m = painter()->worldMatrix();
+ int curvePoints = 0;
+ for (int i = 0; i < points; i++){
+ QPainterPath::Element el = path.elementAt(i);
+ QPointF p = m.map(QPointF(el.x, el.y));
+
+ switch(el.type){
+ case QPainterPath::MoveToElement:
+ s += "\\pgfmoveto" + pgfPoint(convertPoint(p)) + "\n";
+ break;
+
+ case QPainterPath::LineToElement:
+ s += "\\pgflineto" + pgfPoint(convertPoint(p)) + "\n";
+ break;
+
+ case QPainterPath::CurveToElement:
+ s += "\\pgfcurveto" + pgfPoint(convertPoint(p));
+ curvePoints = 0;
+ break;
+
+ case QPainterPath::CurveToDataElement:
+ s += pgfPoint(convertPoint(p));
+ curvePoints++;
+ if (curvePoints == 2)
+ s += "\n";
+ break;
+ }
+ }
+ return s;
+}
+
+QString QTeXPaintEngine::tikzPath(const QPainterPath & path)
+{
+ QString s = QString::null;
+ if (path.isEmpty())
+ return s;
+
+ int points = path.elementCount();
+ QMatrix m = painter()->worldMatrix();
+ int curvePoints = 0;
+ for (int i = 0; i < points; i++){
+ QPainterPath::Element el = path.elementAt(i);
+ QPointF p = m.map(QPointF(el.x, el.y));
+ switch(el.type){
+ case QPainterPath::MoveToElement:
+ s += tikzPoint(convertPoint(p));
+ break;
+
+ case QPainterPath::LineToElement:
+ s += " -- " + tikzPoint(convertPoint(p));
+ break;
+
+ case QPainterPath::CurveToElement:
+ s += " .. controls " + tikzPoint(convertPoint(p));
+ curvePoints = 0;
+ break;
+
+ case QPainterPath::CurveToDataElement:
+ curvePoints++;
+ if (curvePoints == 1)
+ s += " and " + tikzPoint(convertPoint(p));
+ else if (curvePoints == 2)
+ s += " .. " + tikzPoint(convertPoint(p));
+ break;
+ }
+ }
+ return s + ";\n";
+}
+
+QPointF QTeXPaintEngine::convertPoint( const QPointF& p)
+{
+ return QPointF(resFactorX()*p.x(), paintDevice()->height() - resFactorY()*p.y());
+}
+
+double QTeXPaintEngine::unitFactor()
+{
+ double factor = 1.0;
+ switch (d_unit){
+ case QTeXPaintDevice::pt:
+ factor = 72.27;
+ break;
+ case QTeXPaintDevice::bp:
+ factor = 72;
+ break;
+ case QTeXPaintDevice::mm:
+ factor = 25.4;
+ break;
+ case QTeXPaintDevice::cm:
+ factor = 2.54;
+ break;
+ case QTeXPaintDevice::in:
+ case QTeXPaintDevice::ex:
+ case QTeXPaintDevice::em:
+ break;
+ }
+ return factor;
+}
+
+double QTeXPaintEngine::resFactorX()
+{
+ return unitFactor()/(double)paintDevice()->logicalDpiX();
+}
+
+double QTeXPaintEngine::resFactorY()
+{
+ return unitFactor()/(double)paintDevice()->logicalDpiY();
+}
+
+QString QTeXPaintEngine::pgfPoint( const QPointF& p)
+{
+ QString u = unit();
+ QString s = "{\\pgfpoint{" + QString::number(p.x());
+ s += u + "}{" + QString::number(p.y()) + u + "}}";
+ return s;
+}
+
+QString QTeXPaintEngine::tikzPoint(const QPointF & p)
+{
+ QString u = unit();
+ QString s = "(" + QString::number(p.x());
+ s += u + "," + QString::number(p.y()) + u + ")";
+ return s;
+}
+
+QString QTeXPaintEngine::color( const QColor& col)
+{
+ QString s = "\\color[";
+ if (d_gray_scale){
+ s += "gray]{";
+ double gray = qGray(col.rgb())/255.0;
+ s += QString::number(gray) + "}\n";
+ } else {
+ s += "rgb]{";
+ s += QString::number(col.redF()) + ",";
+ s += QString::number(col.greenF()) + ",";
+ s += QString::number(col.blueF()) + "}\n";
+ }
+
+ return s;
+}
+
+QString QTeXPaintEngine::pgfPen(const QPen& pen)
+{
+ QString s = QString::null;
+ if (pen.style() == Qt::NoPen)
+ return s;
+
+ s += color(pen.color());
+ s += "\\pgfsetlinewidth{" + QString::number(painter()->pen().widthF()) + "pt}\n";
+
+ QString aux = "\\pgfsetdash{";
+ QString term = "}{0cm}\n";
+
+ double space_length = 0.08*pen.widthF();
+ double dot_length = 0.3*space_length;
+ double dash_length = 1.5*space_length;
+
+ QString dash = "{" + QString::number(dash_length) + "cm}";
+ QString dot = "{" + QString::number(dot_length) + "cm}";
+ QString space = "{" + QString::number(space_length) + "cm}";
+
+ switch (pen.style()){
+ case Qt::SolidLine:
+ break;
+ case Qt::DashLine:
+ s += aux + dash + space + term;
+ break;
+ case Qt::DotLine:
+ s += aux + dot + space + term;
+ break;
+ case Qt::DashDotLine:
+ s += aux + dash + space + dot + space + term;
+ break;
+ case Qt::DashDotDotLine:
+ s += aux + dash + space + dot + space + dot + space + term;
+ break;
+
+ case Qt::CustomDashLine:
+ {
+ s += aux;
+ QVector pattern = pen.dashPattern();
+ int count = pattern.count();
+ QString u = unit();
+ for (int i = 0; i < count; i++)
+ s += "{" + QString::number(pattern[i]) + u + "}";
+
+ s += term;
+ break;
+ }
+
+ default:
+ break;
+ }
+
+ switch (pen.joinStyle()){
+ case Qt::MiterJoin:
+ s += "\\pgfsetmiterjoin\n";
+ //s += "\\pgfsetmiterlimit{" + QString::number(pen.miterLimit()) + "pt}\n";
+ break;
+ case Qt::BevelJoin:
+ s += "\\pgfsetbeveljoin\n";
+ break;
+ case Qt::RoundJoin:
+ s += "\\pgfsetroundjoin\n";
+ break;
+ case Qt::SvgMiterJoin:
+ s += "\\pgfsetmiterjoin\n";
+ break;
+ default:
+ break;
+ }
+
+ switch (pen.capStyle()){
+ case Qt::FlatCap:
+ s += "\\pgfsetrectcap\n";
+ break;
+ case Qt::SquareCap:
+ s += "\\pgfsetrectcap\n";
+ break;
+ case Qt::RoundCap:
+ s += "\\pgfsetroundcap\n";
+ break;
+ default:
+ break;
+ }
+
+ return s;
+}
+
+QString QTeXPaintEngine::tikzPen(const QPen& pen)
+{
+ if (pen.style() == Qt::NoPen)
+ return QString::null;
+
+ QString col = QString::null;
+ if (addNewPenColor()){
+ col = color(pen.color());
+ d_current_color = pen.color();
+ }
+
+ QString options = "[line width=";
+ options += QString::number(painter()->pen().widthF()) + "pt, ";
+
+ double space_length = 0.08*pen.widthF();
+ double dot_length = 0.3*space_length;
+ double dash_length = 1.5*space_length;
+
+ QString dash = "on " + QString::number(dash_length) + "cm";
+ QString dot = "on " + QString::number(dot_length) + "cm";
+ QString space = " off " + QString::number(space_length) + "cm";
+
+ QString aux = "dash pattern=";
+ QString term = ", dash phase=0pt, ";
+ switch (pen.style()){
+ case Qt::SolidLine:
+ break;
+ case Qt::DashLine:
+ options += aux + dash + space + term;
+ break;
+ case Qt::DotLine:
+ options += aux + dot + space + term;
+ break;
+ case Qt::DashDotLine:
+ options += aux + dash + space + dot + space + term;
+ break;
+ case Qt::DashDotDotLine:
+ options += aux + dash + space + dot + space + dot + space + term;
+ break;
+
+ case Qt::CustomDashLine:
+ {
+ options += aux;
+ QVector pattern = pen.dashPattern();
+ int count = pattern.count();
+ QString u = unit();
+ for (int i = 0; i < count; i++){
+ QString s = "on ";
+ if (i%2)
+ s = " off ";
+ options += s + QString::number(pattern[i]) + u;
+ }
+
+ options += term;
+ break;
+ }
+
+ default:
+ break;
+ }
+
+ options += "line join=";
+ switch (pen.joinStyle()){
+ case Qt::MiterJoin:
+ options += "miter, ";
+ break;
+ case Qt::BevelJoin:
+ options += "bevel, ";
+ break;
+ case Qt::RoundJoin:
+ options += "round, ";
+ break;
+ case Qt::SvgMiterJoin:
+ options += "miter, ";
+ break;
+ default:
+ break;
+ }
+
+ options += "line cap=";
+ switch (pen.capStyle()){
+ case Qt::FlatCap:
+ options += "rect]";
+ break;
+ case Qt::SquareCap:
+ options += "rect]";
+ break;
+ case Qt::RoundCap:
+ options += "round]";
+ break;
+ default:
+ break;
+ }
+
+ return col + "\\draw" + options;
+}
+
+QString QTeXPaintEngine::indentString(const QString& s)
+{
+ QStringList lst = s.split("\n", QString::SkipEmptyParts);
+ for(int i = 0; i < lst.count(); i++)
+ lst[i].prepend("\t");
+
+ return lst.join("\n") + "\n";
+}
+
+QString QTeXPaintEngine::beginScope()
+{
+ QString s = "\\begin{scope}\n";
+ if (d_pgf_mode)
+ s = "\\begin{pgfscope}\n";
+
+ if (painter()->hasClipping()){
+ QString clip = clipPath();
+ if (!clip.isEmpty())
+ s += indentString(clip);
+ }
+
+ d_pattern_color = QColor();
+ d_current_color = QColor();
+ return s;
+}
+
+QString QTeXPaintEngine::endScope()
+{
+ if (d_pgf_mode)
+ return "\\end{pgfscope}\n";
+
+ return "\\end{scope}\n";
+}
+
+void QTeXPaintEngine::writeToFile(const QString& s)
+{
+ QTextStream t(file);
+ t.setCodec("UTF-8");
+
+ if (d_pgf_mode){
+ t << beginScope();
+ t << indentString(s);
+ t << endScope();
+ return;
+ }
+
+ QString scope;
+ if (d_open_scope)
+ scope = endScope();
+
+ if (changedClipping()){
+ scope += beginScope();
+ scope += indentString(s);
+ t << scope;
+
+ d_open_scope = true;
+
+ if (painter()->hasClipping())
+ d_clip_path = painter()->clipPath();
+ else
+ d_clip_path = QPainterPath();
+ } else
+ t << indentString(s);
+}
+
+bool QTeXPaintEngine::emptyStringOperation()
+{
+ if ((painter()->brush().style() == Qt::NoBrush ||
+ (painter()->brush().color().alpha() == 0)) &&
+ painter()->pen().style() == Qt::NoPen)
+ return true;
+
+ return false;
+}
+
+bool QTeXPaintEngine::changedClipping()
+{
+ QPainterPath clipPath = QPainterPath();
+ if (painter()->hasClipping()){
+ if (painter()->clipPath().elementCount() > 1000)
+ return false;
+ clipPath = painter()->clipPath();
+ }
+
+ if (clipPath != d_clip_path)
+ return true;
+
+ return false;
+}
+
+bool QTeXPaintEngine::addNewPatternColor()
+{
+ Qt::BrushStyle style = painter()->brush().style();
+ if (style <= Qt::SolidPattern || style >= Qt::LinearGradientPattern)
+ return false;
+
+ if (!d_pattern_color.isValid() ||
+ d_pattern_color != painter()->brush().color())
+ return true;
+
+ return false;
+}
+
+bool QTeXPaintEngine::addNewBrushColor()
+{
+ if (!d_current_color.isValid() || changedClipping() ||
+ d_current_color.name() != painter()->brush().color().name())
+ return true;
+
+ return false;
+}
+
+bool QTeXPaintEngine::addNewPenColor()
+{
+ if (!d_current_color.isValid() ||
+ (changedClipping() && painter()->brush().style() == Qt::NoBrush) ||
+ d_current_color.name() != painter()->pen().color().name())
+ return true;
+
+ return false;
+}
+
+QString QTeXPaintEngine::unit()
+{
+ switch (d_unit){
+ case QTeXPaintDevice::pt:
+ return "pt";
+ break;
+ case QTeXPaintDevice::bp:
+ return "bp";
+ break;
+ case QTeXPaintDevice::mm:
+ return "mm";
+ break;
+ case QTeXPaintDevice::cm:
+ return "cm";
+ break;
+ case QTeXPaintDevice::in:
+ return "in";
+ break;
+ case QTeXPaintDevice::ex:
+ return "ex";
+ break;
+ case QTeXPaintDevice::em:
+ return "em";
+ break;
+ }
+ return "pt";
+}
diff --git a/test/jkqtplot_test/QTeXEngine/src/src.pro b/examples/jkqtplot_test/QTeXEngine/src/src.pro
similarity index 95%
rename from test/jkqtplot_test/QTeXEngine/src/src.pro
rename to examples/jkqtplot_test/QTeXEngine/src/src.pro
index b970080df1..a91375605d 100644
--- a/test/jkqtplot_test/QTeXEngine/src/src.pro
+++ b/examples/jkqtplot_test/QTeXEngine/src/src.pro
@@ -1,21 +1,21 @@
-# qmake project file for building the QTeXEngine libraries
-
-include( ../config.pri )
-
-TARGET = QTeXEngine
-TEMPLATE = lib
-
-MOC_DIR = ../tmp
-OBJECTS_DIR = ../tmp
-DESTDIR = ../
-
-contains(CONFIG, QTeXEngineDll) {
- CONFIG += dll
- DEFINES += QTEXENGINE_DLL QTEXENGINE_DLL_BUILD
-} else {
- CONFIG += staticlib
-}
-
-HEADERS = QTeXEngine.h
-SOURCES += QTeXPaintEngine.cpp
-SOURCES += QTeXPaintDevice.cpp
+# qmake project file for building the QTeXEngine libraries
+
+include( ../config.pri )
+
+TARGET = QTeXEngine
+TEMPLATE = lib
+
+MOC_DIR = ../tmp
+OBJECTS_DIR = ../tmp
+DESTDIR = ../
+
+contains(CONFIG, QTeXEngineDll) {
+ CONFIG += dll
+ DEFINES += QTEXENGINE_DLL QTEXENGINE_DLL_BUILD
+} else {
+ CONFIG += staticlib
+}
+
+HEADERS = QTeXEngine.h
+SOURCES += QTeXPaintEngine.cpp
+SOURCES += QTeXPaintDevice.cpp
diff --git a/test/jkqtplot_test/QTeXEngine/test/machines.tif b/examples/jkqtplot_test/QTeXEngine/test/machines.tif
similarity index 100%
rename from test/jkqtplot_test/QTeXEngine/test/machines.tif
rename to examples/jkqtplot_test/QTeXEngine/test/machines.tif
diff --git a/test/jkqtplot_test/QTeXEngine/test/test.cpp b/examples/jkqtplot_test/QTeXEngine/test/test.cpp
similarity index 99%
rename from test/jkqtplot_test/QTeXEngine/test/test.cpp
rename to examples/jkqtplot_test/QTeXEngine/test/test.cpp
index d0cf1c9ec6..f4fc71266a 100644
--- a/test/jkqtplot_test/QTeXEngine/test/test.cpp
+++ b/examples/jkqtplot_test/QTeXEngine/test/test.cpp
@@ -46,14 +46,14 @@ public:
int main(int argc, char **argv) {
QApplication app(argc, argv);
GraphicsView view;
- view.show();
+ view.show();
- QTeXPaintDevice tex("test.tex", view.scene()->sceneRect().size().toSize());
- tex.setOutputMode(QTeXPaintDevice::Pgf);
- tex.setDocumentMode();
+ QTeXPaintDevice tex("test.tex", view.scene()->sceneRect().size().toSize());
+ tex.setOutputMode(QTeXPaintDevice::Pgf);
+ tex.setDocumentMode();
QPainter painter(&tex);
view.scene()->render(&painter);
painter.end();
return app.exec();
-}
+}
diff --git a/test/jkqtplot_test/QTeXEngine/test/test.pro b/examples/jkqtplot_test/QTeXEngine/test/test.pro
similarity index 94%
rename from test/jkqtplot_test/QTeXEngine/test/test.pro
rename to examples/jkqtplot_test/QTeXEngine/test/test.pro
index 715df6b345..20efcc0cde 100644
--- a/test/jkqtplot_test/QTeXEngine/test/test.pro
+++ b/examples/jkqtplot_test/QTeXEngine/test/test.pro
@@ -1,12 +1,12 @@
-TARGET = test
-TEMPLATE = app
-CONFIG += warn_on release thread
-
-MOC_DIR = ../tmp
-OBJECTS_DIR = ../tmp
-DESTDIR = ./
-
-INCLUDEPATH += ../src
-LIBS += ../libQTeXEngine.a
-
-SOURCES += test.cpp
+TARGET = test
+TEMPLATE = app
+CONFIG += warn_on release thread
+
+MOC_DIR = ../tmp
+OBJECTS_DIR = ../tmp
+DESTDIR = ./
+
+INCLUDEPATH += ../src
+LIBS += ../libQTeXEngine.a
+
+SOURCES += test.cpp
diff --git a/test/jkqtplot_test/QTeXEngine/test/thermal.tif b/examples/jkqtplot_test/QTeXEngine/test/thermal.tif
similarity index 100%
rename from test/jkqtplot_test/QTeXEngine/test/thermal.tif
rename to examples/jkqtplot_test/QTeXEngine/test/thermal.tif
diff --git a/test/jkqtplot_test/TestWidgetBarcharts.cpp b/examples/jkqtplot_test/TestWidgetBarcharts.cpp
similarity index 97%
rename from test/jkqtplot_test/TestWidgetBarcharts.cpp
rename to examples/jkqtplot_test/TestWidgetBarcharts.cpp
index 43bd462542..acc5f22803 100644
--- a/test/jkqtplot_test/TestWidgetBarcharts.cpp
+++ b/examples/jkqtplot_test/TestWidgetBarcharts.cpp
@@ -1,155 +1,155 @@
-#include "TestWidgetBarcharts.h"
-#include
-#include
-#include
-#include
-#include "jkqtplotter/jkqtpgraphsbarchart.h"
-
-
-
-
-
-TestWidgetBarcharts::TestWidgetBarcharts(QWidget *parent) :
- QWidget(parent)
-{
-
-
- QVBoxLayout* barchartLayout=new QVBoxLayout(this);
- setLayout(barchartLayout);
- resize(1000, 800);
- plotBarchart=new JKQtPlotter(true, this);
- plotBarchart->set_doDrawing(false);
- plotBarchart->get_plotter()->set_plotLabel(tr("\\textbf{bar charts}"));
- plotBarchart->setObjectName("plotBarchart");
- plotBarchart->get_plotter()->set_userSettigsFilename(QApplication::applicationDirPath()+"/usersettings.ini", "plot_peaks/");
- plotBarchart->get_plotter()->get_xAxis()->set_labelType(JKQTPCALTdate);
- plotBarchart->get_plotter()->get_xAxis()->set_tickDateFormat("dd. MMM yyyy");
-
- barchartLayout->addWidget(plotBarchart);
-
- QVector dataBCX, dataBCXD, dataBCY1, dataBCY2, dataBCYE1, dataBCYE2;
- for (int i=0; i<8; i++) {
- double x=double(i);
- dataBCX<getDatastore()->addCopiedColumn(dataBCX, "x");
- size_t bcpxd=plotBarchart->getDatastore()->addCopiedColumn(dataBCXD, "x_date");
- size_t bcpy1=plotBarchart->getDatastore()->addCopiedColumn(dataBCY1, "y1");
- size_t bcpye1=plotBarchart->getDatastore()->addCopiedColumn(dataBCYE1, "ye1");
- size_t bcpy2=plotBarchart->getDatastore()->addCopiedColumn(dataBCY2, "y2");
- size_t bcpye2=plotBarchart->getDatastore()->addCopiedColumn(dataBCYE2, "ye2");
-
- JKQTPbarVerticalErrorGraph* plteBar1=new JKQTPbarVerticalErrorGraph(plotBarchart->get_plotter());
- plteBar1->set_title(tr("bars 1"));
- plteBar1->set_xColumn(bcpxd);
- plteBar1->set_yColumn(bcpy1);
- plteBar1->set_yErrorColumn(bcpye1);
- plteBar1->set_width(0.45);
- plteBar1->set_shift(-0.25);
- plotBarchart->get_plotter()->addGraph(plteBar1);
-
- JKQTPbarVerticalErrorGraph* plteBar2=new JKQTPbarVerticalErrorGraph(plotBarchart->get_plotter());
- plteBar2->set_xColumn(bcpxd);
- plteBar2->set_yColumn(bcpy2);
- plteBar2->set_yErrorColumn(bcpye2);
- plteBar2->set_title(tr("bars 2"));
- plteBar2->set_width(0.45);
- plteBar2->set_shift(0.25);
- plteBar2->set_baseline(0.5);
- plteBar2->set_yErrorSymmetric(false);
- plotBarchart->get_plotter()->addGraph(plteBar2);
-
- plteBar2->autoscaleBarWidthAndShift();
- plotBarchart->set_doDrawing(true);
- plotBarchart->zoomToFit();
-
-
-
-
- plotBarchart2=new JKQtPlotter(false, this, plotBarchart->getDatastore());
- plotBarchart2->set_doDrawing(false);
- plotBarchart2->get_plotter()->set_plotLabel(tr("\\textbf{bar charts}"));
- plotBarchart2->setObjectName("plotBarchart2");
- plotBarchart2->get_plotter()->set_userSettigsFilename(QApplication::applicationDirPath()+"/usersettings.ini", "plot_peaks/");
-
- barchartLayout->addWidget(plotBarchart2);
-
- JKQTPbarHorizontalErrorGraph* plteBar3=new JKQTPbarHorizontalErrorGraph(plotBarchart2->get_plotter());
- plteBar3->set_title(tr("bars 1"));
- plteBar3->set_yColumn(bcpx);
- plteBar3->set_xColumn(bcpy1);
- plteBar3->set_xErrorColumn(bcpye1);
- plteBar3->set_width(0.45);
- plteBar3->set_shift(-0.25);
- plotBarchart2->get_plotter()->addGraph(plteBar3);
-
- JKQTPbarHorizontalErrorGraph* plteBar4=new JKQTPbarHorizontalErrorGraph(plotBarchart2->get_plotter());
- plteBar4->set_yColumn(bcpx);
- plteBar4->set_xColumn(bcpy2);
- plteBar4->set_xErrorColumn(bcpye2);
- plteBar4->set_title(tr("bars 2"));
- plteBar4->set_width(0.45);
- plteBar4->set_shift(0.25);
- plteBar4->set_xErrorSymmetric(false);
- plotBarchart2->get_plotter()->addGraph(plteBar4);
-
- plteBar4->autoscaleBarWidthAndShift(0.9, 1);
- plotBarchart2->set_doDrawing(true);
- plotBarchart2->zoomToFit();
-
- chkBarLog=new QCheckBox(tr("log-log plots"), this);
- chkBarLog->setChecked(false);
- barchartLayout->addWidget(chkBarLog);
- connect(chkBarLog, SIGNAL(toggled(bool)), this, SLOT(setBarchartLogLog(bool)));
-
- spinBarLabelAngel=new QSpinBox(this);
- spinBarLabelAngel->setPrefix(tr("rotation angel: "));
- spinBarLabelAngel->setSuffix(QLatin1String("°"));
- spinBarLabelAngel->setRange(-180,180);
- spinBarLabelAngel->setValue(0);
- spinBarLabelAngel->setSingleStep(15);
- barchartLayout->addWidget(spinBarLabelAngel);
- connect(spinBarLabelAngel, SIGNAL(valueChanged(int)), this, SLOT(setBarchartAngele(int)));
-
- spinBarLabelAngel2=new QSpinBox(this);
- spinBarLabelAngel2->setPrefix(tr("rotation angel: "));
- spinBarLabelAngel2->setSuffix(QLatin1String("°"));
- spinBarLabelAngel2->setRange(-180,180);
- spinBarLabelAngel2->setValue(0);
- spinBarLabelAngel2->setSingleStep(15);
- barchartLayout->addWidget(spinBarLabelAngel2);
- connect(spinBarLabelAngel2, SIGNAL(valueChanged(int)), this, SLOT(setBarchartAngele2(int)));
-
-
-}
-
-
-void TestWidgetBarcharts::setBarchartLogLog(bool checked)
-{
- plotBarchart->get_xAxis()->set_logAxis(checked);
- plotBarchart->get_yAxis()->set_logAxis(checked);
- plotBarchart->zoomToFit();
- plotBarchart2->get_xAxis()->set_logAxis(checked);
- plotBarchart2->get_yAxis()->set_logAxis(checked);
- plotBarchart2->zoomToFit();
-}
-
-void TestWidgetBarcharts::setBarchartAngele(int angle)
-{
- plotBarchart->get_xAxis()->set_tickLabelAngle(angle);
- plotBarchart->get_xAxis()->set_drawMode2(JKQTPCADMcomplete);
-}
-
-void TestWidgetBarcharts::setBarchartAngele2(int angle)
-{
- plotBarchart->get_yAxis()->set_tickLabelAngle(angle);
- plotBarchart->get_yAxis()->set_drawMode2(JKQTPCADMcomplete);
-}
+#include "TestWidgetBarcharts.h"
+#include
+#include
+#include
+#include
+#include "jkqtplotter/jkqtpgraphsbarchart.h"
+
+
+
+
+
+TestWidgetBarcharts::TestWidgetBarcharts(QWidget *parent) :
+ QWidget(parent)
+{
+
+
+ QVBoxLayout* barchartLayout=new QVBoxLayout(this);
+ setLayout(barchartLayout);
+ resize(1000, 800);
+ plotBarchart=new JKQtPlotter(true, this);
+ plotBarchart->set_doDrawing(false);
+ plotBarchart->get_plotter()->set_plotLabel(tr("\\textbf{bar charts}"));
+ plotBarchart->setObjectName("plotBarchart");
+ plotBarchart->get_plotter()->set_userSettigsFilename(QApplication::applicationDirPath()+"/usersettings.ini", "plot_peaks/");
+ plotBarchart->get_plotter()->get_xAxis()->set_labelType(JKQTPCALTdate);
+ plotBarchart->get_plotter()->get_xAxis()->set_tickDateFormat("dd. MMM yyyy");
+
+ barchartLayout->addWidget(plotBarchart);
+
+ QVector dataBCX, dataBCXD, dataBCY1, dataBCY2, dataBCYE1, dataBCYE2;
+ for (int i=0; i<8; i++) {
+ double x=double(i);
+ dataBCX<getDatastore()->addCopiedColumn(dataBCX, "x");
+ size_t bcpxd=plotBarchart->getDatastore()->addCopiedColumn(dataBCXD, "x_date");
+ size_t bcpy1=plotBarchart->getDatastore()->addCopiedColumn(dataBCY1, "y1");
+ size_t bcpye1=plotBarchart->getDatastore()->addCopiedColumn(dataBCYE1, "ye1");
+ size_t bcpy2=plotBarchart->getDatastore()->addCopiedColumn(dataBCY2, "y2");
+ size_t bcpye2=plotBarchart->getDatastore()->addCopiedColumn(dataBCYE2, "ye2");
+
+ JKQTPbarVerticalErrorGraph* plteBar1=new JKQTPbarVerticalErrorGraph(plotBarchart->get_plotter());
+ plteBar1->set_title(tr("bars 1"));
+ plteBar1->set_xColumn(bcpxd);
+ plteBar1->set_yColumn(bcpy1);
+ plteBar1->set_yErrorColumn(bcpye1);
+ plteBar1->set_width(0.45);
+ plteBar1->set_shift(-0.25);
+ plotBarchart->get_plotter()->addGraph(plteBar1);
+
+ JKQTPbarVerticalErrorGraph* plteBar2=new JKQTPbarVerticalErrorGraph(plotBarchart->get_plotter());
+ plteBar2->set_xColumn(bcpxd);
+ plteBar2->set_yColumn(bcpy2);
+ plteBar2->set_yErrorColumn(bcpye2);
+ plteBar2->set_title(tr("bars 2"));
+ plteBar2->set_width(0.45);
+ plteBar2->set_shift(0.25);
+ plteBar2->set_baseline(0.5);
+ plteBar2->set_yErrorSymmetric(false);
+ plotBarchart->get_plotter()->addGraph(plteBar2);
+
+ plteBar2->autoscaleBarWidthAndShift();
+ plotBarchart->set_doDrawing(true);
+ plotBarchart->zoomToFit();
+
+
+
+
+ plotBarchart2=new JKQtPlotter(false, this, plotBarchart->getDatastore());
+ plotBarchart2->set_doDrawing(false);
+ plotBarchart2->get_plotter()->set_plotLabel(tr("\\textbf{bar charts}"));
+ plotBarchart2->setObjectName("plotBarchart2");
+ plotBarchart2->get_plotter()->set_userSettigsFilename(QApplication::applicationDirPath()+"/usersettings.ini", "plot_peaks/");
+
+ barchartLayout->addWidget(plotBarchart2);
+
+ JKQTPbarHorizontalErrorGraph* plteBar3=new JKQTPbarHorizontalErrorGraph(plotBarchart2->get_plotter());
+ plteBar3->set_title(tr("bars 1"));
+ plteBar3->set_yColumn(bcpx);
+ plteBar3->set_xColumn(bcpy1);
+ plteBar3->set_xErrorColumn(bcpye1);
+ plteBar3->set_width(0.45);
+ plteBar3->set_shift(-0.25);
+ plotBarchart2->get_plotter()->addGraph(plteBar3);
+
+ JKQTPbarHorizontalErrorGraph* plteBar4=new JKQTPbarHorizontalErrorGraph(plotBarchart2->get_plotter());
+ plteBar4->set_yColumn(bcpx);
+ plteBar4->set_xColumn(bcpy2);
+ plteBar4->set_xErrorColumn(bcpye2);
+ plteBar4->set_title(tr("bars 2"));
+ plteBar4->set_width(0.45);
+ plteBar4->set_shift(0.25);
+ plteBar4->set_xErrorSymmetric(false);
+ plotBarchart2->get_plotter()->addGraph(plteBar4);
+
+ plteBar4->autoscaleBarWidthAndShift(0.9, 1);
+ plotBarchart2->set_doDrawing(true);
+ plotBarchart2->zoomToFit();
+
+ chkBarLog=new QCheckBox(tr("log-log plots"), this);
+ chkBarLog->setChecked(false);
+ barchartLayout->addWidget(chkBarLog);
+ connect(chkBarLog, SIGNAL(toggled(bool)), this, SLOT(setBarchartLogLog(bool)));
+
+ spinBarLabelAngel=new QSpinBox(this);
+ spinBarLabelAngel->setPrefix(tr("rotation angel: "));
+ spinBarLabelAngel->setSuffix(QLatin1String("°"));
+ spinBarLabelAngel->setRange(-180,180);
+ spinBarLabelAngel->setValue(0);
+ spinBarLabelAngel->setSingleStep(15);
+ barchartLayout->addWidget(spinBarLabelAngel);
+ connect(spinBarLabelAngel, SIGNAL(valueChanged(int)), this, SLOT(setBarchartAngele(int)));
+
+ spinBarLabelAngel2=new QSpinBox(this);
+ spinBarLabelAngel2->setPrefix(tr("rotation angel: "));
+ spinBarLabelAngel2->setSuffix(QLatin1String("°"));
+ spinBarLabelAngel2->setRange(-180,180);
+ spinBarLabelAngel2->setValue(0);
+ spinBarLabelAngel2->setSingleStep(15);
+ barchartLayout->addWidget(spinBarLabelAngel2);
+ connect(spinBarLabelAngel2, SIGNAL(valueChanged(int)), this, SLOT(setBarchartAngele2(int)));
+
+
+}
+
+
+void TestWidgetBarcharts::setBarchartLogLog(bool checked)
+{
+ plotBarchart->get_xAxis()->set_logAxis(checked);
+ plotBarchart->get_yAxis()->set_logAxis(checked);
+ plotBarchart->zoomToFit();
+ plotBarchart2->get_xAxis()->set_logAxis(checked);
+ plotBarchart2->get_yAxis()->set_logAxis(checked);
+ plotBarchart2->zoomToFit();
+}
+
+void TestWidgetBarcharts::setBarchartAngele(int angle)
+{
+ plotBarchart->get_xAxis()->set_tickLabelAngle(angle);
+ plotBarchart->get_xAxis()->set_drawMode2(JKQTPCADMcomplete);
+}
+
+void TestWidgetBarcharts::setBarchartAngele2(int angle)
+{
+ plotBarchart->get_yAxis()->set_tickLabelAngle(angle);
+ plotBarchart->get_yAxis()->set_drawMode2(JKQTPCADMcomplete);
+}
diff --git a/test/jkqtplot_test/TestWidgetBarcharts.h b/examples/jkqtplot_test/TestWidgetBarcharts.h
similarity index 95%
rename from test/jkqtplot_test/TestWidgetBarcharts.h
rename to examples/jkqtplot_test/TestWidgetBarcharts.h
index cdf11cae57..d2b7fec2df 100644
--- a/test/jkqtplot_test/TestWidgetBarcharts.h
+++ b/examples/jkqtplot_test/TestWidgetBarcharts.h
@@ -1,59 +1,59 @@
-#ifndef TestWidgetBarcharts_H
-#define TestWidgetBarcharts_H
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include "jkqtplotter/jkqtplotter.h"
-#include "jkqtplotter/jkqtpgraphsgeometric.h"
-#include "jkqtplotter/jkqtpgraphsimage.h"
-#include "jkqtplotter/jkqtpelementsoverlay.h"
-#include "jkqtplotter/jkqtpgraphsparsedfunction.h"
-#include "jkqtplotter/jkqtpbaseelements.h"
-#include "jkqtplottergui/jkqtpgraphsmodel.h"
-#include "jkqtplottertools/jkqtptools.h"
-
-#define N1 200
-#define N2 50
-#define N3 8
-
-
-
-
-class TestWidgetBarcharts : public QWidget
-{
- Q_OBJECT
- public:
- explicit TestWidgetBarcharts(QWidget *parent = 0);
-
- signals:
-
- public slots:
-
-
- void setBarchartLogLog(bool checked);
- void setBarchartAngele(int angel);
- void setBarchartAngele2(int angel);
-
- protected:
-
-
- JKQtPlotter* plotBarchart;
- JKQtPlotter* plotBarchart2;
- QCheckBox* chkBarLog;
- QSpinBox* spinBarLabelAngel;
- QSpinBox* spinBarLabelAngel2;
-
-
-
-
-};
-
-
-#endif // TestWidgetBarcharts_H
+#ifndef TestWidgetBarcharts_H
+#define TestWidgetBarcharts_H
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include "jkqtplotter/jkqtplotter.h"
+#include "jkqtplotter/jkqtpgraphsgeometric.h"
+#include "jkqtplotter/jkqtpgraphsimage.h"
+#include "jkqtplotter/jkqtpelementsoverlay.h"
+#include "jkqtplotter/jkqtpgraphsparsedfunction.h"
+#include "jkqtplotter/jkqtpbaseelements.h"
+#include "jkqtplottergui/jkqtpgraphsmodel.h"
+#include "jkqtplottertools/jkqtptools.h"
+
+#define N1 200
+#define N2 50
+#define N3 8
+
+
+
+
+class TestWidgetBarcharts : public QWidget
+{
+ Q_OBJECT
+ public:
+ explicit TestWidgetBarcharts(QWidget *parent = 0);
+
+ signals:
+
+ public slots:
+
+
+ void setBarchartLogLog(bool checked);
+ void setBarchartAngele(int angel);
+ void setBarchartAngele2(int angel);
+
+ protected:
+
+
+ JKQtPlotter* plotBarchart;
+ JKQtPlotter* plotBarchart2;
+ QCheckBox* chkBarLog;
+ QSpinBox* spinBarLabelAngel;
+ QSpinBox* spinBarLabelAngel2;
+
+
+
+
+};
+
+
+#endif // TestWidgetBarcharts_H
diff --git a/test/jkqtplot_test/TestWidgetContourPlots.cpp b/examples/jkqtplot_test/TestWidgetContourPlots.cpp
similarity index 97%
rename from test/jkqtplot_test/TestWidgetContourPlots.cpp
rename to examples/jkqtplot_test/TestWidgetContourPlots.cpp
index 0acbe1c779..1bed3f0f99 100644
--- a/test/jkqtplot_test/TestWidgetContourPlots.cpp
+++ b/examples/jkqtplot_test/TestWidgetContourPlots.cpp
@@ -1,120 +1,120 @@
-#include "TestWidgetContourPlots.h"
-#include
-#include
-#include
-#include
-
-
-
-
-
-TestWidgetContourPlots::TestWidgetContourPlots(QWidget *parent) :
- QWidget(parent)
-{
-
-
- // contour plot
- QHBoxLayout* layoutContour=new QHBoxLayout(this);
- setLayout(layoutContour);
- JKQtPlotter* plotContour=new JKQtPlotter(true, this);
- plotContour->set_doDrawing(false);
- plotContour->get_plotter()->set_plotLabel(tr("\\textbf{hist contour plot}"));
- plotContour->setObjectName("contour");
- plotContour->get_plotter()->set_userSettigsFilename(QApplication::applicationDirPath()+"/usersettings.ini", "contour/");
- layoutContour->addWidget(plotContour);
-
- JKQtPlotter* plotDensity=new JKQtPlotter(true, this);
- plotContour->set_doDrawing(false);
- plotContour->get_plotter()->set_plotLabel(tr("\\textbf{2D histogram plot with contours}"));
- plotDensity->get_plotter()->set_plotLabel(tr("\\textbf{2D histogram}"));
- plotContour->setObjectName("density");
- plotContour->get_plotter()->set_userSettigsFilename(QApplication::applicationDirPath()+"/usersettings.ini", "density/");
- layoutContour->addWidget(plotDensity);
-
- QVector histAlex;
- uint histAlexNx,histAlexNy;
-
- // choose the test data
- histAlex.clear();
- histAlex.resize(5);
- histAlex.append(15.0);
- histAlex.append(5);
- histAlex.append(0);
- histAlex.append(0);
- histAlex.append(5);
- histAlex.append(15);
- histAlex.append(6);
- histAlex.append(6);
- histAlex.resize(16);
-
- histAlexNx=(uint)sqrt(histAlex.size());
- histAlexNy=histAlexNx;
-
- auto ds=plotDensity->get_plotter()->getDatastore();
- plotContour->get_plotter()->useExternalDatastore(ds);
- // empty datastore and grid
- plotDensity->get_plotter()->clearGraphs(true);
- ds->clear();
- plotDensity->setGrid(false);
- plotDensity->get_plotter()->get_xAxis()->set_axisLabel("X");
- plotDensity->get_plotter()->get_yAxis()->set_axisLabel("Y");
-
- size_t colHist2D=ds->addCopiedImageAsColumn(histAlex.data(), histAlexNx, histAlexNy, tr("2Dhist"));
-// size_t colContour=plotContour->getDatastore()->addCopiedImageAsColumnTranspose(histAlex.data(), histAlexNx, histAlexNy, tr("2Dhist"));
-
- JKQTPColumnMathImage* densityplot=new JKQTPColumnMathImage(plotDensity->get_plotter());
- densityplot->set_x(-0.1);
- densityplot->set_y(-0.1);
- densityplot->set_width(1.1);
- densityplot->set_height(1.1);
- densityplot->set_Nx(histAlexNx);
- densityplot->set_Ny(histAlexNy);
- densityplot->set_palette(JKQTPMathImageINVERTED_OCEAN);
- densityplot->set_imageColumn(colHist2D);
- densityplot->set_infColor(Qt::transparent);
- densityplot->set_nanColor(Qt::transparent);
- densityplot->set_title("density plot");
- plotDensity->addGraph(densityplot);
-
- densityplot=new JKQTPColumnMathImage(plotContour->get_plotter());
- densityplot->set_x(-0.1);
- densityplot->set_y(-0.1);
- densityplot->set_width(1.1);
- densityplot->set_height(1.1);
- densityplot->set_Nx(histAlexNx);
- densityplot->set_Ny(histAlexNy);
- densityplot->set_palette(JKQTPMathImageINVERTED_OCEAN);
- densityplot->set_imageColumn(colHist2D);
- densityplot->set_title("density plot");
- plotContour->addGraph(densityplot);
- plotContour->setGrid(false);
- plotDensity->zoom(-0.1,1.1,-0.1,1.1);
-
- QList levels;
-// levels<<5<<10<<25; // levels<<5.1<<10.1;
- levels<<4<<5<<9<<14;
- JKQTPContour* cp=new JKQTPContour(plotContour->get_plotter());
- cp->set_x(-0.1);
- cp->set_y(-0.1);
- cp->set_width(1.1);
- cp->set_height(1.1);
- cp->set_Nx(histAlexNx);
- cp->set_Ny(histAlexNy);
- cp->set_imageColumn(colHist2D);
-// cp->set_palette(JKQTPMathImageINVERTED_OCEAN);
- cp->set_contourLevels(levels);
- cp->set_title("contour plot");
- plotContour->addGraph(cp);
- plotContour->zoom(-0.1,1.1,-0.1,1.1);
-
- plotContour->set_doDrawing(true);
- plotContour->update_plot();
-
-
-
-
-
-
-
-
-}
+#include "TestWidgetContourPlots.h"
+#include
+#include
+#include
+#include
+
+
+
+
+
+TestWidgetContourPlots::TestWidgetContourPlots(QWidget *parent) :
+ QWidget(parent)
+{
+
+
+ // contour plot
+ QHBoxLayout* layoutContour=new QHBoxLayout(this);
+ setLayout(layoutContour);
+ JKQtPlotter* plotContour=new JKQtPlotter(true, this);
+ plotContour->set_doDrawing(false);
+ plotContour->get_plotter()->set_plotLabel(tr("\\textbf{hist contour plot}"));
+ plotContour->setObjectName("contour");
+ plotContour->get_plotter()->set_userSettigsFilename(QApplication::applicationDirPath()+"/usersettings.ini", "contour/");
+ layoutContour->addWidget(plotContour);
+
+ JKQtPlotter* plotDensity=new JKQtPlotter(true, this);
+ plotContour->set_doDrawing(false);
+ plotContour->get_plotter()->set_plotLabel(tr("\\textbf{2D histogram plot with contours}"));
+ plotDensity->get_plotter()->set_plotLabel(tr("\\textbf{2D histogram}"));
+ plotContour->setObjectName("density");
+ plotContour->get_plotter()->set_userSettigsFilename(QApplication::applicationDirPath()+"/usersettings.ini", "density/");
+ layoutContour->addWidget(plotDensity);
+
+ QVector histAlex;
+ uint histAlexNx,histAlexNy;
+
+ // choose the test data
+ histAlex.clear();
+ histAlex.resize(5);
+ histAlex.append(15.0);
+ histAlex.append(5);
+ histAlex.append(0);
+ histAlex.append(0);
+ histAlex.append(5);
+ histAlex.append(15);
+ histAlex.append(6);
+ histAlex.append(6);
+ histAlex.resize(16);
+
+ histAlexNx=(uint)sqrt(histAlex.size());
+ histAlexNy=histAlexNx;
+
+ auto ds=plotDensity->get_plotter()->getDatastore();
+ plotContour->get_plotter()->useExternalDatastore(ds);
+ // empty datastore and grid
+ plotDensity->get_plotter()->clearGraphs(true);
+ ds->clear();
+ plotDensity->setGrid(false);
+ plotDensity->get_plotter()->get_xAxis()->set_axisLabel("X");
+ plotDensity->get_plotter()->get_yAxis()->set_axisLabel("Y");
+
+ size_t colHist2D=ds->addCopiedImageAsColumn(histAlex.data(), histAlexNx, histAlexNy, tr("2Dhist"));
+// size_t colContour=plotContour->getDatastore()->addCopiedImageAsColumnTranspose(histAlex.data(), histAlexNx, histAlexNy, tr("2Dhist"));
+
+ JKQTPColumnMathImage* densityplot=new JKQTPColumnMathImage(plotDensity->get_plotter());
+ densityplot->set_x(-0.1);
+ densityplot->set_y(-0.1);
+ densityplot->set_width(1.1);
+ densityplot->set_height(1.1);
+ densityplot->set_Nx(histAlexNx);
+ densityplot->set_Ny(histAlexNy);
+ densityplot->set_palette(JKQTPMathImageINVERTED_OCEAN);
+ densityplot->set_imageColumn(colHist2D);
+ densityplot->set_infColor(Qt::transparent);
+ densityplot->set_nanColor(Qt::transparent);
+ densityplot->set_title("density plot");
+ plotDensity->addGraph(densityplot);
+
+ densityplot=new JKQTPColumnMathImage(plotContour->get_plotter());
+ densityplot->set_x(-0.1);
+ densityplot->set_y(-0.1);
+ densityplot->set_width(1.1);
+ densityplot->set_height(1.1);
+ densityplot->set_Nx(histAlexNx);
+ densityplot->set_Ny(histAlexNy);
+ densityplot->set_palette(JKQTPMathImageINVERTED_OCEAN);
+ densityplot->set_imageColumn(colHist2D);
+ densityplot->set_title("density plot");
+ plotContour->addGraph(densityplot);
+ plotContour->setGrid(false);
+ plotDensity->zoom(-0.1,1.1,-0.1,1.1);
+
+ QList levels;
+// levels<<5<<10<<25; // levels<<5.1<<10.1;
+ levels<<4<<5<<9<<14;
+ JKQTPContour* cp=new JKQTPContour(plotContour->get_plotter());
+ cp->set_x(-0.1);
+ cp->set_y(-0.1);
+ cp->set_width(1.1);
+ cp->set_height(1.1);
+ cp->set_Nx(histAlexNx);
+ cp->set_Ny(histAlexNy);
+ cp->set_imageColumn(colHist2D);
+// cp->set_palette(JKQTPMathImageINVERTED_OCEAN);
+ cp->set_contourLevels(levels);
+ cp->set_title("contour plot");
+ plotContour->addGraph(cp);
+ plotContour->zoom(-0.1,1.1,-0.1,1.1);
+
+ plotContour->set_doDrawing(true);
+ plotContour->update_plot();
+
+
+
+
+
+
+
+
+}
diff --git a/test/jkqtplot_test/TestWidgetContourPlots.h b/examples/jkqtplot_test/TestWidgetContourPlots.h
similarity index 95%
rename from test/jkqtplot_test/TestWidgetContourPlots.h
rename to examples/jkqtplot_test/TestWidgetContourPlots.h
index 465deaedac..ca6bb7d522 100644
--- a/test/jkqtplot_test/TestWidgetContourPlots.h
+++ b/examples/jkqtplot_test/TestWidgetContourPlots.h
@@ -1,47 +1,47 @@
-#ifndef TestWidgetContourPlots_H
-#define TestWidgetContourPlots_H
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include "jkqtplotter/jkqtplotter.h"
-#include "jkqtplotter/jkqtpgraphsgeometric.h"
-#include "jkqtplotter/jkqtpgraphsimage.h"
-#include "jkqtplotter/jkqtpelementsoverlay.h"
-#include "jkqtplotter/jkqtpgraphsparsedfunction.h"
-#include "jkqtplotter/jkqtpbaseelements.h"
-#include "jkqtplottergui/jkqtpgraphsmodel.h"
-#include "jkqtplottertools/jkqtptools.h"
-
-#define N1 200
-#define N2 50
-#define N3 8
-
-
-
-
-class TestWidgetContourPlots : public QWidget
-{
- Q_OBJECT
- public:
- explicit TestWidgetContourPlots(QWidget *parent = 0);
-
- signals:
-
- public slots:
-
-
- protected:
-
-
-
-};
-
-
-#endif // TestWidgetContourPlots_H
+#ifndef TestWidgetContourPlots_H
+#define TestWidgetContourPlots_H
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include "jkqtplotter/jkqtplotter.h"
+#include "jkqtplotter/jkqtpgraphsgeometric.h"
+#include "jkqtplotter/jkqtpgraphsimage.h"
+#include "jkqtplotter/jkqtpelementsoverlay.h"
+#include "jkqtplotter/jkqtpgraphsparsedfunction.h"
+#include "jkqtplotter/jkqtpbaseelements.h"
+#include "jkqtplottergui/jkqtpgraphsmodel.h"
+#include "jkqtplottertools/jkqtptools.h"
+
+#define N1 200
+#define N2 50
+#define N3 8
+
+
+
+
+class TestWidgetContourPlots : public QWidget
+{
+ Q_OBJECT
+ public:
+ explicit TestWidgetContourPlots(QWidget *parent = 0);
+
+ signals:
+
+ public slots:
+
+
+ protected:
+
+
+
+};
+
+
+#endif // TestWidgetContourPlots_H
diff --git a/test/jkqtplot_test/TestWidgetEmptyPlot.cpp b/examples/jkqtplot_test/TestWidgetEmptyPlot.cpp
similarity index 96%
rename from test/jkqtplot_test/TestWidgetEmptyPlot.cpp
rename to examples/jkqtplot_test/TestWidgetEmptyPlot.cpp
index 80b9005028..ab427f78ee 100644
--- a/test/jkqtplot_test/TestWidgetEmptyPlot.cpp
+++ b/examples/jkqtplot_test/TestWidgetEmptyPlot.cpp
@@ -1,33 +1,33 @@
-#include "TestWidgetEmptyPlot.h"
-#include
-#include
-#include
-#include
-
-
-
-
-TestWidgetEmptyPlot::TestWidgetEmptyPlot(QWidget *parent) :
- QWidget(parent)
-{
-
-
- #define NEMPTY 500
-
- JKQtPlotter* plotEmpty=new JKQtPlotter(true, this);
- JKQTPxyLineGraph* efunc=new JKQTPxyLineGraph(plotEmpty->get_plotter());
- double xef[NEMPTY], efy[NEMPTY];
- for (int i=0; iset_xColumn(plotEmpty->getDatastore()->addCopiedColumn(xef, NEMPTY, "x"));
- efunc->set_yColumn(plotEmpty->getDatastore()->addCopiedColumn(efy, NEMPTY, "y"));
- plotEmpty->addGraph(efunc);
- plotEmpty->get_yAxis()->set_logAxis(true);
- plotEmpty->zoomToFit();
- plotEmpty->setY(0,0);
-
-
-
-}
+#include "TestWidgetEmptyPlot.h"
+#include
+#include
+#include
+#include
+
+
+
+
+TestWidgetEmptyPlot::TestWidgetEmptyPlot(QWidget *parent) :
+ QWidget(parent)
+{
+
+
+ #define NEMPTY 500
+
+ JKQtPlotter* plotEmpty=new JKQtPlotter(true, this);
+ JKQTPxyLineGraph* efunc=new JKQTPxyLineGraph(plotEmpty->get_plotter());
+ double xef[NEMPTY], efy[NEMPTY];
+ for (int i=0; iset_xColumn(plotEmpty->getDatastore()->addCopiedColumn(xef, NEMPTY, "x"));
+ efunc->set_yColumn(plotEmpty->getDatastore()->addCopiedColumn(efy, NEMPTY, "y"));
+ plotEmpty->addGraph(efunc);
+ plotEmpty->get_yAxis()->set_logAxis(true);
+ plotEmpty->zoomToFit();
+ plotEmpty->setY(0,0);
+
+
+
+}
diff --git a/test/jkqtplot_test/TestWidgetEmptyPlot.h b/examples/jkqtplot_test/TestWidgetEmptyPlot.h
similarity index 95%
rename from test/jkqtplot_test/TestWidgetEmptyPlot.h
rename to examples/jkqtplot_test/TestWidgetEmptyPlot.h
index b8e8e1a00e..4cee898042 100644
--- a/test/jkqtplot_test/TestWidgetEmptyPlot.h
+++ b/examples/jkqtplot_test/TestWidgetEmptyPlot.h
@@ -1,46 +1,46 @@
-#ifndef TestWidgetEmptyPlot_H
-#define TestWidgetEmptyPlot_H
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include "jkqtplotter/jkqtplotter.h"
-#include "jkqtplotter/jkqtpgraphsgeometric.h"
-#include "jkqtplotter/jkqtpgraphsimage.h"
-#include "jkqtplotter/jkqtpelementsoverlay.h"
-#include "jkqtplotter/jkqtpgraphsparsedfunction.h"
-#include "jkqtplotter/jkqtpbaseelements.h"
-#include "jkqtplottergui/jkqtpgraphsmodel.h"
-#include "jkqtplottertools/jkqtptools.h"
-
-#define N1 200
-#define N2 50
-#define N3 8
-
-
-
-
-class TestWidgetEmptyPlot : public QWidget
-{
- Q_OBJECT
- public:
- explicit TestWidgetEmptyPlot(QWidget *parent = 0);
-
- signals:
-
- public slots:
-
-
- protected:
-
-
-};
-
-
-#endif // TestWidgetEmptyPlot_H
+#ifndef TestWidgetEmptyPlot_H
+#define TestWidgetEmptyPlot_H
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include "jkqtplotter/jkqtplotter.h"
+#include "jkqtplotter/jkqtpgraphsgeometric.h"
+#include "jkqtplotter/jkqtpgraphsimage.h"
+#include "jkqtplotter/jkqtpelementsoverlay.h"
+#include "jkqtplotter/jkqtpgraphsparsedfunction.h"
+#include "jkqtplotter/jkqtpbaseelements.h"
+#include "jkqtplottergui/jkqtpgraphsmodel.h"
+#include "jkqtplottertools/jkqtptools.h"
+
+#define N1 200
+#define N2 50
+#define N3 8
+
+
+
+
+class TestWidgetEmptyPlot : public QWidget
+{
+ Q_OBJECT
+ public:
+ explicit TestWidgetEmptyPlot(QWidget *parent = 0);
+
+ signals:
+
+ public slots:
+
+
+ protected:
+
+
+};
+
+
+#endif // TestWidgetEmptyPlot_H
diff --git a/test/jkqtplot_test/TestWidgetFunctionPlots.cpp b/examples/jkqtplot_test/TestWidgetFunctionPlots.cpp
similarity index 97%
rename from test/jkqtplot_test/TestWidgetFunctionPlots.cpp
rename to examples/jkqtplot_test/TestWidgetFunctionPlots.cpp
index 2835290902..459ccd45c2 100644
--- a/test/jkqtplot_test/TestWidgetFunctionPlots.cpp
+++ b/examples/jkqtplot_test/TestWidgetFunctionPlots.cpp
@@ -1,116 +1,116 @@
-#include "TestWidgetFunctionPlots.h"
-#include
-#include
-#include
-#include
-
-
-
-
-
-
-TestWidgetFunctionPlots::TestWidgetFunctionPlots(QWidget *parent) :
- QWidget(parent)
-{
-
-
- QVBoxLayout* plotFuncLayout=new QVBoxLayout(this);
- setLayout(plotFuncLayout);
- plotFuncPlt=new JKQtPlotter(true, this);
- plotFuncLayout->addWidget(plotFuncPlt);
- pfunc=new JKQTPxParsedFunctionLineGraph(plotFuncPlt->get_plotter());
- pfunc->set_function("x^2/10+sin(x*pi*10)");
- pfunc->set_errorFunction("x^2/20");
- pfunc->set_drawErrorPolygons(true);
- pfunc->set_style(Qt::DashLine);
- plotFuncPlt->addGraph(pfunc);
- plotFuncPlt->update_plot();
-
- pfuncErrorStyle=new JKQTPerrorPlotstyleComboBox(this);
- pfuncErrorStyle->setCurrentIndex(3);
- plotFuncLayout->addWidget(pfuncErrorStyle);
- connect(pfuncErrorStyle, SIGNAL(currentIndexChanged(int)), this, SLOT(setPFuncStyle()));
- chkPFuncDrawSamples=new QCheckBox(tr("display samples"), this);
- plotFuncLayout->addWidget(chkPFuncDrawSamples);
- connect(chkPFuncDrawSamples, SIGNAL(toggled(bool)), this, SLOT(setPFuncStyle()));
- chkPFuncDrawLine=new QCheckBox(tr("draw line"), this);
- chkPFuncDrawLine->setChecked(true);
- plotFuncLayout->addWidget(chkPFuncDrawLine);
- connect(chkPFuncDrawLine, SIGNAL(toggled(bool)), this, SLOT(setPFuncStyle()));
- QSpinBox* spinPFunc=new QSpinBox(this);
- spinPFunc->setValue(pfunc->get_minSamples());
- plotFuncLayout->addWidget(new QLabel(tr("min samples:"), this));
- plotFuncLayout->addWidget(spinPFunc);
- connect(spinPFunc, SIGNAL(valueChanged(int)), this, SLOT(setPFuncMinPoint(int)));
- spinPFunc=new QSpinBox(this);
- spinPFunc->setValue(pfunc->get_maxRefinementDegree());
- plotFuncLayout->addWidget(new QLabel(tr("max refinement degree:"), this));
- plotFuncLayout->addWidget(spinPFunc);
- connect(spinPFunc, SIGNAL(valueChanged(int)), this, SLOT(setPFuncMaxRefine(int)));
- QComboBox* edtPFunc=new QComboBox(this);
- edtPFunc->addItem(pfunc->get_function());
- edtPFunc->addItem("x");
- edtPFunc->addItem("x^2");
- edtPFunc->addItem("x^2-x^3");
- edtPFunc->addItem("sin(x)");
- edtPFunc->setCurrentIndex(0);
- plotFuncLayout->addWidget(new QLabel(tr("function:"), this));
- plotFuncLayout->addWidget(edtPFunc);
- connect(edtPFunc, SIGNAL(currentIndexChanged(QString)), this, SLOT(setPFunc(QString)));
- edtPFunc=new QComboBox(this);
- edtPFunc->addItem(pfunc->get_errorFunction());
- edtPFunc->addItem("");
- edtPFunc->addItem("x");
- edtPFunc->addItem("cos(x)");
- edtPFunc->addItem("1");
- edtPFunc->setCurrentIndex(0);
- plotFuncLayout->addWidget(new QLabel(tr("error function:"), this));
- plotFuncLayout->addWidget(edtPFunc);
- connect(edtPFunc, SIGNAL(currentIndexChanged(QString)), this, SLOT(setPFuncE(QString)));
- QCheckBox* chkFLogX=new QCheckBox(tr("x-axis: log-scale"));
- chkFLogX->setChecked(false);
- connect(chkFLogX, SIGNAL(toggled(bool)), plotFuncPlt->get_xAxis(), SLOT(set_logAxis(bool)));
- plotFuncLayout->addWidget(chkFLogX);
- QCheckBox* chkFLogY=new QCheckBox(tr("y-axis: log-scale"));
- chkFLogY->setChecked(false);
- connect(chkFLogY, SIGNAL(toggled(bool)), plotFuncPlt->get_yAxis(), SLOT(set_logAxis(bool)));
- plotFuncLayout->addWidget(chkFLogY);
-
-
-}
-
-
-void TestWidgetFunctionPlots::setPFuncStyle()
-{
- pfunc->set_drawErrorLines(false);
- pfunc->set_drawErrorPolygons(false);
- if (pfuncErrorStyle->getErrorStyle()==JKQTPerrorLines) pfunc->set_drawErrorLines(true);
- if (pfuncErrorStyle->getErrorStyle()==JKQTPerrorPolygons) pfunc->set_drawErrorPolygons(true);
- pfunc->set_drawLine(chkPFuncDrawLine->isChecked());
- pfunc->set_displaySamplePoints(chkPFuncDrawSamples->isChecked());
- plotFuncPlt->update_plot();
-}
-
-void TestWidgetFunctionPlots::setPFuncMinPoint(int value)
-{
- pfunc->set_minSamples(value);
- plotFuncPlt->update_plot();
-}
-
-void TestWidgetFunctionPlots::setPFuncMaxRefine(int value)
-{
- pfunc->set_maxRefinementDegree(value);
- plotFuncPlt->update_plot();
-}
-
-void TestWidgetFunctionPlots::setPFunc(const QString &expression)
-{
- pfunc->set_function(expression);
- plotFuncPlt->update_plot();
-}
-
-void TestWidgetFunctionPlots::setPFuncE(const QString &expression)
-{
- pfunc->set_errorFunction(expression);
- plotFuncPlt->update_plot();
-}
+#include "TestWidgetFunctionPlots.h"
+#include
+#include
+#include
+#include
+
+
+
+
+
+
+TestWidgetFunctionPlots::TestWidgetFunctionPlots(QWidget *parent) :
+ QWidget(parent)
+{
+
+
+ QVBoxLayout* plotFuncLayout=new QVBoxLayout(this);
+ setLayout(plotFuncLayout);
+ plotFuncPlt=new JKQtPlotter(true, this);
+ plotFuncLayout->addWidget(plotFuncPlt);
+ pfunc=new JKQTPxParsedFunctionLineGraph(plotFuncPlt->get_plotter());
+ pfunc->set_function("x^2/10+sin(x*pi*10)");
+ pfunc->set_errorFunction("x^2/20");
+ pfunc->set_drawErrorPolygons(true);
+ pfunc->set_style(Qt::DashLine);
+ plotFuncPlt->addGraph(pfunc);
+ plotFuncPlt->update_plot();
+
+ pfuncErrorStyle=new JKQTPerrorPlotstyleComboBox(this);
+ pfuncErrorStyle->setCurrentIndex(3);
+ plotFuncLayout->addWidget(pfuncErrorStyle);
+ connect(pfuncErrorStyle, SIGNAL(currentIndexChanged(int)), this, SLOT(setPFuncStyle()));
+ chkPFuncDrawSamples=new QCheckBox(tr("display samples"), this);
+ plotFuncLayout->addWidget(chkPFuncDrawSamples);
+ connect(chkPFuncDrawSamples, SIGNAL(toggled(bool)), this, SLOT(setPFuncStyle()));
+ chkPFuncDrawLine=new QCheckBox(tr("draw line"), this);
+ chkPFuncDrawLine->setChecked(true);
+ plotFuncLayout->addWidget(chkPFuncDrawLine);
+ connect(chkPFuncDrawLine, SIGNAL(toggled(bool)), this, SLOT(setPFuncStyle()));
+ QSpinBox* spinPFunc=new QSpinBox(this);
+ spinPFunc->setValue(pfunc->get_minSamples());
+ plotFuncLayout->addWidget(new QLabel(tr("min samples:"), this));
+ plotFuncLayout->addWidget(spinPFunc);
+ connect(spinPFunc, SIGNAL(valueChanged(int)), this, SLOT(setPFuncMinPoint(int)));
+ spinPFunc=new QSpinBox(this);
+ spinPFunc->setValue(pfunc->get_maxRefinementDegree());
+ plotFuncLayout->addWidget(new QLabel(tr("max refinement degree:"), this));
+ plotFuncLayout->addWidget(spinPFunc);
+ connect(spinPFunc, SIGNAL(valueChanged(int)), this, SLOT(setPFuncMaxRefine(int)));
+ QComboBox* edtPFunc=new QComboBox(this);
+ edtPFunc->addItem(pfunc->get_function());
+ edtPFunc->addItem("x");
+ edtPFunc->addItem("x^2");
+ edtPFunc->addItem("x^2-x^3");
+ edtPFunc->addItem("sin(x)");
+ edtPFunc->setCurrentIndex(0);
+ plotFuncLayout->addWidget(new QLabel(tr("function:"), this));
+ plotFuncLayout->addWidget(edtPFunc);
+ connect(edtPFunc, SIGNAL(currentIndexChanged(QString)), this, SLOT(setPFunc(QString)));
+ edtPFunc=new QComboBox(this);
+ edtPFunc->addItem(pfunc->get_errorFunction());
+ edtPFunc->addItem("");
+ edtPFunc->addItem("x");
+ edtPFunc->addItem("cos(x)");
+ edtPFunc->addItem("1");
+ edtPFunc->setCurrentIndex(0);
+ plotFuncLayout->addWidget(new QLabel(tr("error function:"), this));
+ plotFuncLayout->addWidget(edtPFunc);
+ connect(edtPFunc, SIGNAL(currentIndexChanged(QString)), this, SLOT(setPFuncE(QString)));
+ QCheckBox* chkFLogX=new QCheckBox(tr("x-axis: log-scale"));
+ chkFLogX->setChecked(false);
+ connect(chkFLogX, SIGNAL(toggled(bool)), plotFuncPlt->get_xAxis(), SLOT(set_logAxis(bool)));
+ plotFuncLayout->addWidget(chkFLogX);
+ QCheckBox* chkFLogY=new QCheckBox(tr("y-axis: log-scale"));
+ chkFLogY->setChecked(false);
+ connect(chkFLogY, SIGNAL(toggled(bool)), plotFuncPlt->get_yAxis(), SLOT(set_logAxis(bool)));
+ plotFuncLayout->addWidget(chkFLogY);
+
+
+}
+
+
+void TestWidgetFunctionPlots::setPFuncStyle()
+{
+ pfunc->set_drawErrorLines(false);
+ pfunc->set_drawErrorPolygons(false);
+ if (pfuncErrorStyle->getErrorStyle()==JKQTPerrorLines) pfunc->set_drawErrorLines(true);
+ if (pfuncErrorStyle->getErrorStyle()==JKQTPerrorPolygons) pfunc->set_drawErrorPolygons(true);
+ pfunc->set_drawLine(chkPFuncDrawLine->isChecked());
+ pfunc->set_displaySamplePoints(chkPFuncDrawSamples->isChecked());
+ plotFuncPlt->update_plot();
+}
+
+void TestWidgetFunctionPlots::setPFuncMinPoint(int value)
+{
+ pfunc->set_minSamples(value);
+ plotFuncPlt->update_plot();
+}
+
+void TestWidgetFunctionPlots::setPFuncMaxRefine(int value)
+{
+ pfunc->set_maxRefinementDegree(value);
+ plotFuncPlt->update_plot();
+}
+
+void TestWidgetFunctionPlots::setPFunc(const QString &expression)
+{
+ pfunc->set_function(expression);
+ plotFuncPlt->update_plot();
+}
+
+void TestWidgetFunctionPlots::setPFuncE(const QString &expression)
+{
+ pfunc->set_errorFunction(expression);
+ plotFuncPlt->update_plot();
+}
diff --git a/test/jkqtplot_test/TestWidgetFunctionPlots.h b/examples/jkqtplot_test/TestWidgetFunctionPlots.h
similarity index 95%
rename from test/jkqtplot_test/TestWidgetFunctionPlots.h
rename to examples/jkqtplot_test/TestWidgetFunctionPlots.h
index 8accc40b5d..99129b7df2 100644
--- a/test/jkqtplot_test/TestWidgetFunctionPlots.h
+++ b/examples/jkqtplot_test/TestWidgetFunctionPlots.h
@@ -1,59 +1,59 @@
-#ifndef TestWidgetFunctionPlots_H
-#define TestWidgetFunctionPlots_H
-#include
-#include
-#include
-#include
-#include
-#include