mirror of
https://github.com/deadw00d/AROS.git
synced 2025-11-22 11:49:05 +00:00
add a couple of basic drawing demos
This commit is contained in:
105
developer/demos/misc/globe.c
Normal file
105
developer/demos/misc/globe.c
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
|
||||||
|
#include <proto/intuition.h>
|
||||||
|
#include <proto/graphics.h>
|
||||||
|
#include <proto/exec.h>
|
||||||
|
#include <intuition/intuition.h>
|
||||||
|
#include <graphics/gfxbase.h>
|
||||||
|
#include <math.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#define WIDTH 400
|
||||||
|
#define HEIGHT 400
|
||||||
|
#define DEPTH 8 // 8-bit chunky (256 colors)
|
||||||
|
|
||||||
|
struct Window *win;
|
||||||
|
struct RastPort *rp;
|
||||||
|
struct BitMap *offbm;
|
||||||
|
struct RastPort offrp;
|
||||||
|
|
||||||
|
double x=0, u=0, v=0, f=0;
|
||||||
|
int n = 200;
|
||||||
|
|
||||||
|
static void draw(struct RastPort *rp) {
|
||||||
|
double r = 2.0 * M_PI / n;
|
||||||
|
int W = WIDTH; // 400
|
||||||
|
|
||||||
|
// clear background
|
||||||
|
SetAPen(rp, 0);
|
||||||
|
RectFill(rp, 0, 0, WIDTH, HEIGHT);
|
||||||
|
|
||||||
|
for (int i = 0; i < n; i++) {
|
||||||
|
for (double j = 0; j < 55; j += 0.1) {
|
||||||
|
double R = r * i + x - 99.0 * f;
|
||||||
|
u = sin(i + v + f) - sin(R);
|
||||||
|
v = cos(i + v + f) - cos(R);
|
||||||
|
x = u + f;
|
||||||
|
|
||||||
|
double X = n + 99.0 * u;
|
||||||
|
double Y = n + 99.0 * v;
|
||||||
|
|
||||||
|
// set pen depending on j
|
||||||
|
SetAPen(rp, (int)(2*j + 66) & 255);
|
||||||
|
|
||||||
|
Move(rp, (LONG)X, (LONG)Y);
|
||||||
|
Draw(rp, (LONG)X+1, (LONG)Y+1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
f += 0.00005;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
if ((win = OpenWindowTags(NULL,
|
||||||
|
WA_Left, 100,
|
||||||
|
WA_Top, 50,
|
||||||
|
WA_Width, WIDTH,
|
||||||
|
WA_Height, HEIGHT,
|
||||||
|
WA_Title, (IPTR)"Demo",
|
||||||
|
WA_Flags, WFLG_SIMPLE_REFRESH | WFLG_SMART_REFRESH | WFLG_ACTIVATE | WFLG_CLOSEGADGET,
|
||||||
|
TAG_END))) {
|
||||||
|
|
||||||
|
rp = win->RPort;
|
||||||
|
|
||||||
|
// Allocate an off-screen bitmap
|
||||||
|
offbm = AllocBitMap(WIDTH, HEIGHT, DEPTH, BMF_CLEAR, win->RPort->BitMap);
|
||||||
|
if (!offbm) {
|
||||||
|
CloseWindow(win);
|
||||||
|
return 20;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Init a RastPort that uses our bitmap
|
||||||
|
InitRastPort(&offrp);
|
||||||
|
offrp.BitMap = offbm;
|
||||||
|
|
||||||
|
BOOL running = TRUE;
|
||||||
|
struct IntuiMessage *msg;
|
||||||
|
|
||||||
|
while (running) {
|
||||||
|
// clear background (set pen 0 and erase)
|
||||||
|
SetAPen(&offrp, 0);
|
||||||
|
RectFill(&offrp, 0, 0, win->Width, win->Height);
|
||||||
|
|
||||||
|
// set pen color (pen 1)
|
||||||
|
SetAPen(&offrp, 2);
|
||||||
|
|
||||||
|
draw(&offrp);
|
||||||
|
ClipBlit(&offrp, 0, 0, rp, 0, 0, WIDTH, HEIGHT, 0xC0); // COPY
|
||||||
|
#if (0)
|
||||||
|
// Wait for something to happen on the window<6F>s port
|
||||||
|
WaitPort(win->UserPort);
|
||||||
|
|
||||||
|
// Handle events
|
||||||
|
while ((msg = (struct IntuiMessage *)GetMsg(win->UserPort))) {
|
||||||
|
if (msg->Class == IDCMP_CLOSEWINDOW) {
|
||||||
|
running = FALSE;
|
||||||
|
}
|
||||||
|
ReplyMsg((struct Message *)msg);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
CloseWindow(win);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
110
developer/demos/misc/jellyfish.c
Normal file
110
developer/demos/misc/jellyfish.c
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
|
||||||
|
#include <proto/intuition.h>
|
||||||
|
#include <proto/graphics.h>
|
||||||
|
#include <proto/exec.h>
|
||||||
|
#include <intuition/intuition.h>
|
||||||
|
#include <graphics/gfxbase.h>
|
||||||
|
#include <math.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#define WIDTH 400
|
||||||
|
#define HEIGHT 400
|
||||||
|
#define DEPTH 8 // 8-bit chunky (256 colors)
|
||||||
|
|
||||||
|
struct Window *win;
|
||||||
|
struct RastPort *rp;
|
||||||
|
struct BitMap *offbm;
|
||||||
|
struct RastPort offrp;
|
||||||
|
|
||||||
|
double t = 0.0;
|
||||||
|
|
||||||
|
// magnitude helper
|
||||||
|
static double mag(double x, double y) {
|
||||||
|
return sqrt(x * x + y * y);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void point(struct RastPort *rp, double x, double y) {
|
||||||
|
if (x >= 0 && x < WIDTH && y >= 0 && y < HEIGHT) {
|
||||||
|
Move(rp, (LONG)x, (LONG)y);
|
||||||
|
Draw(rp, (LONG)x, (LONG)y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void a(struct RastPort *rp, double y, double i) {
|
||||||
|
double k, e, d, q, c;
|
||||||
|
|
||||||
|
k = (y < 11
|
||||||
|
? 6 + sin((double)(((int)y) ^ 8)) * 6
|
||||||
|
: y / 5.0 + cos(y / 2.0))
|
||||||
|
* cos(i - t / 4.0);
|
||||||
|
|
||||||
|
e = y / 7.0 - 13.0;
|
||||||
|
d = mag(k, e) + sin(e / 4.0 + t) / 2.0;
|
||||||
|
q = y * k / d * (3 + sin(d * 2 + y / 2 - t * 4));
|
||||||
|
c = d / 2.0 + 1 - t / 2.0;
|
||||||
|
|
||||||
|
point(rp, q + 60 * cos(c) + 200, q * sin(c) + d * 29 - 170);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void draw(struct RastPort *rp) {
|
||||||
|
t += M_PI / 120.0;
|
||||||
|
for (int i = 10000; i--; ) {
|
||||||
|
a(rp, i / 345.0, i); // pass i too (needed in formula)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
if ((win = OpenWindowTags(NULL,
|
||||||
|
WA_Left, 100,
|
||||||
|
WA_Top, 50,
|
||||||
|
WA_Width, WIDTH,
|
||||||
|
WA_Height, HEIGHT,
|
||||||
|
WA_Title, (IPTR)"Jellyfish Demo Port",
|
||||||
|
WA_Flags, WFLG_SIMPLE_REFRESH | WFLG_SMART_REFRESH | WFLG_ACTIVATE | WFLG_CLOSEGADGET,
|
||||||
|
TAG_END))) {
|
||||||
|
|
||||||
|
rp = win->RPort;
|
||||||
|
|
||||||
|
// Allocate an off-screen bitmap
|
||||||
|
offbm = AllocBitMap(WIDTH, HEIGHT, DEPTH, BMF_CLEAR, win->RPort->BitMap);
|
||||||
|
if (!offbm) {
|
||||||
|
CloseWindow(win);
|
||||||
|
return 20;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Init a RastPort that uses our bitmap
|
||||||
|
InitRastPort(&offrp);
|
||||||
|
offrp.BitMap = offbm;
|
||||||
|
|
||||||
|
BOOL running = TRUE;
|
||||||
|
struct IntuiMessage *msg;
|
||||||
|
|
||||||
|
while (running) {
|
||||||
|
// clear background (set pen 0 and erase)
|
||||||
|
SetAPen(&offrp, 0);
|
||||||
|
RectFill(&offrp, 0, 0, win->Width, win->Height);
|
||||||
|
|
||||||
|
// set pen color (pen 1)
|
||||||
|
SetAPen(&offrp, 2);
|
||||||
|
|
||||||
|
draw(&offrp);
|
||||||
|
ClipBlit(&offrp, 0, 0, rp, 0, 0, WIDTH, HEIGHT, 0xC0); // COPY
|
||||||
|
#if (0)
|
||||||
|
// Wait for something to happen on the window<6F>s port
|
||||||
|
WaitPort(win->UserPort);
|
||||||
|
|
||||||
|
// Handle events
|
||||||
|
while ((msg = (struct IntuiMessage *)GetMsg(win->UserPort))) {
|
||||||
|
if (msg->Class == IDCMP_CLOSEWINDOW) {
|
||||||
|
running = FALSE;
|
||||||
|
}
|
||||||
|
ReplyMsg((struct Message *)msg);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
CloseWindow(win);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
16
developer/demos/misc/mmakefile.src
Normal file
16
developer/demos/misc/mmakefile.src
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
#
|
||||||
|
# Makefile for AROS intuition.library tests
|
||||||
|
|
||||||
|
include $(SRCDIR)/config/aros.cfg
|
||||||
|
|
||||||
|
FILES := \
|
||||||
|
globe \
|
||||||
|
jellyfish \
|
||||||
|
rectangles
|
||||||
|
|
||||||
|
EXEDIR := $(AROSDIR)/Demos/misc
|
||||||
|
|
||||||
|
%build_progs mmake=demos-misc \
|
||||||
|
files=$(FILES) targetdir=$(EXEDIR)
|
||||||
|
|
||||||
|
%common
|
||||||
108
developer/demos/misc/rectangles.c
Normal file
108
developer/demos/misc/rectangles.c
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
|
||||||
|
#include <proto/intuition.h>
|
||||||
|
#include <proto/graphics.h>
|
||||||
|
#include <proto/exec.h>
|
||||||
|
#include <intuition/intuition.h>
|
||||||
|
#include <graphics/gfxbase.h>
|
||||||
|
#include <math.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#define WIDTH 400
|
||||||
|
#define HEIGHT 400
|
||||||
|
#define DEPTH 8 // 8-bit chunky (256 colors)
|
||||||
|
|
||||||
|
struct Window *win;
|
||||||
|
struct RastPort *rp;
|
||||||
|
struct BitMap *offbm;
|
||||||
|
struct RastPort offrp;
|
||||||
|
|
||||||
|
static int f = 0;
|
||||||
|
|
||||||
|
static void draw(struct RastPort *rp) {
|
||||||
|
f++;
|
||||||
|
|
||||||
|
for (int x = 0; x <= WIDTH; x += 20) {
|
||||||
|
for (int y = 0; y <= HEIGHT; y += 20) {
|
||||||
|
double R = 10.0;
|
||||||
|
|
||||||
|
for (int n = 0; n < 2; n++) {
|
||||||
|
double k = (n == 0) ? 0.0 : M_PI/2.0;
|
||||||
|
|
||||||
|
double X = x - 250 + 200 * sin(f/50.0 + k);
|
||||||
|
double Y = y - 250 + 200 * sin(f/67.0 + k);
|
||||||
|
|
||||||
|
double s = sin(f/50.0 + k);
|
||||||
|
double c = cos(f/50.0 + k);
|
||||||
|
|
||||||
|
double v1 = fabs(s*X - c*Y) / 3.0;
|
||||||
|
double v2 = (X*X + Y*Y) / 4000.0 + 3.0;
|
||||||
|
|
||||||
|
// clamp
|
||||||
|
if (v1 < 0) v1 = 0;
|
||||||
|
|
||||||
|
if (v1 < R) R = v1;
|
||||||
|
if (v2 < R) R = v2;
|
||||||
|
}
|
||||||
|
|
||||||
|
int Rint = (int)R;
|
||||||
|
RectFill(rp, x - Rint, y - Rint,
|
||||||
|
x + Rint, y + Rint);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
if ((win = OpenWindowTags(NULL,
|
||||||
|
WA_Left, 100,
|
||||||
|
WA_Top, 50,
|
||||||
|
WA_Width, WIDTH,
|
||||||
|
WA_Height, HEIGHT,
|
||||||
|
WA_Title, (IPTR)"Rectangles Demo Port",
|
||||||
|
WA_Flags, WFLG_SIMPLE_REFRESH | WFLG_SMART_REFRESH | WFLG_ACTIVATE | WFLG_CLOSEGADGET,
|
||||||
|
TAG_END))) {
|
||||||
|
|
||||||
|
rp = win->RPort;
|
||||||
|
|
||||||
|
// Allocate an off-screen bitmap
|
||||||
|
offbm = AllocBitMap(WIDTH, HEIGHT, DEPTH, BMF_CLEAR, win->RPort->BitMap);
|
||||||
|
if (!offbm) {
|
||||||
|
CloseWindow(win);
|
||||||
|
return 20;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Init a RastPort that uses our bitmap
|
||||||
|
InitRastPort(&offrp);
|
||||||
|
offrp.BitMap = offbm;
|
||||||
|
|
||||||
|
BOOL running = TRUE;
|
||||||
|
struct IntuiMessage *msg;
|
||||||
|
|
||||||
|
while (running) {
|
||||||
|
// clear background (set pen 0 and erase)
|
||||||
|
SetAPen(&offrp, 0);
|
||||||
|
RectFill(&offrp, 0, 0, win->Width, win->Height);
|
||||||
|
|
||||||
|
// set pen color (pen 1)
|
||||||
|
SetAPen(&offrp, 2);
|
||||||
|
|
||||||
|
draw(&offrp);
|
||||||
|
ClipBlit(&offrp, 0, 0, rp, 0, 0, WIDTH, HEIGHT, 0xC0); // COPY
|
||||||
|
#if (0)
|
||||||
|
// Wait for something to happen on the window<6F>s port
|
||||||
|
WaitPort(win->UserPort);
|
||||||
|
|
||||||
|
// Handle events
|
||||||
|
while ((msg = (struct IntuiMessage *)GetMsg(win->UserPort))) {
|
||||||
|
if (msg->Class == IDCMP_CLOSEWINDOW) {
|
||||||
|
running = FALSE;
|
||||||
|
}
|
||||||
|
ReplyMsg((struct Message *)msg);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
CloseWindow(win);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user