Commit 3d3aba2c authored by Anna.Pavlova's avatar Anna.Pavlova Committed by Alexander.Trofimov

1. реализовала Border Box (рамка, диагонали)

2. изменила схему поиска позиции курсора (findDisposition) для mopuseDown и mouseMove
(баг, когда в формуле в конце внутренного контента стоит мат. элемент и есть just Draw элемент или gap в конце формулы)
3. исправила findDisposition для CDegree( не учитывался выход за границы контента по ширине )

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@47164 954022d7-b5bf-4e40-9824-e11837661b57
parent c98c5062
...@@ -1418,7 +1418,6 @@ function Set_Container(dimension, path, index) ...@@ -1418,7 +1418,6 @@ function Set_Container(dimension, path, index)
Cont.style.width = column*width + scrollWidth + "px"; Cont.style.width = column*width + scrollWidth + "px";
}*/ }*/
var flag = true;
for(var i = 0; i < row; i++) for(var i = 0; i < row; i++)
{ {
for(var j = 0; j < column; j++) for(var j = 0; j < column; j++)
......
...@@ -468,7 +468,7 @@ CMathBase.prototype = ...@@ -468,7 +468,7 @@ CMathBase.prototype =
this.CurPos_X = elem.pos.x; this.CurPos_X = elem.pos.x;
this.CurPos_Y = elem.pos.y; this.CurPos_Y = elem.pos.y;
var res = this.elements[this.CurPos_X][this.CurPos_Y].mouseDown( elem.mCoord ); var res = this.elements[this.CurPos_X][this.CurPos_Y].mouseDown( elem.mCoord, elem.inside_flag );
return res; return res;
...@@ -478,7 +478,7 @@ CMathBase.prototype = ...@@ -478,7 +478,7 @@ CMathBase.prototype =
var state = true, SelectContent = null; var state = true, SelectContent = null;
var elem = this.findDisposition( mCoord); var elem = this.findDisposition( mCoord);
if(elem.pos.x == this.CurPos_X && elem.pos.y == this.CurPos_Y && elem.flag === true ) if(elem.pos.x == this.CurPos_X && elem.pos.y == this.CurPos_Y && elem.inside_flag === -1 )
{ {
var movement = this.elements[this.CurPos_X][this.CurPos_Y].mouseMove( elem.mCoord ); var movement = this.elements[this.CurPos_X][this.CurPos_Y].mouseMove( elem.mCoord );
SelectContent = movement.SelectContent; SelectContent = movement.SelectContent;
...@@ -574,7 +574,7 @@ CMathBase.prototype = ...@@ -574,7 +574,7 @@ CMathBase.prototype =
return {x: _x, y: _y}; return {x: _x, y: _y};
}, },
findDisposition: function(mCoord) old_findDisposition: function(mCoord)
{ {
var mouseCoord = {x: null, y: null}, var mouseCoord = {x: null, y: null},
posCurs = {x: null, y: null}; posCurs = {x: null, y: null};
...@@ -706,6 +706,150 @@ CMathBase.prototype = ...@@ -706,6 +706,150 @@ CMathBase.prototype =
return {pos: posCurs, mCoord: mouseCoord, flag: flag}; return {pos: posCurs, mCoord: mouseCoord, flag: flag};
}, },
findDisposition: function(mCoord)
{
var mouseCoord = {x: null, y: null},
posCurs = {x: null, y: null};
var sumWidth = 0;
var sumHeight = 0;
var maxWH = this.getWidthsHeights();
var Widths = maxWH.widths;
var Heights = maxWH.heights;
///////////////////////////////
if(mCoord.y > this.size.height)
posCurs.x = this.nRow - 1;
else
{
var _h = 0;
for(var j = 0; j < this.nRow; j++)
{
_h += Heights[j];
_h += this.dH/2;
if( mCoord.y <= _h )
{
posCurs.x = j;
break;
}
_h += this.dH/2;
}
}
///////////////////////////////
//если не правильно посчитали, а элемент был justDraw, то будет ошибка
if( mCoord.x > this.size.width )
posCurs.y = this.nCol - 1;
else
{
var _w = 0;
for(var u = 0; u < this.nCol; u++)
{
_w +=Widths[u];
_w += this.dW/2;
if( mCoord.x <= _w )
{
if( this.elements[posCurs.x][u].IsJustDraw() )
{
if(this.nRow > 1)
{
if(posCurs.x == 0)
posCurs.x = 1;
else if(posCurs.x == this.nRow - 1)
posCurs.x = this.nRow - 2;
else
{
if( mCoord.y < (_h - Heights[posCurs.x]/2) )
posCurs.x--;
else
posCurs.x++;
}
posCurs.y = u;
}
else if(this.nCol > 1)
{
if(u == 0)
posCurs.y = 1;
else if(u == this.nCol - 1)
posCurs.y = this.nCol - 2;
else
{
if( mCoord.x < (_w - Widths[u]/2) )
posCurs.y = u - 1;
else
posCurs.y = u + 1;
}
}
else
return; // не самое лучшее решение, в идеале если у нас если такая ситуация получилась
// (что сомнительно, в контенте один элемент с которым ничего нельзя сделать),
// то вставать после этого элемента в контенте на уровень выше
// лучше следить за подобными ситуациями, чтобы такого не было
}
else
posCurs.y = u;
break;
}
_w += this.dW/2;
}
}
////////////////////////////////
for(var t = 0; t < posCurs.y; t++)
sumWidth += Widths[t];
for(t = 0; t < posCurs.x; t++)
sumHeight += Heights[t];
// флаг для случая, когда выходим за границы элемента и есть выравнивание относительно других элементов
// -1 - в пределах границы
// 0 - начало контента
// 1 - конец контента
// 2 - выщли за границы контента по Y
var inside_flag = -1;
if( posCurs.x != null && posCurs.y != null)
{
var size = this.elements[posCurs.x][posCurs.y].size;
var align = this.align(posCurs.x, posCurs.y);
if(mCoord.x < ( posCurs.y*this.dW + sumWidth + align.x ))
{
mouseCoord.x = 0;
inside_flag = 0;
}
else if( mCoord.x > ( posCurs.y*this.dW + sumWidth + align.x + size.width ))
{
mouseCoord.x = size.width;
inside_flag = 1;
}
else
mouseCoord.x = mCoord.x - ( posCurs.y*this.dW + sumWidth + align.x );
if(mCoord.y < (posCurs.x*this.dH + sumHeight + align.y))
{
mouseCoord.y = 0;
inside_flag = 2;
}
else if( mCoord.y > ( posCurs.x*this.dH + sumHeight + align.y + size.height ) )
{
mouseCoord.y = size.height;
inside_flag = 2;
}
else
mouseCoord.y = mCoord.y - (posCurs.x*this.dH + sumHeight + align.y );
}
return {pos: posCurs, mCoord: mouseCoord, inside_flag: inside_flag};
},
setPosition: function(pos) setPosition: function(pos)
{ {
if(this.bMObjs === true) if(this.bMObjs === true)
...@@ -855,6 +999,10 @@ CMathBase.prototype = ...@@ -855,6 +999,10 @@ CMathBase.prototype =
IsIncline: function() IsIncline: function()
{ {
return false; return false;
},
gToUp: function()
{
this.recalculateSize();
return this.Parent;
} }
} }
function CBorderBox()
{
this.gapBrd = 0;
this.bLeft = true;
this.bRight = true;
this.bTop = true;
this.bDown = true;
this.bLDiag = false;
this.bRDiag = false;
// this.bLeft = false;
// this.bRight = false;
// this.bDown = false;
// this.bTop = false;
// this.bLDiag = true;
// this.bRDiag = true;
CMathBase.call(this, 1, 1);
}
extend(CBorderBox, CMathBase);
CBorderBox.prototype.init = function(params)
{
this.gapBrd = params.font.FontSize *0.08104587131076388;
this.params = Common_CopyObj(params);
}
CBorderBox.prototype.recalculateSize = function()
{
var ss = this.elements[0][0].size;
var width = ss.width;
var height = ss.height;
var center = ss.center;
if(this.bTop)
{
height += this.gapBrd;
center += this.gapBrd;
}
if(this.bDown)
height += this.gapBrd;
if(this.bLeft)
width += this.gapBrd;
if(this.bRight)
width += this.gapBrd;
this.size = {width : width, height: height, center: center};
}
CBorderBox.prototype.draw = function()
{
this.elements[0][0].draw();
var penW = this.params.font.FontSize* 25.4/96 * 0.08 ;
if(this.bTop)
{
var x1 = this.pos.x,
x2 = this.pos.x + this.size.width - 25.4/96,
y1 = y2 = this.pos.y;
MathControl.pGraph.p_color(0,0,0, 255);
MathControl.pGraph.drawHorLine(0, y1, x1, x2, penW);
}
if(this.bDown)
{
var x1 = this.pos.x,
x2 = this.pos.x + this.size.width - 25.4/96,
y1 = y2 = this.pos.y + this.size.height - penW;
MathControl.pGraph.p_color(0,0,0, 255);
MathControl.pGraph.drawHorLine(0, y1, x1, x2, penW);
}
if(this.bLeft)
{
var x1 = this.pos.x ,
y1 = this.pos.y,
y2 = this.pos.y + this.size.height - 25.4/96;
MathControl.pGraph.p_color(0,0,0, 255);
MathControl.pGraph.drawVerLine(0, x1, y1, y2, penW);
}
if(this.bRight)
{
var x1 = this.pos.x + this.size.width - penW ,
y1 = this.pos.y,
y2 = this.pos.y + this.size.height - 25.4/96 ;
MathControl.pGraph.p_color(0,0,0, 255);
MathControl.pGraph.drawVerLine(0, x1, y1, y2, penW);
}
if(this.bLDiag)
{
var pW = penW*0.8;
var x1 = this.pos.x , y1 = this.pos.y,
x2 = x1 + pW, y2 = y1,
x3 = x1 + this.size.width - 25.4/96, y3 = y1 + this.size.height - pW - 25.4/96,
x4 = x3, y4 = y3 + pW,
x5 = x4 - pW, y5 = y4,
x6 = x1, y6 = y1 + pW,
x7 = x1, y7 = y1;
MathControl.pGraph.p_width(1000);
MathControl.pGraph.b_color1(0,0,0, 255);
MathControl.pGraph._s();
MathControl.pGraph._m(x1, y1);
MathControl.pGraph._l(x2, y2);
MathControl.pGraph._l(x3, y3);
MathControl.pGraph._l(x4, y4);
MathControl.pGraph._l(x5, y5);
MathControl.pGraph._l(x6, y6);
MathControl.pGraph._l(x7, y7);
MathControl.pGraph.df();
}
if(this.bRDiag)
{
var pW = penW*0.8;
var x1 = this.pos.x + this.size.width - pW - 25.4/96, y1 = this.pos.y,
x2 = x1 + pW, y2 = y1,
x3 = x2, y3 = y2 + pW,
x4 = this.pos.x + pW, y4 = this.pos.y + this.size.height - 25.4/96,
x5 = x4 - pW, y5 = y4,
x6 = x5, y6 = y5 - pW,
x7 = x1, y7 = y1;
MathControl.pGraph.p_width(1000);
MathControl.pGraph.b_color1(0,0,0, 255);
MathControl.pGraph._s();
MathControl.pGraph._m(x1, y1);
MathControl.pGraph._l(x2, y2);
MathControl.pGraph._l(x3, y3);
MathControl.pGraph._l(x4, y4);
MathControl.pGraph._l(x5, y5);
MathControl.pGraph._l(x6, y6);
MathControl.pGraph._l(x7, y7);
MathControl.pGraph.df();
}
}
CBorderBox.prototype.setPosition = function(pos)
{
this.pos = {x: pos.x, y: pos.y - this.size.center};
var x = this.pos.x, y = this.pos.y;
if(this.bLeft)
x += this.gapBrd;
if(this.bTop)
y += this.gapBrd;
this.elements[0][0].setPosition({x : x, y: y});
}
CBorderBox.prototype.findDisposition = function(mCoord)
{
var X = null,
Y = null,
inside_flag = -1; // остаемя в пределах данного элемента( за границы элемента не вышли )
var shX = 0, shY = 0;
if(this.bLeft)
shX = this.gapBrd;
if(this.bTop)
shY = this.gapBrd;
var sCont = this.elements[0][0].size;
if(mCoord.x < shX)
{
X = 0;
inside_flag = 0;
}
else if(mCoord.x > shX + sCont.width)
{
X = sCont.width;
inside_flag = 1;
}
else
{
X = mCoord.x - shX;
}
if(mCoord.y < shY)
{
Y = 0;
inside_flag = 2;
}
else if(mCoord.y > shY + sCont.height)
{
Y = sCont.height;
inside_flag = 2;
}
else
{
Y = mCoord.y - shY;
}
var coord = {x: X, y: Y},
posCurs = {x: 0, y: 0};
return {pos: posCurs, mCoord: coord, inside_flag: inside_flag};
}
\ No newline at end of file
...@@ -12,11 +12,10 @@ function CDegree(type) ...@@ -12,11 +12,10 @@ function CDegree(type)
return degr; return degr;
} }
function CDegreeOrdinary(index) function CDegreeOrdinary(index)
{ {
this.index = index; this.index = index;
this.constPos = null; this.shiftDegree = null;
CMathBase.call(this, 1, 2); CMathBase.call(this, 1, 2);
} }
extend(CDegreeOrdinary, CMathBase); extend(CDegreeOrdinary, CMathBase);
...@@ -61,12 +60,12 @@ CDegreeOrdinary.prototype.recalculateSize = function() ...@@ -61,12 +60,12 @@ CDegreeOrdinary.prototype.recalculateSize = function()
if(this.index === 1 ) if(this.index === 1 )
{ {
this.constPos = 0; this.shiftDegree = 0;
_center = _height - (this.elements[0][0].size.height - this.elements[0][0].size.center); _center = _height - (this.elements[0][0].size.height - this.elements[0][0].size.center);
} }
else if(this.index === -1 ) else if(this.index === -1 )
{ {
this.constPos = _height - this.elements[0][1].size.height; this.shiftDegree = _height - this.elements[0][1].size.height;
_center = this.elements[0][0].size.center; _center = this.elements[0][0].size.center;
} }
...@@ -81,44 +80,101 @@ CDegreeOrdinary.prototype.setPosition = function(_pos) ...@@ -81,44 +80,101 @@ CDegreeOrdinary.prototype.setPosition = function(_pos)
} }
this.elements[0][0].setPosition({x: pos.x, y: pos.y - this.elements[0][0].size.center }); this.elements[0][0].setPosition({x: pos.x, y: pos.y - this.elements[0][0].size.center });
this.elements[0][1].setPosition({x: pos.x + this.elements[0][0].size.width + this.dW, y: pos.y + this.constPos - this.size.center}); this.elements[0][1].setPosition({x: pos.x + this.elements[0][0].size.width + this.dW, y: pos.y + this.shiftDegree - this.size.center});
/*this.elements[0][0].setPosition({x: pos.x, y: pos.y });
this.elements[0][1].setPosition({x: pos.x + this.elements[0][0].size.width + this.dW, y: pos.y + this.constPos - this.size.center + this.elements[0][1].size.center});*/
} }
CDegreeOrdinary.prototype.findDisposition = function( mCoord ) CDegreeOrdinary.prototype.old_findDisposition = function( mCoord )
{ {
var posCurs = null, mouseCoord = null, flag = false; var posCurs = null, mouseCoord = null, inside_flag = -1;
if( mCoord.x < this.elements[0][0].size.width ) if( mCoord.x < this.elements[0][0].size.width )
{ {
if( this.elements[this.CurPos_X][this.CurPos_Y].IsJustDraw() ) if( this.elements[0][0].IsJustDraw() )
{ {
posCurs = {x: 0, y: 1}; posCurs = {x: 0, y: 1};
mouseCoord = {x: 0, y: mCoord.y - this.constPos}; mouseCoord = {x: 0, y: mCoord.y - this.shiftDegree};
flag = false; inside_flag = 0;
} }
else else
{ {
posCurs = {x: 0, y: 0}; posCurs = {x: 0, y: 0};
mouseCoord = {x: mCoord.x, y: mCoord.y - ( this.size.center - this.elements[0][0].size.center)}; mouseCoord = {x: mCoord.x, y: mCoord.y - ( this.size.center - this.elements[0][0].size.center)};
flag = true; inside_flag = -1;
} }
} }
else if(mCoord.x < (this.elements[0][0].size.width + this.dW ) ) else if(mCoord.x < (this.elements[0][0].size.width + this.dW ) )
{ {
posCurs = {x:0, y:1}; posCurs = {x:0, y:1};
mouseCoord = {x: 0, y: mCoord.y - this.constPos}; mouseCoord = {x: 0, y: mCoord.y - this.shiftDegree};
flag = false; inside_flag = 0;
} }
else else
{ {
posCurs = {x:0, y:1}; posCurs = {x:0, y:1};
mouseCoord = {x: mCoord.x - (this.elements[0][0].size.width + this.dW ), y: mCoord.y - this.constPos}; mouseCoord = {x: mCoord.x - (this.elements[0][0].size.width + this.dW ), y: mCoord.y - this.shiftDegree};
flag = true; inside_flag = -1;
}
return {pos: posCurs, mCoord: mouseCoord, inside_flag: inside_flag};
}
CDegreeOrdinary.prototype.findDisposition = function( mCoord )
{
var coordX, coordY;
var X, Y;
var inside_flag = -1;
if( mCoord.x < this.elements[0][0].size.width)
{
if( this.elements[0][0].IsJustDraw() )
{
X = 0; Y = 1; // встаем во второй элемент
coordX = 0;
coordY = mCoord.y - this.shiftDegree;
inside_flag = 0;
}
else
{
X = 0; Y = 0; // встаем в первый элемент
coordX = mCoord.x;
coordY = mCoord.y - ( this.size.center - this.elements[0][0].size.center);
} }
}
else if(mCoord.x < (this.elements[0][0].size.width + this.dW ))
{
X = 0; Y = 1; // встаем во второй элемент
coordX = 0;
coordY = mCoord.y - this.shiftDegree;
inside_flag = 0;
}
else if(mCoord.x > this.size.width)
{
X = 0; Y = 1; // встаем во второй элемент
coordX = this.size.width;
coordY = mCoord.y - this.shiftDegree;
inside_flag = 1;
}
else
{
X = 0; Y = 1; // встаем во второй элемент
coordX = mCoord.x - (this.elements[0][0].size.width + this.dW);
coordY = mCoord.y - this.shiftDegree;
}
if(coordY < 0)
{
coordY = 0;
inside_flag = 2;
}
else if(coordY > this.elements[X][Y].size.height)
{
coordY = this.elements[X][Y].size.height;
inside_flag = 2;
}
var mCoord = {x: coordX, y: coordY};
return {pos: posCurs, mCoord: mouseCoord, flag: flag}; return {pos: {x: X, y: Y}, mCoord: mCoord, inside_flag: inside_flag};
} }
function CDegreeSubSup(type) function CDegreeSubSup(type)
......
...@@ -48,12 +48,12 @@ CBaseDiacritic.prototype.findDisposition = function(mCoord) ...@@ -48,12 +48,12 @@ CBaseDiacritic.prototype.findDisposition = function(mCoord)
{ {
var X = null, var X = null,
Y = null, Y = null,
flag = true; // остаемя в пределах данного элемента( за границы элемента не вышли ) inside_flag = -1; // остаемя в пределах данного элемента( за границы элемента не вышли )
if(mCoord.y < this.accentSize.height) if(mCoord.y < this.accentSize.height)
{ {
Y = 0; Y = 0;
flag = false; inside_flag = 2;
} }
else else
Y = mCoord.y - this.accentSize.height; Y = mCoord.y - this.accentSize.height;
...@@ -62,7 +62,7 @@ CBaseDiacritic.prototype.findDisposition = function(mCoord) ...@@ -62,7 +62,7 @@ CBaseDiacritic.prototype.findDisposition = function(mCoord)
if(mCoord.x < this.shiftArg) if(mCoord.x < this.shiftArg)
{ {
X = 0; X = 0;
flag = false; inside_flag = 0;
} }
else else
X = mCoord.x - this.shiftArg; X = mCoord.x - this.shiftArg;
...@@ -70,7 +70,7 @@ CBaseDiacritic.prototype.findDisposition = function(mCoord) ...@@ -70,7 +70,7 @@ CBaseDiacritic.prototype.findDisposition = function(mCoord)
var coord = {x: X, y: Y}, var coord = {x: X, y: Y},
posCurs = {x: 0, y: 0}; posCurs = {x: 0, y: 0};
return {pos: posCurs, mCoord: coord, flag: flag}; return {pos: posCurs, mCoord: coord, inside_flag: inside_flag};
} }
CBaseDiacritic.prototype.IsIncline = function() CBaseDiacritic.prototype.IsIncline = function()
{ {
......
function CBarFraction() function CBarFraction()
{ {
CMathBase.call(this,2,1); CMathBase.call(this,2,1);
...@@ -187,9 +189,9 @@ CSkewedFraction.prototype.getCenter = function() ...@@ -187,9 +189,9 @@ CSkewedFraction.prototype.getCenter = function()
}; };
CSkewedFraction.prototype.findDisposition = function( mCoord ) CSkewedFraction.prototype.findDisposition = function( mCoord )
{ {
var flag = true;
var mouseCoord = {x: mCoord.x, y: mCoord.y}, var mouseCoord = {x: mCoord.x, y: mCoord.y},
posCurs = {x: null, y: null}; posCurs = {x: null, y: null},
inside_flag = -1;
posCurs.x = 0; posCurs.x = 0;
...@@ -199,11 +201,12 @@ CSkewedFraction.prototype.findDisposition = function( mCoord ) ...@@ -199,11 +201,12 @@ CSkewedFraction.prototype.findDisposition = function( mCoord )
if(sizeFirst.width < mCoord.x) if(sizeFirst.width < mCoord.x)
{ {
mouseCoord.x = sizeFirst.width; mouseCoord.x = sizeFirst.width;
flag = false; inside_flag = 1;
} }
if(sizeFirst.height < mCoord.y) if(sizeFirst.height < mCoord.y)
{ {
mouseCoord.y = sizeFirst.height; mouseCoord.y = sizeFirst.height;
inside_flag = 2;
} }
posCurs.y = 0; posCurs.y = 0;
...@@ -214,27 +217,33 @@ CSkewedFraction.prototype.findDisposition = function( mCoord ) ...@@ -214,27 +217,33 @@ CSkewedFraction.prototype.findDisposition = function( mCoord )
if(mCoord.x < this.size.width - sizeSec.width) if(mCoord.x < this.size.width - sizeSec.width)
{ {
mouseCoord.x = 0; mouseCoord.x = 0;
flag = false; inside_flag = 0;
} }
else if( mCoord.x > this.size.width) else if( mCoord.x > this.size.width)
{ {
mouseCoord.x = sizeSec.width; mouseCoord.x = sizeSec.width;
flag = false; inside_flag = 1;
} }
else else
mouseCoord.x = mCoord.x - this.elements[0][0].size.width - this.gapSlash; mouseCoord.x = mCoord.x - this.elements[0][0].size.width - this.gapSlash;
if( mCoord.y < this.size.height - this.elements[0][1].size.height) if( mCoord.y < this.size.height - this.elements[0][1].size.height)
{
mouseCoord.y = 0; mouseCoord.y = 0;
inside_flag = 2;
}
else if(mCoord.y > this.size.height) else if(mCoord.y > this.size.height)
{
mouseCoord.y = sizeSec.height; mouseCoord.y = sizeSec.height;
inside_flag = 2;
}
else else
mouseCoord.y = mCoord.y - this.elements[0][0].size.height; mouseCoord.y = mCoord.y - this.elements[0][0].size.height;
posCurs.y = 1; posCurs.y = 1;
} }
return {pos: posCurs, mCoord: mouseCoord, flag: flag}; return {pos: posCurs, mCoord: mouseCoord, inside_flag: inside_flag};
}; };
CSkewedFraction.prototype.draw = function() CSkewedFraction.prototype.draw = function()
......
...@@ -33,6 +33,54 @@ CLogarithm.prototype.setContent = function() ...@@ -33,6 +33,54 @@ CLogarithm.prototype.setContent = function()
CLogarithm.superclass.setContent.call(this, oFunc, oArg); CLogarithm.superclass.setContent.call(this, oFunc, oArg);
} }
function CMinimax(num)
{
CSubMathBase.call(this, 1, 2);
if(this.num !== this.num - 0 && this.num < 0 && this.num > 2)
this.num = 0;
else
this.num = num;
}
extend(CMinimax, CSubMathBase);
CMinimax.prototype.setContent = function()
{
var oBase = new CMathContent();
var GParams = Common_CopyObj(this.params);
GParams.bMText = false;
oBase.init(GParams);
oBase.relate(this);
oBase.addText(NameFunctions[this.num]);
var oIter = new CMathBase(1,1);
GParams = Common_CopyObj(this.params);
GParams.font = getTypeDegree(this.params.font);
oIter.init(GParams);
oIter.relate(this);
oIter.fillPlaceholders();
var oFunc = new CMathBase(2, 1);
oFunc.getCenter = function() { return this.elements[0][0].size.center; };
oFunc.init(this.params);
oFunc.relate(this);
oFunc.setContent(oBase, oIter);
var oArg = new CMathBase(1, 1);
oArg.init(this.params);
oArg.relate(this);
oArg.fillPlaceholders();
CMinimax.superclass.setContent.call(this, oFunc, oArg);
}
CMinimax.prototype.setDistance = function()
{
//todo
//переделать !
this.dW = slashWidth(this.params.font);
this.dH = 0;
}
function CMathFunc(num) function CMathFunc(num)
{ {
if(num > 19) if(num > 19)
......
...@@ -14,6 +14,9 @@ function mathElem(_val, _gps, _w ) ...@@ -14,6 +14,9 @@ function mathElem(_val, _gps, _w )
this.g_mContext = _gps; //mm this.g_mContext = _gps; //mm
} }
//TODO
//переделать/продумать DotIndef, т.к. при перетаскивании из одного места в другое флаг DotIndef может измениться для другого контента
//TODO //TODO
//сделать более понятным индефикатор bMText //сделать более понятным индефикатор bMText
...@@ -45,6 +48,19 @@ function mathElem(_val, _gps, _w ) ...@@ -45,6 +48,19 @@ function mathElem(_val, _gps, _w )
//TODO //TODO
//сделать у радикала степень //сделать у радикала степень
// TODO Refactoring
// 1. (!!) повтор IsIncline, IsHighElement
// 2. (!!) переделать add / add_mathComponent / addText / addLetter
// 3. home/end if( IsTarget() )
// 4. relate => сделать 2 функции : одну установить базовый контент корнем(Root) и функцию установить родительский класс (setParent)
// 5. update_widthContent добавить в recalculateSize (убрать recalculate в CMathContent)
// 6. (скорее всего) убрать coordWOGaps
// 7. убрать getMetricsLetter
// 8. setFont и updateTextPrp переделать (сделать, чтобы font менялся для заселекченной части контента)
function CMathContent() function CMathContent()
{ {
this.content = new Array(); // array of mathElem this.content = new Array(); // array of mathElem
...@@ -474,7 +490,7 @@ CMathContent.prototype = ...@@ -474,7 +490,7 @@ CMathContent.prototype =
return { state: state, SelectContent: SelectContent, CurrContent: CurrContent }; return { state: state, SelectContent: SelectContent, CurrContent: CurrContent };
}, },
// не вызываем из mouseDown эту ф-ию, тк иначе не установим селект для внутреннего объекта (setStart_Selection) // не вызываем из mouseDown эту ф-ию, тк иначе не установим селект для внутреннего объекта (setStart_Selection)
afterDisplacement: function(coord) afterDisplacement: function(coord) //аналог mouseDown для goToUpperLevel и goToLowerLever
{ {
var content = null; var content = null;
var msCoord = this.coordWOGaps(coord); var msCoord = this.coordWOGaps(coord);
...@@ -677,12 +693,10 @@ CMathContent.prototype = ...@@ -677,12 +693,10 @@ CMathContent.prototype =
var _center = 0 ; var _center = 0 ;
var _height = 0 ; var _height = 0 ;
var Size;
for(var i=0; i< this.content.length; i++) for(var i=0; i< this.content.length; i++)
{ {
Size = this.content[i].value.size; var Size = this.content[i].value.size;
gps = this.content[i].g_mContext; var gps = this.content[i].g_mContext;
_width += Size.width + gps.left + gps.right; _width += Size.width + gps.left + gps.right;
_descent = ( _descent < ( Size.height - Size.center + gps.low) ) ? ( Size.height - Size.center + gps.low): _descent; _descent = ( _descent < ( Size.height - Size.center + gps.low) ) ? ( Size.height - Size.center + gps.low): _descent;
_center = ( _center < (Size.center + gps.top) ) ? ( Size.center + gps.top) : _center; _center = ( _center < (Size.center + gps.top) ) ? ( Size.center + gps.top) : _center;
...@@ -713,7 +727,6 @@ CMathContent.prototype = ...@@ -713,7 +727,6 @@ CMathContent.prototype =
{ {
for(var j = 1; j <this.content.length; j++) for(var j = 1; j <this.content.length; j++)
{ {
this.content[j].widthToEl = this.content[j-1].widthToEl + this.content[j].value.size.width + this.content[j].g_mContext.left + this.content[j].g_mContext.right; this.content[j].widthToEl = this.content[j-1].widthToEl + this.content[j].value.size.width + this.content[j].g_mContext.left + this.content[j].g_mContext.right;
} }
}, },
...@@ -727,10 +740,13 @@ CMathContent.prototype = ...@@ -727,10 +740,13 @@ CMathContent.prototype =
editor.WordControl.m_oDrawingDocument.UpdateTargetFromPaint = false; editor.WordControl.m_oDrawingDocument.UpdateTargetFromPaint = false;
}, },
mouseDown: function( mouseCoord ) mouseDown: function( mouseCoord, inside_flag )
{ {
var result = null; var result = null;
if(typeof(inside_flag) === "undefined")
inside_flag = -1;
if(this.IsTarget()) if(this.IsTarget())
{ {
result = this; result = this;
...@@ -738,8 +754,15 @@ CMathContent.prototype = ...@@ -738,8 +754,15 @@ CMathContent.prototype =
else else
{ {
var msCoord = this.coordWOGaps(mouseCoord); var msCoord = this.coordWOGaps(mouseCoord);
if(inside_flag == 0)
this.CurPos = 0;
else if(inside_flag == 1)
this.CurPos = this.content.length - 1;
else
this.CurPos = this.findPosition( msCoord ); this.CurPos = this.findPosition( msCoord );
if( this.content[this.CurPos].value.SUBCONTENT ) if( this.content[this.CurPos].value.SUBCONTENT )
{ {
var coord = this.getCoordElem(this.CurPos, msCoord); var coord = this.getCoordElem(this.CurPos, msCoord);
...@@ -845,7 +868,7 @@ CMathContent.prototype = ...@@ -845,7 +868,7 @@ CMathContent.prototype =
findPosition: function(mCoord) findPosition: function(mCoord)
{ {
var mouseX = mCoord.x; var mouseX = mCoord.x;
var mouseY = mCoord.y; //var mouseY = mCoord.y;
var pos = 0; var pos = 0;
while( pos < (this.content.length - 1) && this.content[pos].widthToEl < mouseX ) while( pos < (this.content.length - 1) && this.content[pos].widthToEl < mouseX )
pos++; pos++;
...@@ -872,12 +895,13 @@ CMathContent.prototype = ...@@ -872,12 +895,13 @@ CMathContent.prototype =
return pos; return pos;
}, },
getCoordElem: function(index, mCoord ) getCoordElem: function(index, mCoord) // without gaps of Math Component ( напримет, если справа/слева есть относительно мат элемента компонент, то добавляем gaps справа/слева для этого мат элемента )
{ {
var X;
var Y;
var widthToPrev = this.content[index-1].widthToEl; var widthToPrev = this.content[index-1].widthToEl;
var widthToCur = this.content[index].widthToEl; var widthToCur = this.content[index].widthToEl;
var X;
var Y;
var gps = this.content[index].g_mContext; var gps = this.content[index].g_mContext;
if( widthToPrev <= mCoord.x && mCoord.x <= (widthToPrev + gps.left) ) if( widthToPrev <= mCoord.x && mCoord.x <= (widthToPrev + gps.left) )
X = 0; X = 0;
...@@ -1012,14 +1036,14 @@ CMathContent.prototype = ...@@ -1012,14 +1036,14 @@ CMathContent.prototype =
return {CurrContent : CurrContent, SelectContent: SelectContent, state: state }; return {CurrContent : CurrContent, SelectContent: SelectContent, state: state };
}, },
setPlaceholderAfterRemove: function() setPlaceholderAfterRemove: function() // чтобы не выставлялся тагет при вставке, когда заселекчен весь контент и мы добавляем, например, другой мат элемент
{ {
if(this.content.length == 1 && ! this.bRoot )//только CEmpty if(this.content.length == 1 && ! this.bRoot )//только CEmpty
{ {
this.add(StartTextElement); this.add(StartTextElement);
} }
}, },
ResizeReverse: function() ResizeReverse: function() // пересчитываем начиная с текущего контента (и уровни, к-ые находятся выше)
{ {
this.recalculate(); this.recalculate();
if(! this.bRoot ) if(! this.bRoot )
...@@ -1038,14 +1062,13 @@ CMathContent.prototype = ...@@ -1038,14 +1062,13 @@ CMathContent.prototype =
this.selection.startPos = StartIndSelect; this.selection.startPos = StartIndSelect;
this.selection.endPos = StartIndSelect; this.selection.endPos = StartIndSelect;
} }
else else // один CEmpty
{ {
this.selection.startPos = 0; this.selection.startPos = 0;
this.selection.endPos = 0; this.selection.endPos = 0;
this.selection.active = false; this.selection.active = false;
} }
//this.selection.use = false;
}, },
setEnd_Selection: function( EndIndSelect ) setEnd_Selection: function( EndIndSelect )
{ {
...@@ -1053,8 +1076,6 @@ CMathContent.prototype = ...@@ -1053,8 +1076,6 @@ CMathContent.prototype =
{ {
this.selection.endPos = EndIndSelect + 1; this.selection.endPos = EndIndSelect + 1;
this.drawSelect(); this.drawSelect();
//this.selection.use = (this.selection.startPos !== this.selection.endPos);
} }
}, },
//TODO //TODO
...@@ -1159,6 +1180,8 @@ CMathContent.prototype = ...@@ -1159,6 +1180,8 @@ CMathContent.prototype =
{ {
return metrics = this.content[pos+1].value.getMetrics(); return metrics = this.content[pos+1].value.getMetrics();
}, },
// для диакритических элементов, если в контенте есть заглавные буквы, и для букв ascent > ascent "o"
// (!) повторяется функция (IsIncline)
IsHighElement: function() IsHighElement: function()
{ {
var res = false; var res = false;
...@@ -1206,10 +1229,11 @@ CMathContent.prototype = ...@@ -1206,10 +1229,11 @@ CMathContent.prototype =
{ {
this.bDot = flag; this.bDot = flag;
}, },
TestFont: function(font) /*TestFont: function(font)
{ {
this.font = GetMathFont(font); this.font = GetMathFont(font);
}, },*/
// (!) повторяется функция (IsHighElement)
IsIncline: function() IsIncline: function()
{ {
var bIncline = false; var bIncline = false;
...@@ -1223,14 +1247,14 @@ CMathContent.prototype = ...@@ -1223,14 +1247,14 @@ CMathContent.prototype =
{ {
for(var i = 0; i < txt.length; i++) for(var i = 0; i < txt.length; i++)
{ {
this.addCode( txt.charCodeAt(i) ); this.addLetter( txt.charCodeAt(i) );
} }
this.recalculate(); this.recalculate();
this.setStart_Selection(this.CurPos); this.setStart_Selection(this.CurPos);
this.selection.active = false; this.selection.active = false;
}, },
addCode: function(code) addLetter: function(code)
{ {
if( this.IsTarget() ) //удаляем тагет if( this.IsTarget() ) //удаляем тагет
{ {
...@@ -1291,7 +1315,7 @@ CMathContent.prototype = ...@@ -1291,7 +1315,7 @@ CMathContent.prototype =
}, },
add: function(code) add: function(code)
{ {
this.addCode(code); this.addLetter(code);
this.recalculate(); this.recalculate();
}, },
addElementToContent: function(element, gaps) addElementToContent: function(element, gaps)
...@@ -1307,6 +1331,131 @@ CMathContent.prototype = ...@@ -1307,6 +1331,131 @@ CMathContent.prototype =
this.CurPos++; this.CurPos++;
this.setStart_Selection(this.CurPos); this.setStart_Selection(this.CurPos);
this.selection.active = false; this.selection.active = false;
},
fillContent: function(type)
{
var component,
result;
if(type == 0)
{
component = new CMathText();
component.init(this.params);
component.addCode(StartTextElement);
result = this;
}
else if(type == 1)
{
component = new CMathText();
component.init(this.params);
result = this;
}
else
{
component = this.getMathComponent(type);
component.init(this.params);
result = component;
}
return result;
/*var component;
switch(type)
{
case 0:
component = new CMathText();
component.addCode(StartTextElement);
break;
case 1:
component = new CMathText();
break;
case 2:
component = new CBarFraction();
break;
case 3:
component = new CSkewedFraction();
break;
case 4:
component = new CLinearFraction();
break;
case 5:
component = new CSimpleFraction();
break;
case 6:
component = new CDegree(0);
break;
case 7:
component = new CDegree(1);
break;
case 8:
component = new CDegree(2);
break;
case 9:
component = new CDegree(3);
}
component.setParams(this.params);*/
},
getMathComponent: function(id)
{
// 0 - placeholder
// 1 - math text
var component;
switch(id)
{
case 2:
component = new CBarFraction();
break;
case 3:
component = new CSkewedFraction();
break;
case 4:
component = new CLinearFraction();
break;
case 5:
component = new CSimpleFraction();
break;
case 6:
component = new CDegree(0);
break;
case 7:
component = new CDegree(1);
break;
case 8:
component = new CDegree(2);
break;
case 9:
component = new CDegree(3);
break;
case 10:
component = new CRadical();
break;
case 11:
component = new CNary();
break;
case 12:
component = new CDelimiter();
break;
case 13:
component = new CMathFunc(); // CMathMatrix(1, 2)
break;
}
return component;
},
gToUp: function()
{
this.recalculateSize();
this.update_widthContent();
var upLevel;
if( ! this.bRoot )
upLevel = this.Parent;
else
upLevel = this.Root;
return upLevel;
} }
} }
//todo //todo
...@@ -1458,7 +1607,12 @@ CMathComposition.prototype = ...@@ -1458,7 +1607,12 @@ CMathComposition.prototype =
MouseDown: function(mouseX, mouseY) MouseDown: function(mouseX, mouseY)
{ {
this.ClearSelect(); this.ClearSelect();
this.CurrentContent = this.SelectContent = this.Root.mouseDown({x: mouseX, y: mouseY}); this.CurrentContent = this.SelectContent = this.Root.mouseDown({x: mouseX, y: mouseY}, -1);
if(typeof(this.CurrentContent) == "undefined")
{
var stop = true;
}
this.СheckTarget(); this.СheckTarget();
}, },
...@@ -1472,6 +1626,7 @@ CMathComposition.prototype = ...@@ -1472,6 +1626,7 @@ CMathComposition.prototype =
this.SelectContent = movement.SelectContent; this.SelectContent = movement.SelectContent;
this.СheckTarget(); this.СheckTarget();
} }
}, },
MouseUp: function() MouseUp: function()
{ {
...@@ -1491,7 +1646,7 @@ CMathComposition.prototype = ...@@ -1491,7 +1646,7 @@ CMathComposition.prototype =
this.CurrentContent = removal.CurrContent; this.CurrentContent = removal.CurrContent;
this.SelectContent = removal.SelectContent; this.SelectContent = removal.SelectContent;
this.CurrentContent.setPlaceholderAfterRemove(); // чтобы не выставлялся тагет при вставке, когда заселекчен весь контент this.CurrentContent.setPlaceholderAfterRemove(); // чтобы не выставлялся тагет при вставке, когда заселекчен весь контент и мы добавляем, например, другой мат элемент
if( removal.state.bRecPosition ) if( removal.state.bRecPosition )
{ {
...@@ -1583,10 +1738,10 @@ CMathComposition.prototype = ...@@ -1583,10 +1738,10 @@ CMathComposition.prototype =
editor.WordControl.m_oLogicDocument.DrawingDocument.SelectEnabled(false); editor.WordControl.m_oLogicDocument.DrawingDocument.SelectEnabled(false);
} }
}, },
TestFont: function(font) /*TestFont: function(font)
{ {
this.CurrentContent.TestFont(font); this.CurrentContent.TestFont(font);
}, },*/
TestSetPostion: function() TestSetPostion: function()
{ {
this.Root.setPosition(this.posCompos); this.Root.setPosition(this.posCompos);
...@@ -1594,6 +1749,16 @@ CMathComposition.prototype = ...@@ -1594,6 +1749,16 @@ CMathComposition.prototype =
TestSetFontAllSymbols: function(font) TestSetFontAllSymbols: function(font)
{ {
this.Root.setFont(font); this.Root.setFont(font);
},
FillContent: function(type)
{
this.CurrentContent = this.CurrentContent.fillContent(type);
this.SelectContent = this.CurrentContent;
},
GToUp: function()
{
this.CurrentContent = this.CurrentContent.gToUp();
this.SelectContent = this.CurrentContent;
} }
} }
...@@ -2144,6 +2309,7 @@ function AddEquation(ind) ...@@ -2144,6 +2309,7 @@ function AddEquation(ind)
case 169: case 169:
break; break;
case 170: case 170:
mathElem = new CBorderBox();
break; break;
case 171: case 171:
break; break;
...@@ -2301,3 +2467,13 @@ function AddEquation(ind) ...@@ -2301,3 +2467,13 @@ function AddEquation(ind)
return mathElem; return mathElem;
} }
function AddMEtoContent(type)
{
}
function AddtoParentContent(type)
{
}
...@@ -92,7 +92,7 @@ CMathMatrix.prototype.setPosition = function(pos) ...@@ -92,7 +92,7 @@ CMathMatrix.prototype.setPosition = function(pos)
} }
} }
CMathMatrix.prototype.old_findDisposition = function( coord ) CMathMatrix.prototype.old_old_findDisposition = function( coord )
{ {
var pos_x = this.nRow - 1, pos_y = this.nCol - 1, var pos_x = this.nRow - 1, pos_y = this.nCol - 1,
w = 0, h = 0; w = 0, h = 0;
...@@ -207,7 +207,7 @@ CMathMatrix.prototype.findDisposition = function( coord ) ...@@ -207,7 +207,7 @@ CMathMatrix.prototype.findDisposition = function( coord )
sumHeight += Heights[t] + this.gaps.row[t + 1]; sumHeight += Heights[t] + this.gaps.row[t + 1];
// флаг для случая, когда выходим за границы элемента и есть выравнивание относительно других элементов // флаг для случая, когда выходим за границы элемента и есть выравнивание относительно других элементов
var flag = true; var inside_flag = -1;
if( posCurs.x != null && posCurs.y != null) if( posCurs.x != null && posCurs.y != null)
{ {
...@@ -216,25 +216,31 @@ CMathMatrix.prototype.findDisposition = function( coord ) ...@@ -216,25 +216,31 @@ CMathMatrix.prototype.findDisposition = function( coord )
if(coord.x < ( sumWidth + align.x )) if(coord.x < ( sumWidth + align.x ))
{ {
mouseCoord.x = 0; mouseCoord.x = 0;
flag = false; inside_flag = 0;
} }
else if( coord.x > (sumWidth + align.x + size.width )) else if( coord.x > (sumWidth + align.x + size.width ))
{ {
mouseCoord.x = size.width; mouseCoord.x = size.width;
flag = false; inside_flag = 1;
} }
else else
mouseCoord.x = coord.x - ( sumWidth + align.x ); mouseCoord.x = coord.x - ( sumWidth + align.x );
if(coord.y < (sumHeight + align.y)) if(coord.y < (sumHeight + align.y))
{
mouseCoord.y = 0; mouseCoord.y = 0;
inside_flag = 2;
}
else if( coord.y > ( sumHeight + align.y + size.height ) ) else if( coord.y > ( sumHeight + align.y + size.height ) )
{
mouseCoord.y = size.height; mouseCoord.y = size.height;
inside_flag = 2;
}
else else
mouseCoord.y = coord.y - ( sumHeight + align.y ); mouseCoord.y = coord.y - ( sumHeight + align.y );
} }
return {pos: posCurs, mCoord: mouseCoord, flag: flag}; return {pos: posCurs, mCoord: mouseCoord, inside_flag: inside_flag};
} }
CMathMatrix.prototype.getMetrics = function() CMathMatrix.prototype.getMetrics = function()
{ {
......
...@@ -30,9 +30,6 @@ CNary.prototype.setContent = function() ...@@ -30,9 +30,6 @@ CNary.prototype.setContent = function()
else else
oBase = new CDegree(this.IterType - 1); // вычитаем 1 т.к. параметры инициализации от 0 до 2 oBase = new CDegree(this.IterType - 1); // вычитаем 1 т.к. параметры инициализации от 0 до 2
// выставляем здесь символ, т.к. не прокатит протащить другой размер шрифта для основания в CDegree
// SetContent унифицирован !
var sign = null; var sign = null;
if(this.id == 0) if(this.id == 0)
......
...@@ -15,18 +15,18 @@ CBaseBracket.prototype.findDisposition = function(mCoord) ...@@ -15,18 +15,18 @@ CBaseBracket.prototype.findDisposition = function(mCoord)
{ {
var X = null, var X = null,
Y = null, Y = null,
flag = true; // остаемя в пределах данного элемента( за границы элемента не вышли ) inside_flag = true; // остаемя в пределах данного элемента( за границы элемента не вышли )
if(mCoord.x < this.gapBrack) if(mCoord.x < this.gapBrack)
{ {
X = 0; X = 0;
flag = false; inside_flag = 0;
} }
else if(mCoord.x > this.size.width - this.gapBrack) else if(mCoord.x > this.size.width - this.gapBrack)
{ {
//X = this.size.width - 2*this.gapBrack; //X = this.size.width - 2*this.gapBrack;
X = this.elements[0][0].size.width; // разницы никакой X = this.elements[0][0].size.width; // разницы никакой
flag = false; inside_flag = 1;
} }
else else
{ {
...@@ -36,12 +36,12 @@ CBaseBracket.prototype.findDisposition = function(mCoord) ...@@ -36,12 +36,12 @@ CBaseBracket.prototype.findDisposition = function(mCoord)
if(Y < this.gapTop) if(Y < this.gapTop)
{ {
Y = 0; Y = 0;
flag = false; inside_flag = 2;
} }
else if(Y > this.size.height - this.gapTop) else if(Y > this.size.height - this.gapTop)
{ {
Y = this.size.height - 2*this.gapTop; Y = this.size.height - 2*this.gapTop;
flag = false; inside_flag = 2;
} }
else else
{ {
...@@ -51,7 +51,7 @@ CBaseBracket.prototype.findDisposition = function(mCoord) ...@@ -51,7 +51,7 @@ CBaseBracket.prototype.findDisposition = function(mCoord)
var coord = {x: X, y: Y}, var coord = {x: X, y: Y},
posCurs = {x: 0, y: 0}; posCurs = {x: 0, y: 0};
return {pos: posCurs, mCoord: coord, flag: flag}; return {pos: posCurs, mCoord: coord, inside_flag: inside_flag};
} }
CBaseBracket.prototype.setPosition = function(pos) CBaseBracket.prototype.setPosition = function(pos)
{ {
......
...@@ -35,7 +35,7 @@ CSubMathBase.prototype.mouseMove = function( mCoord ) ...@@ -35,7 +35,7 @@ CSubMathBase.prototype.mouseMove = function( mCoord )
var res = true; var res = true;
var elem = this.findDisposition( mCoord); var elem = this.findDisposition( mCoord);
if(elem.pos.x == this.CurPos_X && elem.pos.y == this.CurPos_Y && elem.flag === true ) if(elem.pos.x == this.CurPos_X && elem.pos.y == this.CurPos_Y && elem.inside_flag === -1 )
res = this.elements[this.CurPos_X][this.CurPos_Y].mouseMove(elem.mCoord); res = this.elements[this.CurPos_X][this.CurPos_Y].mouseMove(elem.mCoord);
else else
res = false; res = false;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment