Jump to content

  • Log In with Google      Sign In   
  • Create Account

SDL Surface Aligning


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
3 replies to this topic

#1 Elidor   Members   -  Reputation: 101

Like
0Likes
Like

Posted 24 April 2013 - 05:10 PM

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

Sponsor:

#2 Kylotan   Moderators   -  Reputation: 3338

Like
1Likes
Like

Posted 24 April 2013 - 09:23 PM

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?

#3 Elidor   Members   -  Reputation: 101

Like
0Likes
Like

Posted 24 April 2013 - 11:07 PM

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?

#4 Elidor   Members   -  Reputation: 101

Like
0Likes
Like

Posted 24 April 2013 - 11:23 PM

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.




Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS