Bypass Qt font metric calculations (#272)

- This originally showed up as fonts rendering differently on X11 than Wayland. (#230)
- Setting font size in points should be device and back end independent, however the same exact font face and size, on
  the same machine, sometimes results in different font metrics between the xcb and wayland Qt back ends.
- Setting font size in pixels, assuming a virtual DPI of 96 pixels/inch, results in consistent font metrics and rendering
  between these back ends. Furthermore, this virtual DPI works for either on-screen or hi-res printer QPainter contexts.
- This virtual DPI seems to work correctly with some limited testing with Windows and MacOS.
- Add rendering tests to build-tests CI script.
This commit is contained in:
Jaye Evins
2025-12-30 00:33:17 -05:00
committed by GitHub
parent 82b264a7a0
commit ce8bbad26c
14 changed files with 289 additions and 22 deletions
+137 -12
View File
@@ -23,23 +23,18 @@ jobs:
matrix: matrix:
include: include:
- os: ubuntu-latest - os: ubuntu-latest
build_type: Release
c_compiler: gcc c_compiler: gcc
cpp_compiler: g++ cpp_compiler: g++
- os: ubuntu-latest - os: ubuntu-latest
build_type: Release
c_compiler: clang c_compiler: clang
cpp_compiler: clang++ cpp_compiler: clang++
- os: ubuntu-22.04 - os: ubuntu-22.04
build_type: Release
c_compiler: gcc c_compiler: gcc
cpp_compiler: g++ cpp_compiler: g++
- os: windows-latest - os: windows-latest
build_type: Release
c_compiler: cl c_compiler: cl
cpp_compiler: cl cpp_compiler: cl
- os: macos-latest - os: macos-latest
build_type: Release
c_compiler: clang c_compiler: clang
cpp_compiler: clang++ cpp_compiler: clang++
@@ -105,7 +100,7 @@ jobs:
with: with:
version: '6.2.*' version: '6.2.*'
install-deps: 'true' install-deps: 'true'
archives: 'qtbase qtsvg qttools icu qttranslations' archives: 'qtbase qtsvg qttools icu qttranslations qtwayland'
- name: Set reusable strings - name: Set reusable strings
id: strings id: strings
@@ -118,32 +113,162 @@ jobs:
cmake -B ${{ steps.strings.outputs.build-output-dir }} cmake -B ${{ steps.strings.outputs.build-output-dir }}
-DCMAKE_CXX_COMPILER=${{ matrix.cpp_compiler }} -DCMAKE_CXX_COMPILER=${{ matrix.cpp_compiler }}
-DCMAKE_C_COMPILER=${{ matrix.c_compiler }} -DCMAKE_C_COMPILER=${{ matrix.c_compiler }}
-DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -DCMAKE_BUILD_TYPE=Release
-DCMAKE_TOOLCHAIN_FILE=${{ env.TOOLCHAIN_FILE }} -DCMAKE_TOOLCHAIN_FILE=${{ env.TOOLCHAIN_FILE }}
-S ${{ github.workspace }} -S ${{ github.workspace }}
- name: Build - name: Build
run: cmake --build ${{ steps.strings.outputs.build-output-dir }} --config ${{ matrix.build_type }} run: cmake --build ${{ steps.strings.outputs.build-output-dir }} --config Release
- name: Test (Ubuntu) - name: Test (Ubuntu)
if: startsWith( matrix.os, 'ubuntu-' ) if: startsWith( matrix.os, 'ubuntu-' )
working-directory: ${{ steps.strings.outputs.build-output-dir }} working-directory: ${{ steps.strings.outputs.build-output-dir }}
run: | run: |
xvfb-run ./glabels/glabels-qt --Version xvfb-run -a ./glabels/glabels-qt --Version
xvfb-run ctest --build-config ${{ matrix.build_type }} xvfb-run -a ctest --build-config Release
- name: Test (Windows) - name: Test (Windows)
if: startsWith( matrix.os, 'windows-' ) if: startsWith( matrix.os, 'windows-' )
working-directory: ${{ steps.strings.outputs.build-output-dir }} working-directory: ${{ steps.strings.outputs.build-output-dir }}
env:
QT_ASSUME_STDERR_HAS_CONSOLE: 1
run: | run: |
ctest --build-config ${{ matrix.build_type }} ./glabels-batch/Release/glabels-batch-qt --Version
ctest --build-config Release
- name: Test (MacOS) - name: Test (MacOS)
if: startsWith( matrix.os, 'macos-' ) if: startsWith( matrix.os, 'macos-' )
working-directory: ${{ steps.strings.outputs.build-output-dir }} working-directory: ${{ steps.strings.outputs.build-output-dir }}
run: | run: |
./glabels/glabels-qt --Version ./glabels/glabels-qt --Version
ctest --build-config ${{ matrix.build_type }} ctest --build-config Release
- name: Install render test dependencies (Ubuntu-latest)
if: startsWith( matrix.os, 'ubuntu-latest' )
working-directory: ${{ steps.strings.outputs.build-output-dir }}
run: |
sudo apt-get -y install xwayland-run
sudo apt-get -y install comparepdf
- name: Install render test dependencies (Windows)
if: startsWith( matrix.os, 'windows' )
working-directory: ${{ steps.strings.outputs.build-output-dir }}
run: |
choco install diff-pdf
- name: Install render test dependencies (MacOS)
if: startsWith( matrix.os, 'macos' )
working-directory: ${{ steps.strings.outputs.build-output-dir }}
run: |
brew install diff-pdf
- name: Render tests (Ubuntu-latest)
if: startsWith( matrix.os, 'ubuntu-latest' )
working-directory: ${{ steps.strings.outputs.build-output-dir }}
shell: bash
env:
TEST_DIR: ${{ github.workspace }}/test-data
run: |
set +e
run-x() { xvfb-run -a "$@"; }
run-w() { wlheadless-run -c weston --log=/dev/null -- "$@"; }
#
#
echo "================"
echo "X11 render tests"
echo "================"
run-x ./glabels-batch/glabels-batch-qt --Version
#
# echo "-- Available fonts (X) -------------------------------------------------"
# run-x fc-list : family
# echo "------------------------------------------------------------------------"
#
echo "-----------------------------------"
run-x ./glabels-batch/glabels-batch-qt -o simple-shapes-x.pdf "$TEST_DIR/simple-shapes.glabels"
comparepdf -ca -v2 "$TEST_DIR/simple-shapes.pdf" simple-shapes-x.pdf
echo "-----------------------------------"
run-x ./glabels-batch/glabels-batch-qt -o simple-code39-x.pdf "$TEST_DIR/simple-code39.glabels"
comparepdf -ca -v2 "$TEST_DIR/simple-code39.pdf" simple-code39-x.pdf
echo "-----------------------------------"
run-x ./glabels-batch/glabels-batch-qt -o simple-text-liberation-sans-x.pdf "$TEST_DIR/simple-text-liberation-sans.glabels"
comparepdf -ca -v2 "$TEST_DIR/simple-text-liberation-sans.pdf" simple-text-liberation-sans-x.pdf
echo "-----------------------------------"
run-x ./glabels-batch/glabels-batch-qt -o simple-text-liberation-serif-x.pdf "$TEST_DIR/simple-text-liberation-serif.glabels"
comparepdf -ca -v2 "$TEST_DIR/simple-text-liberation-serif.pdf" simple-text-liberation-serif-x.pdf
echo "-----------------------------------"
#
#
echo "===================="
echo "Wayland render tests"
echo "===================="
run-w ./glabels-batch/glabels-batch-qt --Version
#
# echo "-- Available fonts (X) -------------------------------------------------"
# run-w fc-list : family
# echo "------------------------------------------------------------------------"
#
echo "-----------------------------------"
run-w ./glabels-batch/glabels-batch-qt -o simple-shapes-w.pdf "$TEST_DIR/simple-shapes.glabels"
comparepdf -ca -v2 "$TEST_DIR/simple-shapes.pdf" simple-shapes-w.pdf
echo "-----------------------------------"
run-w ./glabels-batch/glabels-batch-qt -o simple-code39-w.pdf "$TEST_DIR/simple-code39.glabels"
comparepdf -ca -v2 "$TEST_DIR/simple-code39.pdf" simple-code39-w.pdf
echo "-----------------------------------"
run-w ./glabels-batch/glabels-batch-qt -o simple-text-liberation-sans-w.pdf "$TEST_DIR/simple-text-liberation-sans.glabels"
comparepdf -ca -v2 "$TEST_DIR/simple-text-liberation-sans.pdf" simple-text-liberation-sans-w.pdf
echo "-----------------------------------"
run-w ./glabels-batch/glabels-batch-qt -o simple-text-liberation-serif-w.pdf "$TEST_DIR/simple-text-liberation-serif.glabels"
comparepdf -ca -v2 "$TEST_DIR/simple-text-liberation-serif.pdf" simple-text-liberation-serif-w.pdf
echo "-----------------------------------"
- name: Render tests (Windows)
if: startsWith( matrix.os, 'windows' )
working-directory: ${{ steps.strings.outputs.build-output-dir }}
shell: pwsh
env:
TEST_DIR: ${{ github.workspace }}/test-data
QT_ASSUME_STDERR_HAS_CONSOLE: 1
run: |
set +e
./glabels-batch/Release/glabels-batch-qt --Version
echo "-----------------------------------"
./glabels-batch/Release/glabels-batch-qt -o simple-shapes-windows.pdf "$env:TEST_DIR/simple-shapes.glabels" 2>&1
diff-pdf -v "$env:TEST_DIR/simple-shapes.pdf" simple-shapes-windows.pdf 2>&1
echo "-----------------------------------"
./glabels-batch/Release/glabels-batch-qt -o simple-code39-windows.pdf "$env:TEST_DIR/simple-code39.glabels" 2>&1
diff-pdf -v "$env:TEST_DIR/simple-code39.pdf" simple-code39-windows.pdf 2>&1
echo "-----------------------------------"
#
# TODO: Create text-based rendering tests using fonts available on Windows
#
- name: Render tests (MacOS)
if: startsWith( matrix.os, 'macos' )
working-directory: ${{ steps.strings.outputs.build-output-dir }}
shell: bash
env:
TEST_DIR: ${{ github.workspace }}/test-data
run: |
set +e
./glabels-batch/glabels-batch-qt --Version
echo "-----------------------------------"
./glabels-batch/glabels-batch-qt -o simple-shapes-mac.pdf "$TEST_DIR/simple-shapes.glabels"
diff-pdf -v "$TEST_DIR/simple-shapes.pdf" simple-shapes-mac.pdf
echo "-----------------------------------"
./glabels-batch/glabels-batch-qt -o simple-code39-mac.pdf "$TEST_DIR/simple-code39.glabels"
diff-pdf -v "$TEST_DIR/simple-code39.pdf" simple-code39-mac.pdf
echo "-----------------------------------"
#
# TODO: Create text-based rendering tests using fonts available on MacOS
#
- name: Upload render tests for manual inspection
if: always()
uses: actions/upload-artifact@v4
with:
name: render-tests-${{ matrix.os }}-${{ matrix.cpp_compiler }}-${{ github.run_number }}
path: ${{ steps.strings.outputs.build-output-dir }}/*.pdf
# - name: Tmate # - name: Tmate
# uses: mxschmitt/action-tmate@v3 # uses: mxschmitt/action-tmate@v3
+1 -1
View File
@@ -10,7 +10,7 @@ set (glabels-batch_sources
#===================================== #=====================================
# Target # Target
#===================================== #=====================================
add_executable (glabels-batch-qt WIN32 add_executable (glabels-batch-qt
${glabels-batch_sources} ${glabels-batch_sources}
) )
+2 -1
View File
@@ -35,6 +35,7 @@
#include <QLocale> #include <QLocale>
#include <QPrinter> #include <QPrinter>
#include <QPrinterInfo> #include <QPrinterInfo>
#include <QTextStream>
#include <QTranslator> #include <QTranslator>
@@ -151,7 +152,7 @@ int main( int argc, char **argv )
// Handle verbose version option // Handle verbose version option
if ( parser.isSet( "Version" ) ) if ( parser.isSet( "Version" ) )
{ {
qInfo().noquote() << glabels::model::Version::details(); QTextStream(stdout) << glabels::model::Version::details() << Qt::endl;
return 0; return 0;
} }
+2 -1
View File
@@ -35,6 +35,7 @@
#include <QIcon> #include <QIcon>
#include <QLibraryInfo> #include <QLibraryInfo>
#include <QLocale> #include <QLocale>
#include <QTextStream>
#include <QTranslator> #include <QTranslator>
@@ -92,7 +93,7 @@ int main( int argc, char **argv )
// Handle verbose version option // Handle verbose version option
if ( parser.isSet( "Version" ) ) if ( parser.isSet( "Version" ) )
{ {
qInfo().noquote() << glabels::model::Version::details(); QTextStream(stdout) << glabels::model::Version::details() << Qt::endl;
return 0; return 0;
} }
+25 -6
View File
@@ -24,11 +24,31 @@
#include "Size.h" #include "Size.h"
#include <QBrush> #include <QBrush>
#include <QDebug>
#include <QPen> #include <QPen>
#include <QTextDocument> #include <QTextDocument>
#include <QTextBlock> #include <QTextBlock>
#include <QRegularExpression> #include <QRegularExpression>
#include <QtDebug>
//
// Private
//
namespace
{
///
/// Calculate pixel size
///
/// Assume a virtual DPI of 96 pixels/inch for all QPainter contexts.
/// Ideally, we should use pointSizes for device independence, but as
/// Qt-6.4 on X11, Wayland, and MacOS this approach has better results.
///
int pixelSize( double pointSize )
{
const double virtual_dpi = 96;
return qMax( 1, qRound( pointSize * virtual_dpi/72.0 ) );
}
}
namespace glabels namespace glabels
@@ -467,7 +487,7 @@ namespace glabels
{ {
QFont font; QFont font;
font.setFamily( mFontFamily ); font.setFamily( mFontFamily );
font.setPointSizeF( mFontSize ); font.setPixelSize( pixelSize( mFontSize ) );
font.setWeight( mFontWeight ); font.setWeight( mFontWeight );
font.setItalic( mFontItalicFlag ); font.setItalic( mFontItalicFlag );
font.setUnderline( mFontUnderlineFlag ); font.setUnderline( mFontUnderlineFlag );
@@ -591,7 +611,7 @@ namespace glabels
{ {
QFont font; QFont font;
font.setFamily( mFontFamily ); font.setFamily( mFontFamily );
font.setPointSizeF( mFontSize ); font.setPixelSize( pixelSize( mFontSize ) );
font.setWeight( mFontWeight ); font.setWeight( mFontWeight );
font.setItalic( mFontItalicFlag ); font.setItalic( mFontItalicFlag );
font.setUnderline( mFontUnderlineFlag ); font.setUnderline( mFontUnderlineFlag );
@@ -712,7 +732,7 @@ namespace glabels
QFont font; QFont font;
font.setFamily( mFontFamily ); font.setFamily( mFontFamily );
font.setPointSizeF( mTextAutoShrink ? autoShrinkFontSize( record, variables ) : mFontSize ); font.setPixelSize( pixelSize( mTextAutoShrink ? autoShrinkFontSize( record, variables ) : mFontSize ) );
font.setWeight( mFontWeight ); font.setWeight( mFontWeight );
font.setItalic( mFontItalicFlag ); font.setItalic( mFontItalicFlag );
font.setUnderline( mFontUnderlineFlag ); font.setUnderline( mFontUnderlineFlag );
@@ -816,7 +836,7 @@ namespace glabels
double candidateSize = mFontSize; double candidateSize = mFontSize;
while ( candidateSize > 1.0 ) while ( candidateSize > 1.0 )
{ {
font.setPointSizeF( candidateSize ); font.setPixelSize( pixelSize( candidateSize ) );
// Line spacing is affected by font size // Line spacing is affected by font size
QFontMetricsF fontMetrics( font ); QFontMetricsF fontMetrics( font );
@@ -860,6 +880,5 @@ namespace glabels
return candidateSize; return candidateSize;
} }
} }
} }
+1 -1
View File
@@ -216,7 +216,7 @@ namespace glabels
double autoShrinkFontSize( const merge::Record& record, double autoShrinkFontSize( const merge::Record& record,
const Variables& variables ) const; const Variables& variables ) const;
/////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////
// Private Members // Private Members
+13
View File
@@ -0,0 +1,13 @@
<?xml version="1.0"?>
<Glabels-document version="4.0">
<Template size="US-Letter" part="5395" description="Name badge labels" brand="Avery">
<Label-rectangle id="0" y_waste="4.5pt" round="13.5pt" width="243pt" x_waste="4.5pt" height="168pt">
<Markup-margin size="4.5pt"/>
<Layout dx="270pt" ny="4" dy="180pt" nx="2" y0="42pt" x0="49.5pt"/>
</Label-rectangle>
</Template>
<Objects rotate="false" id="0">
<Object-barcode x="6.75pt" h="32.805pt" text="false" color="0xff" a2="0" a1="0" a5="0" y="67.5975pt" a4="0" w="229.5pt" a3="1" checksum="true" lock_aspect_ratio="false" a0="1" data="ABC 123" backend="" style="code39"/>
</Objects>
<Data/>
</Glabels-document>
Binary file not shown.
+15
View File
@@ -0,0 +1,15 @@
<?xml version="1.0"?>
<Glabels-document version="4.0">
<Template brand="Avery" description="Name badge labels" part="5095" size="US-Letter">
<Label-rectangle y_waste="4.5pt" height="168pt" id="0" round="13.5pt" width="243pt" x_waste="4.5pt">
<Markup-margin size="4.5pt"/>
<Layout dy="180pt" y0="42pt" nx="2" x0="49.5pt" ny="4" dx="270pt"/>
</Label-rectangle>
</Template>
<Objects id="0" rotate="false">
<Object-box line_width="1pt" a2="0" w="72pt" a1="0" shadow_x="1.3pt" x="18pt" shadow_y="1.3pt" h="72pt" line_color="0xff" shadow="false" a3="1" shadow_opacity="0.5" a4="0" a5="0" lock_aspect_ratio="false" y="45pt" fill_color="0xff00ff" shadow_color="0xff" a0="1"/>
<Object-ellipse line_width="1pt" a2="0" w="72pt" a1="0" shadow_x="1.3pt" x="108pt" shadow_y="1.3pt" h="72pt" line_color="0xff" shadow="false" a3="1" shadow_opacity="0.5" a4="0" a5="0" lock_aspect_ratio="false" y="45pt" fill_color="0xff00ff" shadow_color="0xff" a0="1"/>
<Object-line dy="-9.59164e-17pt" line_width="1pt" a2="0" a1="0" shadow_x="1.3pt" x="18pt" shadow_y="1.3pt" line_color="0xff" shadow="false" a3="1" shadow_opacity="0.5" a4="0" a5="0" y="135pt" dx="198pt" shadow_color="0xff" a0="1"/>
</Objects>
<Data/>
</Glabels-document>
Binary file not shown.
@@ -0,0 +1,21 @@
<?xml version="1.0"?>
<Glabels-document version="4.0">
<Template height="254.636pt" roll_width="90.7087pt" brand="Brother" description="Address labels" size="roll" width="82.0913pt" part="DK-1201">
<Label-rectangle id="0" round="4.25197pt" height="254.636pt" y_waste="0pt" x_waste="0pt" width="82.0913pt">
<Markup-margin y_size="8.50394pt" x_size="4.25197pt"/>
<Layout y0="0pt" dy="0pt" x0="0pt" ny="1" dx="0pt" nx="1"/>
</Label-rectangle>
</Template>
<Objects id="0" rotate="true">
<Object-text font_underline="false" shadow="false" align="left" a5="0" a0="1" shadow_opacity="0.5" w="124pt" h="25pt" shadow_color="0xff" lock_aspect_ratio="false" a2="0" shadow_x="1.3pt" shadow_y="1.3pt" font_size="10" wrap="word" font_weight="normal" a1="0" a3="1" color="0xff" valign="top" x="18pt" a4="0" font_family="Liberation Sans" line_spacing="1" font_italic="false" auto_shrink="false" y="10pt">
<p>Liberation Sans 10</p>
</Object-text>
<Object-text font_underline="false" shadow="false" align="left" a5="0" a0="1" shadow_opacity="0.5" w="219pt" h="36pt" shadow_color="0xff" lock_aspect_ratio="false" a2="0" shadow_x="1.3pt" shadow_y="1.3pt" font_size="12" wrap="word" font_weight="bold" a1="0" a3="1" color="0xff" valign="top" x="18pt" a4="0" font_family="Liberation Sans" line_spacing="1" font_italic="false" auto_shrink="false" y="27pt">
<p>Liberation Sans 12 Bold</p>
</Object-text>
<Object-text font_underline="false" shadow="false" align="left" a5="0" a0="1" shadow_opacity="0.5" w="219pt" h="36pt" shadow_color="0xff" lock_aspect_ratio="false" a2="0" shadow_x="1.3pt" shadow_y="1.3pt" font_size="14" wrap="word" font_weight="normal" a1="0" a3="1" color="0xff" valign="top" x="18pt" a4="0" font_family="Liberation Sans" line_spacing="1" font_italic="true" auto_shrink="false" y="48pt">
<p>Liberation Sans 14 Italic</p>
</Object-text>
</Objects>
<Data/>
</Glabels-document>
Binary file not shown.
@@ -0,0 +1,72 @@
<?xml version="1.0"?>
<Glabels-document version="4.0">
<Template size="US-Letter" description="Full-page labels" brand="Avery" part="3114">
<Label-rectangle height="792pt" y_waste="0pt" id="0" round="0pt" x_waste="0pt" width="612pt">
<Markup-margin size="4.5pt"/>
<Layout nx="1" dy="0pt" dx="0pt" ny="1" y0="0pt" x0="0pt"/>
</Label-rectangle>
</Template>
<Objects id="0" rotate="false">
<Object-text wrap="word" a3="1" shadow_color="0xff" font_weight="normal" a4="0" shadow="false" font_underline="false" line_spacing="1" a5="0" auto_shrink="false" shadow_opacity="0.5" font_size="10" align="left" a1="0" font_family="Liberation Serif" color="0xff" shadow_x="1.3pt" valign="top" y="98pt" lock_aspect_ratio="false" a0="1" w="146pt" h="22pt" font_italic="false" shadow_y="1.3pt" x="183pt" a2="0">
<p>Liberation Serif 10</p>
</Object-text>
<Object-text wrap="word" a3="1" shadow_color="0xff" font_weight="normal" a4="0" shadow="false" font_underline="false" line_spacing="1" a5="0" auto_shrink="false" shadow_opacity="0.5" font_size="12" align="left" a1="0" font_family="Liberation Serif" color="0xff" shadow_x="1.3pt" valign="top" y="120pt" lock_aspect_ratio="false" a0="1" w="146pt" h="22pt" font_italic="false" shadow_y="1.3pt" x="183pt" a2="0">
<p>Liberation Serif 12</p>
</Object-text>
<Object-text wrap="word" a3="1" shadow_color="0xff" font_weight="normal" a4="0" shadow="false" font_underline="false" line_spacing="1" a5="0" auto_shrink="false" shadow_opacity="0.5" font_size="14" align="left" a1="0" font_family="Liberation Serif" color="0xff" shadow_x="1.3pt" valign="top" y="147pt" lock_aspect_ratio="false" a0="1" w="180pt" h="22pt" font_italic="false" shadow_y="1.3pt" x="183pt" a2="0">
<p>Liberation Serif 14</p>
</Object-text>
<Object-text wrap="word" a3="1" shadow_color="0xff" font_weight="normal" a4="0" shadow="false" font_underline="false" line_spacing="1" a5="0" auto_shrink="false" shadow_opacity="0.5" font_size="20" align="left" a1="0" font_family="Liberation Serif" color="0xff" shadow_x="1.3pt" valign="top" y="174pt" lock_aspect_ratio="false" a0="1" w="239pt" h="38pt" font_italic="false" shadow_y="1.3pt" x="183pt" a2="0">
<p>Liberation Serif 20</p>
</Object-text>
<Object-text wrap="word" a3="1" shadow_color="0xff" font_weight="normal" a4="0" shadow="false" font_underline="false" line_spacing="1" a5="0" auto_shrink="false" shadow_opacity="0.5" font_size="24" align="left" a1="0" font_family="Liberation Serif" color="0xff" shadow_x="1.3pt" valign="top" y="210pt" lock_aspect_ratio="false" a0="1" w="254pt" h="43pt" font_italic="false" shadow_y="1.3pt" x="183pt" a2="0">
<p>Liberation Serif 24</p>
</Object-text>
<Object-text wrap="word" a3="1" shadow_color="0xff" font_weight="bold" a4="0" shadow="false" font_underline="false" line_spacing="1" a5="0" auto_shrink="false" shadow_opacity="0.5" font_size="10" align="left" a1="0" font_family="Liberation Serif" color="0xff" shadow_x="1.3pt" valign="top" y="255pt" lock_aspect_ratio="false" a0="1" w="146pt" h="22pt" font_italic="false" shadow_y="1.3pt" x="183pt" a2="0">
<p>Liberation Serif 10</p>
</Object-text>
<Object-text wrap="word" a3="1" shadow_color="0xff" font_weight="bold" a4="0" shadow="false" font_underline="false" line_spacing="1" a5="0" auto_shrink="false" shadow_opacity="0.5" font_size="12" align="left" a1="0" font_family="Liberation Serif" color="0xff" shadow_x="1.3pt" valign="top" y="277pt" lock_aspect_ratio="false" a0="1" w="146pt" h="22pt" font_italic="false" shadow_y="1.3pt" x="183pt" a2="0">
<p>Liberation Serif 12</p>
</Object-text>
<Object-text wrap="word" a3="1" shadow_color="0xff" font_weight="bold" a4="0" shadow="false" font_underline="false" line_spacing="1" a5="0" auto_shrink="false" shadow_opacity="0.5" font_size="14" align="left" a1="0" font_family="Liberation Serif" color="0xff" shadow_x="1.3pt" valign="top" y="304pt" lock_aspect_ratio="false" a0="1" w="180pt" h="22pt" font_italic="false" shadow_y="1.3pt" x="183pt" a2="0">
<p>Liberation Serif 14</p>
</Object-text>
<Object-text wrap="word" a3="1" shadow_color="0xff" font_weight="bold" a4="0" shadow="false" font_underline="false" line_spacing="1" a5="0" auto_shrink="false" shadow_opacity="0.5" font_size="20" align="left" a1="0" font_family="Liberation Serif" color="0xff" shadow_x="1.3pt" valign="top" y="331pt" lock_aspect_ratio="false" a0="1" w="239pt" h="38pt" font_italic="false" shadow_y="1.3pt" x="183pt" a2="0">
<p>Liberation Serif 20</p>
</Object-text>
<Object-text wrap="word" a3="1" shadow_color="0xff" font_weight="bold" a4="0" shadow="false" font_underline="false" line_spacing="1" a5="0" auto_shrink="false" shadow_opacity="0.5" font_size="24" align="left" a1="0" font_family="Liberation Serif" color="0xff" shadow_x="1.3pt" valign="top" y="367pt" lock_aspect_ratio="false" a0="1" w="287pt" h="43pt" font_italic="false" shadow_y="1.3pt" x="183pt" a2="0">
<p>Liberation Serif 24</p>
</Object-text>
<Object-text wrap="word" a3="1" shadow_color="0xff" font_weight="normal" a4="0" shadow="false" font_underline="false" line_spacing="1" a5="0" auto_shrink="false" shadow_opacity="0.5" font_size="10" align="left" a1="0" font_family="Liberation Serif" color="0xff" shadow_x="1.3pt" valign="top" y="408pt" lock_aspect_ratio="false" a0="1" w="146pt" h="22pt" font_italic="true" shadow_y="1.3pt" x="183pt" a2="0">
<p>Liberation Serif 10</p>
</Object-text>
<Object-text wrap="word" a3="1" shadow_color="0xff" font_weight="normal" a4="0" shadow="false" font_underline="false" line_spacing="1" a5="0" auto_shrink="false" shadow_opacity="0.5" font_size="12" align="left" a1="0" font_family="Liberation Serif" color="0xff" shadow_x="1.3pt" valign="top" y="430pt" lock_aspect_ratio="false" a0="1" w="146pt" h="22pt" font_italic="true" shadow_y="1.3pt" x="183pt" a2="0">
<p>Liberation Serif 12</p>
</Object-text>
<Object-text wrap="word" a3="1" shadow_color="0xff" font_weight="normal" a4="0" shadow="false" font_underline="false" line_spacing="1" a5="0" auto_shrink="false" shadow_opacity="0.5" font_size="14" align="left" a1="0" font_family="Liberation Serif" color="0xff" shadow_x="1.3pt" valign="top" y="457pt" lock_aspect_ratio="false" a0="1" w="180pt" h="22pt" font_italic="true" shadow_y="1.3pt" x="183pt" a2="0">
<p>Liberation Serif 14</p>
</Object-text>
<Object-text wrap="word" a3="1" shadow_color="0xff" font_weight="normal" a4="0" shadow="false" font_underline="false" line_spacing="1" a5="0" auto_shrink="false" shadow_opacity="0.5" font_size="20" align="left" a1="0" font_family="Liberation Serif" color="0xff" shadow_x="1.3pt" valign="top" y="484pt" lock_aspect_ratio="false" a0="1" w="239pt" h="38pt" font_italic="true" shadow_y="1.3pt" x="183pt" a2="0">
<p>Liberation Serif 20</p>
</Object-text>
<Object-text wrap="word" a3="1" shadow_color="0xff" font_weight="normal" a4="0" shadow="false" font_underline="false" line_spacing="1" a5="0" auto_shrink="false" shadow_opacity="0.5" font_size="24" align="left" a1="0" font_family="Liberation Serif" color="0xff" shadow_x="1.3pt" valign="top" y="520pt" lock_aspect_ratio="false" a0="1" w="254pt" h="43pt" font_italic="true" shadow_y="1.3pt" x="183pt" a2="0">
<p>Liberation Serif 24</p>
</Object-text>
<Object-text wrap="word" a3="1" shadow_color="0xff" font_weight="normal" a4="0" shadow="false" font_underline="true" line_spacing="1" a5="0" auto_shrink="false" shadow_opacity="0.5" font_size="10" align="left" a1="0" font_family="Liberation Serif" color="0xff" shadow_x="1.3pt" valign="top" y="561pt" lock_aspect_ratio="false" a0="1" w="146pt" h="22pt" font_italic="false" shadow_y="1.3pt" x="183pt" a2="0">
<p>Liberation Serif 10</p>
</Object-text>
<Object-text wrap="word" a3="1" shadow_color="0xff" font_weight="normal" a4="0" shadow="false" font_underline="true" line_spacing="1" a5="0" auto_shrink="false" shadow_opacity="0.5" font_size="12" align="left" a1="0" font_family="Liberation Serif" color="0xff" shadow_x="1.3pt" valign="top" y="583pt" lock_aspect_ratio="false" a0="1" w="146pt" h="22pt" font_italic="false" shadow_y="1.3pt" x="183pt" a2="0">
<p>Liberation Serif 12</p>
</Object-text>
<Object-text wrap="word" a3="1" shadow_color="0xff" font_weight="normal" a4="0" shadow="false" font_underline="true" line_spacing="1" a5="0" auto_shrink="false" shadow_opacity="0.5" font_size="20" align="left" a1="0" font_family="Liberation Serif" color="0xff" shadow_x="1.3pt" valign="top" y="637pt" lock_aspect_ratio="false" a0="1" w="239pt" h="38pt" font_italic="false" shadow_y="1.3pt" x="183pt" a2="0">
<p>Liberation Serif 20</p>
</Object-text>
<Object-text wrap="word" a3="1" shadow_color="0xff" font_weight="normal" a4="0" shadow="false" font_underline="true" line_spacing="1" a5="0" auto_shrink="false" shadow_opacity="0.5" font_size="24" align="left" a1="0" font_family="Liberation Serif" color="0xff" shadow_x="1.3pt" valign="top" y="673pt" lock_aspect_ratio="false" a0="1" w="254pt" h="43pt" font_italic="false" shadow_y="1.3pt" x="183pt" a2="0">
<p>Liberation Serif 24</p>
</Object-text>
<Object-text wrap="word" a3="1" shadow_color="0xff" font_weight="normal" a4="0" shadow="false" font_underline="true" line_spacing="1" a5="0" auto_shrink="false" shadow_opacity="0.5" font_size="14" align="left" a1="0" font_family="Liberation Serif" color="0xff" shadow_x="1.3pt" valign="top" y="610pt" lock_aspect_ratio="false" a0="1" w="180pt" h="22pt" font_italic="false" shadow_y="1.3pt" x="183pt" a2="0">
<p>Liberation Serif 14</p>
</Object-text>
</Objects>
<Data/>
</Glabels-document>
Binary file not shown.