DrawingContext::DrawingContext()
{
transform.draw_effect = NONE_EFFECT;
+transform.zoom = 1;
}
DrawingContext::~DrawingContext()
request.pos = transform.apply(position);
request.drawing_effect = drawing_effect;
request.drawing_effect = transform.draw_effect | drawing_effect;
+ request.zoom = transform.zoom;
drawingrequests.push_back(request);
}
case SURFACE:
{
const Surface* surface = (const Surface*) i->request_data;
- surface->impl->draw(i->pos.x, i->pos.y, 255, i->drawing_effect);
+
+ if(i->zoom != 1.0)
+ surface->impl->draw_stretched(i->pos.x * i->zoom, i->pos.y * i->zoom,
+ (int)(surface->w * i->zoom), (int)(surface->h * i->zoom),
+ 255, i->drawing_effect);
+ else
+ surface->impl->draw(i->pos.x, i->pos.y, 255, i->drawing_effect);
break;
}
case SURFACE_PART:
{
transform.draw_effect = effect;
}
+
+void
+DrawingContext::set_zooming(float zoom)
+{
+ transform.zoom = zoom;
+}
void do_drawing();
const Vector& get_translation() const
- {
- return transform.translation;
- }
+ { return transform.translation; }
+ Uint32 get_drawing_effect() const
+ { return transform.draw_effect; }
+
void set_translation(const Vector& newtranslation)
- {
- transform.translation = newtranslation;
- }
+ { transform.translation = newtranslation; }
void push_transform();
void pop_transform();
/// Apply that effect in the next draws (effects are listed on surface.h).
void set_drawing_effect(int effect);
+ /// apply that zoom in the next draws */
+ void set_zooming(float zoom);
private:
class Transform
return v - translation;
}
- int draw_effect;
+ Uint32 draw_effect;
+ float zoom;
};
/// the transform stack
{
int layer;
Uint32 drawing_effect;
+ float zoom;
RequestType type;
Vector pos;