Move ClientGeom to "src/geom.h"
This commit is contained in:
parent
6deb8763ed
commit
db8f485909
4 changed files with 169 additions and 140 deletions
114
src/geom.c
114
src/geom.c
|
@ -25,6 +25,13 @@ struct BasicGeom basic_geom_create()
|
||||||
return basic_geom;
|
return basic_geom;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct ClientGeom client_geom_create()
|
||||||
|
{
|
||||||
|
struct ClientGeom client_geom;
|
||||||
|
client_geom_init(&client_geom);
|
||||||
|
return client_geom;
|
||||||
|
}
|
||||||
|
|
||||||
/**************************
|
/**************************
|
||||||
* Default init functions *
|
* Default init functions *
|
||||||
**************************/
|
**************************/
|
||||||
|
@ -47,6 +54,12 @@ void basic_geom_init(const BasicGeom basic_geom)
|
||||||
sizes_init(&basic_geom->sizes);
|
sizes_init(&basic_geom->sizes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void client_geom_init(const ClientGeom client_geom)
|
||||||
|
{
|
||||||
|
basic_geom_init(&client_geom->basic);
|
||||||
|
client_geom->border_width = 0;
|
||||||
|
}
|
||||||
|
|
||||||
/*****************************
|
/*****************************
|
||||||
* Argument create functions *
|
* Argument create functions *
|
||||||
*****************************/
|
*****************************/
|
||||||
|
@ -76,6 +89,18 @@ struct BasicGeom basic_geom_create_from_args(
|
||||||
return basic_geom;
|
return basic_geom;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct ClientGeom client_geom_create_from_args(
|
||||||
|
const int x,
|
||||||
|
const int y,
|
||||||
|
const int width,
|
||||||
|
const int height,
|
||||||
|
const int border_width
|
||||||
|
) {
|
||||||
|
struct ClientGeom client_geom;
|
||||||
|
client_geom_init_from_args(&client_geom, x, y, width, height, border_width);
|
||||||
|
return client_geom;
|
||||||
|
}
|
||||||
|
|
||||||
/***************************
|
/***************************
|
||||||
* Argument init functions *
|
* Argument init functions *
|
||||||
***************************/
|
***************************/
|
||||||
|
@ -102,3 +127,92 @@ void basic_geom_init_from_args(
|
||||||
position_init_from_args(&basic_geom->position, x, y);
|
position_init_from_args(&basic_geom->position, x, y);
|
||||||
sizes_init_from_args(&basic_geom->sizes, width, height);
|
sizes_init_from_args(&basic_geom->sizes, width, height);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void client_geom_init_from_args(
|
||||||
|
const ClientGeom client_geom,
|
||||||
|
const int x,
|
||||||
|
const int y,
|
||||||
|
const int width,
|
||||||
|
const int height,
|
||||||
|
const int border_width
|
||||||
|
) {
|
||||||
|
basic_geom_init_from_args(&client_geom->basic, x, y, width, height);
|
||||||
|
client_geom->border_width = border_width;
|
||||||
|
}
|
||||||
|
|
||||||
|
/************************
|
||||||
|
* Conversion functions *
|
||||||
|
************************/
|
||||||
|
|
||||||
|
void client_geom_convert_to_x_window_changes(
|
||||||
|
const struct ClientGeom *const client_geom,
|
||||||
|
XWindowChanges *const x_window_changes
|
||||||
|
) {
|
||||||
|
x_window_changes->x = client_geom->basic.position.x;
|
||||||
|
x_window_changes->y = client_geom->basic.position.y;
|
||||||
|
x_window_changes->width = client_geom->basic.sizes.w;
|
||||||
|
x_window_changes->height = client_geom->basic.sizes.h;
|
||||||
|
x_window_changes->border_width = client_geom->border_width;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**********************
|
||||||
|
* Constant functions *
|
||||||
|
**********************/
|
||||||
|
|
||||||
|
int client_geom_total_width(
|
||||||
|
const struct ClientGeom *const client_geom
|
||||||
|
) {
|
||||||
|
return client_geom->basic.sizes.w + 2 * client_geom->border_width;
|
||||||
|
}
|
||||||
|
|
||||||
|
int client_geom_total_height(
|
||||||
|
const struct ClientGeom *const client_geom
|
||||||
|
) {
|
||||||
|
return client_geom->basic.sizes.h + 2 * client_geom->border_width;
|
||||||
|
}
|
||||||
|
|
||||||
|
/***********************
|
||||||
|
* Modifying functions *
|
||||||
|
***********************/
|
||||||
|
|
||||||
|
void client_geom_adjust_to_boundary(
|
||||||
|
const ClientGeom client_geom,
|
||||||
|
const struct BasicGeom *const boundary_geom
|
||||||
|
) {
|
||||||
|
const int total_width = client_geom_total_width(client_geom);
|
||||||
|
const int total_height = client_geom_total_height(client_geom);
|
||||||
|
|
||||||
|
if (
|
||||||
|
client_geom->basic.position.x + total_width
|
||||||
|
>
|
||||||
|
boundary_geom->position.x + boundary_geom->sizes.w
|
||||||
|
) {
|
||||||
|
client_geom->basic.position.x =
|
||||||
|
boundary_geom->position.x
|
||||||
|
+
|
||||||
|
boundary_geom->sizes.w
|
||||||
|
-
|
||||||
|
total_width;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
client_geom->basic.position.y + total_height
|
||||||
|
>
|
||||||
|
boundary_geom->position.y + boundary_geom->sizes.h
|
||||||
|
) {
|
||||||
|
client_geom->basic.position.y =
|
||||||
|
boundary_geom->position.y
|
||||||
|
+
|
||||||
|
boundary_geom->sizes.h
|
||||||
|
-
|
||||||
|
total_height;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (client_geom->basic.position.x < boundary_geom->position.x) {
|
||||||
|
client_geom->basic.position.x = boundary_geom->position.x;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (client_geom->basic.position.y < boundary_geom->position.y) {
|
||||||
|
client_geom->basic.position.y = boundary_geom->position.y;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
52
src/geom.h
52
src/geom.h
|
@ -1,6 +1,8 @@
|
||||||
#ifndef _GEOM_H
|
#ifndef _GEOM_H
|
||||||
#define _GEOM_H
|
#define _GEOM_H
|
||||||
|
|
||||||
|
#include <X11/Xutil.h>
|
||||||
|
|
||||||
/*****************
|
/*****************
|
||||||
* Pointer types *
|
* Pointer types *
|
||||||
*****************/
|
*****************/
|
||||||
|
@ -8,6 +10,7 @@
|
||||||
typedef struct Position *Position;
|
typedef struct Position *Position;
|
||||||
typedef struct Sizes *Sizes;
|
typedef struct Sizes *Sizes;
|
||||||
typedef struct BasicGeom *BasicGeom;
|
typedef struct BasicGeom *BasicGeom;
|
||||||
|
typedef struct ClientGeom *ClientGeom;
|
||||||
|
|
||||||
/**************
|
/**************
|
||||||
* Structures *
|
* Structures *
|
||||||
|
@ -26,6 +29,11 @@ struct BasicGeom {
|
||||||
struct Sizes sizes;
|
struct Sizes sizes;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct ClientGeom {
|
||||||
|
struct BasicGeom basic;
|
||||||
|
int border_width;
|
||||||
|
};
|
||||||
|
|
||||||
/****************************
|
/****************************
|
||||||
* Default create functions *
|
* Default create functions *
|
||||||
****************************/
|
****************************/
|
||||||
|
@ -33,6 +41,7 @@ struct BasicGeom {
|
||||||
struct Position position_create();
|
struct Position position_create();
|
||||||
struct Sizes sizes_create();
|
struct Sizes sizes_create();
|
||||||
struct BasicGeom basic_geom_create();
|
struct BasicGeom basic_geom_create();
|
||||||
|
struct ClientGeom client_geom_create();
|
||||||
|
|
||||||
/**************************
|
/**************************
|
||||||
* Default init functions *
|
* Default init functions *
|
||||||
|
@ -41,6 +50,7 @@ struct BasicGeom basic_geom_create();
|
||||||
void position_init(Position position);
|
void position_init(Position position);
|
||||||
void sizes_init(Sizes sizes);
|
void sizes_init(Sizes sizes);
|
||||||
void basic_geom_init(BasicGeom basic_geom);
|
void basic_geom_init(BasicGeom basic_geom);
|
||||||
|
void client_geom_init(ClientGeom client_geom);
|
||||||
|
|
||||||
/*****************************
|
/*****************************
|
||||||
* Argument create functions *
|
* Argument create functions *
|
||||||
|
@ -56,6 +66,14 @@ struct BasicGeom basic_geom_create_from_args(
|
||||||
int height
|
int height
|
||||||
);
|
);
|
||||||
|
|
||||||
|
struct ClientGeom client_geom_create_from_args(
|
||||||
|
int x,
|
||||||
|
int y,
|
||||||
|
int width,
|
||||||
|
int height,
|
||||||
|
int border_width
|
||||||
|
);
|
||||||
|
|
||||||
/***************************
|
/***************************
|
||||||
* Argument init functions *
|
* Argument init functions *
|
||||||
***************************/
|
***************************/
|
||||||
|
@ -71,4 +89,38 @@ void basic_geom_init_from_args(
|
||||||
int height
|
int height
|
||||||
);
|
);
|
||||||
|
|
||||||
|
void client_geom_init_from_args(
|
||||||
|
ClientGeom client_geom,
|
||||||
|
int x,
|
||||||
|
int y,
|
||||||
|
int width,
|
||||||
|
int height,
|
||||||
|
int border_width
|
||||||
|
);
|
||||||
|
|
||||||
|
/************************
|
||||||
|
* Conversion functions *
|
||||||
|
************************/
|
||||||
|
|
||||||
|
void client_geom_convert_to_x_window_changes(
|
||||||
|
const struct ClientGeom *client_geom,
|
||||||
|
XWindowChanges *x_window_changes
|
||||||
|
);
|
||||||
|
|
||||||
|
/**********************
|
||||||
|
* Constant functions *
|
||||||
|
**********************/
|
||||||
|
|
||||||
|
int client_geom_total_width(const struct ClientGeom *client_geom);
|
||||||
|
int client_geom_total_height(const struct ClientGeom *client_geom);
|
||||||
|
|
||||||
|
/***********************
|
||||||
|
* Modifying functions *
|
||||||
|
***********************/
|
||||||
|
|
||||||
|
void client_geom_adjust_to_boundary(
|
||||||
|
ClientGeom client_geom,
|
||||||
|
const struct BasicGeom *boundary_geom
|
||||||
|
);
|
||||||
|
|
||||||
#endif // _GEOM_H
|
#endif // _GEOM_H
|
||||||
|
|
95
src/state.c
95
src/state.c
|
@ -6,12 +6,6 @@
|
||||||
* Default init functions *
|
* Default init functions *
|
||||||
**************************/
|
**************************/
|
||||||
|
|
||||||
void client_geom_init(const ClientGeom client_geom)
|
|
||||||
{
|
|
||||||
basic_geom_init(&client_geom->basic);
|
|
||||||
client_geom->border_width = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void client_size_hints_init(const ClientSizeHints client_size_hints)
|
void client_size_hints_init(const ClientSizeHints client_size_hints)
|
||||||
{
|
{
|
||||||
client_size_hints->mina = 0;
|
client_size_hints->mina = 0;
|
||||||
|
@ -37,99 +31,10 @@ void client_state_init(const ClientState client_state)
|
||||||
client_state->is_fullscreen = false;
|
client_state->is_fullscreen = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/***************************
|
|
||||||
* Argument init functions *
|
|
||||||
***************************/
|
|
||||||
|
|
||||||
void client_geom_init_from_args(
|
|
||||||
const ClientGeom client_geom,
|
|
||||||
const int x,
|
|
||||||
const int y,
|
|
||||||
const int width,
|
|
||||||
const int height,
|
|
||||||
const int border_width
|
|
||||||
) {
|
|
||||||
basic_geom_init_from_args(&client_geom->basic, x, y, width, height);
|
|
||||||
client_geom->border_width = border_width;
|
|
||||||
}
|
|
||||||
|
|
||||||
/************************
|
|
||||||
* Conversion functions *
|
|
||||||
************************/
|
|
||||||
|
|
||||||
void client_geom_convert_to_x_window_changes(
|
|
||||||
const struct ClientGeom *const client_geom,
|
|
||||||
XWindowChanges *const x_window_changes
|
|
||||||
) {
|
|
||||||
x_window_changes->x = client_geom->basic.position.x;
|
|
||||||
x_window_changes->y = client_geom->basic.position.y;
|
|
||||||
x_window_changes->width = client_geom->basic.sizes.w;
|
|
||||||
x_window_changes->height = client_geom->basic.sizes.h;
|
|
||||||
x_window_changes->border_width = client_geom->border_width;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**********************
|
|
||||||
* Constant functions *
|
|
||||||
**********************/
|
|
||||||
|
|
||||||
int client_geom_total_width(
|
|
||||||
const struct ClientGeom *const client_geom
|
|
||||||
) {
|
|
||||||
return client_geom->basic.sizes.w + 2 * client_geom->border_width;
|
|
||||||
}
|
|
||||||
|
|
||||||
int client_geom_total_height(
|
|
||||||
const struct ClientGeom *const client_geom
|
|
||||||
) {
|
|
||||||
return client_geom->basic.sizes.h + 2 * client_geom->border_width;
|
|
||||||
}
|
|
||||||
|
|
||||||
/***********************
|
/***********************
|
||||||
* Modifying functions *
|
* Modifying functions *
|
||||||
***********************/
|
***********************/
|
||||||
|
|
||||||
void client_geom_adjust_to_boundary(
|
|
||||||
const ClientGeom client_geom,
|
|
||||||
const struct BasicGeom *const boundary_geom
|
|
||||||
) {
|
|
||||||
const int total_width = client_geom_total_width(client_geom);
|
|
||||||
const int total_height = client_geom_total_height(client_geom);
|
|
||||||
|
|
||||||
if (
|
|
||||||
client_geom->basic.position.x + total_width
|
|
||||||
>
|
|
||||||
boundary_geom->position.x + boundary_geom->sizes.w
|
|
||||||
) {
|
|
||||||
client_geom->basic.position.x =
|
|
||||||
boundary_geom->position.x
|
|
||||||
+
|
|
||||||
boundary_geom->sizes.w
|
|
||||||
-
|
|
||||||
total_width;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (
|
|
||||||
client_geom->basic.position.y + total_height
|
|
||||||
>
|
|
||||||
boundary_geom->position.y + boundary_geom->sizes.h
|
|
||||||
) {
|
|
||||||
client_geom->basic.position.y =
|
|
||||||
boundary_geom->position.y
|
|
||||||
+
|
|
||||||
boundary_geom->sizes.h
|
|
||||||
-
|
|
||||||
total_height;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (client_geom->basic.position.x < boundary_geom->position.x) {
|
|
||||||
client_geom->basic.position.x = boundary_geom->position.x;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (client_geom->basic.position.y < boundary_geom->position.y) {
|
|
||||||
client_geom->basic.position.y = boundary_geom->position.y;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void client_size_hints_update(
|
void client_size_hints_update(
|
||||||
const ClientSizeHints size_hints,
|
const ClientSizeHints size_hints,
|
||||||
const XSizeHints *const size
|
const XSizeHints *const size
|
||||||
|
|
42
src/state.h
42
src/state.h
|
@ -4,13 +4,11 @@
|
||||||
#include "geom.h"
|
#include "geom.h"
|
||||||
|
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <X11/Xutil.h>
|
|
||||||
|
|
||||||
/*****************
|
/*****************
|
||||||
* Pointer types *
|
* Pointer types *
|
||||||
*****************/
|
*****************/
|
||||||
|
|
||||||
typedef struct ClientGeom *ClientGeom;
|
|
||||||
typedef struct ClientSizeHints *ClientSizeHints;
|
typedef struct ClientSizeHints *ClientSizeHints;
|
||||||
typedef struct ClientState *ClientState;
|
typedef struct ClientState *ClientState;
|
||||||
|
|
||||||
|
@ -18,11 +16,6 @@ typedef struct ClientState *ClientState;
|
||||||
* Structures *
|
* Structures *
|
||||||
**************/
|
**************/
|
||||||
|
|
||||||
struct ClientGeom {
|
|
||||||
struct BasicGeom basic;
|
|
||||||
int border_width;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct ClientSizeHints {
|
struct ClientSizeHints {
|
||||||
float mina, maxa;
|
float mina, maxa;
|
||||||
int basew, baseh, incw, inch, maxw, maxh, minw, minh;
|
int basew, baseh, incw, inch, maxw, maxh, minw, minh;
|
||||||
|
@ -38,48 +31,13 @@ struct ClientState {
|
||||||
* Default init functions *
|
* Default init functions *
|
||||||
**************************/
|
**************************/
|
||||||
|
|
||||||
void client_geom_init(ClientGeom client_geom);
|
|
||||||
void client_size_hints_init(ClientSizeHints client_size_hints);
|
void client_size_hints_init(ClientSizeHints client_size_hints);
|
||||||
void client_state_init(ClientState client_state);
|
void client_state_init(ClientState client_state);
|
||||||
|
|
||||||
/***************************
|
|
||||||
* Argument init functions *
|
|
||||||
***************************/
|
|
||||||
|
|
||||||
void client_geom_init_from_args(
|
|
||||||
ClientGeom client_geom,
|
|
||||||
int x,
|
|
||||||
int y,
|
|
||||||
int width,
|
|
||||||
int height,
|
|
||||||
int border_width
|
|
||||||
);
|
|
||||||
|
|
||||||
/************************
|
|
||||||
* Conversion functions *
|
|
||||||
************************/
|
|
||||||
|
|
||||||
void client_geom_convert_to_x_window_changes(
|
|
||||||
const struct ClientGeom *client_geom,
|
|
||||||
XWindowChanges *x_window_changes
|
|
||||||
);
|
|
||||||
|
|
||||||
/**********************
|
|
||||||
* Constant functions *
|
|
||||||
**********************/
|
|
||||||
|
|
||||||
int client_geom_total_width(const struct ClientGeom *client_geom);
|
|
||||||
int client_geom_total_height(const struct ClientGeom *client_geom);
|
|
||||||
|
|
||||||
/***********************
|
/***********************
|
||||||
* Modifying functions *
|
* Modifying functions *
|
||||||
***********************/
|
***********************/
|
||||||
|
|
||||||
void client_geom_adjust_to_boundary(
|
|
||||||
ClientGeom client_geom,
|
|
||||||
const struct BasicGeom *boundary_geom
|
|
||||||
);
|
|
||||||
|
|
||||||
void client_size_hints_update(
|
void client_size_hints_update(
|
||||||
ClientSizeHints size_hints,
|
ClientSizeHints size_hints,
|
||||||
const XSizeHints *size
|
const XSizeHints *size
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue