Jump to content

GDIPlus adjust font size


Recommended Posts

Is there any way to adjust font size dynamically to ensure that a random multi line string will cover the entire screen and will be visible without wrap?

For example on my display at 1920x1080 the following string at font size 60 will met the above conditions.

#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>

Local $hGUI, $hGraphic, $hBrush, $hFormat, $hFamily, $hFont, $tLayout, $sString

$hGUI = GUICreate("GDI+", @DesktopWidth, @DesktopHeight, 0, 0, 0x80000000)
GUISetState(@SW_SHOW)

$sString = 'Take this kiss upon the brow!' & @CRLF
$sString &= 'And, in parting from you now,' & @CRLF
$sString &= 'Thus much let me avow--' & @CRLF
$sString &= 'You are not wrong, who deem' & @CRLF
$sString &= 'That my days have been a dream;' & @CRLF
$sString &= 'Yet if hope has flown away' & @CRLF
$sString &= 'In a night, or in a day,' & @CRLF
$sString &= 'In a vision, or in none,' & @CRLF
$sString &= 'Is it therefore the less gone?' & @CRLF
$sString &= 'All that we see or seem' & @CRLF
$sString &= 'Is but a dream within a dream.'

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
$hBrush = _GDIPlus_BrushCreateSolid(0xFFFFFFFF)
$hFormat = _GDIPlus_StringFormatCreate(0x1000)
_GDIPlus_StringFormatSetAlign($hFormat, 1)
_GDIPlus_StringFormatSetLineAlign($hFormat, 1)
$hFamily = _GDIPlus_FontFamilyCreate("Arial")
$hFont = _GDIPlus_FontCreate($hFamily, 60)          ; <<< Adjust font size
$tLayout = _GDIPlus_RectFCreate(20, 20, @DesktopWidth - 40, @DesktopHeight - 40)
_GDIPlus_GraphicsClear($hGraphic)
_GDIPlus_GraphicsDrawStringEx($hGraphic, $sString, $hFont, $tLayout, $hFormat, $hBrush)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

_GDIPlus_FontDispose($hFont)
_GDIPlus_FontFamilyDispose($hFamily)
_GDIPlus_StringFormatDispose($hFormat)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()

I tried to measure the string using _GDIPlus_GraphicsMeasureString but it's quite confusing what this function is returning.

 

EDIT: I ended up with this. I am pretty satisfied but I am still open to suggestions.

#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>

Local $hGUI, $hGraphic, $hBrush, $hFormat, $hFamily, $hFont, $tLayout, $sString

$hGUI = GUICreate("GDI+", @DesktopWidth, @DesktopHeight, 0, 0, 0x80000000)
GUISetState(@SW_SHOW)

$sString = 'Take this kiss upon the brow!' & @CRLF
$sString &= 'And, in parting from you now,' & @CRLF
$sString &= 'Thus much let me avow--' & @CRLF
$sString &= 'You are not wrong, who deem' & @CRLF
$sString &= 'That my days have been a dream;' & @CRLF
$sString &= 'Yet if hope has flown away' & @CRLF
$sString &= 'In a night, or in a day,' & @CRLF
$sString &= 'In a vision, or in none,' & @CRLF
$sString &= 'Is it therefore the less gone?' & @CRLF
$sString &= 'All that we see or seem' & @CRLF
$sString &= 'Is but a dream within a dream.'

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
$hBrush = _GDIPlus_BrushCreateSolid(0xFFFFFFFF)
$hFormat = _GDIPlus_StringFormatCreate()
_GDIPlus_StringFormatSetAlign($hFormat, 1)
_GDIPlus_StringFormatSetLineAlign($hFormat, 1)
$hFamily = _GDIPlus_FontFamilyCreate("Arial")
$tLayout = _GDIPlus_RectFCreate(20, 20, @DesktopWidth - 40, @DesktopHeight - 40)

$hFont = _GDIPlus_FontCreate($hFamily, AdjustFontSize($sString))
_GDIPlus_GraphicsClear($hGraphic)
_GDIPlus_GraphicsDrawStringEx($hGraphic, $sString, $hFont, $tLayout, $hFormat, $hBrush)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

_GDIPlus_FontDispose($hFont)
_GDIPlus_FontFamilyDispose($hFamily)
_GDIPlus_StringFormatDispose($hFormat)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()

Func AdjustFontSize($sString, $MaxFontSize = 100, $MinFontSize = 10)
    ;~ Calculate the longest line
    $LongestString = ''
    $Cols = 0
    $aData = StringSplit($sString, @CRLF, 1)
    For $Index = 1 To $aData[0]
        $iLen = StringLen($aData[$Index])
        If $iLen > $Cols Then
            $Cols = $iLen
            $LongestString = $aData[$Index]
        EndIf
    Next
    ;~ Get maximum font size to ensure full visibility of the longest line without wrap
    For $ColSize = $MaxFontSize to $MinFontSize Step -1
        $hFont = _GDIPlus_FontCreate($hFamily, $ColSize)
        $aInfo = _GDIPlus_GraphicsMeasureString($hGraphic, $LongestString, $hFont, $tLayout, $hFormat)
        If $aInfo[2] = 1 Then ExitLoop
        _GDIPlus_FontDispose($hFont)
    Next

    ;~ Get maximum font size to ensure full visibility of all lines without wrap
    For $RowSize = $ColSize to $MinFontSize Step -1
        $hFont = _GDIPlus_FontCreate($hFamily, $RowSize)
        $aInfo = _GDIPlus_GraphicsMeasureString($hGraphic, $sString, $hFont, $tLayout, $hFormat)
        If $aInfo[2] = $aData[0] Then ExitLoop
        _GDIPlus_FontDispose($hFont)
    Next
    ;~ Probably GDI+ measure also some spaces so I added a little correction decreasing font size by 5
    $FontSize = $RowSize - 5
    Return $FontSize
EndFunc

 

Edited by Andreik
Link to comment
Share on other sites

Try this:

#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>

Local $hGUI, $hGraphic, $hBrush, $hFormat, $hFamily, $hFont, $tLayout, $sString, $iFontSize
Local $iW = @DesktopWidth / 4, $iH = @DesktopHeight / 4
$hGUI = GUICreate("GDI+", $iW, $iH) ;, 0, 0, 0x80000000)
GUISetState(@SW_SHOW)

$sString = 'Take this kiss upon the brow!' & @CRLF
$sString &= 'And, in parting from you now,' & @CRLF
$sString &= 'Thus much let me avow--' & @CRLF
$sString &= 'You are not wrong, who deem' & @CRLF
$sString &= 'That my days have been a dream;' & @CRLF
$sString &= 'Yet if hope has flown away' & @CRLF
$sString &= 'In a night, or in a day,' & @CRLF
$sString &= 'In a vision, or in none,' & @CRLF
$sString &= 'Is it therefore the less gone?' & @CRLF
$sString &= 'All that we see or seem' & @CRLF
$sString &= 'Is but a dream within a dream.'

_GDIPlus_Startup()


$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
$hBrush = _GDIPlus_BrushCreateSolid(0xFFFFFFFF)
$hFormat = _GDIPlus_StringFormatCreate(0x1000)
_GDIPlus_StringFormatSetAlign($hFormat, 1)
_GDIPlus_StringFormatSetLineAlign($hFormat, 1)
$hFamily = _GDIPlus_FontFamilyCreate("Arial")
$tLayout = _GDIPlus_RectFCreate(20, 20, $iW - 40, $iH - 40)
$iFontSize = Measure($sString, $iW - 40, $iH - 40)
$hFont = _GDIPlus_FontCreate($hFamily, $iFontSize )          ; <<< Adjust font size
_GDIPlus_GraphicsClear($hGraphic)
_GDIPlus_GraphicsDrawStringEx($hGraphic, $sString, $hFont, $tLayout, $hFormat, $hBrush)
$hPen = _GDIPlus_PenCreate(0xFF00F000)
_GDIPlus_GraphicsDrawRect($hGraphic, $tLayout.x, $tLayout.y, $tLayout.width, $tLayout.height, $hPen)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

_GDIPlus_PenDispose($hPen)
_GDIPlus_FontDispose($hFont)
_GDIPlus_FontFamilyDispose($hFamily)
_GDIPlus_StringFormatDispose($hFormat)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()

Func Measure($sString, $iW, $iH, $sFont = "Arial", $iStyle = 0)
    Local Const $hFormat = _GDIPlus_StringFormatCreate()
    Local Const $hFamily = _GDIPlus_FontFamilyCreate($sFont)
    Local Const $iFontSize = 4
    Local Const $hFont = _GDIPlus_FontCreate($hFamily, $iFontSize, $iStyle)
    Local Const $hGraphics = _GDIPlus_GraphicsCreateFromHDC(_WinAPI_GetWindowDC(0))
    Local $tLayout = _GDIPlus_RectFCreate(0, 0, $iW, $iH)
    Local Const $aInfo = _GDIPlus_GraphicsMeasureString($hGraphics, $sString, $hFont, $tLayout, $hFormat)
    _GDIPlus_FontDispose($hFont)
    _GDIPlus_FontFamilyDispose($hFamily)
    _GDIPlus_StringFormatDispose($hFormat)
    _GDIPlus_GraphicsDispose($hGraphics)
    If $iW > $iH Then Return $iFontSize * $iH / $aInfo[0].height
    Return $iFontSize * $iW / $aInfo[0].width
EndFunc

 

Edited by UEZ

Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Link to comment
Share on other sites

Thanks UEZ it's a clean script but it doesn't work for any random string. Just comment the last 5 lines of $sString and see what I mean.

 

EDIT:

I modified a little bit your script to ensure the visibility of the longest line also and seems to work good

#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>

Local $hGUI, $hGraphic, $hBrush, $hFormat, $hFamily, $hFont, $tLayout, $sString, $iFontSize
Local $iW = @DesktopWidth / 4, $iH = @DesktopHeight / 4
$hGUI = GUICreate("GDI+", $iW, $iH) ;, 0, 0, 0x80000000)
GUISetState(@SW_SHOW)

$sString = 'Take this kiss upon the brow!' & @CRLF
$sString &= 'And, in parting from you now,' & @CRLF
$sString &= 'Thus much let me avow--' & @CRLF
$sString &= 'You are not wrong, who deem' & @CRLF
$sString &= 'That my days have been a dream;' & @CRLF
$sString &= 'Yet if hope has flown away' & @CRLF
$sString &= 'In a night, or in a day,' & @CRLF
$sString &= 'In a vision, or in none,' & @CRLF
$sString &= 'Is it therefore the less gone?' & @CRLF
$sString &= 'All that we see or seem' & @CRLF
$sString &= 'Is but a dream within a dream.'

_GDIPlus_Startup()


$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
$hBrush = _GDIPlus_BrushCreateSolid(0xFFFFFFFF)
$hFormat = _GDIPlus_StringFormatCreate(0x1000)
_GDIPlus_StringFormatSetAlign($hFormat, 1)
_GDIPlus_StringFormatSetLineAlign($hFormat, 1)
$hFamily = _GDIPlus_FontFamilyCreate("Arial")
$tLayout = _GDIPlus_RectFCreate(20, 20, $iW - 40, $iH - 40)
$iFontSize = Measure($sString, $iW - 40, $iH - 40)
$hFont = _GDIPlus_FontCreate($hFamily, $iFontSize)          ; <<< Adjust font size
_GDIPlus_GraphicsClear($hGraphic)
_GDIPlus_GraphicsDrawStringEx($hGraphic, $sString, $hFont, $tLayout, $hFormat, $hBrush)
$hPen = _GDIPlus_PenCreate(0xFF00F000)
_GDIPlus_GraphicsDrawRect($hGraphic, $tLayout.x, $tLayout.y, $tLayout.width, $tLayout.height, $hPen)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

_GDIPlus_PenDispose($hPen)
_GDIPlus_FontDispose($hFont)
_GDIPlus_FontFamilyDispose($hFamily)
_GDIPlus_StringFormatDispose($hFormat)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()

Func Measure($sString, $iW, $iH, $sFont = "Arial", $iStyle = 0)
    Local $LongestLine
    Local Const $hFormat = _GDIPlus_StringFormatCreate()
    Local Const $hFamily = _GDIPlus_FontFamilyCreate($sFont)
    Local Const $iFontSize = 4
    Local Const $hFont = _GDIPlus_FontCreate($hFamily, $iFontSize, $iStyle)
    Local Const $hGraphics = _GDIPlus_GraphicsCreateFromHDC(_WinAPI_GetWindowDC(0))
    Local $tLayout = _GDIPlus_RectFCreate(0, 0, $iW, $iH)
    Local $aLines = StringSplit($sString, @CRLF, 1)
    For $Index = 1 To $aLines[0]
        $LongestLine = StringLen($LongestLine) > StringLen($aLines[$Index]) ? $LongestLine : $aLines[$Index]
    Next
    Local Const $aInfo1 = _GDIPlus_GraphicsMeasureString($hGraphics, $LongestLine, $hFont, $tLayout, $hFormat)
    Local $iSizeW = $iFontSize * $iW / $aInfo1[0].width
    Local Const $aInfo2 = _GDIPlus_GraphicsMeasureString($hGraphics, $sString, $hFont, $tLayout, $hFormat)
    Local $iSizeH = $iFontSize * $iH / $aInfo2[0].height
    _GDIPlus_FontDispose($hFont)
    _GDIPlus_FontFamilyDispose($hFamily)
    _GDIPlus_StringFormatDispose($hFormat)
    _GDIPlus_GraphicsDispose($hGraphics)
    Return $iSizeW > $iSizeH ? $iSizeH : $iSizeW
EndFunc

 

Edited by Andreik
Link to comment
Share on other sites

1 hour ago, Andreik said:

Thanks UEZ it's a clean script but it doesn't work for any random string. Just comment the last 5 lines of $sString and see what I mean.

For me looks ok if I remove the last 5 lines!

GDI.jpg

 

Edit: ok, got it now. Now I see that the width of the text doesn't fit.

Edited by UEZ

Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Link to comment
Share on other sites

That's true but we can check for the font size that ensure and visibility of longest line and then the font size that ensure the visibility of all lines and the smallest font size should be safe to use to ensure the visibility of all text.

Link to comment
Share on other sites

 

7 hours ago, Andreik said:

That's true but we can check for the font size that ensure and visibility of longest line and then the font size that ensure the visibility of all lines and the smallest font size should be safe to use to ensure the visibility of all text.

Can you try this if it works properly:

Func Measure($sString, $iW, $iH, $sFont = "Arial", $iStyle = 0, $iFormat = 0)
    Local Const $hFormat = _GDIPlus_StringFormatCreate($iFormat)
    Local Const $hFamily = _GDIPlus_FontFamilyCreate($sFont)
    Local Const $iFontSize = 4
    Local Const $hFont = _GDIPlus_FontCreate($hFamily, $iFontSize, $iStyle)
    Local Const $hGraphics = _GDIPlus_GraphicsCreateFromHDC(_WinAPI_GetWindowDC(0))
    Local $tLayout = _GDIPlus_RectFCreate()
    Local Const $aInfo = _GDIPlus_GraphicsMeasureString($hGraphics, $sString, $hFont, $tLayout, $hFormat)
    _GDIPlus_FontDispose($hFont)
    _GDIPlus_FontFamilyDispose($hFamily)
    _GDIPlus_StringFormatDispose($hFormat)
    _GDIPlus_GraphicsDispose($hGraphics)
    Local $fWidth = $iFontSize * $aInfo[0].width, $fHeight = $iFontSize * $aInfo[0].height
    If $fWidth < $iW And $fHeight < $iH Then
        If $iW > $iH Then Return $iFontSize * $iH / $aInfo[0].height
        Return $iFontSize * $iW / $aInfo[0].width
    ElseIf $fWidth > $iW And $fHeight < $iH Then
        Return $iFontSize * $iW / $aInfo[0].width
    Else
        If $fWidth < $fHeight Then Return $iFontSize * $iW / $aInfo[0].width
        If $iH > $iW Then Return $iFontSize * $iW / $aInfo[0].width
        Return $iFontSize * $iH / $aInfo[0].height
    EndIf
EndFunc

 

Edited by UEZ
Little update

Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Link to comment
Share on other sites

On 6/10/2020 at 1:53 PM, Andreik said:

seems to work good

Try this text

$sString = 'iiiiiiiiii' & @CRLF
$sString &= 'WWWWWWW'

 

My version

Func Measure($sString, $iW, $iH, $sFont = "Arial", $iStyle = 0, $iFormat = 0)
  Local $hDC, $hGraphic, $hFormat, $hFamily, $hFont, $tLayout, $aInfo
  $hDC = _WinAPI_GetDC(0)
  $hGraphic = _GDIPlus_GraphicsCreateFromHDC($hDC)
  _WinAPI_ReleaseDC(0, $hDC)
  $hFormat = _GDIPlus_StringFormatCreate($iFormat)
  $hFamily = _GDIPlus_FontFamilyCreate($sFont)
  _GDIPlus_StringFormatSetAlign($hFormat, 1)
  _GDIPlus_StringFormatSetLineAlign($hFormat, 1)
  For $i = 1 To 100 Step 0.5
    $hFont = _GDIPlus_FontCreate($hFamily, $i, $iStyle)
    $tLayout = _GDIPlus_RectFCreate()
    $aInfo = _GDIPlus_GraphicsMeasureString($hGraphic, $sString, $hFont, $tLayout, $hFormat)
    _GDIPlus_FontDispose($hFont)
    If $aInfo[0].Width > $iW Or $aInfo[0].Height > $iH Then ExitLoop
  Next
  _GDIPlus_FontFamilyDispose($hFamily)
  _GDIPlus_StringFormatDispose($hFormat)
  _GDIPlus_GraphicsDispose($hGraphic)
  Return $i - 0.5
EndFunc

 

Link to comment
Share on other sites

  • 3 weeks later...

@Andreik somehow this problem has never left me. I didn't want to use a loop to check step by step the best fit for the text.

#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>

Local $hGUI, $hGraphic, $hBrush, $hFormat, $hFamily, $hFont, $tLayout, $sString, $iFontSize
Local $iW = @DesktopWidth / 2, $iH = @DesktopHeight / 2
$hGUI = GUICreate("GDI+", $iW, $iH) ;, 0, 0, 0x80000000)
GUISetState(@SW_SHOW)

$sString = 'Take this kiss upon the brow!' & @CRLF
$sString &= 'And, in parting from you now,' & @CRLF
$sString &= 'Thus much let me avow--' & @CRLF
$sString &= 'You are not wrong, who deem' & @CRLF
$sString &= 'That my days have been a dream;' & @CRLF
$sString &= 'Yet if hope has flown away,' & @CRLF
$sString &= 'In a night, or in a day,' & @CRLF
$sString &= 'In a vision, or in none,' & @CRLF
$sString &= 'Is it therefore the less gone?' & @CRLF
$sString &= 'All that we see or seem' & @CRLF
$sString &= 'Is but a dream within a dream.'

_GDIPlus_Startup()


$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
$hBrush = _GDIPlus_BrushCreateSolid(0xFFFFFFFF)
$hFormat = _GDIPlus_StringFormatCreate()
_GDIPlus_StringFormatSetAlign($hFormat, 1)
_GDIPlus_StringFormatSetLineAlign($hFormat, 1)
$hFamily = _GDIPlus_FontFamilyCreate("Arial")
$tLayout = _GDIPlus_RectFCreate(20, 20, $iW - 40, $iH - 40)
$iFontSize = Measure($sString, $iW - 40, $iH - 40)
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $iFontSize = ' & $iFontSize & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
$hFont = _GDIPlus_FontCreate($hFamily, $iFontSize )          ; <<< Adjust font size
_GDIPlus_GraphicsClear($hGraphic)
_GDIPlus_GraphicsDrawStringEx($hGraphic, $sString, $hFont, $tLayout, $hFormat, $hBrush)
$hPen = _GDIPlus_PenCreate(0xFF00F000)
_GDIPlus_GraphicsDrawRect($hGraphic, $tLayout.x, $tLayout.y, $tLayout.width, $tLayout.height, $hPen)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

_GDIPlus_PenDispose($hPen)
_GDIPlus_FontDispose($hFont)
_GDIPlus_FontFamilyDispose($hFamily)
_GDIPlus_StringFormatDispose($hFormat)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()

Func Measure($sString, $iW, $iH, $sFont = "Arial", $iStyle = 0, $iFormat = 0)
    Local Const $hFormat = _GDIPlus_StringFormatCreate($iFormat)
    Local Const $hFamily = _GDIPlus_FontFamilyCreate($sFont)
    Local Const $iFontSize = 1
    Local Const $hFont = _GDIPlus_FontCreate($hFamily, $iFontSize, $iStyle)
    Local Const $hGraphics = _GDIPlus_GraphicsCreateFromHDC(_WinAPI_GetWindowDC(0))
    Local $tLayout = _GDIPlus_RectFCreate(0, 0, $iW, $iH)
    Local Const $aInfo = _GDIPlus_GraphicsMeasureString($hGraphics, $sString, $hFont, $tLayout, $hFormat)
    _GDIPlus_FontDispose($hFont)
    _GDIPlus_FontFamilyDispose($hFamily)
    _GDIPlus_StringFormatDispose($hFormat)
    _GDIPlus_GraphicsDispose($hGraphics)
    If ($iH /  $aInfo[0].height) * $aInfo[0].width > $iW Then Return ($iW /  $aInfo[0].width)
    Return ($iH /  $aInfo[0].height)
EndFunc

I made several test and it worked properly so far. 

 

Can you check please again?

 

Thx.

Edited by UEZ

Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...