Coverage report

  %line %branch
tsukuba_bunko.peko.canvas.text.Marker
0% 
0% 

 1  
 /*
 2  
  * All Rights Reserved.
 3  
  * Copyright (C) 1999-2005 Tsukuba Bunko.
 4  
  *
 5  
  * Licensed under the BSD License ("the License"); you may not use
 6  
  * this file except in compliance with the License.
 7  
  * You may obtain a copy of the License at
 8  
  *
 9  
  *       http://www.tsukuba-bunko.org/licenses/LICENSE.txt
 10  
  *
 11  
  * Unless required by applicable law or agreed to in writing, software
 12  
  * distributed under the License is distributed on an "AS IS" BASIS,
 13  
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 14  
  * See the License for the specific language governing permissions and
 15  
  * limitations under the License.
 16  
  *
 17  
  * $Id: Marker.java,v 1.2 2005/07/23 18:55:18 ppoi Exp $
 18  
  */
 19  
 package tsukuba_bunko.peko.canvas.text;
 20  
 
 21  
 import	java.awt.Dimension;
 22  
 import	java.awt.Graphics;
 23  
 import	java.awt.Graphics2D;
 24  
 
 25  
 import	java.awt.font.TextLayout;
 26  
 
 27  
 import	javax.swing.JComponent;
 28  
 
 29  
 import	tsukuba_bunko.peko.Logger;
 30  
 
 31  
 
 32  
 /**
 33  
  * テキストの末尾に表示する待ちマーカーです。
 34  
  * @author	$Author: ppoi $
 35  
  * @version	$Revision: 1.2 $
 36  
  */
 37  
 public class Marker	extends JComponent	implements Runnable	{
 38  
 
 39  
 	/**
 40  
 	 * serial version UID
 41  
 	 */
 42  
 	private static final long	serialVersionUID	= -3817987151858534019L;
 43  
 
 44  
 	/**
 45  
 	 * マーカー文字
 46  
 	 */
 47  0
 	private Line	_text = null;
 48  
 
 49  
 	/**
 50  
 	 * 点滅フラグ
 51  
 	 */
 52  0
 	private boolean	_light = false;
 53  
 
 54  
 	/**
 55  
 	 * 点滅スレッド
 56  
 	 */
 57  0
 	private Thread	_blinker = null;
 58  
 
 59  
 	/**
 60  
 	 * 点滅状態
 61  
 	 */
 62  0
 	private boolean	_blinking = false;
 63  
 
 64  
 
 65  
 	/**
 66  
 	 * <code>Marker</code> のインスタンスを作成します。
 67  
 	 */
 68  
 	public Marker()
 69  
 	{
 70  0
 		super();
 71  0
 	}
 72  
 
 73  
 
 74  
 	/**
 75  
 	 * マーカー文字を設定します。
 76  
 	 * @param	text	マーカー文字
 77  
 	 */
 78  
 	public void setText( Line text )
 79  
 	{
 80  0
 		_text = text;
 81  0
 		int	height = (class="keyword">int)(text.getAscent() + text.getDescent());
 82  0
 		int	width = (class="keyword">int)text.getTextLayout().getAdvance();
 83  0
 		Dimension	size = new Dimension( width, height );
 84  0
 		setPreferredSize( size );
 85  0
 		setSize( size );
 86  0
 	}
 87  
 
 88  
 	/**
 89  
 	 * マーカー文字を設定します。
 90  
 	 * @param	text	マーカー文字
 91  
 	 * @param	page	ページ
 92  
 	 */
 93  
 	public void setText( String text, Page page )
 94  
 	{
 95  0
 		setForeground( page.getForeground() );
 96  0
 		TextLayout	layout = new TextLayout( text, page.getDefaultFont(), page.getFontRenderContext() );
 97  0
 		Line	line = new Line();
 98  0
 		line.setLineSpan( 0f );
 99  0
 		line.setTextLayout( layout );
 100  0
 		line.setForeground( page.getForeground() );
 101  0
 		line.setShadowColor( page.getShadow() );
 102  0
 		setText( line );
 103  0
 	}
 104  
 
 105  
 	/**
 106  
 	 * マーカー文字を取得します。
 107  
 	 * @return	マーカー文字
 108  
 	 */
 109  
 	public Line getText()
 110  
 	{
 111  0
 		return _text;
 112  
 	}
 113  
 
 114  
 	/**
 115  
 	 * 点滅を開始します。
 116  
 	 */
 117  
 	public void start()
 118  
 	{
 119  0
 		if( _blinker == null )	{
 120  0
 			synchronized( this )	{
 121  0
 				if( _blinker == null )	{
 122  0
 					_blinker = new Thread( this );
 123  0
 					_blinking = true;
 124  0
 					_blinker.start();
 125  
 				}
 126  0
 			}
 127  
 		}
 128  0
 	}
 129  
 
 130  
 	/**
 131  
 	 * 点滅を終了します。
 132  
 	 */
 133  
 	public void stop()
 134  
 	{
 135  0
 		synchronized( this )	{
 136  0
 			_blinking = false;
 137  0
 			notify();
 138  0
 		}
 139  0
 	}
 140  
 
 141  
 	/**
 142  
 	 * マーカーの左下隅の位置を設定します。
 143  
 	 * @param	x	X 座標値
 144  
 	 * @param	y	Y 座標値
 145  
 	 */
 146  
 	public void setPosition( int x, class="keyword">int y )
 147  
 	{
 148  0
 		if( _text != null )	{
 149  0
 			setLocation( x, (y - (int)(_text.getAscent() + _text.getDescent())) );
 150  0
 		}
 151  
 		else	{
 152  0
 			setLocation( x, y );
 153  
 		}
 154  0
 	}
 155  
 
 156  
 
 157  
 //
 158  
 //	Runnable の実装
 159  
 //
 160  
 	public void run()
 161  
 	{
 162  0
 		Logger.debug( "[canvas.text] blinking start." );
 163  0
 		while( _blinking )	{
 164  0
 			synchronized( this )	{
 165  
 				try	{
 166  0
 					wait( 520 );
 167  
 				}
 168  0
 				catch( InterruptedException ie )	{
 169  0
 				}
 170  0
 			}
 171  0
 			_light = !_light;
 172  0
 			if( isVisible() )	{
 173  0
 				repaint();
 174  0
 			}
 175  
 		}
 176  0
 		Logger.debug( "[canvas.text] blinking stop." );
 177  0
 	}
 178  
 
 179  
 
 180  
 //
 181  
 //	JComponent の実装
 182  
 //
 183  
 	protected void paintComponent( Graphics g )
 184  
 	{
 185  0
 		if( !_light || (_text == null) || !isVisible() )	{
 186  0
 			return;
 187  
 		}
 188  
 
 189  0
 		_text.draw( (Graphics2D)g, 0, _text.getAscent() );
 190  0
 	}
 191  
 }

This report is generated by jcoverage, Maven and Maven JCoverage Plugin.