Widgets can now rotate :O

master
Eduardo Bart 11 years ago
parent 2fcaf2cc40
commit f389c3b3fe

@ -61,13 +61,14 @@ void LocalPlayer::draw(const Point& dest, float scaleFactor, bool animate, Light
{
Creature::draw(dest, scaleFactor, animate, lightView);
// This is a test to rotation, translate and scale transformations.
/*
// This is a test to rotation, translate and scale transformations.
Point rotateOffset = dest;
rotateOffset += ((animate ? m_walkOffset : Point(0,0)) + Point(16,16)) * scaleFactor;
g_painter->pushTransformMatrix();
g_painter->rotate(rotateOffset, Fw::pi * std::sin(g_clock.millis()/1000.0f));
Creature::draw(dest, scaleFactor, animate, lightView);
g_painter->resetTransformMatrix();
g_painter->popTransformMatrix();
*/
}

@ -226,6 +226,19 @@ void Painter::rotate(float x, float y, float angle)
translate(x, y);
}
void Painter::pushTransformMatrix()
{
m_transformMatrixStack.push_back(m_transformMatrix);
assert(m_transformMatrixStack.size() < 100);
}
void Painter::popTransformMatrix()
{
assert(m_transformMatrixStack.size() > 0);
setTransformMatrix(m_transformMatrixStack.back());
m_transformMatrixStack.pop_back();
}
void Painter::updateGlTexture()
{
if(m_glTextureId != 0)

@ -106,6 +106,9 @@ public:
void rotate(float x, float y, float angle);
void rotate(const Point& p, float angle) { rotate(p.x, p.y, angle); }
void pushTransformMatrix();
void popTransformMatrix();
Matrix3 getTransformMatrix() { return m_transformMatrix; }
Matrix3 getProjectionMatrix() { return m_projectionMatrix; }
Matrix3 getTextureMatrix() { return m_textureMatrix; }
@ -137,6 +140,7 @@ protected:
CoordsBuffer m_coordsBuffer;
std::vector<Matrix3> m_transformMatrixStack;
Matrix3 m_transformMatrix;
Matrix3 m_projectionMatrix;
Matrix3 m_textureMatrix;

@ -89,8 +89,10 @@ TexturePtr TextureManager::getTexture(const std::string& fileName)
texture = g_textures.getEmptyTexture();
}
if(texture)
if(texture) {
texture->setSmooth(true);
m_textures[filePath] = texture;
}
}
return texture;

@ -399,6 +399,7 @@ void Application::registerLuaFunctions()
g_lua.bindClassMemberFunction<UIWidget>("backwardsGetWidgetById", &UIWidget::backwardsGetWidgetById);
g_lua.bindClassMemberFunction<UIWidget>("resize", &UIWidget::resize);
g_lua.bindClassMemberFunction<UIWidget>("move", &UIWidget::move);
g_lua.bindClassMemberFunction<UIWidget>("rotate", &UIWidget::rotate);
g_lua.bindClassMemberFunction<UIWidget>("hide", &UIWidget::hide);
g_lua.bindClassMemberFunction<UIWidget>("show", &UIWidget::show);
g_lua.bindClassMemberFunction<UIWidget>("disable", &UIWidget::disable);
@ -493,6 +494,7 @@ void Application::registerLuaFunctions()
g_lua.bindClassMemberFunction<UIWidget>("setPaddingBottom", &UIWidget::setPaddingBottom);
g_lua.bindClassMemberFunction<UIWidget>("setPaddingLeft", &UIWidget::setPaddingLeft);
g_lua.bindClassMemberFunction<UIWidget>("setOpacity", &UIWidget::setOpacity);
g_lua.bindClassMemberFunction<UIWidget>("setRotation", &UIWidget::setRotation);
g_lua.bindClassMemberFunction<UIWidget>("getX", &UIWidget::getX);
g_lua.bindClassMemberFunction<UIWidget>("getY", &UIWidget::getY);
g_lua.bindClassMemberFunction<UIWidget>("getPosition", &UIWidget::getPosition);
@ -535,6 +537,7 @@ void Application::registerLuaFunctions()
g_lua.bindClassMemberFunction<UIWidget>("getPaddingBottom", &UIWidget::getPaddingBottom);
g_lua.bindClassMemberFunction<UIWidget>("getPaddingLeft", &UIWidget::getPaddingLeft);
g_lua.bindClassMemberFunction<UIWidget>("getOpacity", &UIWidget::getOpacity);
g_lua.bindClassMemberFunction<UIWidget>("getRotation", &UIWidget::getRotation);
g_lua.bindClassMemberFunction<UIWidget>("setImageSource", &UIWidget::setImageSource);
g_lua.bindClassMemberFunction<UIWidget>("setImageClip", &UIWidget::setImageClip);
g_lua.bindClassMemberFunction<UIWidget>("setImageOffsetX", &UIWidget::setImageOffsetX);

@ -58,6 +58,11 @@ void UIWidget::draw(const Rect& visibleRect, Fw::DrawPane drawPane)
if(m_clipping)
g_painter->setClipRect(visibleRect);
if(m_rotation != 0.0f) {
g_painter->pushTransformMatrix();
g_painter->rotate(m_rect.center(), m_rotation * (Fw::pi / 180.0));
}
drawSelf(drawPane);
if(m_children.size() > 0) {
@ -67,6 +72,9 @@ void UIWidget::draw(const Rect& visibleRect, Fw::DrawPane drawPane)
drawChildren(visibleRect, drawPane);
}
if(m_rotation != 0.0f)
g_painter->popTransformMatrix();
if(m_clipping)
g_painter->resetClipRect();
}

@ -214,6 +214,7 @@ protected:
public:
void resize(int width, int height) { setRect(Rect(getPosition(), Size(width, height))); }
void move(int x, int y) { setRect(Rect(x, y, getSize())); }
void rotate(float degrees) { setRotation(degrees); }
void hide() { setVisible(false); }
void show() { setVisible(true); }
void disable() { setEnabled(false); }
@ -287,6 +288,7 @@ protected:
EdgeGroup<int> m_margin;
EdgeGroup<int> m_padding;
float m_opacity;
float m_rotation;
int m_autoRepeatDelay;
Point m_lastClickPosition;
@ -342,6 +344,7 @@ public:
void setPaddingBottom(int padding) { m_padding.bottom = padding; updateLayout(); }
void setPaddingLeft(int padding) { m_padding.left = padding; updateLayout(); }
void setOpacity(float opacity) { m_opacity = std::min(std::max(opacity, 0.0f), 1.0f); }
void setRotation(float degrees) { m_rotation = degrees; }
int getX() { return m_rect.x(); }
int getY() { return m_rect.y(); }
@ -385,6 +388,7 @@ public:
int getPaddingBottom() { return m_padding.bottom; }
int getPaddingLeft() { return m_padding.left; }
float getOpacity() { return m_opacity; }
float getRotation() { return m_rotation; }
// image

@ -38,6 +38,7 @@ void UIWidget::initBaseStyle()
m_iconColor = Color::white;
m_color = Color::white;
m_opacity = 1.0f;
m_rotation = 0.0f;
m_iconAlign = Fw::AlignNone;
// generate an unique id, this is need because anchored layouts find widgets by id
@ -107,6 +108,8 @@ void UIWidget::parseBaseStyle(const OTMLNodePtr& styleNode)
setIconAlign(Fw::translateAlignment(node->value()));
else if(node->tag() == "opacity")
setOpacity(node->value<float>());
else if(node->tag() == "rotation")
setRotation(node->value<float>());
else if(node->tag() == "enabled")
setEnabled(node->value<bool>());
else if(node->tag() == "visible")

Loading…
Cancel
Save