home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD2.mdf / c / library / starview / examples / output / fontdemo.cxx < prev    next >
C/C++ Source or Header  |  1992-07-31  |  18KB  |  563 lines

  1. /*******************************************************************
  2. *  FONTDEMO.CXX
  3. *  (c) 1992 STAR DIVISION
  4. *******************************************************************/
  5.  
  6. #include <sv.hxx>
  7.  
  8. #include "fontdemo.hrc"
  9.  
  10. // --- class MyApp -------------------------------------------------
  11.  
  12. class MyApp : public Application
  13. {
  14. public:
  15.     virtual void Main( int, char*[] );
  16. };
  17.  
  18. // --- class ShowFont ----------------------------------------------
  19.  
  20. class ShowFont : public Control
  21. {
  22. public:
  23.                     ShowFont( Window* pParent, ResId& rResId );
  24.  
  25.     virtual void    Paint( const Rectangle& );
  26.     Font            ChangeFont( const Font& rFont );
  27. };
  28.  
  29. // --- class FontDialog --------------------------------------------
  30.  
  31. class FontDialog : public ModalDialog
  32. {
  33. protected:
  34.     FixedText           aNameText;
  35.     ListBox             aNameBox;
  36.     FixedText           aSizeText;
  37.     ListBox             aSizeBox;
  38.     AutoCheckBox        aItalic;
  39.     AutoCheckBox        aBold;
  40.     AutoCheckBox        aStrikeout;
  41.     AutoCheckBox        aUnderline;
  42.     AutoCheckBox        aShadow;
  43.     AutoCheckBox        aOutline;
  44.     AutoCheckBox        aTransparent;
  45.     GroupBox            aStyleGroup;
  46.     FixedText           aColorText;
  47.     DropDownListBox     aColorBox;
  48.     FixedText           aFillText;
  49.     DropDownListBox     aFillBox;
  50.     FixedText           aLineAngleText;
  51.     DropDownComboBox    aLineAngleBox;
  52.     FixedText           aCharAngleText;
  53.     DropDownComboBox    aCharAngleBox;
  54.     ShowFont            aShowFont;
  55.     DefPushButton       aOkButton;
  56.     Font                aFont;
  57.  
  58. public:
  59.                         FontDialog( Window* pWindow,
  60.                                     ResId& rResId );
  61.  
  62.     void                FontChangeHdl( ListBox* pBox );
  63.     void                SizeChangeHdl( ListBox* pBox );
  64.  
  65.     void                ColorSelectHdl( DropDownListBox* pBox );
  66.     void                FillSelectHdl( DropDownListBox* pBox );
  67.     void                AttrHdl( AutoCheckBox* pBox );
  68.  
  69.     void                LineSelectHdl( DropDownComboBox* pBox );
  70.     void                LineModifyHdl( DropDownComboBox* pBox );
  71.     void                CharSelectHdl( DropDownComboBox* pBox );
  72.     void                CharModifyHdl( DropDownComboBox* pBox );
  73.  
  74.     void                OkHdl( PushButton* pOkButton );
  75.  
  76.     Font                GetNewFont() const { return aFont; }
  77. };
  78.  
  79. // --- class AppWin ------------------------------------------------
  80.  
  81. class AppWin : public WorkWindow
  82. {
  83. private:
  84.     FontDialog      aFontDialog;
  85.     PushButton      aFontButton;
  86.  
  87. public:
  88.                     AppWin();
  89.  
  90.     virtual void    Paint( const Rectangle& );
  91.     void            FontHdl( PushButton* );
  92. };
  93.  
  94. // --- ShowFont::ShowFont() ----------------------------------------
  95.  
  96. ShowFont::ShowFont( Window* pParent, ResId& rResId ) :
  97.               Control( pParent, rResId )
  98. {
  99. }
  100.  
  101. // --- ShowFont::Paint() -------------------------------------------
  102.  
  103. void ShowFont::Paint( const Rectangle& )
  104. {
  105.     USHORT x,y;
  106.     Size   aTextSize( GetTextSize( GetText() ) );
  107.     Size   aWindowSize( GetOutputSize() );
  108.  
  109.     if ( GetFont().GetLineOrientation() != 0 )
  110.     {
  111.         x = aWindowSize.Width()/2;
  112.         y = aWindowSize.Height()/2;
  113.         DrawText( Point( x, y ), "Rotation" );
  114.     }
  115.     else
  116.     {
  117.         x = aWindowSize.Width()/2 - aTextSize.Width()/2;
  118.         y = aWindowSize.Height()/2 - aTextSize.Height()/2;
  119.         DrawText( Point( x, y ), GetText() );
  120.     }
  121. }
  122.  
  123. // --- ShowFont::ChangeFont() --------------------------------------
  124.  
  125. Font ShowFont::ChangeFont( const Font& rFont )
  126. {
  127.     Invalidate();
  128.     return Control::ChangeFont( rFont );
  129. }
  130.  
  131. // --- FontDialog::FontDialog() ------------------------------------
  132.  
  133. FontDialog::FontDialog( Window* pWindow, ResId& rResId ) :
  134.                 ModalDialog( pWindow, rResId.Lock() ),
  135.                 aNameText( this, ResId( FD_NAMETEXT ) ),
  136.                 aNameBox( this, ResId( FD_NAMEBOX ) ),
  137.                 aSizeText( this, ResId( FD_SIZETEXT ) ),
  138.                 aSizeBox( this, ResId( FD_SIZEBOX ) ),
  139.                 aItalic( this, ResId( FD_ITALIC ) ),
  140.                 aBold( this, ResId( FD_BOLD ) ),
  141.                 aStrikeout( this, ResId( FD_STRIKEOUT ) ),
  142.                 aUnderline( this, ResId( FD_UNDERLINE ) ),
  143.                 aShadow( this, ResId( FD_SHADOW ) ),
  144.                 aOutline( this, ResId( FD_OUTLINE ) ),
  145.                 aTransparent( this, ResId( FD_TRANSPARENT ) ),
  146.                 aStyleGroup( this, ResId( FD_STYLEGROUP ) ),
  147.                 aColorText( this, ResId( FD_COLORTEXT ) ),
  148.                 aColorBox( this, ResId( FD_COLORBOX ) ),
  149.                 aFillText( this, ResId( FD_FILLINTEXT ) ),
  150.                 aFillBox( this, ResId( FD_FILLINBOX ) ),
  151.                 aLineAngleText( this, ResId( FD_LINEANGLETEXT ) ),
  152.                 aLineAngleBox( this, ResId( FD_LINEANGLEBOX ) ),
  153.                 aCharAngleText( this, ResId( FD_CHARANGLETEXT ) ),
  154.                 aCharAngleBox( this, ResId( FD_CHARANGLEBOX ) ),
  155.                 aShowFont( this, ResId( FD_SHOWFONT ) ),
  156.                 aOkButton( this, ResId( FD_OK ) )
  157. {
  158.     rResId.Unlock();
  159.  
  160.     int n = GetDevFontCount();
  161.     for ( int i = 0; i < n; i++ )
  162.         aNameBox.InsertEntry( GetDevFont( i ).GetName() );
  163.     aNameBox.SetCurEntryPos( 0 );
  164.  
  165.     aNameBox.ChangeHighlightHdl(
  166.                  LINK( this, FontDialog::FontChangeHdl ) );
  167.     aSizeBox.ChangeHighlightHdl(
  168.                  LINK( this, FontDialog::SizeChangeHdl ) );
  169.     aItalic.ChangeClickHdl( LINK( this, FontDialog::AttrHdl ) );
  170.     aBold.ChangeClickHdl( LINK( this, FontDialog::AttrHdl ) );
  171.     aStrikeout.ChangeClickHdl( LINK( this, FontDialog::AttrHdl ) );
  172.     aUnderline.ChangeClickHdl( LINK( this, FontDialog::AttrHdl ) );
  173.     aShadow.ChangeClickHdl( LINK( this, FontDialog::AttrHdl ) );
  174.     aOutline.ChangeClickHdl( LINK( this, FontDialog::AttrHdl ) );
  175.     aTransparent.ChangeClickHdl(
  176.                      LINK( this, FontDialog::AttrHdl ) );
  177.     aColorBox.ChangeSelectHdl(
  178.                   LINK( this, FontDialog::ColorSelectHdl ) );
  179.     aFillBox.ChangeSelectHdl(
  180.                  LINK( this, FontDialog::FillSelectHdl ) );
  181.     aLineAngleBox.ChangeModifyHdl(
  182.                       LINK( this, FontDialog::LineModifyHdl ) );
  183.     aLineAngleBox.ChangeSelectHdl(
  184.                       LINK( this, FontDialog::LineSelectHdl ) );
  185.     aCharAngleBox.ChangeModifyHdl(
  186.                       LINK( this, FontDialog::CharModifyHdl ) );
  187.     aCharAngleBox.ChangeSelectHdl(
  188.                       LINK( this, FontDialog::CharSelectHdl ) );
  189.     aOkButton.ChangeClickHdl( LINK( this, FontDialog::OkHdl ) );
  190.  
  191.     FontChangeHdl( &aNameBox );
  192. }
  193.  
  194. // --- FontDialog::FontChangeHdl() ---------------------------------
  195.  
  196. void FontDialog::FontChangeHdl( ListBox* pBox )
  197. {
  198.     aFont.ChangeName( pBox->GetCurEntry() );
  199.     aSizeBox.ChangeUpdateMode( FALSE );
  200.     aSizeBox.Clear();
  201.     int n = GetDevFontSizeCount( aFont );
  202.     for ( int i = 0; i < n; i++ )
  203.         aSizeBox.InsertEntry( GetDevFontSize( aFont, i ).Height() );
  204.     aSizeBox.SetCurEntryPos( 0 );
  205.     aSizeBox.ChangeUpdateMode( TRUE );
  206.     aSizeBox.Invalidate();
  207.     SizeChangeHdl( &aSizeBox );
  208. }
  209.  
  210. // --- FontDialog::SizeChangeHdl() ---------------------------------
  211.  
  212. void FontDialog::SizeChangeHdl( ListBox* pBox )
  213. {
  214.     aFont.ChangeSize( Size( 0, pBox->GetCurEntry() ) );
  215.     aShowFont.ChangeFont( aFont );
  216. }
  217.  
  218. // --- FontDialog::ColorSelectHdl() --------------------------------
  219.  
  220. void FontDialog::ColorSelectHdl( DropDownListBox* pBox )
  221. {
  222.     switch ( pBox->GetCurEntryPos() )
  223.     {
  224.         case 0:
  225.             aFont.ChangeColor( Color( COL_BLACK ) );
  226.             break;
  227.         case 1:
  228.             aFont.ChangeColor( Color( COL_RED ) );
  229.             break;
  230.         case 2:
  231.             aFont.ChangeColor( Color( COL_GREEN ) );
  232.             break;
  233.         case 3:
  234.             aFont.ChangeColor( Color( COL_BLUE ) );
  235.             break;
  236.         case 4:
  237.             aFont.ChangeColor( Color( COL_LIGHTRED ) );
  238.             break;
  239.         case 5:
  240.             aFont.ChangeColor( Color( COL_LIGHTGREEN ) );
  241.             break;
  242.         case 6:
  243.             aFont.ChangeColor( Color( COL_LIGHTBLUE ) );
  244.             break;
  245.         case 7:
  246.             aFont.ChangeColor( Color( COL_YELLOW ) );
  247.             break;
  248.         case 8:
  249.             aFont.ChangeColor( Color( COL_WHITE ) );
  250.             break;
  251.     }
  252.     aShowFont.ChangeFont( aFont );
  253. }
  254.  
  255. // --- FontDialog::FillSelectHdl() ---------------------------------
  256.  
  257. void FontDialog::FillSelectHdl( DropDownListBox* pBox )
  258. {
  259.     switch ( pBox->GetCurEntryPos() )
  260.     {
  261.         case 0:
  262.             aFont.ChangeFillColor( Color( COL_BLACK ) );
  263.             break;
  264.         case 1:
  265.             aFont.ChangeFillColor( Color( COL_RED ) );
  266.             break;
  267.         case 2:
  268.             aFont.ChangeFillColor( Color( COL_GREEN ) );
  269.             break;
  270.         case 3:
  271.             aFont.ChangeFillColor( Color( COL_BLUE ) );
  272.             break;
  273.         case 4:
  274.             aFont.ChangeFillColor( Color( COL_LIGHTRED ) );
  275.             break;
  276.         case 5:
  277.             aFont.ChangeFillColor( Color( COL_LIGHTGREEN ) );
  278.             break;
  279.         case 6:
  280.             aFont.ChangeFillColor( Color( COL_LIGHTBLUE ) );
  281.             break;
  282.         case 7:
  283.             aFont.ChangeFillColor( Color( COL_YELLOW ) );
  284.             break;
  285.         case 8:
  286.             aFont.ChangeFillColor( Color( COL_WHITE ) );
  287.             break;
  288.     }
  289.     aShowFont.ChangeFont( aFont );
  290. }
  291.  
  292. // --- FontDialog::AttrHdl() ---------------------------------------
  293.  
  294. void FontDialog::AttrHdl( AutoCheckBox* )
  295. {
  296.     if ( aBold.IsChecked() )
  297.         aFont.ChangeWeight( FontWeight( WEIGHT_BOLD ) );
  298.     else
  299.         aFont.ChangeWeight( FontWeight( WEIGHT_NORMAL ) );
  300.  
  301.     aFont.ChangeItalic( aItalic.IsChecked() );
  302.     aFont.ChangeStrikeout( aStrikeout.IsChecked() );
  303.     aFont.ChangeUnderline( aUnderline.IsChecked() );
  304.     aFont.ChangeShadow( aShadow.IsChecked());
  305.     aFont.ChangeOutline( aOutline.IsChecked() );
  306.     aFont.ChangeTransparent( aTransparent.IsChecked() );
  307.  
  308.     aShowFont.ChangeFont( aFont );
  309. }
  310.  
  311. // --- FontDialog::LineSelectHdl() ---------------------------------
  312.  
  313. void FontDialog::LineSelectHdl( DropDownComboBox* pBox )
  314. {
  315.     aFont.ChangeLineOrientation( (short)pBox->GetCurEntry() );
  316.     aShowFont.ChangeFont( aFont );
  317. }
  318.  
  319. // --- FontDialog::LineModifyHdl() ---------------------------------
  320.  
  321. void FontDialog::LineModifyHdl( DropDownComboBox* pBox )
  322. {
  323.     aFont.ChangeLineOrientation( pBox->GetText() );
  324.     aShowFont.ChangeFont( aFont );
  325. }
  326.  
  327. // --- FontDialog::CharSelectHdl() ---------------------------------
  328.  
  329. void FontDialog::CharSelectHdl( DropDownComboBox* pBox )
  330. {
  331.     aFont.ChangeCharOrientation( pBox->GetCurEntry() );
  332.     aShowFont.ChangeFont( aFont );
  333. }
  334.  
  335. // --- FontDialog::CharModifyHdl() ---------------------------------
  336.  
  337. void FontDialog::CharModifyHdl( DropDownComboBox* pBox )
  338. {
  339.     aFont.ChangeCharOrientation( pBox->GetText() );
  340.     aShowFont.ChangeFont( aFont );
  341. }
  342.  
  343. // --- FontDialog::OkHdl() -----------------------------------------
  344.  
  345. void FontDialog::OkHdl( PushButton* )
  346. {
  347.     EndDialog( TRUE );
  348. }
  349.  
  350. // --- AppWin::AppWin() --------------------------------------------
  351.  
  352. AppWin::AppWin() :
  353.             WorkWindow( NULL, WB_APP | WB_MOVEABLE |
  354.                               WB_MINABLE | WB_CLOSEABLE ),
  355.             aFontDialog( this, ResId( FONTDIALOG ) ),
  356.             aFontButton( this )
  357. {
  358.     aFontButton.SetText( "Change Font..." );
  359.     aFontButton.ChangePosPixel( Point( 300, 10 ) );
  360.     aFontButton.ChangeSizePixel( Size( 150, 30 ) );
  361.     aFontButton.ChangeClickHdl( LINK( this, AppWin::FontHdl ) );
  362.     aFontButton.Show();
  363.  
  364.     ChangeOutputSizePixel( Size( 500, 400 ) );
  365.     SetText( "Font Demo" );
  366.     Show();
  367. }
  368.  
  369. // --- AppWin::Paint() ---------------------------------------------
  370.  
  371. void AppWin::Paint( const Rectangle& )
  372. {
  373.     Font aTempFont;
  374.     aTempFont.ChangePitch( PITCH_FIXED );
  375.     aTempFont.ChangeSize( Size( 0, 14 ) );
  376.     ChangeFont( aTempFont );
  377.  
  378.     Font aNewFont = aFontDialog.GetNewFont();
  379.     FontMetric aMetric = GetFontMetric( aNewFont );
  380.  
  381.     DrawText( Point( 10,  10 ), String( "FontName       : " ) +
  382.                                 String( aMetric.GetName() ) );
  383.  
  384.     String aTempStr;
  385.     switch ( aMetric.GetFamily() )
  386.     {
  387.         case FAMILY_SWISS:
  388.             aTempStr = "Swiss";
  389.             break;
  390.         case FAMILY_MODERN:
  391.             aTempStr = "Modern";
  392.             break;
  393.         case FAMILY_DECORATIVE:
  394.             aTempStr = "Decorative";
  395.             break;
  396.         case FAMILY_ROMAN:
  397.             aTempStr = "Roman";
  398.             break;
  399.         case FAMILY_SCRIPT:
  400.             aTempStr = "Script";
  401.             break;
  402.         case FAMILY_SYSTEM:
  403.             aTempStr = "System";
  404.             break;
  405.         default:
  406.             aTempStr = "DontKnow";
  407.             break;
  408.     }
  409.     DrawText( Point( 10,  30 ), String( "Family         : " ) +
  410.                                 aTempStr );
  411.  
  412.     DrawText( Point( 10,  50 ), String( "FontSize       : " ) +
  413.                                 String( aMetric.GetSize().
  414.                                         Width() ) +
  415.                                 String( ';' ) +
  416.                                 String( aMetric.GetSize().
  417.                                         Height() ) );
  418.  
  419.     switch ( aMetric.GetPitch() )
  420.     {
  421.         case PITCH_FIXED:
  422.             aTempStr = "Fixed";
  423.             break;
  424.         case PITCH_VARIABLE:
  425.             aTempStr = "Variable";
  426.             break;
  427.         default:
  428.             aTempStr = "DontKnow";
  429.             break;
  430.     }
  431.     DrawText( Point( 10,  70 ), String( "Pitch          : " ) +
  432.                                 aTempStr );
  433.  
  434.     switch ( aMetric.GetCharSet() )
  435.     {
  436.         case CHARSET_ANSI:
  437.             aTempStr = "Ansi";
  438.             break;
  439.         case CHARSET_IBMPC:
  440.             aTempStr = "IBM-PC";
  441.             break;
  442.         case CHARSET_MAC:
  443.             aTempStr = "Mac";
  444.             break;
  445.         case CHARSET_SYMBOL:
  446.             aTempStr = "Symbol";
  447.             break;
  448.         default:
  449.             aTempStr = "DontKnow";
  450.             break;
  451.     }
  452.     DrawText( Point( 10,  90 ), String( "CharSet        : " ) +
  453.                                 aTempStr );
  454.  
  455.     switch ( aMetric.GetType() )
  456.     {
  457.         case TYPE_RASTER:
  458.             aTempStr = "Raster";
  459.             break;
  460.         case TYPE_VECTOR:
  461.             aTempStr = "Vector";
  462.             break;
  463.         case TYPE_SCALABLE:
  464.             aTempStr = "Scalable";
  465.             break;
  466.         default:
  467.             aTempStr = "DontKnow";
  468.             break;
  469.     }
  470.     DrawText( Point( 10, 110 ), String( "FontType       : " ) +
  471.                                 aTempStr );
  472.  
  473.     switch ( aMetric.GetWeight() )
  474.     {
  475.         case WEIGHT_LIGHT:
  476.             aTempStr = "Light";
  477.             break;
  478.         case WEIGHT_NORMAL:
  479.             aTempStr = "Normal";
  480.             break;
  481.         case WEIGHT_BOLD:
  482.             aTempStr = "Bold";
  483.             break;
  484.         default:
  485.             aTempStr = "DontKnow";
  486.             break;
  487.     }
  488.     DrawText( Point( 10, 130 ), String( "Weight         : " ) +
  489.                                 aTempStr );
  490.     DrawText( Point( 10, 150 ), String( "Italic         : " ) +
  491.                                 ((aMetric.IsItalic()) ?
  492.                                 "TRUE" : "FALSE") );
  493.     DrawText( Point( 10, 170 ), String( "Underline      : " ) +
  494.                                 ((aMetric.IsUnderline()) ?
  495.                                 "TRUE" : "FALSE") );
  496.     DrawText( Point( 10, 190 ), String( "Strikeout      : " ) +
  497.                                 ((aMetric.IsStrikeout()) ?
  498.                                 "TRUE" : "FALSE") );
  499.     DrawText( Point( 10, 210 ), String( "Shadow         : " ) +
  500.                                 ((aMetric.IsShadow()) ?
  501.                                 "TRUE" : "FALSE") );
  502.     DrawText( Point( 10, 230 ), String( "Outline        : " ) +
  503.                                 ((aMetric.IsOutline()) ?
  504.                                 "TRUE" : "FALSE") );
  505.     DrawText( Point( 10, 250 ), String( "Transparent    : " ) +
  506.                                 ((aMetric.IsTransparent()) ?
  507.                                 "TRUE" : "FALSE") );
  508.  
  509.     DrawText( Point( 10, 270 ), String( "IsDeviceFont   : " ) +
  510.                                 ((aMetric.IsDeviceFont()) ?
  511.                                 "TRUE" : "FALSE") );
  512.  
  513.     DrawText( Point( 10, 290 ), String( "Ascent         : " ) +
  514.                                 String( aMetric.GetAscent() ) );
  515.     DrawText( Point( 10, 310 ), String( "Descent        : " ) +
  516.                                 String( aMetric.GetDescent() ) );
  517.     DrawText( Point( 10, 330 ), String( "Leading        : " ) +
  518.                                 String( aMetric.GetLeading() ) );
  519.  
  520.     if ( aMetric.GetLineOrientation() != LINEORIENTATION_DONTKNOW )
  521.         DrawText( Point( 10, 350 ),
  522.                   String( "LineOrientation: " ) +
  523.                   String( aMetric.GetLineOrientation() ) );
  524.     else
  525.         DrawText( Point( 10, 350 ),
  526.                   String( "LineOrientation: DontKnow" ) );
  527.  
  528.     if ( aMetric.GetCharOrientation() != CHARORIENTATION_DONTKNOW )
  529.         DrawText( Point( 10, 370 ),
  530.                   String( "CharOrientation: " ) +
  531.                   String( aMetric.GetCharOrientation() ) );
  532.     else
  533.         DrawText( Point( 10, 370 ),
  534.                   String( "CharOrientation: DontKnow" ) );
  535.  
  536.     ChangeFont( aNewFont );
  537.     DrawText( Point( 300, 200 ), "Test" );
  538. }
  539.  
  540. // --- AppWin::FontHdl() -------------------------------------------
  541.  
  542. void AppWin::FontHdl( PushButton* )
  543. {
  544.     if ( aFontDialog.Execute() )
  545.         Invalidate();
  546. }
  547.  
  548. // --- MyApp::Main() -----------------------------------------------
  549.  
  550. void MyApp::Main( int, char*[] )
  551. {
  552.     AppWin aAppWin;
  553.     Execute();
  554. }
  555.  
  556. // --- aMyApp ------------------------------------------------------
  557.  
  558. MyApp aMyApp;
  559.  
  560. #ifdef MAC
  561.     Application* pApp = &aMyApp;
  562. #endif
  563.