View Javadoc

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: PageConfigurator.java,v 1.2 2005/07/24 20:55:57 ppoi Exp $
18   */
19  package tsukuba_bunko.peko.scenario.text;
20  
21  import	java.awt.Color;
22  import	java.awt.Dimension;
23  import	java.awt.Font;
24  import	java.awt.Insets;
25  import	java.awt.Point;
26  
27  import	java.awt.font.TextAttribute;
28  
29  import	java.util.Map;
30  
31  import	tsukuba_bunko.peko.Logger;
32  
33  import	tsukuba_bunko.peko.canvas.text.Page;
34  
35  import	tsukuba_bunko.peko.resource.ColorManager;
36  import	tsukuba_bunko.peko.resource.DimensionDeserializer;
37  import	tsukuba_bunko.peko.resource.FontManager;
38  import	tsukuba_bunko.peko.resource.InsetsDeserializer;
39  import	tsukuba_bunko.peko.resource.ResourceManager;
40  import	tsukuba_bunko.peko.resource.PointDeserializer;
41  
42  import	tsukuba_bunko.peko.scenario.SceneContext;
43  
44  
45  /***
46   * {@link tsukuba_bunko.peko.canvas.text.Page} をシーンの設定を元にカスタマイズする機能を提供します。
47   * @author	$Author: ppoi $
48   * @version	$Revision: 1.2 $
49   */
50  public class PageConfigurator	{
51  
52  	/***
53  	 * <code>PageConfigurator</code> のインスタンスを作成するために getInstance から呼ばれます。
54  	 */
55  	protected PageConfigurator()
56  	{
57  		super();
58  	}
59  
60  
61  	/***
62  	 * <code>page</code> にシーンの設定を反映させます。
63  	 * @param	page	ページ
64  	 * @param	context	シーンコンテキスト
65  	 */
66  	public static void configure( Page page, SceneContext context )
67  	{
68  		ResourceManager	resources = ResourceManager.getInstance();
69  		FontManager	fonts = FontManager.getInstance();
70  		ColorManager	colors = ColorManager.getInstance();
71  
72  		boolean	set = false;
73  
74  		String	value = context.getProperty( PropertyIDs.CANVAS_TEXT_BACKGROUND_TRANSPARENCY );
75  		if( value != null )	{
76  			try	{
77  				page.setTransparency( Float.parseFloat(value) );
78  				set = true;
79  			}
80  			catch( Exception e )	{
81  				Logger.warn( MessageIDs.SCN2006W );
82  			}
83  		}
84  		if( !set )	{
85  			Float	trans = (Float)resources.getResource( ResourceIDs.CANVAS_TEXT_BACKGROUND_TRANSPARENCY );
86  			if( trans == null )	{
87  				Logger.warn( MessageIDs.SCN2005W, new Object[]{"0.5"} );
88  				page.setTransparency( 0.5f );
89  			}
90  			else	{
91  				page.setTransparency( trans.floatValue() );
92  			}
93  		}
94  
95  		set = false;
96  		value = context.getProperty( PropertyIDs.CANVAS_TEXT_BACKGROUND_COLOR );
97  		if( value == null )	{
98  			Color	c = (Color)resources.getResource( ResourceIDs.CANVAS_TEXT_BACKGROUND_COLOR );
99  			if( c == null )	{
100 				Logger.warn( MessageIDs.SCN2003W, new Object[]{"black"} );
101 				c = Color.black;
102 			}
103 			page.setBackground( c );
104 		}
105 		else	{
106 			page.setBackground( colors.getColor(value) );
107 		}
108 
109 		String	type = context.getProperty( PropertyIDs.CANVAS_TEXT_VIEWTYPE );
110 		if( type != null )	{
111 			if( !"window".equals(type) && !"full".equals(type) )	{
112 				Logger.warn( MessageIDs.SCN2014W );
113 				type = null;
114 			}
115 		}
116 		if( type == null )	{
117 			type = (String)resources.getResource( ResourceIDs.CANVAS_TEXT_VIEWTYPE );
118 			if( (type == null) || !("window".equals(type) || "full".equals(type)) )	{
119 				Logger.warn( MessageIDs.SCN2013W, new Object[]{"full"} );
120 				type = "full";
121 			}
122 		}
123 
124 		Dimension	viewSize = null;
125 		if( type.equals("window") )	{
126 			value = context.getProperty( PropertyIDs.CANVAS_TEXT_SIZE );
127 			if( value != null )	{
128 				try	{
129 					viewSize = DimensionDeserializer.parseDimension( value );
130 				}
131 				catch( Exception e )	{
132 					Logger.warn( MessageIDs.SCN2016W );
133 				}
134 			}
135 			if( viewSize == null )	{
136 				viewSize = (Dimension)resources.getResource( ResourceIDs.CANVAS_TEXT_SIZE );
137 				if( viewSize == null )	{
138 					Logger.warn( MessageIDs.SCN2015W, new Object[]{"600, 180"} );
139 					viewSize = new Dimension( 600, 180 );
140 				}
141 			}
142 
143 			Point	location = null;
144 			value = context.getProperty( PropertyIDs.CANVAS_TEXT_LOCATION );
145 			if( value != null )	{
146 				try	{
147 					location = PointDeserializer.parsePoint( value );
148 				}
149 				catch( Exception e )	{
150 					Logger.warn( MessageIDs.SCN2018W, e );
151 				}
152 			}
153 			if( location == null )	{
154 				location = (Point)resources.getResource( ResourceIDs.CANVAS_TEXT_LOCATION );
155 				if( location == null )	{
156 					Logger.warn( MessageIDs.SCN2017W, new Object[]{"0, 0"} );
157 					location = new Point( 0, 0 );
158 				}
159 			}
160 
161 			page.setLocation( location.x, location.y );
162 
163 		}
164 		else	{
165 			page.setLocation( 0, 0 );
166 			viewSize = page.getTextCanvas().getSize();
167 		}
168 		page.setSize( viewSize );
169 
170 		Insets	padding = null;
171 		value = context.getProperty( PropertyIDs.CANVAS_TEXT_PADDING );
172 		if( value != null )	{
173 			try	{
174 				padding = InsetsDeserializer.parseInsets( value );
175 			}
176 			catch( Exception e )	{
177 				Logger.warn( MessageIDs.SCN2020W );
178 			}
179 		}
180 		if( padding == null )	{
181 			padding = (Insets)resources.getResource( ResourceIDs.CANVAS_TEXT_PADDING );
182 			if( padding == null )	{
183 				Logger.warn( MessageIDs.SCN2019W, new Object[]{"10,40,10,10"} );
184 				padding = new Insets( 10, 40, 10, 10 );
185 			}
186 		}
187 		page.setPadding( padding.top, padding.left, padding.bottom, padding.right );
188 
189 
190 		Map	fontAttrs = new java.util.HashMap( 17 );
191 		Font	baseFont = (Font)resources.getResource( ResourceIDs.CANVAS_TEXT_FONT );
192 		if( baseFont == null )	{
193 			Logger.warn( MessageIDs.SCN2011W, new Object[]{"Serif, 20"} );
194 			fontAttrs = new java.util.HashMap( 17 );
195 			fontAttrs.put( TextAttribute.FAMILY, "Serif" );
196 			fontAttrs.put( TextAttribute.SIZE, new Float(20f) );
197 			fontAttrs.put( TextAttribute.POSTURE, TextAttribute.POSTURE_REGULAR );
198 			fontAttrs.put( TextAttribute.WEIGHT, TextAttribute.WEIGHT_REGULAR );
199 		}
200 		else	{
201 			fontAttrs.putAll( baseFont.getAttributes() );
202 		}
203 
204 		value = context.getProperty( PropertyIDs.CANVAS_TEXT_FONT_FAMILY );
205 		if( value != null )	{
206 			fontAttrs.put( TextAttribute.FAMILY, value );
207 		}
208 
209 		value = context.getProperty( PropertyIDs.CANVAS_TEXT_FONT_SIZE );
210 		if( value != null )	{
211 			try	{
212 				fontAttrs.put( TextAttribute.SIZE, Float.valueOf(value) );
213 			}
214 			catch( Exception e )	{
215 				Logger.warn( MessageIDs.SCN2012W, new Object[]{"size"} );
216 			}
217 		}
218 
219 		value = context.getProperty( PropertyIDs.CANVAS_TEXT_FONT_STYLE );
220 		if( value != null )	{
221 			if( "italic".equals(value) )	{
222 				fontAttrs.put( TextAttribute.POSTURE, TextAttribute.POSTURE_OBLIQUE );
223 			}
224 			else if( "normal".equals(value) )	{
225 				fontAttrs.put( TextAttribute.POSTURE, TextAttribute.POSTURE_REGULAR );
226 			}
227 			else	{
228 				Logger.warn( MessageIDs.SCN2012W, new Object[]{"style"} );
229 			}
230 		}
231 
232 		value = context.getProperty( PropertyIDs.CANVAS_TEXT_FONT_WEIGHT );
233 		if( value != null )	{
234 			if( "bold".equals(value) )	{
235 				fontAttrs.put( TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD );
236 			}
237 			else if( "normal".equals(value) )	{
238 				fontAttrs.put( TextAttribute.WEIGHT, TextAttribute.WEIGHT_REGULAR );
239 			}
240 		}
241 
242 		page.setDefaultFont( fonts.getFont(fontAttrs) );
243 
244 
245 		value = context.getProperty( PropertyIDs.CANVAS_TEXT_FOREGROUND_COLOR );
246 		if( value == null )	{
247 			Color	c = (Color)resources.getResource( ResourceIDs.CANVAS_TEXT_FOREGROUND_COLOR );
248 			if( c == null )	{
249 				Logger.warn( MessageIDs.SCN2007W, new Object[]{"white"} );
250 				c = Color.white;
251 			}
252 			page.setForeground( c );
253 		}
254 		else	{
255 			page.setForeground( colors.getColor(value) );
256 		}
257 
258 		value = context.getProperty( PropertyIDs.CANVAS_TEXT_FOREGROUND_SHADOW );
259 		if( value == null )	{
260 			Color	c = (Color)resources.getResource( ResourceIDs.CANVAS_TEXT_FOREGROUND_SHADOW );
261 			if( c == null )	{
262 				Logger.warn( MessageIDs.SCN2007W, new Object[]{"black"} );
263 				c = Color.black;
264 			}
265 			page.setShadow( c );
266 		}
267 		else	{
268 			page.setShadow( colors.getColor(value) );
269 		}
270 
271 		page.updateCanvas();
272 	}
273 }