X-Git-Url: http://git.kpe.io/?p=ctsim.git;a=blobdiff_plain;f=libctgraphics%2Fsgp.cpp;h=4790a2394e2b9514222151a41d9aeb855f47e881;hp=e96f29d8414c5ffc2d9324fb8a0404582d86c127;hb=3147cd44cff6132e51eac1a179c1fc3d405faacc;hpb=c149735f56364c224ec6847d0f32ba06af86dc5b diff --git a/libctgraphics/sgp.cpp b/libctgraphics/sgp.cpp index e96f29d..4790a23 100644 --- a/libctgraphics/sgp.cpp +++ b/libctgraphics/sgp.cpp @@ -7,7 +7,7 @@ ** This is part of the CTSim program ** Copyright (C) 1983-2000 Kevin Rosenberg ** -** $Id: sgp.cpp,v 1.13 2000/09/02 05:10:39 kevin Exp $ +** $Id: sgp.cpp,v 1.14 2000/09/04 09:06:46 kevin Exp $ ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License (version 2) as @@ -79,7 +79,7 @@ SGPDriver::~SGPDriver () // SGP::SGP Constructor for Simple Graphics Package SGP::SGP (const SGPDriver& driver) - : m_driver (driver) + : m_driver (driver) { m_iPhysicalXSize = m_driver.getPhysicalXSize(); m_iPhysicalYSize = m_driver.getPhysicalYSize(); @@ -94,13 +94,24 @@ SGP::SGP (const SGPDriver& driver) m_pen.SetStyle(wxSOLID); #endif + if (m_driver.isWX()) { + static const double dScreenDPI = 82; + static const double dPointsPerInch = 72.; + m_dPointsPerPixel = dPointsPerInch / dScreenDPI; + const int iTestPointSize = 72; + m_font.SetPointSize (iTestPointSize); + m_driver.idWX()->SetFont(m_font); + double dTestCharHeight = m_driver.idWX()->GetCharHeight(); + m_dPointsPerPixel = iTestPointSize / dTestCharHeight; + } + setWindow (0., 0., 1., 1.); setViewport (0., 0., 1., 1.); moveAbs (0., 0.); stylusNDC (0., 0., false); - + setTextAngle (0.); - setTextSize (1. / 25.); + setTextPointSize (12); setColor (C_BLACK); } @@ -115,12 +126,12 @@ SGP::stylusNDC (double x, double y, bool beam) if (beam) { #if HAVE_WXWINDOWS - if (m_driver.isWX()) - m_driver.idWX()->DrawLine (m_iCurrentPhysicalX, m_iCurrentPhysicalY, xp, yp); + if (m_driver.isWX()) + m_driver.idWX()->DrawLine (m_iCurrentPhysicalX, m_iCurrentPhysicalY, xp, yp); #endif #if HAVE_G2_H - if (m_driver.isG2()) - g2_line (m_driver.idG2(), m_iCurrentPhysicalX, m_iCurrentPhysicalY, xp, yp); + if (m_driver.isG2()) + g2_line (m_driver.idG2(), m_iCurrentPhysicalX, m_iCurrentPhysicalY, xp, yp); #endif } m_iCurrentPhysicalX = xp; @@ -401,11 +412,56 @@ SGP::moveRel (double x, double y) moveAbs (x + m_dCurrentWorldX, y + m_dCurrentWorldY); } + +// Height is in master coordinates void SGP::setTextSize (double height) { + height /= (xw_max - xw_min); +#if HAVE_G2_H if (m_driver.isG2()) g2_set_font_size(m_driver.idG2(), (height * m_iPhysicalYSize)); +#endif +#if HAVE_WXWINDOWS + if (m_driver.isWX()) { + double dHeightPixels = height * m_iPhysicalYSize; + double dHeightPoints = dHeightPixels * m_dPointsPerPixel; + m_font.SetPointSize (nearest(dHeightPoints)); + m_driver.idWX()->SetFont (m_font); + } +#endif +} + +void +SGP::setTextNDCSize (double height) +{ + double dHeightPixels = height * m_iPhysicalYSize; +#if HAVE_G2_H + if (m_driver.isG2()) + g2_set_font_size(m_driver.idG2(), nearest(dHeightPixels)); +#endif +#if HAVE_WXWINDOWS + if (m_driver.isWX()) { + double dHeightPoints = dHeightPixels * m_dPointsPerPixel; + m_font.SetPointSize (nearest(dHeightPoints)); + m_driver.idWX()->SetFont (m_font); + } +#endif +} + +void +SGP::setTextPointSize (double height) +{ +#if HAVE_G2_H + // if (m_driver.isG2()) + // g2_set_font_size(m_driver.idG2(), (height * m_iPhysicalYSize)); +#endif +#if HAVE_WXWINDOWS + if (m_driver.isWX()) { + m_font.SetPointSize (height); + m_driver.idWX()->SetFont (m_font); + } +#endif } void @@ -418,7 +474,6 @@ SGP::getTextExtent (const char* szText, double* worldW, double* worldH) m_driver.idWX()->GetTextExtent (sText, &deviceW, &deviceH); *worldW = static_cast(deviceW) / static_cast(m_iPhysicalXSize);; *worldH = static_cast(deviceH) / static_cast(m_iPhysicalYSize); - // cout << deviceW << ", " << deviceH << ", " << *worldW << ", " << *worldH << endl; *worldW *= (xw_max - xw_min); *worldH *= (yw_max - yw_min); } @@ -433,16 +488,32 @@ SGP::getCharHeight () #if HAVE_WXWINDOWS if (m_driver.isWX()) { dHeight = m_driver.idWX()->GetCharHeight(); - dHeight /= static_cast(m_iPhysicalYSize);; + dHeight /= static_cast(m_iPhysicalYSize); + } +#endif + dHeight *= (yw_max - yw_min); + return dHeight; +} + +double +SGP::getCharWidth () +{ + double dWidth = (1. / 80.); + +#if HAVE_WXWINDOWS + if (m_driver.isWX()) { + dWidth = m_driver.idWX()->GetCharWidth(); + dWidth /= static_cast(m_iPhysicalXSize); } #endif - return (dHeight * (xw_max - xw_min)); + dWidth *= (xw_max - xw_min); + return dWidth; } void SGP::setTextAngle (double angle) { - m_dTextAngle = angle; + m_dTextAngle = convertRadiansToDegrees(angle); } void