You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

187 lines
2.9 KiB

#include "Text.h"
#include "view/TextView.h" // Hack: Needed to calculate the view size
#include <serializing/ObjectInputStream.h>
#include <serializing/ObjectOutputStream.h>
#include <Stacktrace.h>
Text::Text()
: AudioElement(ELEMENT_TEXT)
{
XOJ_INIT_TYPE(Text);
this->font.setName("Sans");
this->font.setSize(12);
this->inEditing = false;
}
Text::~Text()
{
XOJ_RELEASE_TYPE(Text);
}
Element* Text::clone()
{
XOJ_CHECK_TYPE(Text);
Text* text = new Text();
text->font = this->font;
text->text = this->text;
text->setColor(this->getColor());
text->x = this->x;
text->y = this->y;
text->cloneAudioData(this);
return text;
}
XojFont& Text::getFont()
{
XOJ_CHECK_TYPE(Text);
return font;
}
void Text::setFont(XojFont& font)
{
XOJ_CHECK_TYPE(Text);
this->font = font;
}
string Text::getText()
{
XOJ_CHECK_TYPE(Text);
return this->text;
}
void Text::setText(string text)
{
XOJ_CHECK_TYPE(Text);
this->text = text;
calcSize();
}
void Text::calcSize()
{
XOJ_CHECK_TYPE(Text);
TextView::calcSize(this, this->width, this->height);
}
void Text::setWidth(double width)
{
XOJ_CHECK_TYPE(Text);
this->width = width;
}
void Text::setHeight(double height)
{
XOJ_CHECK_TYPE(Text);
this->height = height;
}
void Text::setInEditing(bool inEditing)
{
XOJ_CHECK_TYPE(Text);
this->inEditing = inEditing;
}
void Text::scale(double x0, double y0, double fx, double fy)
{
XOJ_CHECK_TYPE(Text);
// only proportional scale allowed...
if (fx != fy)
{
g_warning("rescale font with fx != fy not supported: %lf / %lf", fx, fy);
Stacktrace::printStracktrace();
}
this->x -= x0;
this->x *= fx;
this->x += x0;
this->y -= y0;
this->y *= fy;
this->y += y0;
double size = this->font.getSize() * fx;
this->font.setSize(size);
this->sizeCalculated = false;
}
void Text::rotate(double x0, double y0, double xo, double yo, double th)
{
XOJ_CHECK_TYPE(Text);
}
bool Text::isInEditing()
{
XOJ_CHECK_TYPE(Text);
return this->inEditing;
}
bool Text::rescaleOnlyAspectRatio()
{
XOJ_CHECK_TYPE(Text);
return true;
}
bool Text::intersects(double x, double y, double halfEraserSize)
{
XOJ_CHECK_TYPE(Text);
return intersects(x, y, halfEraserSize, nullptr);
}
bool Text::intersects(double x, double y, double halfEraserSize, double* gap)
{
XOJ_CHECK_TYPE(Text);
double x1 = this->x - halfEraserSize;
double x2 = this->x + this->getElementWidth() + halfEraserSize;
double y1 = this->y - halfEraserSize;
double y2 = this->y + this->getElementHeight() + halfEraserSize;
return x >= x1 && x <= x2 && y >= y1 && y <= y2;
}
void Text::serialize(ObjectOutputStream& out)
{
XOJ_CHECK_TYPE(Text);
out.writeObject("Text");
serializeAudioElement(out);
out.writeString(this->text);
font.serialize(out);
out.endObject();
}
void Text::readSerialized(ObjectInputStream& in)
{
XOJ_CHECK_TYPE(Text);
in.readObject("Text");
readSerializedAudioElement(in);
this->text = in.readString();
font.readSerialized(in);
in.endObject();
}