diff options
Diffstat (limited to 'FrameRender')
| -rw-r--r-- | FrameRender/P_Checker.c | 26 | ||||
| -rw-r--r-- | FrameRender/P_Checker.h | 14 | ||||
| -rw-r--r-- | FrameRender/P_Circle.c | 20 | ||||
| -rw-r--r-- | FrameRender/P_Circle.h | 13 | ||||
| -rw-r--r-- | FrameRender/P_Image.c | 22 | ||||
| -rw-r--r-- | FrameRender/P_Image.h | 13 | ||||
| -rw-r--r-- | FrameRender/P_Square.c | 2 | ||||
| -rw-r--r-- | FrameRender/P_TransformRotate.c | 23 | ||||
| -rw-r--r-- | FrameRender/P_TransformRotate.h | 13 |
9 files changed, 145 insertions, 1 deletions
diff --git a/FrameRender/P_Checker.c b/FrameRender/P_Checker.c new file mode 100644 index 0000000..74862f0 --- /dev/null +++ b/FrameRender/P_Checker.c @@ -0,0 +1,26 @@ +#include "P_Checker.h" +#include "PixelCallback.h" +#include <stdlib.h> +#include <string.h> + +void Checker_callback(Checker* self, struct PixelContext* fc) { + u32 x = fc->x / self->squareSize; + u32 y = fc->y / self->squareSize; + + if ((x + y) % 2 == 0) { + ARGB_merge(&fc->pixel, self->colorA); + } + else { + ARGB_merge(&fc->pixel, self->colorB); + } +} + +PixelCallback* Checker_setup(Checker obj) { + PixelCallback* pca = malloc(sizeof(struct PixelCallback)); + + pca->callback = (PixelCallback_callback)Checker_callback; + pca->callback_self = malloc(sizeof(obj)); + memcpy(pca->callback_self, &obj, sizeof(obj)); + + return pca; +} diff --git a/FrameRender/P_Checker.h b/FrameRender/P_Checker.h new file mode 100644 index 0000000..731e55a --- /dev/null +++ b/FrameRender/P_Checker.h @@ -0,0 +1,14 @@ +#ifndef P_CHECKER_PATTERN +#define P_CHECKER_PATTERN + +#include "PixelCallback.h" + +typedef struct Checker { + u32 squareSize; + color colorA; + color colorB; +} Checker; + +PixelCallback* Checker_setup(Checker obj); + +#endif /* P_CHECKER_PATTERN */ diff --git a/FrameRender/P_Circle.c b/FrameRender/P_Circle.c new file mode 100644 index 0000000..421904d --- /dev/null +++ b/FrameRender/P_Circle.c @@ -0,0 +1,20 @@ +#include "P_Circle.h" +#include "PixelCallback.h" +#include <stdlib.h> +#include <string.h> + +void Circle_callback(Circle* self, struct PixelContext* fc) { + if (fc->x * fc->x + fc->y *fc->y <= self->radius * self->radius) { + ARGB_merge(&fc->pixel, self->color); + } +} + +PixelCallback* Circle_setup(Circle obj) { + PixelCallback* pca = malloc(sizeof(struct PixelCallback)); + + pca->callback = (PixelCallback_callback)Circle_callback; + pca->callback_self = malloc(sizeof(obj)); + memcpy(pca->callback_self, &obj, sizeof(obj)); + + return pca; +} diff --git a/FrameRender/P_Circle.h b/FrameRender/P_Circle.h new file mode 100644 index 0000000..1a6af4a --- /dev/null +++ b/FrameRender/P_Circle.h @@ -0,0 +1,13 @@ +#ifndef P_CIRCLE +#define P_CIRCLE + +#include "PixelCallback.h" + +typedef struct Circle { + u32 radius; + color color; +} Circle; + +PixelCallback* Circle_setup(Circle obj); + +#endif /* P_CIRCLE */ diff --git a/FrameRender/P_Image.c b/FrameRender/P_Image.c new file mode 100644 index 0000000..b95bbd7 --- /dev/null +++ b/FrameRender/P_Image.c @@ -0,0 +1,22 @@ +#include "P_Image.h" +#include "PixelCallback.h" +#include <stdlib.h> +#include <string.h> + +void Image_callback(Image* self, struct PixelContext* fc) { + if (0 <= fc->x && fc->x < self->img.width * self->scale && + 0 <= fc->y && fc->y < self->img.height * self->scale) + { + ARGB_mergeARGB(&fc->pixel, *RGBImage_at(self->img, fc->y / self->scale, fc->x / self->scale)); + } +} + +PixelCallback* Image_setup(Image obj) { + PixelCallback* pca = malloc(sizeof(struct PixelCallback)); + + pca->callback = (PixelCallback_callback)Image_callback; + pca->callback_self = malloc(sizeof(obj)); + memcpy(pca->callback_self, &obj, sizeof(obj)); + + return pca; +} diff --git a/FrameRender/P_Image.h b/FrameRender/P_Image.h new file mode 100644 index 0000000..609a7cf --- /dev/null +++ b/FrameRender/P_Image.h @@ -0,0 +1,13 @@ +#ifndef P_IMAGE +#define P_IMAGE + +#include "PixelCallback.h" + +typedef struct Image { + RGBImage img; + double scale; +} Image; + +PixelCallback* Image_setup(Image obj); + +#endif /* P_IMAGE */ diff --git a/FrameRender/P_Square.c b/FrameRender/P_Square.c index 7865370..f5dbef7 100644 --- a/FrameRender/P_Square.c +++ b/FrameRender/P_Square.c @@ -7,7 +7,7 @@ void Square_callback(Square* self, struct PixelContext* fc) { if (0 <= fc->x && fc->x <= self->width && 0 <= fc->y && fc->y <= self->height) { - ARGB_set(&fc->pixel, self->color); + ARGB_merge(&fc->pixel, self->color); } } diff --git a/FrameRender/P_TransformRotate.c b/FrameRender/P_TransformRotate.c new file mode 100644 index 0000000..562c814 --- /dev/null +++ b/FrameRender/P_TransformRotate.c @@ -0,0 +1,23 @@ +#include "P_TransformRotate.h" +#include "PixelCallback.h" +#include <math.h> +#include <stdlib.h> +#include <string.h> + +void TransformRotate_callback(TransformRotate* self, struct PixelContext* pc) { + u32 xR = pc->x * cos(self->angle) + pc->y * sin(self->angle); + u32 yR = - pc->x * sin(self->angle) + pc->y * cos(self->angle); + + pc->x = xR; + pc->y = yR; +} + +PixelCallback* TransformRotate_setup(TransformRotate obj) { + PixelCallback* pca = malloc(sizeof(struct PixelCallback)); + + pca->callback = (PixelCallback_callback)TransformRotate_callback; + pca->callback_self = malloc(sizeof(obj)); + memcpy(pca->callback_self, &obj, sizeof(obj)); + + return pca; +} diff --git a/FrameRender/P_TransformRotate.h b/FrameRender/P_TransformRotate.h new file mode 100644 index 0000000..0a2cc88 --- /dev/null +++ b/FrameRender/P_TransformRotate.h @@ -0,0 +1,13 @@ +#ifndef P_TRANSFORMROTATE +#define P_TRANSFORMROTATE + +#include "PixelCallback.h" +#include "../global.h" + +typedef struct TransformRotate { + double angle; +} TransformRotate; + +PixelCallback* TransformRotate_setup(TransformRotate obj); + +#endif /* P_TRANSFORMROTATE */ |
