|
|
1.1 root 1: //
2: // SlidingImageView.m
3: //
4: // Implements a sliding image screen saver view.
5: //
6: // Lennart Lovstrand, August 1991.
7: // small modifications by sam 910904
8: //
9: // You may freely copy, distribute, and reuse the code in this example.
10: // NeXT disclaims any warranty of any kind, expressed or implied, as to its
11: // fitness for any particular use.
12:
13: #import "SlidingImageView.h"
14: #import "Thinker.h"
15: #import <appkit/NXImage.h>
16: #import <appkit/Panel.h> // for NXRunAlertPanel()
17: #import <dpsclient/wraps.h>
18: #import <libc.h>
19: #import <math.h>
20:
21: @implementation SlidingImageView
22:
23: - drawSelf:(const NXRect *)rects :(int)rectCount
24: {
25: NXPoint p;
26: if (!rects || !rectCount) return self;
27:
28: [super drawSelf:rects :rectCount];
29:
30: p.x = floor(imageRect.origin.x);
31: p.y = floor(imageRect.origin.y);
32:
33: [image composite: NX_SOVER toPoint: &p];
34:
35: return self;
36: }
37:
38: - oneStep
39: {
40: NXPoint p;
41: PSsetgray(0);
42: NXRectFill(&imageRect);
43:
44: usleep((1*1000000)/68); //sleep a few vblanks
45: imageRect.origin.x += delta.x;
46: imageRect.origin.y += delta.y;
47:
48: if (imageRect.origin.x < 0)
49: {
50: imageRect.origin.x = 0;
51: delta.x = randBetween(.8,1.3);
52: }
53: else if (imageRect.origin.x > maxCoord.x)
54: {
55: imageRect.origin.x = maxCoord.x;
56: delta.x = -randBetween(.8,1.3);
57: }
58:
59: if (imageRect.origin.y < 0)
60: {
61: imageRect.origin.y = 0;
62: delta.y = randBetween(.8,1.3);
63: }
64: else if (imageRect.origin.y > maxCoord.y)
65: {
66: imageRect.origin.y = maxCoord.y;
67: delta.y = -randBetween(.8,1.3);
68: }
69:
70: p.x = floor(imageRect.origin.x);
71: p.y = floor(imageRect.origin.y);
72:
73: [image composite: NX_SOVER toPoint: &p];
74:
75: return self;
76: }
77:
78: - setImageConstraints
79: {
80: [super setImageConstraints];
81:
82: if (imageRect.origin.x > maxCoord.x ||
83: imageRect.origin.y > maxCoord.y)
84: {
85: imageRect.origin.x = randBetween(0, maxCoord.x);
86: imageRect.origin.y = randBetween(0, maxCoord.y);
87: }
88:
89: delta.x = randBetween(-1,1);
90: delta.y = randBetween(-1,1);
91:
92: return self;
93: }
94:
95: - inspector:sender
96: {
97: return [sender commonImageInspector];
98: }
99:
100: @end
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.