Rev 2097 |
Blame |
Compare with Previous |
Last modification |
View Log
| RSS feed
/*
* slit.h
* slit in Mondrian
* DIN Is Noise is copyright (c) 2006-2025 Jagannathan Sampath
* For more information, please visit http://dinisnoise.org/
*/
#ifndef __slit__
#define __slit__
#include <list>
#include "fader.h"
struct rect;
struct slit { // a slit on an edge of a box
rect* boxes [2]; // slit can be on 2 boxes
int edges [2]; // edges of the boxes that has the slit
int type;
enum {INVALID=-1, VERTICAL, HORIZONTAL};
float start, mid, end;
static float HALF_SIZE;
static float MIN_HALF_SIZE;
static float MIN_SIZE; // 2 * MIN_HALF_SIZE
static int ref; // log
double animt; // animation duration
fader* fdr; // to animate slit
static const double INITIAL_OPEN_CLOSE_TIME;
slit ();
slit (rect** bxs, float x, float y, float sz, fader* fdr = 0);
~slit ();
int is_too_small ();
inline void calc_mid () { mid = (start+end) / 2.0; }
float anim_start, anim_end; // start,end at start of animation
void toggle_anim ();
void eval_anim ();
int select; // selected?
};
struct slit_info {
float x, y, half_size;
int anim;
fader fdr;
slit_info ();
};
struct slit_lip_t { // for editing slit
slit* slitt;
float* lip;
float* prev;
float* cur;
float low, high;
slit_lip_t () { clear ();}
void edit ();
void clear ();
void set_high (float h);
void set_low (float l);
};
struct slit_drawer { // for drawing
static const int MAX_LINES = 512;
float* verts;
int cur;
int last;
slit_drawer (int n = MAX_LINES);
~slit_drawer ();
void add (float x, float y);
void draw ();
};
void draw_slits (float start, float end, float level, int type, std::list<slit*>& _slits, slit_drawer& slit_drawerr);
rect* get_other_rect_of_slit (rect* ir, int e, float v, slit** os);
slit* slit_hit (rect* b, int e, float v);
slit* slit_hit (rect** bxs, float x, float y);
int get_slit_lip (slit_lip_t& sl, rect* R, int e, float v);
typedef std::list<slit*>::iterator slit_iterator;
#endif