home *** CD-ROM | disk | FTP | other *** search
Java Source | 1996-10-10 | 12.0 KB | 439 lines |
- import java.applet.*;
- import java.awt.*;
- import FontTestFrame;
- import com.ms.awt.*;
- import com.ms.lang.*;
- import java.awt.peer.ComponentPeer;
- import com.ms.awt.peer.ComponentPeerX;
-
- public class FontTest extends Applet
- {
- boolean m_fStandAlone = false;
- myCanvas textArea;
- Choice KeyboardList;
- TextField fontInfo;
- Choice fontInfoChoice;
- Choice fontMetricsList;
- TextField metricInfo;
- TextField currentKbd;
- Button btnChooseFont;
- // Button btnGetGlyph;
- String kbdLanguages[];
- int kbdIDs[];
- int nLanguages;
- Checkbox chkFudgeOutline;
-
- String fontTypes[] =
- {
- "getFamily",
- "getName",
- "getSize",
- "getStyle",
- "hashCode",
- "isBold",
- "isItalic",
- "isPlain",
- "isStrikeOut",
- "isUnderline",
- "isTypeable",
- "toString"
- };
-
- String metricTypes[] =
- {
- "bytesWidth",
- "charWidth",
- "charsWidth",
- "faceName",
- "getAscent",
- "getDescent",
- "getFont",
- "getHeight",
- "getLeading",
- "getMaxAdvance",
- "getMaxDecent",
- "getMaxDescent",
- "getWidths",
- "stringWidth",
- "toString"
- };
-
- ////////////////////////////////////////////////////////////////////////////
-
- private void ChangeKeyboard()
- {
- String kbd;
- int lcid = SystemX.LANG_ENGLISH;
-
- kbd = KeyboardList.getSelectedItem();
- lcid = 911;
- for(int i=0; i<nLanguages; i++)
- {
- if( kbd.equals(kbdLanguages[i]))
- {
- lcid = kbdIDs[i];
- break;
- }
- }
- // note, we may still have 911 here, this will test the API will not fault
- SystemX.setKeyboardLanguage(this, lcid);
- getCurrentKeyboard();
- }
-
- ////////////////////////////////////////////////////////////////////////////
-
- void setKbdLanguages()
- {
- nLanguages = SystemX.getNumKeyboardLanguages();
- kbdIDs = SystemX.getKeyboardLanguages();
- kbdLanguages = new String[nLanguages];
- for(int i=0; i<nLanguages; i++)
- {
- kbdLanguages[i] = SystemX.getKeyboardLanguageName(kbdIDs[i]);
- if( kbdLanguages[i] != null )
- KeyboardList.addItem(kbdLanguages[i]);
- }
- KeyboardList.addItem("oops!");
- }
-
- ////////////////////////////////////////////////////////////////////////////
-
- public void getCurrentKeyboard()
- {
- int id = SystemX.getKeyboardLanguage();
- currentKbd.setText(SystemX.getKeyboardLanguageName(id));
- }
-
- ////////////////////////////////////////////////////////////////////////////
-
- public static void main(String args[])
- {
- FontTestFrame frame = new FontTestFrame("FontTest");
-
- // Must show Frame before we size it so insets() will return valid values
- //----------------------------------------------------------------------
- frame.show();
- frame.hide();
- frame.resize(frame.insets().left + frame.insets().right + 600,
- frame.insets().top + frame.insets().bottom + 400);
-
- FontTest applet_FontTest = new FontTest();
-
- frame.add("Center", applet_FontTest);
- applet_FontTest.m_fStandAlone = true;
- applet_FontTest.init();
- applet_FontTest.start();
- frame.show();
- }
-
- ////////////////////////////////////////////////////////////////////////////
-
- public FontTest()
- {
- }
-
- ////////////////////////////////////////////////////////////////////////////
-
- public String getAppletInfo()
- {
- return "Name: FontTest\r\n" +
- "Author: David Silver\r\n" +
- "";
- }
-
- ////////////////////////////////////////////////////////////////////////////
-
- public void init()
- {
- resize(600, 400);
- System.out.println("FontTest::FontTest --> starting");
-
- // local variables
- int i;
- String fontNames[];
- Panel fontsPanel = new Panel();
- Panel tempPanel ;
-
- fontsPanel.setLayout( new GridLayout(3, 1) );
-
- // create fonts panel
- tempPanel = new Panel();
- tempPanel.add( btnChooseFont = new Button("Choose Font"));
- tempPanel.add( chkFudgeOutline = new Checkbox("Force Outline"));
- tempPanel.add( new Label("Font:") );
- tempPanel.add( fontInfoChoice = new Choice() );
- tempPanel.add( fontInfo = new TextField("Unknown method", 40) );
- fontInfo.setEditable(false);
- fontsPanel.add( tempPanel );
-
- // create keyboards panel
- tempPanel = new Panel();
- tempPanel.add( new Label("Keyboards:") );
- tempPanel.add( KeyboardList = new Choice() );
- // tempPanel.add( btnGetGlyph = new Button("Get Glyph"));
- tempPanel.add( new Label("Current Keyboard:"));
- tempPanel.add( currentKbd = new TextField("Unknown keyboard", 40));
- currentKbd.setEditable(false);
- fontsPanel.add( tempPanel );
-
- // font metrics stuff
- tempPanel = new Panel();
- tempPanel.add( new Label("Font Metrics:") );
- tempPanel.add( fontMetricsList = new Choice() );
- tempPanel.add( metricInfo = new TextField("Unknown metric", 40) );
- metricInfo.setEditable(false);
- fontsPanel.add( tempPanel );
-
- // set font choice types
- for (i = 0; i < fontTypes.length; ++i)
- fontInfoChoice.addItem( fontTypes[i] );
-
- // set Metrics info choice
- for (i = 0; i < metricTypes.length; ++i)
- fontMetricsList.addItem( metricTypes[i] );
-
- // set keyboard list choice
- setKbdLanguages();
- getCurrentKeyboard();
- // place panels into applet
- setLayout( new BorderLayout() );
- add( "North", fontsPanel );
- add( "Center", textArea = new myCanvas() );
-
- System.out.println("Components heirarchy....");
- Component c = this;
- while (c != null)
- {
- System.out.println(" " + c.toString() + " : " + c.getClass().getName());
- c = c.getParent();
- }
- System.out.println("FontTest::FontTest --> Leaving");
- }
-
- ////////////////////////////////////////////////////////////////////////////
-
- public void paint(Graphics g)
- {
- // EventX currently not implemented for this release, check outside world
- // didnt' change on us.
- getCurrentKeyboard();
- }
-
- ////////////////////////////////////////////////////////////////////////////
-
- public boolean action(Event evt, Object obj)
- {
- System.out.println("FontTest::action()");
- Object target = evt.target;
-
- if( (evt.id == Event.GOT_FOCUS) && (target == this))
- textArea.requestFocus();
-
- else if (target.equals(fontMetricsList) )
- getMetrics();
-
- else if (target.equals(fontInfoChoice) )
- getFontInfo();
-
- else if (target.equals(KeyboardList) )
- ChangeKeyboard();
-
- else if (target.equals(btnChooseFont))
- setTextFont();
-
- // else if (target.equals(btnGetGlyph))
- // useGlyphOutline();
-
- else
- return super.action(evt, obj);
-
- return true;
- }
-
- ////////////////////////////////////////////////////////////////////////////
-
- private void getFontInfo()
- {
- Font tempFont = textArea.getFont();
- FontX tempFontX = null;
-
- if( tempFont instanceof FontX )
- tempFontX = (FontX)tempFont;
-
- String label = fontInfoChoice.getSelectedItem();
-
- // which string is it
- if ( label.equals("getFamily") )
- fontInfo.setText( tempFont.getFamily() );
-
- else if ( label.equals("getName") )
- fontInfo.setText( tempFont.getName() );
-
- else if ( label.equals("getSize") )
- {
- int i = tempFont.getSize();
- fontInfo.setText( Integer.toString( i ) );
- textArea.setHeight(i);
- }
- else if ( label.equals("getStyle") )
- {
- if (tempFont.getStyle() == Font.PLAIN)
- fontInfo.setText("Plain");
- else
- {
- if ( (tempFont.getStyle() & Font.BOLD) != 0 && (tempFont.getStyle() & Font.ITALIC) != 0 )
- fontInfo.setText( "Bold, Italic ");
- else if ( (tempFont.getStyle() & Font.ITALIC) != 0 )
- fontInfo.setText( "Italic" );
- else if ( (tempFont.getStyle() & Font.BOLD) != 0 )
- fontInfo.setText("Bold");
- else
- fontInfo.setText("Unknown Style");
- }
- }
-
- else if ( label.equals("hashCode") )
- fontInfo.setText( Integer.toString( tempFont.hashCode() ) );
-
- else if ( label.equals("isBold") )
- fontInfo.setText( new Boolean( tempFont.isBold() ).toString() );
-
- else if ( label.equals("isItalic") )
- fontInfo.setText( new Boolean( tempFont.isItalic() ).toString() );
-
- else if ( label.equals("isPlain") )
- fontInfo.setText( new Boolean( tempFont.isPlain() ).toString() );
-
- else if ( label.equals("toString") )
- fontInfo.setText( tempFont.toString() );
-
- else if (tempFontX != null )
- {
- if ( label.equals("isTypeable") )
- fontInfo.setText(tempFontX.isTypeable(SystemX.getKeyboardLanguage()) ?"true" :"false");
- else if ( label.equals("isStrikeOut") )
- fontInfo.setText( ((tempFontX.getFlags() & FontX.STRIKEOUT) != 0) ?"yes" :"no");
- else if ( label.equals("isUnderline") )
- fontInfo.setText( ((tempFontX.getFlags() & FontX.UNDERLINE) != 0) ?"yes" :"no");
- else
- fontInfo.setText("Unknown method call");
- }
-
- else
- fontInfo.setText( "(font is not FontX)" );
-
- }
-
- ////////////////////////////////////////////////////////////////////////////
-
- private void getMetrics()
- {
- FontMetrics fm = getToolkit().getFontMetrics( textArea.getFont() );
- System.out.println("Metrics class is " + fm.getClass().getName());
-
- String label = fontMetricsList.getSelectedItem();
- byte bytes[] = { 'a', 'b', 'c', 'd', 'e' };
- char chars[] = { 'A', 'B', 'C', 'D', 'E' };
- int widths[];
- int i;
- StringBuffer tempString = new StringBuffer("");
-
- if ( label.equals("bytesWidth") )
- metricInfo.setText( Integer.toString( fm.bytesWidth(bytes,0, bytes.length) ) );
-
- else if ( label.equals("charWidth") )
- metricInfo.setText( Integer.toString( fm.charWidth('W') ) );
-
- else if ( label.equals("charsWidth") )
- {
- char[] c = (textArea.getText()).toCharArray();
- metricInfo.setText( Integer.toString( fm.charsWidth(c, 0, textArea.nChars) ) );
- }
-
- else if ( label.equals("stringWidth") )
- metricInfo.setText( Integer.toString( fm.stringWidth( textArea.getText() ) ) );
-
- else if ( label.equals("getAscent") )
- metricInfo.setText( Integer.toString( fm.getAscent() ) );
-
- else if ( label.equals("getDescent") )
- metricInfo.setText( Integer.toString( fm.getDescent() ) );
-
- else if ( label.equals("getFont") )
- metricInfo.setText( fm.getFont().toString() );
-
- else if ( label.equals("getHeight") )
- metricInfo.setText( Integer.toString( fm.getHeight() ) );
-
- else if ( label.equals("getLeading") )
- metricInfo.setText( Integer.toString( fm.getLeading() ) ) ;
-
- else if ( label.equals("getMaxAdvance") )
- metricInfo.setText( Integer.toString( fm.getMaxAdvance() ) );
-
- else if ( label.equals("getMaxDecent") )
- metricInfo.setText( Integer.toString( fm.getMaxDecent() ) );
-
- else if ( label.equals("getMaxDescent") )
- metricInfo.setText( Integer.toString( fm.getMaxDescent() ) );
-
- else if ( label.equals("getWidths") )
- {
- widths = fm.getWidths();
- for (i = 0; i < widths.length; ++i)
- tempString.append( Integer.toString(widths[i]) + ", " );
-
- metricInfo.setText( tempString.toString() );
- }
-
- else if ( label.equals("toString") )
- metricInfo.setText( fm.toString() );
-
- else if( fm instanceof FontMetricsX )
- {
- FontMetricsX fmX = (FontMetricsX)fm;
-
- if ( label.equals("faceName") )
- metricInfo.setText(fmX.getFace());
-
- else
- metricInfo.setText("(unknown method)");
- }
- else
- metricInfo.setText("(not FontMetricsX)");
- }
-
- ////////////////////////////////////////////////////////////////////////////
-
- private void setTextFont()
- {
- FontX fontX ;
- Font font;
-
- font = textArea.getFont();
- if( font instanceof com.ms.awt.FontX )
- fontX = FontX.ChooseFont(this, (FontX)font);
- else
- fontX = FontX.ChooseFont(this);
-
- if(fontX != null)
- {
- // hackability
- if( chkFudgeOutline.getState() )
- fontX = new FontX(fontX.getName(), fontX.getStyle(), fontX.getSize(),
- fontX.getFlags() | FontX.OUTLINE);
- //
- // set the text area font
- if (! fontX.equals(textArea.getFont()) )
- textArea.setFont(fontX);
-
- // now report back the info from this font
- getFontInfo();
- getMetrics();
- }
- }
-
- ////////////////////////////////////////////////////////////////////////////
-
- }
-