1 /*
2 * Copyright 2004-2008 the Seasar Foundation and the Others.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
13 * either express or implied. See the License for the specific language
14 * governing permissions and limitations under the License.
15 */
16 package org.seasar.eclipse.common.util;
17
18 /**
19 * @author y-komori
20 *
21 */
22 public class GeometryUtil {
23 /**
24 * <code>value</code>の表す数値または割合を元に実際の値を計算します。<br>
25 * <ul>
26 * <li><code>value</code>が数値のみからなる場合、そのままint値に変換した値を返します。<br>
27 * <li><code>value</code>が%で終わる数値を表す場合、<code>parentSize</code>に対する<code>value</code>の割合を返します。
28 * </ul>
29 *
30 * @param value
31 * 計算対象
32 * @param parentSize
33 * 親サイズ
34 * @return 計算結果
35 * @throws NumberFormatException
36 */
37 public static int calcSize(final String value, final int parentSize) {
38 int result;
39 if (value.endsWith("%")) {
40 int percent = Integer.parseInt(value.substring(0,
41 value.length() - 1));
42 result = parentSize * percent / 100;
43 } else {
44 result = Integer.parseInt(value);
45 }
46 return result;
47 }
48
49 /**
50 * <code>value</code>を元に実際の位置を計算します。<br>
51 * <ul>
52 * <li><code>value</code>が数値のみからなる場合、そのままint値に変換した値を返します。<br>
53 * <li><code>value</code>が%で終わる数値を表す場合、<code>parentSize</code>に対する<code>value</code>の割合を返します。
54 * <li><code>value</code>が top または left の場合、0を返します。
55 * <li><code>value</code>が center または middle の場合、(<code>parentSize</code> -
56 * <code>targetSize</code>) / 2 を返します。
57 * <li><code>value</code>が bottom または right の場合、(<code>parentSize</code> -
58 * <code>targetSize</code> を返します。
59 * </ul>
60 *
61 * @param value
62 * 計算対象
63 * @param parentSize
64 * 親Boxサイズ
65 * @param targetSize
66 * 自Boxサイズ
67 * @return 計算結果
68 * @throws NumberFormatException
69 */
70 public static int calcPosition(final String value, final int parentSize,
71 final int targetSize) {
72 int position = 0;
73 if ("top".equalsIgnoreCase(value) || "left".equalsIgnoreCase(value)) {
74 position = 0;
75 } else if ("center".equalsIgnoreCase(value)
76 || "middle".equalsIgnoreCase(value)) {
77 position = (parentSize - targetSize) / 2;
78 } else if ("bottom".equalsIgnoreCase(value)
79 || "right".equalsIgnoreCase(value)) {
80 position = parentSize - targetSize;
81 } else {
82 position = calcSize(value, parentSize);
83 }
84 position = (position >= 0) ? position : 0;
85 return position;
86 }
87
88 }