Sign in to follow this  
Elidor

SDL Surface Aligning

Recommended Posts

Elidor    101
Hello GameDev, I have question for you all. Is there any way to perfectly aligning surfaces aside from estimation. For example I know how to center, right, left align surfaces but how can I know where exactly 60 pixels is before I compile and check. I was thinking of making a program to test a surface images in a sandbox to attain pixels but if there is another way of attaining offsets this would save me quite a bit of trouble.

Another thing while I'm at it. Is there a way to get the offsets of a blitted image in SDL. For example if I blit y onto buffer x is there a way I can get y's offsets from the SDL_Surface structure?

The reason I ask this is because I'm attempting to make a more flexible Surface class for my TestEngine than the one on sdltutorials.com.
Here's the header to illustrate my idea:

#ifndef _SURFACE_H_
#define _SURFACE_H_

#include <SDL/SDL.h>
#include <SDL/SDL_image.h>
#include <stdexcept>

enum { LEFT_ALIGN, CENTER_ALIGN, RIGHT_ALIGN };
enum { TOP_ALIGN, MIDDLE_ALIGN, BOTTOM_ALIGN };

class Surface
{
public:
Surface();

public:
static SDL_Surface * onLoad(char * file, bool alpha);

static void onDraw(SDL_Surface * dest, SDL_Surface * src, int x, int y);

static void onDraw(SDL_Surface * dest, SDL_Surface * src, int x, int y, int x2, int y2, int w, int h);

static void drawAligned(SDL_Surface * dest, SDL_Surface * src, int xAlignment = CENTER_ALIGN, int yAlignment = MIDDLE_ALIGN);

static void drawAligned(SDL_Surface * dest, SDL_Surface * src, int x, int y, int w, int h, int xAlignment = CENTER_ALIGN, int yAlignment = MIDDLE_ALIGN);

private:
static SDL_Rect align(SDL_Surface * src, SDL_Surface * dest, const int & xAlignment, const int & yAlignment);

public:
static void transparent(SDL_Surface * dest, int r, int g, int b);
};

#endif

Share this post


Link to post
Share on other sites
Kylotan    9872
A surface doesn't have a position. It's just an image which gets copied to the screen. As such, you can't align it to anything - the only time that data gets any sort of position is during the Blit call.

Apart from that, it's not entirely clear what you're asking for. You never have to guess a position, since SDL renders at exactly the position you ask for. What precisely are you trying to achieve, and what is the problem that prevents that?

Share this post


Link to post
Share on other sites
Elidor    101
My question is knowing exactly how to blit aside from presets of centering and estimating like 1/5 of the way down the screen then 1/3 across. I'd like to know if there's a way I can attain better reference points than just right, center, and left alignment.

For example if I blit a surface in one class it would be easier to use an inbetween class like the surface class above to use the previous surface as a reference to blit the other surface.

To further illustrate what I'm aiming at:
If I blit a surface1 centered at a screen at the top and I want to blit a surface2 just bellow that but have surface2 centered how could I go about that?

Share this post


Link to post
Share on other sites
Elidor    101
I'd just like to say that it seems what I'm asking doesn't make much sense. I guess what I'm really asking for is an easier way to simulate a window builder for pixel coordinates without actually having to make one. Sorry about that I think I can figure it out from here.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this