Browse Source

Stricter object encapsulation

master
Bert 14 years ago
parent
commit
c7860b690b
5 changed files with 25 additions and 31 deletions
  1. +13
    -11
      image.c
  2. +4
    -5
      image.h
  3. +2
    -8
      main.c
  4. +5
    -6
      window.c
  5. +1
    -1
      window.h

+ 13
- 11
image.c View File

@@ -28,20 +28,22 @@ int zl_cnt;
float zoom_min; float zoom_min;
float zoom_max; float zoom_max;


void imlib_init(win_t *win) { void img_init(img_t *img, win_t *win) {
if (!win)
return;

imlib_context_set_display(win->env.dpy);
imlib_context_set_visual(win->env.vis);
imlib_context_set_colormap(win->env.cmap);

zl_cnt = sizeof(zoom_levels) / sizeof(zoom_levels[0]); zl_cnt = sizeof(zoom_levels) / sizeof(zoom_levels[0]);
zoom_min = zoom_levels[0] / 100.0; zoom_min = zoom_levels[0] / 100.0;
zoom_max = zoom_levels[zl_cnt - 1] / 100.0; zoom_max = zoom_levels[zl_cnt - 1] / 100.0;

if (img)
img->zoom = 1.0;

if (win) {
imlib_context_set_display(win->env.dpy);
imlib_context_set_visual(win->env.vis);
imlib_context_set_colormap(win->env.cmap);
}
} }


void imlib_destroy() { void img_free(img_t* img) {
if (imlib_context_get_image()) if (imlib_context_get_image())
imlib_free_image(); imlib_free_image();
} }
@@ -104,7 +106,7 @@ void img_render(img_t *img, win_t *win) {
img->re = 1; img->re = 1;


/* set zoom level to fit image into window */ /* set zoom level to fit image into window */
if (img->scalemode != SCALE_ZOOM) { if (SCALE_MODE != SCALE_ZOOM) {
zw = (float) win->w / (float) img->w; zw = (float) win->w / (float) img->w;
zh = (float) win->h / (float) img->h; zh = (float) win->h / (float) img->h;
img->zoom = MIN(zw, zh); img->zoom = MIN(zw, zh);
@@ -114,7 +116,7 @@ void img_render(img_t *img, win_t *win) {
else if (img->zoom > zoom_max) else if (img->zoom > zoom_max)
img->zoom = zoom_max; img->zoom = zoom_max;


if (img->scalemode == SCALE_DOWN && img->zoom > 1.0) if (SCALE_MODE == SCALE_DOWN && img->zoom > 1.0)
img->zoom = 1.0; img->zoom = 1.0;
} }




+ 4
- 5
image.h View File

@@ -21,15 +21,14 @@


#include "window.h" #include "window.h"


typedef enum scalemode_e { enum scalemode {
SCALE_DOWN = 0, SCALE_DOWN = 0,
SCALE_FIT, SCALE_FIT,
SCALE_ZOOM SCALE_ZOOM
} scalemode_t; };


typedef struct img_s { typedef struct img_s {
float zoom; float zoom;
scalemode_t scalemode;
unsigned char re; unsigned char re;
int x; int x;
int y; int y;
@@ -37,8 +36,8 @@ typedef struct img_s {
int h; int h;
} img_t; } img_t;


void imlib_init(win_t*); void img_init(img_t*, win_t*);
void imlib_destroy(); void img_free(img_t*);


int img_load(img_t*, const char*); int img_load(img_t*, const char*);
void img_render(img_t*, win_t*); void img_render(img_t*, win_t*);


+ 2
- 8
main.c View File

@@ -83,14 +83,8 @@ int main(int argc, char **argv) {
exit(1); exit(1);
} }


img.zoom = 1.0;
img.scalemode = SCALE_MODE;

win.w = WIN_WIDTH;
win.h = WIN_HEIGHT;

win_open(&win); win_open(&win);
imlib_init(&win); img_init(&img, &win);


img_load(&img, filenames[fileidx]); img_load(&img, filenames[fileidx]);
img_render(&img, &win); img_render(&img, &win);
@@ -107,7 +101,7 @@ void cleanup() {
static int in = 0; static int in = 0;


if (!in++) { if (!in++) {
imlib_destroy(); img_free(&img);
win_close(&win); win_close(&win);
} }
} }


+ 5
- 6
window.c View File

@@ -32,16 +32,14 @@ void win_open(win_t *win) {


if (!win) if (!win)
return; return;
e = &win->env;


e = &win->env;
if (!(e->dpy = XOpenDisplay(NULL))) if (!(e->dpy = XOpenDisplay(NULL)))
DIE("could not open display"); DIE("could not open display");
e->scr = DefaultScreen(e->dpy); e->scr = DefaultScreen(e->dpy);
e->scrw = DisplayWidth(e->dpy, e->scr); e->scrw = DisplayWidth(e->dpy, e->scr);
e->scrh = DisplayHeight(e->dpy, e->scr); e->scrh = DisplayHeight(e->dpy, e->scr);

e->vis = DefaultVisual(e->dpy, e->scr); e->vis = DefaultVisual(e->dpy, e->scr);
e->cmap = DefaultColormap(e->dpy, e->scr); e->cmap = DefaultColormap(e->dpy, e->scr);
e->depth = DefaultDepth(e->dpy, e->scr); e->depth = DefaultDepth(e->dpy, e->scr);
@@ -50,6 +48,8 @@ void win_open(win_t *win) {
&bgcol, &bgcol)) &bgcol, &bgcol))
DIE("could not allocate color: %s", BG_COLOR); DIE("could not allocate color: %s", BG_COLOR);


win->w = WIN_WIDTH;
win->h = WIN_HEIGHT;
if (win->w > e->scrw) if (win->w > e->scrw)
win->w = e->scrw; win->w = e->scrw;
if (win->h > e->scrh) if (win->h > e->scrh)
@@ -66,10 +66,9 @@ void win_open(win_t *win) {
XSelectInput(e->dpy, win->xwin, XSelectInput(e->dpy, win->xwin,
StructureNotifyMask | KeyPressMask); StructureNotifyMask | KeyPressMask);


win->pm = 0;

gcval.foreground = bgcol.pixel; gcval.foreground = bgcol.pixel;
win->bgc = XCreateGC(e->dpy, win->xwin, GCForeground, &gcval); win->bgc = XCreateGC(e->dpy, win->xwin, GCForeground, &gcval);
win->pm = 0;


win_set_title(win, "sxiv"); win_set_title(win, "sxiv");




+ 1
- 1
window.h View File

@@ -33,8 +33,8 @@ typedef struct win_env_s {
typedef struct win_s { typedef struct win_s {
Window xwin; Window xwin;
win_env_t env; win_env_t env;
Pixmap pm;
GC bgc; GC bgc;
Pixmap pm;


int w; int w;
int h; int h;


||||||
x
 
000:0
Loading…
Cancel
Save