OSDN Git Service

新聞形式の描画速度向上施策
authorpeeweedee <peeweedee@users.sourceforge.jp>
Wed, 18 Dec 2013 13:03:54 +0000 (22:03 +0900)
committerpeeweedee <peeweedee@users.sourceforge.jp>
Wed, 18 Dec 2013 13:03:54 +0000 (22:03 +0900)
TinyBannavi/05_history.txt
TinyBannavi/src/tainavi/AbsPaperColorsDialog.java
TinyBannavi/src/tainavi/AbsPaperView.java
TinyBannavi/src/tainavi/JTXTButton.java
TinyBannavi/src/tainavi/TraceProgram.java

index 65a5fc0..297f019 100644 (file)
 2chの番ナビスレ:http://toro.2ch.net/test/read.cgi/av/1352223253/\r
 ★☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆★\r
 \r
-3.22.10β+1.5.12(2013-12-18)\r
+3.22.12β+1.5.12(2013-12-XX)\r
 ■変更点\r
- ・(番組追跡) 処理の効率化\r
+ ・(新聞形式)番組枠内テキストの描画を、LineBreakMeasurerからdrawGlyphVectorに変更。それに伴い番組詳細の描画行数制限を廃止\r
+\r
+3.22.11β+1.5.12(2013-12-18)\r
+■変更点\r
+ ・(番組追跡)処理の効率化\r
 ■バグ修正\r
  ・(Web番組表[スカパー]) 1日の番組表が複数ページにまたがる場合に対応していない問題を修正(>>645.)\r
  ・(ステータスビュー) りもこんと同じ修正(>>640.)\r
index 307ed7c..0866a0a 100644 (file)
@@ -139,7 +139,6 @@ abstract class AbsPaperColorsDialog extends JEscCancelDialog {
        private JCCLabel jLabel_titleFontColor = null;\r
        private JScrollPane jScrollPane_titleFontStyle = null;\r
        private JCheckBoxPanel jCBP_showDetail = null;\r
-       private JSliderPanel jSP_detailRows = null;\r
        private JComboBoxPanel jCBX_detailFont = null;\r
        private JSliderPanel jSP_detailFontSize = null;\r
        private JCCLabel jLabel_detailFontColor = null;\r
@@ -286,7 +285,6 @@ abstract class AbsPaperColorsDialog extends JEscCancelDialog {
                to.setTitleFontColor(jLabel_titleFontColor.getChoosed());\r
                to.setTitleFontStyle(getFontStyles((JNETable) jScrollPane_titleFontStyle.getViewport().getView()));\r
                to.setShowDetail(jCBP_showDetail.isSelected());\r
-               to.setDetailRows(jSP_detailRows.getValue());\r
                to.setDetailFont((String) jCBX_detailFont.getSelectedItem());\r
                to.setDetailFontSize(jSP_detailFontSize.getValue());\r
                to.setDetailFontColor(jLabel_detailFontColor.getChoosed());\r
@@ -586,9 +584,6 @@ abstract class AbsPaperColorsDialog extends JEscCancelDialog {
                        CommonSwingUtils.putComponentOn(jPanel_fonts, jCBP_showDetail = new JCheckBoxPanel("表示する",LABEL_WIDTH), TITLE_WIDTH+ITEM_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
                        \r
                        y += (PARTS_HEIGHT+SEP_HEIGHT_NARROW);\r
-                       CommonSwingUtils.putComponentOn(jPanel_fonts, jSP_detailRows = new JSliderPanel("最大行数",LABEL_WIDTH,1,50,ITEM_WIDTH), TITLE_WIDTH+ITEM_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
-\r
-                       y += (PARTS_HEIGHT+SEP_HEIGHT_NARROW);\r
                        CommonSwingUtils.putComponentOn(jPanel_fonts, jCBX_detailFont = new JComboBoxPanel("フォント",LABEL_WIDTH,ITEM_WIDTH,true), LABEL_WIDTH+ITEM_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
                        \r
                        y += (PARTS_HEIGHT+SEP_HEIGHT_NARROW);\r
@@ -628,7 +623,6 @@ abstract class AbsPaperColorsDialog extends JEscCancelDialog {
                setFontStyles((JNETable) jScrollPane_titleFontStyle.getViewport().getView(), origenv.getTitleFontStyle());\r
                //\r
                jCBP_showDetail.setSelected(origenv.getShowDetail());\r
-               jSP_detailRows.setValue(origenv.getDetailRows());\r
                if ( ! origenv.getDetailFont().equals("") ) {\r
                        jCBX_detailFont.setSelectedItem(origenv.getDetailFont());\r
                }\r
index 0c76f79..6abc4b1 100644 (file)
@@ -2512,7 +2512,6 @@ public abstract class AbsPaperView extends JPanel implements TickTimerListener,H
                JTXTButton.setSplitEpno(ec.getSplitEpno());\r
                JTXTButton.setShowDetail(ec.getShowDetail());\r
                JTXTButton.setDetailTab(ec.getDetailTab());\r
-               JTXTButton.setDetailRows(ec.getDetailRows());\r
                \r
                JTXTButton.setTitleFont(ec.getTitleFont());\r
                JTXTButton.setTitleFontStyle(ec.getTitleFontStyle());\r
index 81f9f52..33bdadb 100644 (file)
@@ -4,17 +4,20 @@ import java.awt.AlphaComposite;
 import java.awt.Color;\r
 import java.awt.Dimension;\r
 import java.awt.Font;\r
+import java.awt.FontMetrics;\r
 import java.awt.Graphics;\r
 import java.awt.Graphics2D;\r
+import java.awt.Rectangle;\r
 import java.awt.RenderingHints;\r
 import java.awt.font.FontRenderContext;\r
-import java.awt.font.LineBreakMeasurer;\r
+import java.awt.font.GlyphMetrics;\r
+import java.awt.font.GlyphVector;\r
 import java.awt.font.TextAttribute;\r
-import java.awt.font.TextLayout;\r
+import java.awt.geom.Point2D;\r
 import java.awt.image.BufferedImage;\r
-import java.text.AttributedCharacterIterator;\r
-import java.text.AttributedString;\r
 import java.util.ArrayList;\r
+import java.util.HashMap;\r
+import java.util.Map;\r
 \r
 import javax.swing.JButton;\r
 import javax.swing.JLabel;\r
@@ -32,8 +35,8 @@ public class JTXTButton extends JLabel {
         *  フォントスタイル\r
         */\r
        public static enum FontStyle {\r
-               BOLD    ("太字"),\r
-               ITALIC  ("斜体"),\r
+               BOLD            ("太字"),\r
+               ITALIC          ("斜体"),\r
                UNDERLINE       ("下線");\r
                \r
                private String name;\r
@@ -85,24 +88,27 @@ public class JTXTButton extends JLabel {
        private static boolean splitEpno = false;\r
        private static boolean showDetail = true;\r
        private static float detailTab = 2.0F;\r
-       private static int detailRows = 3;\r
        \r
        private static Font defaultFont = new JLabel().getFont();\r
+       \r
        private static Font titleFont = defaultFont;\r
        private static int titleFontSize = defaultFont.getSize();\r
        private static Color titleFontColor = Color.BLUE;\r
        private static int titleFontStyle = Font.BOLD;\r
-       private static boolean titleFontUL = true;\r
+       \r
        private static Font detailFont = defaultFont;\r
        private static int detailFontSize = defaultFont.getSize();\r
        private static Color detailFontColor = Color.DARK_GRAY;\r
        private static int detailFontStyle = defaultFont.getStyle();\r
-       private static boolean detailFontUL = false;\r
-       private static Object aahint = RenderingHints.VALUE_TEXT_ANTIALIAS_ON;\r
+       \r
+       private static Font startFont = defaultFont;\r
+       \r
+       private static FontRenderContext frc = new FontRenderContext(null, RenderingHints.VALUE_TEXT_ANTIALIAS_ON, RenderingHints.VALUE_FRACTIONALMETRICS_DEFAULT);\r
 \r
        private static int columnWidth = 0;\r
        private static float heightMultiplier = 0;\r
        \r
+       \r
        /*******************************************************************************\r
         * コンストラクタ\r
         ******************************************************************************/\r
@@ -189,9 +195,6 @@ public class JTXTButton extends JLabel {
        public static void setDetailTab(float n) {\r
                detailTab = n;\r
        }\r
-       public static void setDetailRows(int n) {\r
-               detailRows = n;\r
-       }\r
        \r
        // フォントスタイル\r
        public static void setTitleFont(String fn) {\r
@@ -216,6 +219,7 @@ public class JTXTButton extends JLabel {
                        Font f = new Font(fn,detailFontStyle,detailFontSize);\r
                        if ( f != null ) {\r
                                detailFont = f;\r
+                               startFont = f.deriveFont(Font.BOLD);\r
                                return;\r
                        }\r
                }\r
@@ -224,6 +228,7 @@ public class JTXTButton extends JLabel {
        public static void setDetailFontSize(int n) {\r
                detailFontSize = n;\r
                detailFont = detailFont.deriveFont((float)detailFontSize);\r
+               startFont = startFont.deriveFont((float)detailFontSize);\r
        }\r
        public static void setDetailFontColor(Color c) {\r
                detailFontColor = c;\r
@@ -231,40 +236,37 @@ public class JTXTButton extends JLabel {
        \r
        // フォントスタイルの変更\r
        public static void setTitleFontStyle(ArrayList<FontStyle> fsa) {\r
-               setTmpFontStyle(fsa);\r
-               titleFontStyle = tmpFontStyle;\r
-               titleFontUL = tmpFontUL;\r
-               titleFont = titleFont.deriveFont((titleFont.getStyle() & ~(Font.BOLD|Font.ITALIC)) | titleFontStyle);\r
+               titleFont = setFontStyle(titleFont, (float)titleFontSize, fsa);\r
        }\r
        public static void setDetailFontStyle(ArrayList<FontStyle> fsa) {\r
-               setTmpFontStyle(fsa);\r
-               detailFontStyle = tmpFontStyle;\r
-               detailFontUL = tmpFontUL;\r
-               detailFont = detailFont.deriveFont((detailFont.getStyle() & ~(Font.BOLD|Font.ITALIC)) | detailFontStyle);\r
+               detailFont = setFontStyle(detailFont, (float)detailFontSize, fsa);\r
        }\r
-       private static void setTmpFontStyle(ArrayList<FontStyle> fsa) {\r
-               tmpFontStyle = 0;\r
-               tmpFontUL = false;\r
+       \r
+       private static Font setFontStyle(Font f, float size, ArrayList<FontStyle> fsa) {\r
+               Map<TextAttribute, Object>  attributes = new HashMap<TextAttribute, Object>();\r
+               attributes.put(TextAttribute.WEIGHT, TextAttribute.WEIGHT_REGULAR);\r
+               attributes.put(TextAttribute.POSTURE, TextAttribute.POSTURE_REGULAR);\r
+               attributes.remove(TextAttribute.UNDERLINE);\r
                for ( FontStyle fs : fsa ) {\r
                        switch (fs) {\r
                        case BOLD:\r
-                               tmpFontStyle |= Font.BOLD;\r
+                               attributes.put(TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD);\r
                                break;\r
                        case ITALIC:\r
-                               tmpFontStyle |= Font.ITALIC;\r
+                               attributes.put(TextAttribute.POSTURE, TextAttribute.POSTURE_OBLIQUE);\r
                                break;\r
                        case UNDERLINE:\r
-                               tmpFontUL = true;\r
+                               attributes.put(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_ON);//LOW_ONE_PIXEL);\r
                                break;\r
                        }\r
                }\r
+               attributes.put(TextAttribute.SIZE, size);\r
+               return f.deriveFont(attributes);\r
        }\r
-       private static int tmpFontStyle;\r
-       private static boolean tmpFontUL;\r
        \r
        // フォントエイリアスの変更\r
        public static void setAAHint(Object o) {\r
-               aahint = o;\r
+               frc = new FontRenderContext(null, o, RenderingHints.VALUE_FRACTIONALMETRICS_DEFAULT);\r
        }\r
        \r
        \r
@@ -289,12 +291,10 @@ public class JTXTButton extends JLabel {
 \r
                        float draww = (float)imgw-DRAWTAB*2.0F;\r
                        float drawh = (float)imgh;\r
-                       float detailw = draww-detailTab;\r
 \r
                        image = new BufferedImage(imgw, imgh, BufferedImage.TYPE_INT_ARGB);\r
                        Graphics2D g2 = (Graphics2D)image.createGraphics();\r
                        \r
-                       g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,aahint);       // アンチエイリアスの設定\r
                        g2.setRenderingHint(RenderingHints.KEY_RENDERING,RenderingHints.VALUE_RENDER_SPEED);\r
                        g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1.0f));\r
                        \r
@@ -302,31 +302,41 @@ public class JTXTButton extends JLabel {
                        \r
                        // 開始時刻と延長警告の描画\r
                        if (showStart && tvd.start != null && tvd.start.length() > 0) {\r
-                               //\r
-                               Font fs = detailFont;\r
-                               String sStr = tvd.start+" "+tvd.extension_mark;\r
-                               //\r
-                               Font f = fs.deriveFont(fs.getStyle() | Font.BOLD);\r
-                               AttributedString as = new AttributedString(sStr);\r
-                               as.addAttribute(TextAttribute.FONT, f);\r
-                               as.addAttribute(TextAttribute.FOREGROUND, Color.BLACK, 0, 5);\r
-                               if (sStr.length() > 6) {\r
-                                       as.addAttribute(TextAttribute.FOREGROUND, Color.RED, 6, sStr.length());\r
+                               FontMetrics fm = g2.getFontMetrics(startFont);\r
+                               float hi = Float.valueOf(fm.getHeight());\r
+                               float as = Float.valueOf(fm.getAscent());\r
+                               \r
+                               float startx = Float.valueOf(DRAWTAB);\r
+                               float startw = draww;\r
+                               float xposstartx = 0.0F;\r
+                               \r
+                               baseline = as;  // 初期垂直位置 \r
+                               \r
+                               {\r
+                                       WrappedGlyphVector wgv = getWrappedGlyphVector(tvd.start, startw, xposstartx, startFont, as, frc);\r
+                                       GlyphVector gv = wgv.getGv();\r
+                                       g2.setPaint(Color.BLACK);\r
+                                       g2.drawGlyphVector(gv, startx, baseline);\r
+                                       \r
+                                       xposstartx = wgv.getLastX();    // 後続有り\r
+                                       baseline += wgv.getLastY();\r
                                }\r
-                               AttributedCharacterIterator ac = as.getIterator();\r
-                               FontRenderContext fc = g2.getFontRenderContext();\r
-                               LineBreakMeasurer m = new LineBreakMeasurer(ac,fc);\r
-                               while ( m.getPosition() < sStr.length() ) {\r
-                                       TextLayout tl = m.nextLayout(draww);\r
-                                       baseline += tl.getAscent();\r
-                                       tl.draw(g2, DRAWTAB, baseline);\r
-                                       baseline += tl.getDescent() + tl.getLeading();\r
+                               \r
+                               {\r
+                                       WrappedGlyphVector wgv = getWrappedGlyphVector(" "+tvd.extension_mark, startw, xposstartx, startFont, as, frc);\r
+                                       GlyphVector gv = wgv.getGv();\r
+                                       g2.setPaint(Color.RED);\r
+                                       g2.drawGlyphVector(gv, startx, baseline);\r
+                                       \r
+                                       baseline += wgv.getLastY();\r
                                }\r
+                               \r
+                               baseline += hi;\r
                        }\r
                        \r
                        // タイトルの描画\r
                        String title = ( splitEpno ) ? tvd.splitted_title : tvd.title;\r
-                       if (title.length() > 0) {\r
+                       if ( title.length() > 0 ) {\r
                                //\r
                                String aMark;\r
                                if (showStart && tvd.start.length() > 0) {\r
@@ -340,28 +350,40 @@ public class JTXTButton extends JLabel {
                                                aMark = tvd.prefix_mark + tvd.newlast_mark;\r
                                        }\r
                                }\r
-                               String tStr = aMark+title+tvd.postfix_mark;\r
-                               //\r
-                               AttributedString as = new AttributedString(tStr);\r
-                               as.addAttribute(TextAttribute.FONT, titleFont);\r
-                               {\r
-                                       if (titleFontUL) {\r
-                                               as.addAttribute(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_LOW_ONE_PIXEL, aMark.length(), aMark.length()+title.length());\r
-                                       }\r
-                                       as.addAttribute(TextAttribute.FOREGROUND, titleFontColor, aMark.length(), tStr.length());\r
-                                       if (aMark.length() > 0) {\r
-                                               as.addAttribute(TextAttribute.FOREGROUND, Color.RED, 0, aMark.length());\r
-                                       }\r
+                               \r
+                               FontMetrics fm = g2.getFontMetrics(titleFont);\r
+                               float hi = Float.valueOf(fm.getHeight());\r
+                               float as = Float.valueOf(fm.getAscent());\r
+                               \r
+                               float titlex = Float.valueOf(DRAWTAB);\r
+                               float titlew = draww;\r
+                               float xpos = 0.0F;\r
+                               \r
+                               if ( baseline == 0.0F ) {\r
+                                       baseline = as;  // 初期垂直位置\r
                                }\r
-                               AttributedCharacterIterator ac = as.getIterator();\r
-                               FontRenderContext fc = g2.getFontRenderContext();\r
-                               LineBreakMeasurer m = new LineBreakMeasurer(ac,fc);\r
-                               while (m.getPosition() < tStr.length()) {\r
-                                       TextLayout tl = m.nextLayout(draww);\r
-                                       baseline += tl.getAscent();\r
-                                       tl.draw(g2, DRAWTAB, baseline);\r
-                                       baseline += tl.getDescent() + tl.getLeading();\r
+                               \r
+                               if ( aMark.length() > 0 ) {\r
+                                       WrappedGlyphVector wgv = getWrappedGlyphVector(aMark, titlew, xpos, titleFont, as, frc);\r
+                                       GlyphVector gv = wgv.getGv();\r
+                                       g2.setPaint(Color.RED);\r
+                                       g2.drawGlyphVector(gv, titlex, baseline);\r
+                                       \r
+                                       xpos = wgv.getLastX();  // 後続有り\r
+                                       baseline += wgv.getLastY();\r
                                }\r
+                               \r
+                               {\r
+                                       WrappedGlyphVector wgv = getWrappedGlyphVector(title+tvd.postfix_mark, titlew, xpos, titleFont, as, frc);\r
+                                       GlyphVector gv = wgv.getGv();\r
+                                       g2.setPaint(titleFontColor);\r
+                                       \r
+                                       drawString(g2, wgv, titlex, baseline);\r
+\r
+                                       baseline += wgv.getLastY();\r
+                               }\r
+                               \r
+                               baseline += hi;\r
                        }\r
                        \r
                        // 番組詳細の描画\r
@@ -373,27 +395,109 @@ public class JTXTButton extends JLabel {
                                else {\r
                                        detail = tvd.detail;\r
                                }\r
-                               if ( detail.length() > 0 ) {\r
-                                       AttributedString as = new AttributedString(detail);\r
-                                       as.addAttribute(TextAttribute.FONT, detailFont);\r
-                                       if (detailFontUL) {\r
-                                               as.addAttribute(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_LOW_ONE_PIXEL);\r
-                                       }\r
-                                       as.addAttribute(TextAttribute.FOREGROUND, detailFontColor);\r
-                                       AttributedCharacterIterator ac = as.getIterator();\r
-                                       FontRenderContext fc = g2.getFontRenderContext();\r
-                                       LineBreakMeasurer m = new LineBreakMeasurer(ac,fc);\r
-                                       for ( int row=0; m.getPosition()<detail.length() && baseline<=drawh && (detailRows>0 && row<detailRows); row++ ) {\r
-                                               TextLayout tl = m.nextLayout(detailw);\r
-                                               baseline += tl.getAscent();\r
-                                               tl.draw(g2, (DRAWTAB+detailTab), baseline);\r
-                                               baseline += tl.getDescent() + tl.getLeading();\r
-                                       }\r
+                               \r
+                               FontMetrics fm = g2.getFontMetrics(detailFont);\r
+                               float as = Float.valueOf(fm.getAscent());\r
+                               float detailx = Float.valueOf(DRAWTAB+detailTab);\r
+                               float detailw = draww-detailTab;\r
+                               \r
+                               if ( baseline == 0.0F ) {\r
+                                       baseline = as;  // 初期垂直位置\r
                                }\r
+                               \r
+                               WrappedGlyphVector wgv = getWrappedGlyphVector(detail, detailw, 0.0f, detailFont, as, frc);\r
+                               g2.setPaint(detailFontColor);\r
+                               \r
+                               drawString(g2, wgv, detailx, baseline);\r
                        }\r
                }\r
                \r
                // 反映\r
                g.drawImage(image, 0, 0, this);\r
        }\r
+       \r
+       /**\r
+        * \r
+        */\r
+       private void drawString(Graphics2D g2, WrappedGlyphVector wgv, float x, float y) {\r
+               g2.drawGlyphVector(wgv.getGv(), x, y);\r
+               \r
+               if ( wgv.getGv().getFont().getAttributes().get(TextAttribute.UNDERLINE) != null ) {\r
+                       for ( Rectangle r : wgv.getLinePositions() ) {\r
+                               g2.drawLine((int)x+r.x, (int)y+r.y+1, (int)x+r.x+r.width-1, (int)y+r.y+1);\r
+                       }\r
+               }\r
+       }\r
+       \r
+       /**\r
+        * 参考:てんぷらメモ/JTableのセル幅で文字列を折り返し  ( http://terai.xrea.jp/Swing/TableCellRenderer.html )\r
+        * @param str                   描画する文字列\r
+        * @param width                 描画領域の幅\r
+        * @param height                描画領域の高さ \r
+        * @param xstart                1行目の描画開始位置\r
+        * @param lineCountMax  最大描画行数\r
+        * @param font                  描画フォント\r
+        * @param lineHeight    1行あたりの高さ\r
+        * @param frc                   FontRenderContext\r
+        * @return\r
+        */\r
+    private WrappedGlyphVector getWrappedGlyphVector(String str, float width, float xstart, Font font, float lineHeight, FontRenderContext frc) {\r
+        Point2D gmPos    = new Point2D.Double(0.0d, 0.0d);\r
+        GlyphVector gv   = font.createGlyphVector(frc, str);\r
+        WrappedGlyphVector wgv = new WrappedGlyphVector(gv);\r
+        float xpos       = xstart;\r
+        float ypos       = 0.0F;\r
+        float advance    = 0.0F;\r
+        GlyphMetrics gm;\r
+        for( int i=0; i <= gv.getNumGlyphs(); i++ ) {\r
+               if ( i == gv.getNumGlyphs() ) {\r
+                       int x = (int) ((ypos == 0.0F) ? xstart : 0.0F);\r
+                       int y = (int) ypos;\r
+                       int w = (int) (xpos - x);\r
+                       wgv.addLinePosition(new Rectangle(x, y, w, 1));\r
+                       break;\r
+               }\r
+            gm = gv.getGlyphMetrics(i);\r
+            advance = gm.getAdvance();\r
+            if( xpos < width && width <= xpos+advance ) {\r
+                       int x = (int) ((ypos == 0.0F) ? xstart : 0.0F);\r
+                       int y = (int) ypos;\r
+                       int w = (int) (xpos - x);\r
+                       wgv.addLinePosition(new Rectangle(x, y, w, 1));\r
+                ypos += lineHeight;\r
+                xpos = 0.0f;\r
+            }\r
+            gmPos.setLocation(xpos, ypos);\r
+            gv.setGlyphPosition(i, gmPos);\r
+            xpos = xpos + advance;\r
+            \r
+            wgv.setLastX(xpos);\r
+            wgv.setLastY(ypos);\r
+        }\r
+        return wgv;\r
+    }\r
+    \r
+    private class WrappedGlyphVector {\r
+       \r
+       public WrappedGlyphVector(GlyphVector gv) {\r
+               super();\r
+               this.gv = gv;\r
+       }\r
+       \r
+       private GlyphVector gv;\r
+       \r
+       public GlyphVector getGv() { return gv; }\r
+       \r
+       private float lastx;\r
+       private float lasty;\r
+       \r
+       public void setLastX(float x) { lastx = x; }\r
+       public float getLastX() { return lastx; }\r
+       public void setLastY(float y) { lasty = y; }\r
+       public float getLastY() { return lasty; }\r
+       \r
+       private ArrayList<Rectangle> linePositions = new ArrayList<Rectangle>();\r
+       public ArrayList<Rectangle> getLinePositions() { return linePositions; }\r
+       public void addLinePosition(Rectangle r) { linePositions.add(r); }\r
+    }\r
 }\r
index fa9e2ad..4d87678 100644 (file)
@@ -107,8 +107,8 @@ public class TraceProgram {
 \r
        /**\r
         * 2つの文字を比較してスコアを計算する(special thanks to ◆kzz0PzTAMM)\r
-        * @param searchkey 番組追跡の検索キー\r
-        * @param target タイトル(中の文字がsearchkeyに何個含まれているかを確認する)\r
+        * @param searchkey 番組追跡の検索キーワード(「検索キーワード」の成分が「番組表のタイトルにどれくらい含まれているかを判定する」)\r
+        * @param target 番組表のタイトル\r
         * @return\r
         */\r
        public static int sumScore(String searchkey, String target)\r
@@ -134,7 +134,6 @@ public class TraceProgram {
                }\r
                else {\r
                        if ( target.indexOf(searchkey) != -1 ) {\r
-                               System.err.println("xxxx "+target+", "+searchkey);\r
                                return 100;\r
                        }\r
                }\r