summaryrefslogtreecommitdiff
path: root/packages/nonworking
diff options
context:
space:
mode:
authorMichael Lauer <mickey@vanille-media.de>2006-05-21 15:33:23 +0000
committerOpenEmbedded Project <openembedded-devel@lists.openembedded.org>2006-05-21 15:33:23 +0000
commit007c005529f5cf15d05b076845fbd2cd12a547f4 (patch)
tree7d304f223f006545e569686e45eb7f2a4ff34302 /packages/nonworking
parent1c35191af98492f5aad3f217622f3705ea2acb6b (diff)
add freenote, an error correcting paint program for Opie. patch based on work by Enodr <nicolasfr@gmail.com>, thanks! closes
#1018
Diffstat (limited to 'packages/nonworking')
-rw-r--r--packages/nonworking/freenote/.mtn2git_empty0
-rw-r--r--packages/nonworking/freenote/freenote-1.6.1/.mtn2git_empty0
-rw-r--r--packages/nonworking/freenote/freenote-1.6.1/compile.patch3285
-rw-r--r--packages/nonworking/freenote/freenote_1.6.1.bb22
4 files changed, 0 insertions, 3307 deletions
diff --git a/packages/nonworking/freenote/.mtn2git_empty b/packages/nonworking/freenote/.mtn2git_empty
deleted file mode 100644
index e69de29bb2..0000000000
--- a/packages/nonworking/freenote/.mtn2git_empty
+++ /dev/null
diff --git a/packages/nonworking/freenote/freenote-1.6.1/.mtn2git_empty b/packages/nonworking/freenote/freenote-1.6.1/.mtn2git_empty
deleted file mode 100644
index e69de29bb2..0000000000
--- a/packages/nonworking/freenote/freenote-1.6.1/.mtn2git_empty
+++ /dev/null
diff --git a/packages/nonworking/freenote/freenote-1.6.1/compile.patch b/packages/nonworking/freenote/freenote-1.6.1/compile.patch
deleted file mode 100644
index de3e93ac9c..0000000000
--- a/packages/nonworking/freenote/freenote-1.6.1/compile.patch
+++ /dev/null
@@ -1,3285 +0,0 @@
-
-#
-# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
-#
-
---- FreeNote_1.6.1_arm/FmtEngine.cpp~compile 2003-12-23 15:53:46.000000000 +0100
-+++ FreeNote_1.6.1_arm/FmtEngine.cpp 2004-02-01 18:42:32.000000000 +0100
-@@ -1,409 +1,410 @@
--/* FreeNote for Sharp SLA300, B500, C7x0 Linux PDA
-- Copyright (C) 2003 Joe Kanemori.<kanemori@ymg.urban.ne.jp>
--
-- This program is free software; you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation; either version 2 of the License, or
-- (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program; if not, write to the Free Software
-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
--*/
--/*
--2003/12/16-19 FreeNote ver 1.5.5pre
--・曲線描画ロジックの改良
--
--2003/12/14 FreeNote 1.5.4pre
--・曲線描画ロジックの改良
--
--2003/11/30-2003/12/04 FreeNote 1.5.3pre
--・ベジェ関数のスペルミスを修正
--
--2003/11/16 FreeNote 1.5.2pre
--・円描画のロジックを追加
--
--2003/11/13 FreeNote 1.5.1pre
--・スムージング追加
--2003/11/10-12
--・曲線整形モード追加
--2003/11/09 追加
--*/
--#include "fmtengine.h"
--#include <qpointarray.h>
--#include <qpe/qmath.h>
--#include <math.h>
--int SNAP_SIZE = 32;
--int PHASE1_ANGLE = 30;
--int PHASE2_ANGLE = 30;
--double Surface(const QPoint& p1, const QPoint& p2)
--{
-- return 0.5 * abs(p1.x() * p2.y() - p1.y() * p2.x());
--}
--
--bool IsLinear(const QPoint& p1, const QPoint& p2, const QPoint& p3)
--{
-- double s1 = Surface(p1, p2);
-- double s2 = Surface(p2, p3);
-- double s3 = Surface(p1, p3);
-- if (s1 + s2 == s3) {
-- return true;
-- } else {
-- return false;
-- }
--}
--
--const double Angle(const QPoint& p1, const QPoint& p2)
--{
-- return qATan2((double)(p2.y() - p1.y()), (double)(p2.x() - p1.x()));
--}
--
--const double DiffAngle(const QPoint& p1, const QPoint& p2, const QPoint& p3)
--{
-- return fabs(Angle(p1, p2) - Angle(p2, p3));
--}
--
--const double ToDegree(double t)
--{
-- return t * 180 / M_PI;
--}
--
--const double ToRadian(double d)
--{
-- return d * M_PI / 180;
--}
--
--const double Distance(const QPoint& p1, const QPoint& p2)
--{
-- return hypot(p1.x() - p2.x(), p1.y() - p2.y());
--}
--
--const QPoint SnapPoint(const QPoint& p)
--{
-- int x = ((int)(p.x() + SNAP_SIZE / 2) / SNAP_SIZE) * SNAP_SIZE;
-- int y = ((int)(p.y() + SNAP_SIZE / 2) / SNAP_SIZE) * SNAP_SIZE;
-- return QPoint(x, y);
--}
--
--const QPoint ArrangePoint(const QPoint& p1, const QPoint& p2)
--{
-- int x = p2.x();
-- int y = p2.y();
-- if (p1.x() - SNAP_SIZE / 2 <= x && p1.x() + SNAP_SIZE / 2 >= x) {
-- x = p1.x();
-- }
-- if (p1.y() - SNAP_SIZE / 2 <= y && p1.y() + SNAP_SIZE / 2 >= y) {
-- y = p1.y();
-- }
-- return QPoint(x, y);
--}
--
--FNPointList ReducePoints(FNPointList& p)
--{
-- if (3 >= p.count()) {
-- return p;
-- }
-- FNPointList rt;
-- rt.append(p.first());
-- QPoint* p1 = p.first();
-- QPoint* p2 = p.at(1);
-- QPoint* p3 = NULL;
-- for (uint i = 2; i < p.count(); ++i) {
-- p3 = p.at(i);
-- if (false == IsLinear(*p1, *p2, *p3)) {
-- rt.append(p2);
-- p1 = p2;
-- }
-- p2 = p3;
-- }
-- rt.append(p3);
-- return rt;
--}
--
--FNPointList ExtractAngle2(FNPointList& p, const int deg)
--{
-- FNPointList rt;
-- rt.append(p.first());
-- QPoint* st = p.first();
-- QPoint* mp = p.at(1);
-- QPoint* ed = p.last();
-- for (uint i = 2; i < p.count(); ++i) {
-- ed = p.at(i);
-- if (ToRadian(deg) <= DiffAngle(*st, *mp, *ed)) {
-- st = mp;
-- rt.append(mp);
-- }
-- mp = ed;
-- }
-- rt.append(ed);
-- return rt;
--}
--
--FNPointList ExtractAngle(FNPointList& p, const int deg)
--{
-- FNPointList rt;
-- rt.append(p.first());
-- QPoint* st = p.first();
-- QPoint* mp = p.at(1);
-- QPoint* ed = p.last();
-- for (uint i = 2; i < p.count(); ++i) {
-- ed = p.at(i);
-- if (ToRadian(deg) <= DiffAngle(*st, *mp, *ed)) {
-- st = mp;
-- rt.append(mp);
-- }
-- mp = ed;
-- }
-- if (SNAP_SIZE / 2 > Distance(*p.first(), *p.last()) && 3 < p.count()) {
-- rt.append(p.first());
-- } else {
-- rt.append(ed);
-- }
-- return rt;
--}
--
--FNPointList SumupPoints(FNPointList& p)
--{
-- if (3 >= p.count()) {
-- return p;
-- }
-- FNPointList rt;
-- rt.append(p.first());
-- QPoint* p1 = p.first();
-- QPoint* p2 = NULL;
-- double pred = 0;
-- for (uint i = 1; i < p.count() - 1; ++i) {
-- p2 = p.at(i);
-- double d = Distance(*p1, *p2);
-- if (SNAP_SIZE / 2 < d || pred > d) {
-- rt.append(p2);
-- p1 = p2;
-- d = 0;
-- }
-- pred = d;
-- }
-- rt.append(p.last());
-- return rt;
--}
--
--FNPointList SnapPoints(FNPointList& p)
--{
-- FNPointList rt;
-- for (uint i = 0; i < p.count(); ++i) {
-- QPoint tp = SnapPoint(*p.at(i));
-- p.at(i)->setX(tp.x());
-- p.at(i)->setY(tp.y());
-- rt.append(p.at(i));
-- }
-- return rt;
--}
--
--FNPointList ArrangePoints(FNPointList& p)
--{
-- if (3 >= p.count() && 2 != p.count()) {
-- return p;
-- }
-- FNPointList rt;
-- rt.append(p.first());
-- QPoint* p1 = p.first();
-- QPoint* p2 = NULL;
-- for (uint i = 1; i < p.count(); ++i) {
-- p2 = p.at(i);
-- QPoint tp = ArrangePoint(*p1, *p2);
-- p2->setX(tp.x());
-- p2->setY(tp.y());
-- rt.append(p2);
-- p1 = p2;
-- }
-- if (*p.first() == *p.last()) {
-- QPoint tp = ArrangePoint(*p1, *p.first());
-- rt.first()->setX(tp.x());
-- rt.first()->setY(tp.y());
-- }
-- return rt;
--}
--
--FNPointList TuningPoints(FNPointList& p)
--{
-- FNPointList rt;
-- if (3 >= p.count()) {
-- for (uint i = 0; i < p.count(); ++i) {
-- rt.append(new QPoint(*p.at(i)));
-- }
-- return rt;
-- }
-- rt.append(new QPoint(*p.at(0)));
-- for (uint i = 1; i < p.count() - 1; ++i) {
-- QPoint* p1 = p.at(i);
-- QPoint* p2 = p.at(i + 1);
-- rt.append(new QPoint(*p1));
-- if (i < p.count() - 2) {
-- rt.append(new QPoint((p1->x() + p2->x())/2, (p1->y() + p2->y())/2));
-- }
-- }
-- rt.append(new QPoint(*p.at(p.count()-1)));
-- return rt;
--}
--
--FNPointList ToBezier(FNPointList& p) {
-- FNPointList rt;
-- rt.append(new QPoint(*p.at(0)));
-- for (uint i = 0; i < p.count() - 2; i += 2) {
-- int x1 = p.at(i)->x();
-- int xa = p.at(i + 1)->x();
-- int x4 = p.at(i + 2)->x();
--
-- int x2 = (x1 + xa) / 2;
-- int x3 = (xa + x4) / 2;
--
-- int y1 = p.at(i)->y();
-- int ya = p.at(i + 1)->y();
-- int y4 = p.at(i + 2)->y();
--
-- int y2 = (y1 + ya) / 2;
-- int y3 = (ya + y4) / 2;
--
-- rt.append(new QPoint(x2 ,y2));
-- rt.append(new QPoint(x3 ,y3));
-- rt.append(new QPoint(x4 ,y4));
-- }
-- return rt;
--}
--
--FNPointList ToCurves(FNPointList& p) {
-- if (3 <= p.count()) {
-- //ベジェによる補完
-- return ToBezier(p);
-- } else {
-- FNPointList rt;
-- for (uint i = 0; i < p.count(); ++i) {
-- rt.append(new QPoint(*p.at(i)));
-- }
-- return rt;
-- }
--}
--
--FNPointList AutoFormat(FNPointList& p)
--{
-- FNPointList tp = ExtractAngle(p, PHASE1_ANGLE);
-- uint n;
-- do {
-- n = tp.count();
-- tp = SumupPoints(tp);
-- tp = ExtractAngle(tp, PHASE1_ANGLE);
-- tp = ArrangePoints(tp);
-- } while (n > tp.count());
-- tp = SnapPoints(tp);
-- tp = ReducePoints(tp);
-- FNPointList rt;
-- if (2 == tp.count()) {
-- if (*tp.first() == *tp.last()) {
-- return rt;
-- }
-- }
-- for (uint i = 0; i < tp.count(); ++i) {
-- rt.append(new QPoint(*tp.at(i)));
-- }
-- return rt;
--}
--
--FNPointList ToEllipse(int x, int y, int w, int h) {
-- FNPointList rt;
-- QPointArray pa;
-- pa.makeEllipse(x, y, w, h);
-- for (uint i = 0; i < pa.count(); ++i) {
-- rt.append(new QPoint(pa.point(i)));
-- }
-- return rt;
--}
--
--FNPointList AutoCurve(FNPointList& p)
--{
-- FNPointList tp2;
-- tp2.setAutoDelete(true);
-- FNPointList tp4;
-- tp4.setAutoDelete(true);
-- QPoint sp = SnapPoint(*p.at(0));
-- QPoint ep = SnapPoint(*p.at(p.count()-1));
-- if (sp == ep) {
-- //楕円
-- int sx = p.at(0)->x();
-- int sy = p.at(0)->y();
-- int ex = sx;
-- int ey = sy;
-- for (uint i = 1; i < p.count(); ++i) {
-- QPoint tp = *p.at(i);
-- if (sx > tp.x()) {
-- sx = tp.x();
-- } else if (ex < tp.x()) {
-- ex = tp.x();
-- }
-- if (sy > tp.y()) {
-- sy = tp.y();
-- } else if (ey < tp.y()) {
-- ey = tp.y();
-- }
-- }
-- sp = SnapPoint(QPoint(sx, sy));
-- ep = SnapPoint(QPoint(ex, ey));
-- tp2.append(new QPoint(sp.x(), sp.y()));
-- tp2.append(new QPoint(ep.x(), ep.y()));
-- } else {
-- FNPointList tp = ExtractAngle2(p, PHASE2_ANGLE);
-- uint n;
-- do {
-- n = tp.count();
-- tp = SumupPoints(tp);
-- tp = ExtractAngle2(tp, PHASE2_ANGLE);
-- tp = SnapPoints(tp);
-- } while (n > tp.count());
-- tp = SumupPoints(tp);
-- tp = ReducePoints(tp);
-- tp4 = TuningPoints(tp);
-- tp2 = ToCurves(tp4);
-- }
-- FNPointList rt;
-- if (2 == tp2.count()) {
-- if (*tp2.first() == *tp2.last()) {
-- return rt;
-- }
-- }
-- for (uint i = 0; i < tp2.count(); ++i) {
-- rt.append(new QPoint(*tp2.at(i)));
-- }
-- return rt;
--}
--
--FNPointList Smoothing(FNPointList& p)
--{
-- int tsnap = SNAP_SIZE;
-- SNAP_SIZE=8;
-- FNPointList tp = ExtractAngle2(p, PHASE2_ANGLE);
-- tp = SumupPoints(tp);
-- tp = ReducePoints(tp);
-- FNPointList tp4 = TuningPoints(tp);
-- tp4.setAutoDelete(true);
-- FNPointList tp2 = ToCurves(tp4);
-- tp2.setAutoDelete(true);
-- FNPointList rt;
-- for (uint i = 0; i < tp2.count(); ++i) {
-- rt.append(new QPoint(*tp2.at(i)));
-- }
-- SNAP_SIZE = tsnap;
-- return rt;
--}
--
--FNPointList Reduce(FNPointList& p)
--{
-- FNPointList tp = ReducePoints(p);
-- FNPointList rt;
-- for (uint i = 0; i < tp.count(); ++i) {
-- rt.append(new QPoint(*tp.at(i)));
-- }
-- return rt;
--}
-+/* FreeNote for Sharp SLA300, B500, C7x0 Linux PDA
-+ Copyright (C) 2003 Joe Kanemori.<kanemori@ymg.urban.ne.jp>
-+
-+ This program is free software; you can redistribute it and/or modify
-+ it under the terms of the GNU General Public License as published by
-+ the Free Software Foundation; either version 2 of the License, or
-+ (at your option) any later version.
-+
-+ This program is distributed in the hope that it will be useful,
-+ but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ GNU General Public License for more details.
-+
-+ You should have received a copy of the GNU General Public License
-+ along with this program; if not, write to the Free Software
-+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+*/
-+/*
-+2003/12/16-19 FreeNote ver 1.5.5pre
-+・曲線描画ロジックの改良
-+
-+2003/12/14 FreeNote 1.5.4pre
-+・曲線描画ロジックの改良
-+
-+2003/11/30-2003/12/04 FreeNote 1.5.3pre
-+・ベジェ関数のスペルミスを修正
-+
-+2003/11/16 FreeNote 1.5.2pre
-+・円描画のロジックを追加
-+
-+2003/11/13 FreeNote 1.5.1pre
-+・スムージング追加
-+2003/11/10-12
-+・曲線整形モード追加
-+2003/11/09 追加
-+*/
-+#include "fmtengine.h"
-+#include <qpointarray.h>
-+#include <qpe/qmath.h>
-+#include <math.h>
-+#include <stdlib.h> // abs
-+int SNAP_SIZE = 32;
-+int PHASE1_ANGLE = 30;
-+int PHASE2_ANGLE = 30;
-+double Surface(const QPoint& p1, const QPoint& p2)
-+{
-+ return 0.5 * abs(p1.x() * p2.y() - p1.y() * p2.x());
-+}
-+
-+bool IsLinear(const QPoint& p1, const QPoint& p2, const QPoint& p3)
-+{
-+ double s1 = Surface(p1, p2);
-+ double s2 = Surface(p2, p3);
-+ double s3 = Surface(p1, p3);
-+ if (s1 + s2 == s3) {
-+ return true;
-+ } else {
-+ return false;
-+ }
-+}
-+
-+const double Angle(const QPoint& p1, const QPoint& p2)
-+{
-+ return qATan2((double)(p2.y() - p1.y()), (double)(p2.x() - p1.x()));
-+}
-+
-+const double DiffAngle(const QPoint& p1, const QPoint& p2, const QPoint& p3)
-+{
-+ return fabs(Angle(p1, p2) - Angle(p2, p3));
-+}
-+
-+const double ToDegree(double t)
-+{
-+ return t * 180 / M_PI;
-+}
-+
-+const double ToRadian(double d)
-+{
-+ return d * M_PI / 180;
-+}
-+
-+const double Distance(const QPoint& p1, const QPoint& p2)
-+{
-+ return hypot(p1.x() - p2.x(), p1.y() - p2.y());
-+}
-+
-+const QPoint SnapPoint(const QPoint& p)
-+{
-+ int x = ((int)(p.x() + SNAP_SIZE / 2) / SNAP_SIZE) * SNAP_SIZE;
-+ int y = ((int)(p.y() + SNAP_SIZE / 2) / SNAP_SIZE) * SNAP_SIZE;
-+ return QPoint(x, y);
-+}
-+
-+const QPoint ArrangePoint(const QPoint& p1, const QPoint& p2)
-+{
-+ int x = p2.x();
-+ int y = p2.y();
-+ if (p1.x() - SNAP_SIZE / 2 <= x && p1.x() + SNAP_SIZE / 2 >= x) {
-+ x = p1.x();
-+ }
-+ if (p1.y() - SNAP_SIZE / 2 <= y && p1.y() + SNAP_SIZE / 2 >= y) {
-+ y = p1.y();
-+ }
-+ return QPoint(x, y);
-+}
-+
-+FNPointList ReducePoints(FNPointList& p)
-+{
-+ if (3 >= p.count()) {
-+ return p;
-+ }
-+ FNPointList rt;
-+ rt.append(p.first());
-+ QPoint* p1 = p.first();
-+ QPoint* p2 = p.at(1);
-+ QPoint* p3 = NULL;
-+ for (uint i = 2; i < p.count(); ++i) {
-+ p3 = p.at(i);
-+ if (false == IsLinear(*p1, *p2, *p3)) {
-+ rt.append(p2);
-+ p1 = p2;
-+ }
-+ p2 = p3;
-+ }
-+ rt.append(p3);
-+ return rt;
-+}
-+
-+FNPointList ExtractAngle2(FNPointList& p, const int deg)
-+{
-+ FNPointList rt;
-+ rt.append(p.first());
-+ QPoint* st = p.first();
-+ QPoint* mp = p.at(1);
-+ QPoint* ed = p.last();
-+ for (uint i = 2; i < p.count(); ++i) {
-+ ed = p.at(i);
-+ if (ToRadian(deg) <= DiffAngle(*st, *mp, *ed)) {
-+ st = mp;
-+ rt.append(mp);
-+ }
-+ mp = ed;
-+ }
-+ rt.append(ed);
-+ return rt;
-+}
-+
-+FNPointList ExtractAngle(FNPointList& p, const int deg)
-+{
-+ FNPointList rt;
-+ rt.append(p.first());
-+ QPoint* st = p.first();
-+ QPoint* mp = p.at(1);
-+ QPoint* ed = p.last();
-+ for (uint i = 2; i < p.count(); ++i) {
-+ ed = p.at(i);
-+ if (ToRadian(deg) <= DiffAngle(*st, *mp, *ed)) {
-+ st = mp;
-+ rt.append(mp);
-+ }
-+ mp = ed;
-+ }
-+ if (SNAP_SIZE / 2 > Distance(*p.first(), *p.last()) && 3 < p.count()) {
-+ rt.append(p.first());
-+ } else {
-+ rt.append(ed);
-+ }
-+ return rt;
-+}
-+
-+FNPointList SumupPoints(FNPointList& p)
-+{
-+ if (3 >= p.count()) {
-+ return p;
-+ }
-+ FNPointList rt;
-+ rt.append(p.first());
-+ QPoint* p1 = p.first();
-+ QPoint* p2 = NULL;
-+ double pred = 0;
-+ for (uint i = 1; i < p.count() - 1; ++i) {
-+ p2 = p.at(i);
-+ double d = Distance(*p1, *p2);
-+ if (SNAP_SIZE / 2 < d || pred > d) {
-+ rt.append(p2);
-+ p1 = p2;
-+ d = 0;
-+ }
-+ pred = d;
-+ }
-+ rt.append(p.last());
-+ return rt;
-+}
-+
-+FNPointList SnapPoints(FNPointList& p)
-+{
-+ FNPointList rt;
-+ for (uint i = 0; i < p.count(); ++i) {
-+ QPoint tp = SnapPoint(*p.at(i));
-+ p.at(i)->setX(tp.x());
-+ p.at(i)->setY(tp.y());
-+ rt.append(p.at(i));
-+ }
-+ return rt;
-+}
-+
-+FNPointList ArrangePoints(FNPointList& p)
-+{
-+ if (3 >= p.count() && 2 != p.count()) {
-+ return p;
-+ }
-+ FNPointList rt;
-+ rt.append(p.first());
-+ QPoint* p1 = p.first();
-+ QPoint* p2 = NULL;
-+ for (uint i = 1; i < p.count(); ++i) {
-+ p2 = p.at(i);
-+ QPoint tp = ArrangePoint(*p1, *p2);
-+ p2->setX(tp.x());
-+ p2->setY(tp.y());
-+ rt.append(p2);
-+ p1 = p2;
-+ }
-+ if (*p.first() == *p.last()) {
-+ QPoint tp = ArrangePoint(*p1, *p.first());
-+ rt.first()->setX(tp.x());
-+ rt.first()->setY(tp.y());
-+ }
-+ return rt;
-+}
-+
-+FNPointList TuningPoints(FNPointList& p)
-+{
-+ FNPointList rt;
-+ if (3 >= p.count()) {
-+ for (uint i = 0; i < p.count(); ++i) {
-+ rt.append(new QPoint(*p.at(i)));
-+ }
-+ return rt;
-+ }
-+ rt.append(new QPoint(*p.at(0)));
-+ for (uint i = 1; i < p.count() - 1; ++i) {
-+ QPoint* p1 = p.at(i);
-+ QPoint* p2 = p.at(i + 1);
-+ rt.append(new QPoint(*p1));
-+ if (i < p.count() - 2) {
-+ rt.append(new QPoint((p1->x() + p2->x())/2, (p1->y() + p2->y())/2));
-+ }
-+ }
-+ rt.append(new QPoint(*p.at(p.count()-1)));
-+ return rt;
-+}
-+
-+FNPointList ToBezier(FNPointList& p) {
-+ FNPointList rt;
-+ rt.append(new QPoint(*p.at(0)));
-+ for (uint i = 0; i < p.count() - 2; i += 2) {
-+ int x1 = p.at(i)->x();
-+ int xa = p.at(i + 1)->x();
-+ int x4 = p.at(i + 2)->x();
-+
-+ int x2 = (x1 + xa) / 2;
-+ int x3 = (xa + x4) / 2;
-+
-+ int y1 = p.at(i)->y();
-+ int ya = p.at(i + 1)->y();
-+ int y4 = p.at(i + 2)->y();
-+
-+ int y2 = (y1 + ya) / 2;
-+ int y3 = (ya + y4) / 2;
-+
-+ rt.append(new QPoint(x2 ,y2));
-+ rt.append(new QPoint(x3 ,y3));
-+ rt.append(new QPoint(x4 ,y4));
-+ }
-+ return rt;
-+}
-+
-+FNPointList ToCurves(FNPointList& p) {
-+ if (3 <= p.count()) {
-+ //ベジェによる補完
-+ return ToBezier(p);
-+ } else {
-+ FNPointList rt;
-+ for (uint i = 0; i < p.count(); ++i) {
-+ rt.append(new QPoint(*p.at(i)));
-+ }
-+ return rt;
-+ }
-+}
-+
-+FNPointList AutoFormat(FNPointList& p)
-+{
-+ FNPointList tp = ExtractAngle(p, PHASE1_ANGLE);
-+ uint n;
-+ do {
-+ n = tp.count();
-+ tp = SumupPoints(tp);
-+ tp = ExtractAngle(tp, PHASE1_ANGLE);
-+ tp = ArrangePoints(tp);
-+ } while (n > tp.count());
-+ tp = SnapPoints(tp);
-+ tp = ReducePoints(tp);
-+ FNPointList rt;
-+ if (2 == tp.count()) {
-+ if (*tp.first() == *tp.last()) {
-+ return rt;
-+ }
-+ }
-+ for (uint i = 0; i < tp.count(); ++i) {
-+ rt.append(new QPoint(*tp.at(i)));
-+ }
-+ return rt;
-+}
-+
-+FNPointList ToEllipse(int x, int y, int w, int h) {
-+ FNPointList rt;
-+ QPointArray pa;
-+ pa.makeEllipse(x, y, w, h);
-+ for (uint i = 0; i < pa.count(); ++i) {
-+ rt.append(new QPoint(pa.point(i)));
-+ }
-+ return rt;
-+}
-+
-+FNPointList AutoCurve(FNPointList& p)
-+{
-+ FNPointList tp2;
-+ tp2.setAutoDelete(true);
-+ FNPointList tp4;
-+ tp4.setAutoDelete(true);
-+ QPoint sp = SnapPoint(*p.at(0));
-+ QPoint ep = SnapPoint(*p.at(p.count()-1));
-+ if (sp == ep) {
-+ //楕円
-+ int sx = p.at(0)->x();
-+ int sy = p.at(0)->y();
-+ int ex = sx;
-+ int ey = sy;
-+ for (uint i = 1; i < p.count(); ++i) {
-+ QPoint tp = *p.at(i);
-+ if (sx > tp.x()) {
-+ sx = tp.x();
-+ } else if (ex < tp.x()) {
-+ ex = tp.x();
-+ }
-+ if (sy > tp.y()) {
-+ sy = tp.y();
-+ } else if (ey < tp.y()) {
-+ ey = tp.y();
-+ }
-+ }
-+ sp = SnapPoint(QPoint(sx, sy));
-+ ep = SnapPoint(QPoint(ex, ey));
-+ tp2.append(new QPoint(sp.x(), sp.y()));
-+ tp2.append(new QPoint(ep.x(), ep.y()));
-+ } else {
-+ FNPointList tp = ExtractAngle2(p, PHASE2_ANGLE);
-+ uint n;
-+ do {
-+ n = tp.count();
-+ tp = SumupPoints(tp);
-+ tp = ExtractAngle2(tp, PHASE2_ANGLE);
-+ tp = SnapPoints(tp);
-+ } while (n > tp.count());
-+ tp = SumupPoints(tp);
-+ tp = ReducePoints(tp);
-+ tp4 = TuningPoints(tp);
-+ tp2 = ToCurves(tp4);
-+ }
-+ FNPointList rt;
-+ if (2 == tp2.count()) {
-+ if (*tp2.first() == *tp2.last()) {
-+ return rt;
-+ }
-+ }
-+ for (uint i = 0; i < tp2.count(); ++i) {
-+ rt.append(new QPoint(*tp2.at(i)));
-+ }
-+ return rt;
-+}
-+
-+FNPointList Smoothing(FNPointList& p)
-+{
-+ int tsnap = SNAP_SIZE;
-+ SNAP_SIZE=8;
-+ FNPointList tp = ExtractAngle2(p, PHASE2_ANGLE);
-+ tp = SumupPoints(tp);
-+ tp = ReducePoints(tp);
-+ FNPointList tp4 = TuningPoints(tp);
-+ tp4.setAutoDelete(true);
-+ FNPointList tp2 = ToCurves(tp4);
-+ tp2.setAutoDelete(true);
-+ FNPointList rt;
-+ for (uint i = 0; i < tp2.count(); ++i) {
-+ rt.append(new QPoint(*tp2.at(i)));
-+ }
-+ SNAP_SIZE = tsnap;
-+ return rt;
-+}
-+
-+FNPointList Reduce(FNPointList& p)
-+{
-+ FNPointList tp = ReducePoints(p);
-+ FNPointList rt;
-+ for (uint i = 0; i < tp.count(); ++i) {
-+ rt.append(new QPoint(*tp.at(i)));
-+ }
-+ return rt;
-+}
---- FreeNote_1.6.1_arm/FNCanvas.cpp~compile 2003-12-24 15:20:16.000000000 +0100
-+++ FreeNote_1.6.1_arm/FNCanvas.cpp 2004-02-01 18:43:35.000000000 +0100
-@@ -1,1227 +1,1228 @@
--/* FreeNote for Sharp SLA300, B500, C7x0 Linux PDA
-- Copyright (C) 2003 Joe Kanemori.<kanemori@ymg.urban.ne.jp>
--
-- This program is free software; you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation; either version 2 of the License, or
-- (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program; if not, write to the Free Software
-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
--*/
--/*
--2003/12/23 ver 1.6.1
--・保存情報のサイズ縮小
--
--2003/12/16-19 ver 1.5.5pre
--・ペンサイズの追加(1-8)
--・アンドゥ・リドゥの実装
--
--2003/12/14 ver 1.5.4pre
--・ペンサイズを選択可能に。
--
--2003/12/05 ver 1.5.3Apre
--・グリッドの色を修正
--
--2003/12/04 ver 1.5.3pre
--・グリッドの描画を一部修正
--
--2003/11/10 ver 1.5.1pre
--・曲線整形モード追加
--
--2003/11/09 ver 1.5.0pre
--・自動整形モード追加
--
--2003/09/03 ver 1.3.4pre
--・Use all quadrant OFF時に表示位置がリセットされる場合があるバグ対応。
--
--2003/09/01-03 ver 1.3.3pre
--・スクロールの改良
--・Use all quadrant(全象限を使用する)メニューを追加
--
--2003/08/31 FreeNote 1.3.2pre
--・全方向スクロール
--
--2003/08/23 FreeNote 1.3.0pre
--・CR動作の修正
--
--2003/08/15 FreeNote 1.2.1を公開
--・保存時のバグ修正
--・完了ダイアログの自動消去
--・PNGファイルへの出力
--
--2003/08/15 FreeNote 1.2を公開
--・オプション追加
--・スクロールガイド
--・Freeファイル関連付け
--・アイコンの変更
--
--2003/08/05 FreeNote 1.1.1preを公開
--・高速起動時に閉じた状態を保持
--・描画モード切替え時に消しゴム表示
--・保存時間短縮
--・Viewモードの挙動を変更
--・メニューの見た目を変更
--*/
--#include "fncanvas.h"
--#include <stdio.h>
--#include <qfile.h>
--#include <qmessagebox.h>
--#include <qtextstream.h>
--#include <qpen.h>
--#include <qcolor.h>
--#include <qpoint.h>
--#include <qthread.h>
--#include <qimage.h>
--#include <math.h>
--#include "fnmessagebox.h"
--#include "fmtengine.h"
--
--int snap(int v) {
-- int tv = abs(v);
-- tv = ((int)(tv + SNAP_SIZE / 2) / SNAP_SIZE) * SNAP_SIZE;
-- if (0 > v) {
-- return -tv;
-- } else {
-- return tv;
-- }
--}
--
--FNCanvas::FNCanvas(QWidget* parent = 0, const char* name = 0, WFlags f = 0)
-- :QWidget(parent, name, f),
-- _pen(black, 1, SolidLine, RoundCap, RoundJoin),
-- _asMode(AS_NONE),
-- _drawMode(MODE_DRAW),
-- _disp_offset(0),
-- _eraser_l(50),
-- _eraser_s(10),
-- _h_step(100),
-- _v_step(100),
-- _margin(5),
-- _scrollTiming(800),
-- _viewMode(false),
-- _isWaiting(false),
-- _isDragging(false),
-- _isHeadingEnables(false),
-- _isShowGuide(false),
-- _isUseAllQuadrant(false),
-- _scale_x(1.0),
-- _scale_y(1.0)
--{
-- _tracks.setAutoDelete(true);
-- this->setBackgroundMode(NoBackground);
-- _timer = new QTimer(this);
-- connect(_timer, SIGNAL(timeout()), this, SLOT(autoScroll()));
--}
--
--FNCanvas::~FNCanvas()
--{
-- _timer->stop();
-- delete _timer;
--
-- _tracks.clear();
-- clearList(_draws);
--}
--
--void FNCanvas::setScrollTiming(int v)
--{
-- _scrollTiming = v;
--}
--
--
--void FNCanvas::setVStep(int v)
--{
-- _v_step = v;
--}
--
--void FNCanvas::setHStep(int v)
--{
-- _h_step = v;
--}
--
--void FNCanvas::setSEraser(int v)
--{
-- _eraser_s = v;
--}
--
--void FNCanvas::setLEraser(int v)
--{
-- _eraser_l = v;
--}
--
--
--void FNCanvas::setMargin(int v)
--{
-- if (v < 3) {
-- v = 3;
-- }
-- _margin = v;
--}
--
--void FNCanvas::setScrollMode(int as)
--{
-- _asMode = as;
-- redraw();
--}
--
--void FNCanvas::autoScroll()
--{
-- if (AS_NONE == _asMode) {
-- if (MODE_FORMAT == _drawMode || MODE_CURVE == _drawMode || MODE_SMOOTH == _drawMode) {
-- setOrigin(_origin.x(), _origin.y());
-- }
-- return;
-- }
-- bool tmp = _isHeadingEnables;
-- int dx = 0;
-- int dy = 0;
-- if (AS_BOTH == _asMode || AS_HORIZONTAL == _asMode) {
-- if (_last.x() > width() * (_margin - 1) / _margin) {
-- dx = _h_step;
-- } else if (_last.x() < width() / _margin) {
-- dx = -_h_step;
-- }
-- }
-- if (AS_BOTH == _asMode || AS_VERTICAL == _asMode) {
-- if (_last.y() > height() * (_margin - 1) / _margin) {
-- dy = _v_step;
-- } else if (_last.y() < height() / _margin) {
-- dy = -_v_step;
-- }
-- }
-- setOrigin(_origin.x() + dx, _origin.y() + dy);
-- _isHeadingEnables = tmp;
--}
--
--void FNCanvas::mousePressEvent(QMouseEvent* evt)
--{
-- setFocus();
-- _timer->stop();
-- _tracks.clear();
-- if (_viewMode) {
-- _isWaiting = true;
-- _viewMode = false;
-- setOrigin((int)((evt->x()) / _scale_x) - width() / 2, (int)((evt->y()) / _scale_y) - height() / 2);
-- redraw();
-- emit resetViewMode();
-- } else if (MODE_ERASE != _drawMode) {
-- _last = evt->pos();
-- _tracks.append(new QPoint(_last));
-- } else {
-- redraw();
-- _last = evt->pos();
-- _tracks.append(new QPoint(_last));
--
-- QPainter pbuf;
-- QPainter pwin;
-- pbuf.begin(&_buffer);
-- pwin.begin(this);
--
-- int w = _eraser_s;
-- if (PENWIDTH_MAX / 2 < _pen.width()) {
-- w = _eraser_l;
-- }
-- pbuf.setRasterOp(XorROP);
-- pbuf.setPen(QPen(white, 1));
-- pbuf.drawRect(_last.x() - w / 2, _last.y() - w / 2, w, w);
--
-- pwin.setRasterOp(XorROP);
-- pwin.setPen(QPen(white, 1));
-- pwin.drawRect(_last.x() - w / 2, _last.y() - w / 2, w, w);
--
-- pbuf.end();
-- pwin.end();
-- }
-- _isDragging = true;
--}
--
--void FNCanvas::mouseMoveEvent(QMouseEvent* evt)
--{
-- if (_isWaiting) {
-- return;
-- }
-- if (MODE_ERASE != _drawMode) {
-- QPainter pwin;
-- QPainter pbuf;
--
-- pwin.begin(this);
-- pbuf.begin(&_buffer);
--
-- pwin.setPen(_pen);
-- pbuf.setPen(_pen);
--
-- pwin.drawLine(_last, evt->pos());
-- pbuf.drawLine(_last, evt->pos());
--
-- pwin.end();
-- pbuf.end();
-- _last = evt->pos();
-- _tracks.append(new QPoint(_last));
-- } else {
-- //redraw();
-- if (_last.x() == -1) {
-- return;
-- }
-- QPainter pbuf;
-- QPainter pwin;
--
-- pbuf.begin(&_buffer);
-- pwin.begin(this);
--
-- int w = _eraser_s;
-- if (PENWIDTH_MAX / 2 < _pen.width()) {
-- w = _eraser_l;
-- }
-- pbuf.setRasterOp(XorROP);
-- pwin.setRasterOp(XorROP);
-- pbuf.setPen(QPen(white, 1));
-- pwin.setPen(QPen(white, 1));
-- pbuf.drawRect(_last.x() - w / 2, _last.y() - w / 2, w, w);
-- pwin.drawRect(_last.x() - w / 2, _last.y() - w / 2, w, w);
--
-- _tracks.append(new QPoint(evt->pos()));
-- _last = evt->pos();
--
-- pbuf.setRasterOp(CopyROP);
-- pwin.setRasterOp(CopyROP);
-- QRect r = QRect(0, 0, width(), height());
-- for (uint i = 0; i < _draws.count() - _disp_offset; ++i) {
-- FNPolygon* p = _draws.at(i);
-- if (r.intersects(p->boundingRect())) {
-- bool f = false;
-- QRect selected(_last.x() - w / 2, _last.y() - w / 2, w, w);
-- for (uint j = 0; j < p->points().count(); ++j) {
-- QPoint& pts = p->points().at(j);
-- if (selected.contains(pts)) {
-- f = true;
-- break;
-- }
-- }
-- if (f) {
-- p->drawShape(pbuf, f);
-- p->drawShape(pwin, f);
-- }
-- }
-- }
-- pbuf.setRasterOp(XorROP);
-- pwin.setRasterOp(XorROP);
-- pbuf.setPen(QPen(white, 1));
-- pwin.setPen(QPen(white, 1));
-- pbuf.drawRect(_last.x() - w / 2, _last.y() - w / 2, w, w);
-- pwin.drawRect(_last.x() - w / 2, _last.y() - w / 2, w, w);
-- pbuf.end();
-- pwin.end();
-- }
--}
--
--void FNCanvas::mouseReleaseEvent(QMouseEvent* evt)
--{
-- _isDragging = false;
-- if (_isWaiting) {
-- _isWaiting = false;
-- return;
-- }
-- _last = evt->pos();
-- if (MODE_ERASE != _drawMode) {
-- if (1 < _tracks.count()) {
-- FNPolygon* p = NULL;
-- if (MODE_FORMAT == _drawMode) {
-- p = new FNPolygon(_pen);
-- _tracks = AutoFormat(_tracks);
-- } else if (MODE_CURVE == _drawMode) {
-- QPoint sp = SnapPoint(*_tracks.at(0));
-- QPoint ep = SnapPoint(*_tracks.at(_tracks.count()-1));
-- _tracks = AutoCurve(_tracks);
-- if (sp == ep) {
-- p = new FNEllipse(_pen);
-- } else if (2 < _tracks.count()) {
-- p = new FNBezier(_pen);
-- } else {
-- p = new FNPolygon(_pen);
-- }
-- } else if (MODE_SMOOTH == _drawMode) {
-- _tracks = Smoothing(_tracks);
-- if (2 < _tracks.count()) {
-- p = new FNBezier(_pen);
-- } else {
-- p = new FNPolygon(_pen);
-- }
-- } else {
-- _tracks = Reduce(_tracks);
-- p = new FNPolygon(_pen);
-- }
-- if (1 < _tracks.count()) {
-- p->setPoints(_tracks);
-- redobuf_flush();
-- _draws.append(p);
-