summaryrefslogtreecommitdiffhomepage
path: root/nGenEx/Window.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'nGenEx/Window.cpp')
-rw-r--r--nGenEx/Window.cpp1322
1 files changed, 661 insertions, 661 deletions
diff --git a/nGenEx/Window.cpp b/nGenEx/Window.cpp
index c0e0369..ef97097 100644
--- a/nGenEx/Window.cpp
+++ b/nGenEx/Window.cpp
@@ -1,15 +1,15 @@
/* Project nGenEx
- Destroyer Studios LLC
- Copyright © 1997-2004. All Rights Reserved.
+ Destroyer Studios LLC
+ Copyright © 1997-2004. All Rights Reserved.
- SUBSYSTEM: nGenEx.lib
- FILE: Window.cpp
- AUTHOR: John DiCamillo
+ SUBSYSTEM: nGenEx.lib
+ FILE: Window.cpp
+ AUTHOR: John DiCamillo
- OVERVIEW
- ========
- Window class
+ OVERVIEW
+ ========
+ Window class
*/
#include "MemDebug.h"
@@ -28,14 +28,14 @@ static VertexSet vset4(4);
// +--------------------------------------------------------------------+
Window::Window(Screen* s, int ax, int ay, int aw, int ah)
- : screen(s), rect(ax, ay, aw, ah), shown(true), font(0)
+: screen(s), rect(ax, ay, aw, ah), shown(true), font(0)
{ }
// +--------------------------------------------------------------------+
Window::~Window()
{
- view_list.destroy();
+ view_list.destroy();
}
// +--------------------------------------------------------------------+
@@ -43,36 +43,36 @@ Window::~Window()
bool
Window::AddView(View* v)
{
- if (!v) return false;
-
- if (!view_list.contains(v))
- view_list.append(v);
-
- return true;
+ if (!v) return false;
+
+ if (!view_list.contains(v))
+ view_list.append(v);
+
+ return true;
}
bool
Window::DelView(View* v)
{
- if (!v) return false;
+ if (!v) return false;
- return view_list.remove(v) == v;
+ return view_list.remove(v) == v;
}
void
Window::MoveTo(const Rect& r)
{
- if (rect.x == r.x &&
- rect.y == r.y &&
- rect.w == r.w &&
- rect.h == r.h)
- return;
+ if (rect.x == r.x &&
+ rect.y == r.y &&
+ rect.w == r.w &&
+ rect.h == r.h)
+ return;
- rect = r;
+ rect = r;
- ListIter<View> v = view_list;
- while (++v)
- v->OnWindowMove();
+ ListIter<View> v = view_list;
+ while (++v)
+ v->OnWindowMove();
}
// +--------------------------------------------------------------------+
@@ -80,9 +80,9 @@ Window::MoveTo(const Rect& r)
void
Window::Paint()
{
- ListIter<View> v = view_list;
- while (++v)
- v->Refresh();
+ ListIter<View> v = view_list;
+ while (++v)
+ v->Refresh();
}
// +--------------------------------------------------------------------+
@@ -95,28 +95,28 @@ static inline void sort(double& a, double& b) { if (a>b) swap(a,b); }
Rect
Window::ClipRect(const Rect& r)
{
- Rect clip_rect = r;
+ Rect clip_rect = r;
+
+ clip_rect.x += rect.x;
+ clip_rect.y += rect.y;
- clip_rect.x += rect.x;
- clip_rect.y += rect.y;
+ if (clip_rect.x < rect.x) {
+ clip_rect.w -= rect.x - clip_rect.x;
+ clip_rect.x = rect.x;
+ }
- if (clip_rect.x < rect.x) {
- clip_rect.w -= rect.x - clip_rect.x;
- clip_rect.x = rect.x;
- }
-
- if (clip_rect.y < rect.y) {
- clip_rect.h -= rect.y - clip_rect.y;
- clip_rect.y = rect.y;
- }
+ if (clip_rect.y < rect.y) {
+ clip_rect.h -= rect.y - clip_rect.y;
+ clip_rect.y = rect.y;
+ }
- if (clip_rect.x + clip_rect.w > rect.x + rect.w)
- clip_rect.w = rect.x + rect.w - clip_rect.x;
+ if (clip_rect.x + clip_rect.w > rect.x + rect.w)
+ clip_rect.w = rect.x + rect.w - clip_rect.x;
- if (clip_rect.y + clip_rect.h > rect.y + rect.h)
- clip_rect.h = rect.y + rect.h - clip_rect.y;
+ if (clip_rect.y + clip_rect.h > rect.y + rect.h)
+ clip_rect.h = rect.y + rect.h - clip_rect.y;
- return clip_rect;
+ return clip_rect;
}
// +--------------------------------------------------------------------+
@@ -124,58 +124,58 @@ Window::ClipRect(const Rect& r)
bool
Window::ClipLine(int& x1, int& y1, int& x2, int& y2)
{
- // vertical lines:
- if (x1==x2) {
-clip_vertical:
- sort(y1,y2);
- if (x1 < 0 || x1 >= rect.w) return false;
- if (y1 < 0) y1 = 0;
- if (y2 >= rect.h) y2 = rect.h;
- return true;
- }
-
- // horizontal lines:
- if (y1==y2) {
-clip_horizontal:
- sort(x1,x2);
- if (y1 < 0 || y1 >= rect.h) return false;
- if (x1 < 0) x1 = 0;
- if (x2 > rect.w) x2 = rect.w;
- return true;
- }
-
- // general lines:
-
- // sort left to right:
- if (x1 > x2) {
- swap(x1,x2);
- swap(y1,y2);
- }
-
- double m = (double)(y2-y1) / (double)(x2-x1);
- double b = (double) y1 - (m * x1);
-
- // clip:
- if (x1 < 0) { x1 = 0; y1 = (int) b; }
- if (x1 >= rect.w) return false;
- if (x2 < 0) return false;
- if (x2 > rect.w-1) { x2 = rect.w-1; y2 = (int) (m * x2 + b); }
-
- if (y1 < 0 && y2 < 0) return false;
- if (y1 >= rect.h && y2 >= rect.h) return false;
-
- if (y1 < 0) { y1 = 0; x1 = (int) (-b/m); }
- if (y1 >= rect.h) { y1 = rect.h-1; x1 = (int) ((y1-b)/m); }
- if (y2 < 0) { y2 = 0; x2 = (int) (-b/m); }
- if (y2 >= rect.h) { y2 = rect.h-1; x2 = (int) ((y2-b)/m); }
-
- if (x1 == x2)
- goto clip_vertical;
-
- if (y1 == y2)
- goto clip_horizontal;
-
- return true;
+ // vertical lines:
+ if (x1==x2) {
+ clip_vertical:
+ sort(y1,y2);
+ if (x1 < 0 || x1 >= rect.w) return false;
+ if (y1 < 0) y1 = 0;
+ if (y2 >= rect.h) y2 = rect.h;
+ return true;
+ }
+
+ // horizontal lines:
+ if (y1==y2) {
+ clip_horizontal:
+ sort(x1,x2);
+ if (y1 < 0 || y1 >= rect.h) return false;
+ if (x1 < 0) x1 = 0;
+ if (x2 > rect.w) x2 = rect.w;
+ return true;
+ }
+
+ // general lines:
+
+ // sort left to right:
+ if (x1 > x2) {
+ swap(x1,x2);
+ swap(y1,y2);
+ }
+
+ double m = (double)(y2-y1) / (double)(x2-x1);
+ double b = (double) y1 - (m * x1);
+
+ // clip:
+ if (x1 < 0) { x1 = 0; y1 = (int) b; }
+ if (x1 >= rect.w) return false;
+ if (x2 < 0) return false;
+ if (x2 > rect.w-1) { x2 = rect.w-1; y2 = (int) (m * x2 + b); }
+
+ if (y1 < 0 && y2 < 0) return false;
+ if (y1 >= rect.h && y2 >= rect.h) return false;
+
+ if (y1 < 0) { y1 = 0; x1 = (int) (-b/m); }
+ if (y1 >= rect.h) { y1 = rect.h-1; x1 = (int) ((y1-b)/m); }
+ if (y2 < 0) { y2 = 0; x2 = (int) (-b/m); }
+ if (y2 >= rect.h) { y2 = rect.h-1; x2 = (int) ((y2-b)/m); }
+
+ if (x1 == x2)
+ goto clip_vertical;
+
+ if (y1 == y2)
+ goto clip_horizontal;
+
+ return true;
}
// +--------------------------------------------------------------------+
@@ -183,58 +183,58 @@ clip_horizontal:
bool
Window::ClipLine(double& x1, double& y1, double& x2, double& y2)
{
- // vertical lines:
- if (x1==x2) {
-clip_vertical:
- sort(y1,y2);
- if (x1 < 0 || x1 >= rect.w) return false;
- if (y1 < 0) y1 = 0;
- if (y2 >= rect.h) y2 = rect.h;
- return true;
- }
-
- // horizontal lines:
- if (y1==y2) {
-clip_horizontal:
- sort(x1,x2);
- if (y1 < 0 || y1 >= rect.h) return false;
- if (x1 < 0) x1 = 0;
- if (x2 > rect.w) x2 = rect.w;
- return true;
- }
-
- // general lines:
-
- // sort left to right:
- if (x1 > x2) {
- swap(x1,x2);
- swap(y1,y2);
- }
-
- double m = (double)(y2-y1) / (double)(x2-x1);
- double b = (double) y1 - (m * x1);
-
- // clip:
- if (x1 < 0) { x1 = 0; y1 = b; }
- if (x1 >= rect.w) return false;
- if (x2 < 0) return false;
- if (x2 > rect.w-1) { x2 = rect.w-1; y2 = (m * x2 + b); }
-
- if (y1 < 0 && y2 < 0) return false;
- if (y1 >= rect.h && y2 >= rect.h) return false;
-
- if (y1 < 0) { y1 = 0; x1 = (-b/m); }
- if (y1 >= rect.h) { y1 = rect.h-1; x1 = ((y1-b)/m); }
- if (y2 < 0) { y2 = 0; x2 = (-b/m); }
- if (y2 >= rect.h) { y2 = rect.h-1; x2 = ((y2-b)/m); }
-
- if (x1 == x2)
- goto clip_vertical;
-
- if (y1 == y2)
- goto clip_horizontal;
-
- return true;
+ // vertical lines:
+ if (x1==x2) {
+ clip_vertical:
+ sort(y1,y2);
+ if (x1 < 0 || x1 >= rect.w) return false;
+ if (y1 < 0) y1 = 0;
+ if (y2 >= rect.h) y2 = rect.h;
+ return true;
+ }
+
+ // horizontal lines:
+ if (y1==y2) {
+ clip_horizontal:
+ sort(x1,x2);
+ if (y1 < 0 || y1 >= rect.h) return false;
+ if (x1 < 0) x1 = 0;
+ if (x2 > rect.w) x2 = rect.w;
+ return true;
+ }
+
+ // general lines:
+
+ // sort left to right:
+ if (x1 > x2) {
+ swap(x1,x2);
+ swap(y1,y2);
+ }
+
+ double m = (double)(y2-y1) / (double)(x2-x1);
+ double b = (double) y1 - (m * x1);
+
+ // clip:
+ if (x1 < 0) { x1 = 0; y1 = b; }
+ if (x1 >= rect.w) return false;
+ if (x2 < 0) return false;
+ if (x2 > rect.w-1) { x2 = rect.w-1; y2 = (m * x2 + b); }
+
+ if (y1 < 0 && y2 < 0) return false;
+ if (y1 >= rect.h && y2 >= rect.h) return false;
+
+ if (y1 < 0) { y1 = 0; x1 = (-b/m); }
+ if (y1 >= rect.h) { y1 = rect.h-1; x1 = ((y1-b)/m); }
+ if (y2 < 0) { y2 = 0; x2 = (-b/m); }
+ if (y2 >= rect.h) { y2 = rect.h-1; x2 = ((y2-b)/m); }
+
+ if (x1 == x2)
+ goto clip_vertical;
+
+ if (y1 == y2)
+ goto clip_horizontal;
+
+ return true;
}
// +--------------------------------------------------------------------+
@@ -242,19 +242,19 @@ clip_horizontal:
void
Window::DrawLine(int x1, int y1, int x2, int y2, Color color, int blend)
{
- if (!screen || !screen->GetVideo()) return;
+ if (!screen || !screen->GetVideo()) return;
- if (ClipLine(x1,y1,x2,y2)) {
- float points[4];
+ if (ClipLine(x1,y1,x2,y2)) {
+ float points[4];
- points[0] = (float) (rect.x + x1);
- points[1] = (float) (rect.y + y1);
- points[2] = (float) (rect.x + x2);
- points[3] = (float) (rect.y + y2);
+ points[0] = (float) (rect.x + x1);
+ points[1] = (float) (rect.y + y1);
+ points[2] = (float) (rect.x + x2);
+ points[3] = (float) (rect.y + y2);
- Video* video = screen->GetVideo();
- video->DrawScreenLines(1, points, color, blend);
- }
+ Video* video = screen->GetVideo();
+ video->DrawScreenLines(1, points, color, blend);
+ }
}
// +--------------------------------------------------------------------+
@@ -262,44 +262,44 @@ Window::DrawLine(int x1, int y1, int x2, int y2, Color color, int blend)
void
Window::DrawRect(int x1, int y1, int x2, int y2, Color color, int blend)
{
- if (!screen || !screen->GetVideo()) return;
+ if (!screen || !screen->GetVideo()) return;
- sort(x1,x2);
- sort(y1,y2);
+ sort(x1,x2);
+ sort(y1,y2);
- if (x1 > rect.w || x2 < 0 || y1 > rect.h || y2 < 0)
- return;
+ if (x1 > rect.w || x2 < 0 || y1 > rect.h || y2 < 0)
+ return;
- float points[16];
+ float points[16];
- points[ 0] = (float) (rect.x + x1);
- points[ 1] = (float) (rect.y + y1);
- points[ 2] = (float) (rect.x + x2);
- points[ 3] = (float) (rect.y + y1);
+ points[ 0] = (float) (rect.x + x1);
+ points[ 1] = (float) (rect.y + y1);
+ points[ 2] = (float) (rect.x + x2);
+ points[ 3] = (float) (rect.y + y1);
- points[ 4] = (float) (rect.x + x2);
- points[ 5] = (float) (rect.y + y1);
- points[ 6] = (float) (rect.x + x2);
- points[ 7] = (float) (rect.y + y2);
+ points[ 4] = (float) (rect.x + x2);
+ points[ 5] = (float) (rect.y + y1);
+ points[ 6] = (float) (rect.x + x2);
+ points[ 7] = (float) (rect.y + y2);
- points[ 8] = (float) (rect.x + x2);
- points[ 9] = (float) (rect.y + y2);
- points[10] = (float) (rect.x + x1);
- points[11] = (float) (rect.y + y2);
+ points[ 8] = (float) (rect.x + x2);
+ points[ 9] = (float) (rect.y + y2);
+ points[10] = (float) (rect.x + x1);
+ points[11] = (float) (rect.y + y2);
- points[12] = (float) (rect.x + x1);
- points[13] = (float) (rect.y + y2);
- points[14] = (float) (rect.x + x1);
- points[15] = (float) (rect.y + y1);
+ points[12] = (float) (rect.x + x1);
+ points[13] = (float) (rect.y + y2);
+ points[14] = (float) (rect.x + x1);
+ points[15] = (float) (rect.y + y1);
- Video* video = screen->GetVideo();
- video->DrawScreenLines(4, points, color, blend);
+ Video* video = screen->GetVideo();
+ video->DrawScreenLines(4, points, color, blend);
}
void
Window::DrawRect(const Rect& r, Color color, int blend)
{
- DrawRect(r.x, r.y, r.x+r.w, r.y+r.h, color, blend);
+ DrawRect(r.x, r.y, r.x+r.w, r.y+r.h, color, blend);
}
// +--------------------------------------------------------------------+
@@ -307,63 +307,63 @@ Window::DrawRect(const Rect& r, Color color, int blend)
void
Window::FillRect(int x1, int y1, int x2, int y2, Color color, int blend)
{
- if (!screen || !screen->GetVideo()) return;
-
- sort(x1,x2);
- sort(y1,y2);
-
- if (x1 > rect.w || x2 < 0 || y1 > rect.h || y2 < 0)
- return;
-
- vset4.space = VertexSet::SCREEN_SPACE;
- for (int i = 0; i < 4; i++) {
- vset4.diffuse[i] = color.Value();
- }
-
- vset4.s_loc[0].x = (float) (rect.x + x1) - 0.5f;
- vset4.s_loc[0].y = (float) (rect.y + y1) - 0.5f;
- vset4.s_loc[0].z = 0.0f;
- vset4.rw[0] = 1.0f;
- vset4.tu[0] = 0.0f;
- vset4.tv[0] = 0.0f;
-
- vset4.s_loc[1].x = (float) (rect.x + x2) - 0.5f;
- vset4.s_loc[1].y = (float) (rect.y + y1) - 0.5f;
- vset4.s_loc[1].z = 0.0f;
- vset4.rw[1] = 1.0f;
- vset4.tu[1] = 1.0f;
- vset4.tv[1] = 0.0f;
-
- vset4.s_loc[2].x = (float) (rect.x + x2) - 0.5f;
- vset4.s_loc[2].y = (float) (rect.y + y2) - 0.5f;
- vset4.s_loc[2].z = 0.0f;
- vset4.rw[2] = 1.0f;
- vset4.tu[2] = 1.0f;
- vset4.tv[2] = 1.0f;
-
- vset4.s_loc[3].x = (float) (rect.x + x1) - 0.5f;
- vset4.s_loc[3].y = (float) (rect.y + y2) - 0.5f;
- vset4.s_loc[3].z = 0.0f;
- vset4.rw[3] = 1.0f;
- vset4.tu[3] = 0.0f;
- vset4.tv[3] = 1.0f;
-
- Poly poly(0);
- poly.nverts = 4;
- poly.vertex_set = &vset4;
- poly.verts[0] = 0;
- poly.verts[1] = 1;
- poly.verts[2] = 2;
- poly.verts[3] = 3;
-
- Video* video = screen->GetVideo();
- video->DrawScreenPolys(1, &poly, blend);
+ if (!screen || !screen->GetVideo()) return;
+
+ sort(x1,x2);
+ sort(y1,y2);
+
+ if (x1 > rect.w || x2 < 0 || y1 > rect.h || y2 < 0)
+ return;
+
+ vset4.space = VertexSet::SCREEN_SPACE;
+ for (int i = 0; i < 4; i++) {
+ vset4.diffuse[i] = color.Value();
+ }
+
+ vset4.s_loc[0].x = (float) (rect.x + x1) - 0.5f;
+ vset4.s_loc[0].y = (float) (rect.y + y1) - 0.5f;
+ vset4.s_loc[0].z = 0.0f;
+ vset4.rw[0] = 1.0f;
+ vset4.tu[0] = 0.0f;
+ vset4.tv[0] = 0.0f;
+
+ vset4.s_loc[1].x = (float) (rect.x + x2) - 0.5f;
+ vset4.s_loc[1].y = (float) (rect.y + y1) - 0.5f;
+ vset4.s_loc[1].z = 0.0f;
+ vset4.rw[1] = 1.0f;
+ vset4.tu[1] = 1.0f;
+ vset4.tv[1] = 0.0f;
+
+ vset4.s_loc[2].x = (float) (rect.x + x2) - 0.5f;
+ vset4.s_loc[2].y = (float) (rect.y + y2) - 0.5f;
+ vset4.s_loc[2].z = 0.0f;
+ vset4.rw[2] = 1.0f;
+ vset4.tu[2] = 1.0f;
+ vset4.tv[2] = 1.0f;
+
+ vset4.s_loc[3].x = (float) (rect.x + x1) - 0.5f;
+ vset4.s_loc[3].y = (float) (rect.y + y2) - 0.5f;
+ vset4.s_loc[3].z = 0.0f;
+ vset4.rw[3] = 1.0f;
+ vset4.tu[3] = 0.0f;
+ vset4.tv[3] = 1.0f;
+
+ Poly poly(0);
+ poly.nverts = 4;
+ poly.vertex_set = &vset4;
+ poly.verts[0] = 0;
+ poly.verts[1] = 1;
+ poly.verts[2] = 2;
+ poly.verts[3] = 3;
+
+ Video* video = screen->GetVideo();
+ video->DrawScreenPolys(1, &poly, blend);
}
void
Window::FillRect(const Rect& r, Color color, int blend)
{
- FillRect(r.x, r.y, r.x+r.w, r.y+r.h, color, blend);
+ FillRect(r.x, r.y, r.x+r.w, r.y+r.h, color, blend);
}
// +--------------------------------------------------------------------+
@@ -371,84 +371,84 @@ Window::FillRect(const Rect& r, Color color, int blend)
void
Window::DrawLines(int nPts, POINT* pts, Color color, int blend)
{
- if (nPts < 2 || nPts > 16)
- return;
+ if (nPts < 2 || nPts > 16)
+ return;
- if (!screen || !screen->GetVideo())
- return;
+ if (!screen || !screen->GetVideo())
+ return;
- float f[64];
- int n = 0;
+ float f[64];
+ int n = 0;
- for (int i = 0; i < nPts-1; i++) {
- f[n++] = (float) rect.x + pts[i].x;
- f[n++] = (float) rect.y + pts[i].y;
- f[n++] = (float) rect.x + pts[i+1].x;
- f[n++] = (float) rect.y + pts[i+1].y;
- }
+ for (int i = 0; i < nPts-1; i++) {
+ f[n++] = (float) rect.x + pts[i].x;
+ f[n++] = (float) rect.y + pts[i].y;
+ f[n++] = (float) rect.x + pts[i+1].x;
+ f[n++] = (float) rect.y + pts[i+1].y;
+ }
- Video* video = screen->GetVideo();
- video->DrawScreenLines(nPts-1, f, color, blend);
+ Video* video = screen->GetVideo();
+ video->DrawScreenLines(nPts-1, f, color, blend);
}
void
Window::DrawPoly(int nPts, POINT* pts, Color color, int blend)
{
- if (nPts < 3 || nPts > 8)
- return;
+ if (nPts < 3 || nPts > 8)
+ return;
- if (!screen || !screen->GetVideo())
- return;
+ if (!screen || !screen->GetVideo())
+ return;
- float f[32];
- int n = 0;
+ float f[32];
+ int n = 0;
- for (int i = 0; i < nPts-1; i++) {
- f[n++] = (float) rect.x + pts[i].x;
- f[n++] = (float) rect.y + pts[i].y;
- f[n++] = (float) rect.x + pts[i+1].x;
- f[n++] = (float) rect.y + pts[i+1].y;
- }
+ for (int i = 0; i < nPts-1; i++) {
+ f[n++] = (float) rect.x + pts[i].x;
+ f[n++] = (float) rect.y + pts[i].y;
+ f[n++] = (float) rect.x + pts[i+1].x;
+ f[n++] = (float) rect.y + pts[i+1].y;
+ }
- f[n++] = (float) rect.x + pts[nPts-1].x;
- f[n++] = (float) rect.y + pts[nPts-1].y;
- f[n++] = (float) rect.x + pts[0].x;
- f[n++] = (float) rect.y + pts[0].y;
+ f[n++] = (float) rect.x + pts[nPts-1].x;
+ f[n++] = (float) rect.y + pts[nPts-1].y;
+ f[n++] = (float) rect.x + pts[0].x;
+ f[n++] = (float) rect.y + pts[0].y;
- Video* video = screen->GetVideo();
- video->DrawScreenLines(nPts, f, color, blend);
+ Video* video = screen->GetVideo();
+ video->DrawScreenLines(nPts, f, color, blend);
}
void
Window::FillPoly(int nPts, POINT* pts, Color color, int blend)
{
- if (nPts < 3 || nPts > 4)
- return;
-
- if (!screen || !screen->GetVideo())
- return;
-
- vset4.space = VertexSet::SCREEN_SPACE;
- for (int i = 0; i < nPts; i++) {
- vset4.diffuse[i] = color.Value();
- vset4.s_loc[i].x = (float) (rect.x + pts[i].x) - 0.5f;
- vset4.s_loc[i].y = (float) (rect.y + pts[i].y) - 0.5f;
- vset4.s_loc[i].z = 0.0f;
- vset4.rw[i] = 1.0f;
- vset4.tu[i] = 0.0f;
- vset4.tv[i] = 0.0f;
- }
-
- Poly poly(0);
- poly.nverts = nPts;
- poly.vertex_set = &vset4;
- poly.verts[0] = 0;
- poly.verts[1] = 1;
- poly.verts[2] = 2;
- poly.verts[3] = 3;
-
- Video* video = screen->GetVideo();
- video->DrawScreenPolys(1, &poly, blend);
+ if (nPts < 3 || nPts > 4)
+ return;
+
+ if (!screen || !screen->GetVideo())
+ return;
+
+ vset4.space = VertexSet::SCREEN_SPACE;
+ for (int i = 0; i < nPts; i++) {
+ vset4.diffuse[i] = color.Value();
+ vset4.s_loc[i].x = (float) (rect.x + pts[i].x) - 0.5f;
+ vset4.s_loc[i].y = (float) (rect.y + pts[i].y) - 0.5f;
+ vset4.s_loc[i].z = 0.0f;
+ vset4.rw[i] = 1.0f;
+ vset4.tu[i] = 0.0f;
+ vset4.tv[i] = 0.0f;
+ }
+
+ Poly poly(0);
+ poly.nverts = nPts;
+ poly.vertex_set = &vset4;
+ poly.verts[0] = 0;
+ poly.verts[1] = 1;
+ poly.verts[2] = 2;
+ poly.verts[3] = 3;
+
+ Video* video = screen->GetVideo();
+ video->DrawScreenPolys(1, &poly, blend);
}
// +--------------------------------------------------------------------+
@@ -456,135 +456,135 @@ Window::FillPoly(int nPts, POINT* pts, Color color, int blend)
void
Window::DrawBitmap(int x1, int y1, int x2, int y2, Bitmap* img, int blend)
{
- Rect clip_rect;
- clip_rect.w = rect.w;
- clip_rect.h = rect.h;
+ Rect clip_rect;
+ clip_rect.w = rect.w;
+ clip_rect.h = rect.h;
- ClipBitmap(x1,y1,x2,y2,img,Color::White,blend,clip_rect);
+ ClipBitmap(x1,y1,x2,y2,img,Color::White,blend,clip_rect);
}
void
Window::FadeBitmap(int x1, int y1, int x2, int y2, Bitmap* img, Color c, int blend)
{
- Rect clip_rect;
- clip_rect.w = rect.w;
- clip_rect.h = rect.h;
+ Rect clip_rect;
+ clip_rect.w = rect.w;
+ clip_rect.h = rect.h;
- ClipBitmap(x1,y1,x2,y2,img,c,blend,clip_rect);
+ ClipBitmap(x1,y1,x2,y2,img,c,blend,clip_rect);
}
void
Window::ClipBitmap(int x1, int y1, int x2, int y2, Bitmap* img, Color c, int blend, const Rect& clip_rect)
{
- if (!screen || !screen->GetVideo() || !img) return;
-
- Rect clip = clip_rect;
-
- // clip the clip rect to the window rect:
- if (clip.x < 0) {
- clip.w -= clip.x;
- clip.x = 0;
- }
-
- if (clip.x + clip.w > rect.w) {
- clip.w -= (clip.x + clip.w - rect.w);
- }
-
- if (clip.y < 0) {
- clip.h -= clip.y;
- clip.y = 0;
- }
-
- if (clip.y + clip.h > rect.h) {
- clip.h -= (clip.y + clip.h - rect.h);
- }
-
- // now clip the bitmap to the validated clip rect:
- sort(x1,x2);
- sort(y1,y2);
-
- if (x1 > clip.x + clip.w || x2 < clip.x || y1 > clip.y + clip.h || y2 < clip.y)
- return;
-
- vset4.space = VertexSet::SCREEN_SPACE;
- for (int i = 0; i < 4; i++) {
- vset4.diffuse[i] = c.Value();
- }
-
- float u1 = 0.0f;
- float u2 = 1.0f;
- float v1 = 0.0f;
- float v2 = 1.0f;
- float iw = (float) (x2-x1);
- float ih = (float) (y2-y1);
- int x3 = clip.x + clip.w;
- int y3 = clip.y + clip.h;
-
- if (x1 < clip.x) {
- u1 = (clip.x - x1) / iw;
- x1 = clip.x;
- }
-
- if (x2 > x3) {
- u2 = 1.0f - (x2 - x3) / iw;
- x2 = x3;
- }
-
- if (y1 < clip.y) {
- v1 = (clip.y - y1) / ih;
- y1 = clip.y;
- }
-
- if (y2 > y3) {
- v2 = 1.0f - (y2 - y3) / ih;
- y2 = y3;
- }
-
- vset4.s_loc[0].x = (float) (rect.x + x1) - 0.5f;
- vset4.s_loc[0].y = (float) (rect.y + y1) - 0.5f;
- vset4.s_loc[0].z = 0.0f;
- vset4.rw[0] = 1.0f;
- vset4.tu[0] = u1;
- vset4.tv[0] = v1;
-
- vset4.s_loc[1].x = (float) (rect.x + x2) - 0.5f;
- vset4.s_loc[1].y = (float) (rect.y + y1) - 0.5f;
- vset4.s_loc[1].z = 0.0f;
- vset4.rw[1] = 1.0f;
- vset4.tu[1] = u2;
- vset4.tv[1] = v1;
-
- vset4.s_loc[2].x = (float) (rect.x + x2) - 0.5f;
- vset4.s_loc[2].y = (float) (rect.y + y2) - 0.5f;
- vset4.s_loc[2].z = 0.0f;
- vset4.rw[2] = 1.0f;
- vset4.tu[2] = u2;
- vset4.tv[2] = v2;
-
- vset4.s_loc[3].x = (float) (rect.x + x1) - 0.5f;
- vset4.s_loc[3].y = (float) (rect.y + y2) - 0.5f;
- vset4.s_loc[3].z = 0.0f;
- vset4.rw[3] = 1.0f;
- vset4.tu[3] = u1;
- vset4.tv[3] = v2;
-
- Material mtl;
- mtl.tex_diffuse = img;
-
- Poly poly(0);
- poly.nverts = 4;
- poly.vertex_set = &vset4;
- poly.material = &mtl;
- poly.verts[0] = 0;
- poly.verts[1] = 1;
- poly.verts[2] = 2;
- poly.verts[3] = 3;
-
- Video* video = screen->GetVideo();
-
- video->SetRenderState(Video::TEXTURE_WRAP, 0);
- video->DrawScreenPolys(1, &poly, blend);
- video->SetRenderState(Video::TEXTURE_WRAP, 1);
+ if (!screen || !screen->GetVideo() || !img) return;
+
+ Rect clip = clip_rect;
+
+ // clip the clip rect to the window rect:
+ if (clip.x < 0) {
+ clip.w -= clip.x;
+ clip.x = 0;
+ }
+
+ if (clip.x + clip.w > rect.w) {
+ clip.w -= (clip.x + clip.w - rect.w);
+ }
+
+ if (clip.y < 0) {
+ clip.h -= clip.y;
+ clip.y = 0;
+ }
+
+ if (clip.y + clip.h > rect.h) {
+ clip.h -= (clip.y + clip.h - rect.h);
+ }
+
+ // now clip the bitmap to the validated clip rect:
+ sort(x1,x2);
+ sort(y1,y2);
+
+ if (x1 > clip.x + clip.w || x2 < clip.x || y1 > clip.y + clip.h || y2 < clip.y)
+ return;
+
+ vset4.space = VertexSet::SCREEN_SPACE;
+ for (int i = 0; i < 4; i++) {
+ vset4.diffuse[i] = c.Value();
+ }
+
+ float u1 = 0.0f;
+ float u2 = 1.0f;
+ float v1 = 0.0f;
+ float v2 = 1.0f;
+ float iw = (float) (x2-x1);
+ float ih = (float) (y2-y1);
+ int x3 = clip.x + clip.w;
+ int y3 = clip.y + clip.h;
+
+ if (x1 < clip.x) {
+ u1 = (clip.x - x1) / iw;
+ x1 = clip.x;
+ }
+
+ if (x2 > x3) {
+ u2 = 1.0f - (x2 - x3) / iw;
+ x2 = x3;
+ }
+
+ if (y1 < clip.y) {
+ v1 = (clip.y - y1) / ih;
+ y1 = clip.y;
+ }
+
+ if (y2 > y3) {
+ v2 = 1.0f - (y2 - y3) / ih;
+ y2 = y3;
+ }
+
+ vset4.s_loc[0].x = (float) (rect.x + x1) - 0.5f;
+ vset4.s_loc[0].y = (float) (rect.y + y1) - 0.5f;
+ vset4.s_loc[0].z = 0.0f;
+ vset4.rw[0] = 1.0f;
+ vset4.tu[0] = u1;
+ vset4.tv[0] = v1;
+
+ vset4.s_loc[1].x = (float) (rect.x + x2) - 0.5f;
+ vset4.s_loc[1].y = (float) (rect.y + y1) - 0.5f;
+ vset4.s_loc[1].z = 0.0f;
+ vset4.rw[1] = 1.0f;
+ vset4.tu[1] = u2;
+ vset4.tv[1] = v1;
+
+ vset4.s_loc[2].x = (float) (rect.x + x2) - 0.5f;
+ vset4.s_loc[2].y = (float) (rect.y + y2) - 0.5f;
+ vset4.s_loc[2].z = 0.0f;
+ vset4.rw[2] = 1.0f;
+ vset4.tu[2] = u2;
+ vset4.tv[2] = v2;
+
+ vset4.s_loc[3].x = (float) (rect.x + x1) - 0.5f;
+ vset4.s_loc[3].y = (float) (rect.y + y2) - 0.5f;
+ vset4.s_loc[3].z = 0.0f;
+ vset4.rw[3] = 1.0f;
+ vset4.tu[3] = u1;
+ vset4.tv[3] = v2;
+
+ Material mtl;
+ mtl.tex_diffuse = img;
+
+ Poly poly(0);
+ poly.nverts = 4;
+ poly.vertex_set = &vset4;
+ poly.material = &mtl;
+ poly.verts[0] = 0;
+ poly.verts[1] = 1;
+ poly.verts[2] = 2;
+ poly.verts[3] = 3;
+
+ Video* video = screen->GetVideo();
+
+ video->SetRenderState(Video::TEXTURE_WRAP, 0);
+ video->DrawScreenPolys(1, &poly, blend);
+ video->SetRenderState(Video::TEXTURE_WRAP, 1);
}
// +--------------------------------------------------------------------+
@@ -592,59 +592,59 @@ Window::ClipBitmap(int x1, int y1, int x2, int y2, Bitmap* img, Color c, int ble
void
Window::TileBitmap(int x1, int y1, int x2, int y2, Bitmap* img, int blend)
{
- if (!screen || !screen->GetVideo()) return;
- if (!img || !img->Width() || !img->Height()) return;
-
- vset4.space = VertexSet::SCREEN_SPACE;
- for (int i = 0; i < 4; i++) {
- vset4.diffuse[i] = Color::White.Value();
- }
-
- float xscale = (float) rect.w / (float) img->Width();
- float yscale = (float) rect.h / (float) img->Height();
-
- vset4.s_loc[0].x = (float) (rect.x + x1) - 0.5f;
- vset4.s_loc[0].y = (float) (rect.y + y1) - 0.5f;
- vset4.s_loc[0].z = 0.0f;
- vset4.rw[0] = 1.0f;
- vset4.tu[0] = 0.0f;
- vset4.tv[0] = 0.0f;
-
- vset4.s_loc[1].x = (float) (rect.x + x2) - 0.5f;
- vset4.s_loc[1].y = (float) (rect.y + y1) - 0.5f;
- vset4.s_loc[1].z = 0.0f;
- vset4.rw[1] = 1.0f;
- vset4.tu[1] = xscale;
- vset4.tv[1] = 0.0f;
-
- vset4.s_loc[2].x = (float) (rect.x + x2) - 0.5f;
- vset4.s_loc[2].y = (float) (rect.y + y2) - 0.5f;
- vset4.s_loc[2].z = 0.0f;
- vset4.rw[2] = 1.0f;
- vset4.tu[2] = xscale;
- vset4.tv[2] = yscale;
-
- vset4.s_loc[3].x = (float) (rect.x + x1) - 0.5f;
- vset4.s_loc[3].y = (float) (rect.y + y2) - 0.5f;
- vset4.s_loc[3].z = 0.0f;
- vset4.rw[3] = 1.0f;
- vset4.tu[3] = 0.0f;
- vset4.tv[3] = yscale;
-
- Material mtl;
- mtl.tex_diffuse = img;
-
- Poly poly(0);
- poly.nverts = 4;
- poly.vertex_set = &vset4;
- poly.material = &mtl;
- poly.verts[0] = 0;
- poly.verts[1] = 1;
- poly.verts[2] = 2;
- poly.verts[3] = 3;
-
- Video* video = screen->GetVideo();
- video->DrawScreenPolys(1, &poly, blend);
+ if (!screen || !screen->GetVideo()) return;
+ if (!img || !img->Width() || !img->Height()) return;
+
+ vset4.space = VertexSet::SCREEN_SPACE;
+ for (int i = 0; i < 4; i++) {
+ vset4.diffuse[i] = Color::White.Value();
+ }
+
+ float xscale = (float) rect.w / (float) img->Width();
+ float yscale = (float) rect.h / (float) img->Height();
+
+ vset4.s_loc[0].x = (float) (rect.x + x1) - 0.5f;
+ vset4.s_loc[0].y = (float) (rect.y + y1) - 0.5f;
+ vset4.s_loc[0].z = 0.0f;
+ vset4.rw[0] = 1.0f;
+ vset4.tu[0] = 0.0f;
+ vset4.tv[0] = 0.0f;
+
+ vset4.s_loc[1].x = (float) (rect.x + x2) - 0.5f;
+ vset4.s_loc[1].y = (float) (rect.y + y1) - 0.5f;
+ vset4.s_loc[1].z = 0.0f;
+ vset4.rw[1] = 1.0f;
+ vset4.tu[1] = xscale;
+ vset4.tv[1] = 0.0f;
+
+ vset4.s_loc[2].x = (float) (rect.x + x2) - 0.5f;
+ vset4.s_loc[2].y = (float) (rect.y + y2) - 0.5f;
+ vset4.s_loc[2].z = 0.0f;
+ vset4.rw[2] = 1.0f;
+ vset4.tu[2] = xscale;
+ vset4.tv[2] = yscale;
+
+ vset4.s_loc[3].x = (float) (rect.x + x1) - 0.5f;
+ vset4.s_loc[3].y = (float) (rect.y + y2) - 0.5f;
+ vset4.s_loc[3].z = 0.0f;
+ vset4.rw[3] = 1.0f;
+ vset4.tu[3] = 0.0f;
+ vset4.tv[3] = yscale;
+
+ Material mtl;
+ mtl.tex_diffuse = img;
+
+ Poly poly(0);
+ poly.nverts = 4;
+ poly.vertex_set = &vset4;
+ poly.material = &mtl;
+ poly.verts[0] = 0;
+ poly.verts[1] = 1;
+ poly.verts[2] = 2;
+ poly.verts[3] = 3;
+
+ Video* video = screen->GetVideo();
+ video->DrawScreenPolys(1, &poly, blend);
}
// +--------------------------------------------------------------------+
@@ -654,220 +654,220 @@ static float ellipse_pts[256];
void
Window::DrawEllipse(int x1, int y1, int x2, int y2, Color color, int blend)
{
- Video* video = screen->GetVideo();
+ Video* video = screen->GetVideo();
- if (!video)
- return;
+ if (!video)
+ return;
- sort(x1,x2);
- sort(y1,y2);
+ sort(x1,x2);
+ sort(y1,y2);
- if (x1 > rect.w || x2 < 0 || y1 > rect.h || y2 < 0)
- return;
+ if (x1 > rect.w || x2 < 0 || y1 > rect.h || y2 < 0)
+ return;
- double w2 = (x2-x1)/2.0;
- double h2 = (y2-y1)/2.0;
- double cx = rect.x + x1 + w2;
- double cy = rect.y + y1 + h2;
- double r = w2;
- int ns = 4;
- int np = 0;
+ double w2 = (x2-x1)/2.0;
+ double h2 = (y2-y1)/2.0;
+ double cx = rect.x + x1 + w2;
+ double cy = rect.y + y1 + h2;
+ double r = w2;
+ int ns = 4;
+ int np = 0;
- if (h2 > r)
- r = h2;
+ if (h2 > r)
+ r = h2;
- if (r > 2*ns)
- ns = (int) (r/2);
+ if (r > 2*ns)
+ ns = (int) (r/2);
- if (ns > 64)
- ns = 64;
+ if (ns > 64)
+ ns = 64;
- double theta = 0;
- double dt = (PI/2) / ns;
+ double theta = 0;
+ double dt = (PI/2) / ns;
- // quadrant 1 (lower right):
- if (cx < (rect.x+rect.w) && cy < (rect.y + rect.h)) {
- theta = 0;
- np = 0;
+ // quadrant 1 (lower right):
+ if (cx < (rect.x+rect.w) && cy < (rect.y + rect.h)) {
+ theta = 0;
+ np = 0;
- for (int i = 0; i < ns; i++) {
- double ex1 = x1 + w2 + cos(theta) * w2;
- double ey1 = y1 + h2 + sin(theta) * h2;
+ for (int i = 0; i < ns; i++) {
+ double ex1 = x1 + w2 + cos(theta) * w2;
+ double ey1 = y1 + h2 + sin(theta) * h2;
- theta += dt;
+ theta += dt;
- double ex2 = x1 + w2 + cos(theta) * w2;
- double ey2 = y1 + h2 + sin(theta) * h2;
+ double ex2 = x1 + w2 + cos(theta) * w2;
+ double ey2 = y1 + h2 + sin(theta) * h2;
- if (ClipLine(ex1, ey1, ex2, ey2)) {
- ellipse_pts[np++] = (float) (rect.x + ex1);
- ellipse_pts[np++] = (float) (rect.y + ey1);
- ellipse_pts[np++] = (float) (rect.x + ex2);
- ellipse_pts[np++] = (float) (rect.y + ey2);
- }
- }
+ if (ClipLine(ex1, ey1, ex2, ey2)) {
+ ellipse_pts[np++] = (float) (rect.x + ex1);
+ ellipse_pts[np++] = (float) (rect.y + ey1);
+ ellipse_pts[np++] = (float) (rect.x + ex2);
+ ellipse_pts[np++] = (float) (rect.y + ey2);
+ }
+ }
- video->DrawScreenLines(np/4, ellipse_pts, color, blend);
- }
+ video->DrawScreenLines(np/4, ellipse_pts, color, blend);
+ }
- // quadrant 2 (lower left):
- if (cx > rect.x && cy < (rect.y + rect.h)) {
- theta = 90*DEGREES;
- np = 0;
+ // quadrant 2 (lower left):
+ if (cx > rect.x && cy < (rect.y + rect.h)) {
+ theta = 90*DEGREES;
+ np = 0;
- for (int i = 0; i < ns; i++) {
- double ex1 = x1 + w2 + cos(theta) * w2;
- double ey1 = y1 + h2 + sin(theta) * h2;
+ for (int i = 0; i < ns; i++) {
+ double ex1 = x1 + w2 + cos(theta) * w2;
+ double ey1 = y1 + h2 + sin(theta) * h2;
- theta += dt;
+ theta += dt;
- double ex2 = x1 + w2 + cos(theta) * w2;
- double ey2 = y1 + h2 + sin(theta) * h2;
+ double ex2 = x1 + w2 + cos(theta) * w2;
+ double ey2 = y1 + h2 + sin(theta) * h2;
- if (ClipLine(ex1, ey1, ex2, ey2)) {
- ellipse_pts[np++] = (float) (rect.x + ex1);
- ellipse_pts[np++] = (float) (rect.y + ey1);
- ellipse_pts[np++] = (float) (rect.x + ex2);
- ellipse_pts[np++] = (float) (rect.y + ey2);
- }
- }
+ if (ClipLine(ex1, ey1, ex2, ey2)) {
+ ellipse_pts[np++] = (float) (rect.x + ex1);
+ ellipse_pts[np++] = (float) (rect.y + ey1);
+ ellipse_pts[np++] = (float) (rect.x + ex2);
+ ellipse_pts[np++] = (float) (rect.y + ey2);
+ }
+ }
- video->DrawScreenLines(np/4, ellipse_pts, color, blend);
- }
+ video->DrawScreenLines(np/4, ellipse_pts, color, blend);
+ }
- // quadrant 3 (upper left):
- if (cx > rect.x && cy > rect.y) {
- theta = 180*DEGREES;
- np = 0;
+ // quadrant 3 (upper left):
+ if (cx > rect.x && cy > rect.y) {
+ theta = 180*DEGREES;
+ np = 0;
- for (int i = 0; i < ns; i++) {
- double ex1 = x1 + w2 + cos(theta) * w2;
- double ey1 = y1 + h2 + sin(theta) * h2;
+ for (int i = 0; i < ns; i++) {
+ double ex1 = x1 + w2 + cos(theta) * w2;
+ double ey1 = y1 + h2 + sin(theta) * h2;
- theta += dt;
+ theta += dt;
- double ex2 = x1 + w2 + cos(theta) * w2;
- double ey2 = y1 + h2 + sin(theta) * h2;
+ double ex2 = x1 + w2 + cos(theta) * w2;
+ double ey2 = y1 + h2 + sin(theta) * h2;
- if (ClipLine(ex1, ey1, ex2, ey2)) {
- ellipse_pts[np++] = (float) (rect.x + ex1);
- ellipse_pts[np++] = (float) (rect.y + ey1);
- ellipse_pts[np++] = (float) (rect.x + ex2);
- ellipse_pts[np++] = (float) (rect.y + ey2);
- }
- }
+ if (ClipLine(ex1, ey1, ex2, ey2)) {
+ ellipse_pts[np++] = (float) (rect.x + ex1);
+ ellipse_pts[np++] = (float) (rect.y + ey1);
+ ellipse_pts[np++] = (float) (rect.x + ex2);
+ ellipse_pts[np++] = (float) (rect.y + ey2);
+ }
+ }
- video->DrawScreenLines(np/4, ellipse_pts, color, blend);
- }
+ video->DrawScreenLines(np/4, ellipse_pts, color, blend);
+ }
- // quadrant 4 (upper right):
- if (cx < (rect.x+rect.w) && cy > rect.y) {
- theta = 270*DEGREES;
- np = 0;
+ // quadrant 4 (upper right):
+ if (cx < (rect.x+rect.w) && cy > rect.y) {
+ theta = 270*DEGREES;
+ np = 0;
- for (int i = 0; i < ns; i++) {
- double ex1 = x1 + w2 + cos(theta) * w2;
- double ey1 = y1 + h2 + sin(theta) * h2;
+ for (int i = 0; i < ns; i++) {
+ double ex1 = x1 + w2 + cos(theta) * w2;
+ double ey1 = y1 + h2 + sin(theta) * h2;
- theta += dt;
+ theta += dt;
- double ex2 = x1 + w2 + cos(theta) * w2;
- double ey2 = y1 + h2 + sin(theta) * h2;
+ double ex2 = x1 + w2 + cos(theta) * w2;
+ double ey2 = y1 + h2 + sin(theta) * h2;
- if (ClipLine(ex1, ey1, ex2, ey2)) {
- ellipse_pts[np++] = (float) (rect.x + ex1);
- ellipse_pts[np++] = (float) (rect.y + ey1);
- ellipse_pts[np++] = (float) (rect.x + ex2);
- ellipse_pts[np++] = (float) (rect.y + ey2);
- }
- }
+ if (ClipLine(ex1, ey1, ex2, ey2)) {
+ ellipse_pts[np++] = (float) (rect.x + ex1);
+ ellipse_pts[np++] = (float) (rect.y + ey1);
+ ellipse_pts[np++] = (float) (rect.x + ex2);
+ ellipse_pts[np++] = (float) (rect.y + ey2);
+ }
+ }
- video->DrawScreenLines(np/4, ellipse_pts, color, blend);
- }
+ video->DrawScreenLines(np/4, ellipse_pts, color, blend);
+ }
}
void
Window::FillEllipse(int x1, int y1, int x2, int y2, Color color, int blend)
{
- Video* video = screen->GetVideo();
+ Video* video = screen->GetVideo();
- if (!video)
- return;
+ if (!video)
+ return;
- sort(x1,x2);
- sort(y1,y2);
+ sort(x1,x2);
+ sort(y1,y2);
- if (x1 > rect.w || x2 < 0 || y1 > rect.h || y2 < 0)
- return;
+ if (x1 > rect.w || x2 < 0 || y1 > rect.h || y2 < 0)
+ return;
- double w2 = (x2-x1)/2.0;
- double h2 = (y2-y1)/2.0;
- double cx = x1 + w2;
- double cy = y1 + h2;
- double r = w2;
- int ns = 4;
- int np = 0;
+ double w2 = (x2-x1)/2.0;
+ double h2 = (y2-y1)/2.0;
+ double cx = x1 + w2;
+ double cy = y1 + h2;
+ double r = w2;
+ int ns = 4;
+ int np = 0;
- if (h2 > r)
- r = h2;
+ if (h2 > r)
+ r = h2;
- if (r > 2*ns)
- ns = (int) (r/2);
+ if (r > 2*ns)
+ ns = (int) (r/2);
- if (ns > 64)
- ns = 64;
+ if (ns > 64)
+ ns = 64;
- double theta = -PI / 2;
- double dt = PI / ns;
+ double theta = -PI / 2;
+ double dt = PI / ns;
- for (int i = 0; i < ns; i++) {
- double ex1 = cos(theta) * w2;
- double ey1 = sin(theta) * h2;
+ for (int i = 0; i < ns; i++) {
+ double ex1 = cos(theta) * w2;
+ double ey1 = sin(theta) * h2;
- theta += dt;
+ theta += dt;
- double ex2 = cos(theta) * w2;
- double ey2 = sin(theta) * h2;
+ double ex2 = cos(theta) * w2;
+ double ey2 = sin(theta) * h2;
- POINT pts[4];
+ POINT pts[4];
- pts[0].x = (int) (cx - ex1);
- pts[0].y = (int) (cy + ey1);
+ pts[0].x = (int) (cx - ex1);
+ pts[0].y = (int) (cy + ey1);
- pts[1].x = (int) (cx + ex1);
- pts[1].y = (int) (cy + ey1);
+ pts[1].x = (int) (cx + ex1);
+ pts[1].y = (int) (cy + ey1);
- pts[2].x = (int) (cx + ex2);
- pts[2].y = (int) (cy + ey2);
+ pts[2].x = (int) (cx + ex2);
+ pts[2].y = (int) (cy + ey2);
- pts[3].x = (int) (cx - ex2);
- pts[3].y = (int) (cy + ey2);
+ pts[3].x = (int) (cx - ex2);
+ pts[3].y = (int) (cy + ey2);
- if (pts[0].x > rect.w && pts[3].x > rect.w)
- continue;
+ if (pts[0].x > rect.w && pts[3].x > rect.w)
+ continue;
- if (pts[1].x < 0 && pts[2].x < 0)
- continue;
+ if (pts[1].x < 0 && pts[2].x < 0)
+ continue;
- if (pts[0].y > rect.h)
- return;
-
- if (pts[2].y < 0)
- continue;
+ if (pts[0].y > rect.h)
+ return;
+
+ if (pts[2].y < 0)
+ continue;
- if (pts[0].x < 0) pts[0].x = 0;
- if (pts[3].x < 0) pts[3].x = 0;
- if (pts[1].x > rect.w) pts[1].x = rect.w;
- if (pts[2].x > rect.w) pts[2].x = rect.w;
+ if (pts[0].x < 0) pts[0].x = 0;
+ if (pts[3].x < 0) pts[3].x = 0;
+ if (pts[1].x > rect.w) pts[1].x = rect.w;
+ if (pts[2].x > rect.w) pts[2].x = rect.w;
- if (pts[0].y < 0) pts[0].y = 0;
- if (pts[1].y < 0) pts[1].y = 0;
- if (pts[2].y > rect.h) pts[2].y = rect.h;
- if (pts[3].y > rect.h) pts[3].y = rect.h;
+ if (pts[0].y < 0) pts[0].y = 0;
+ if (pts[1].y < 0) pts[1].y = 0;
+ if (pts[2].y > rect.h) pts[2].y = rect.h;
+ if (pts[3].y > rect.h) pts[3].y = rect.h;
- FillPoly(4, pts, color, blend);
- }
+ FillPoly(4, pts, color, blend);
+ }
}
// +--------------------------------------------------------------------+
@@ -875,62 +875,62 @@ Window::FillEllipse(int x1, int y1, int x2, int y2, Color color, int blend)
void
Window::Print(int x1, int y1, const char* fmt, ...)
{
- if (!font || x1<0 || y1<0 || x1>=rect.w || y1>=rect.h || !fmt)
- return;
+ if (!font || x1<0 || y1<0 || x1>=rect.w || y1>=rect.h || !fmt)
+ return;
- x1 += rect.x;
- y1 += rect.y;
+ x1 += rect.x;
+ y1 += rect.y;
- char msgbuf[512];
- vsprintf_s(msgbuf, fmt, (char *)(&fmt+1));
- font->DrawString(msgbuf, strlen(msgbuf), x1, y1, rect);
+ char msgbuf[512];
+ vsprintf_s(msgbuf, fmt, (char *)(&fmt+1));
+ font->DrawString(msgbuf, strlen(msgbuf), x1, y1, rect);
}
void
Window::DrawText(const char* txt, int count, Rect& txt_rect, DWORD flags)
{
- if (!font)
- return;
+ if (!font)
+ return;
- if (txt && !count)
- count = strlen(txt);
+ if (txt && !count)
+ count = strlen(txt);
- // clip the rect:
- Rect clip_rect = txt_rect;
+ // clip the rect:
+ Rect clip_rect = txt_rect;
- if (clip_rect.x < 0) {
- int dx = -clip_rect.x;
- clip_rect.x += dx;
- clip_rect.w -= dx;
- }
+ if (clip_rect.x < 0) {
+ int dx = -clip_rect.x;
+ clip_rect.x += dx;
+ clip_rect.w -= dx;
+ }
- if (clip_rect.y < 0) {
- int dy = -clip_rect.y;
- clip_rect.y += dy;
- clip_rect.h -= dy;
- }
+ if (clip_rect.y < 0) {
+ int dy = -clip_rect.y;
+ clip_rect.y += dy;
+ clip_rect.h -= dy;
+ }
- if (clip_rect.w < 1 || clip_rect.h < 1)
- return;
+ if (clip_rect.w < 1 || clip_rect.h < 1)
+ return;
- if (clip_rect.x + clip_rect.w > rect.w)
- clip_rect.w = rect.w - clip_rect.x;
+ if (clip_rect.x + clip_rect.w > rect.w)
+ clip_rect.w = rect.w - clip_rect.x;
- if (clip_rect.y + clip_rect.h > rect.h)
- clip_rect.h = rect.h - clip_rect.y;
+ if (clip_rect.y + clip_rect.h > rect.h)
+ clip_rect.h = rect.h - clip_rect.y;
- clip_rect.x += rect.x;
- clip_rect.y += rect.y;
+ clip_rect.x += rect.x;
+ clip_rect.y += rect.y;
- if (font && txt && count) {
- font->DrawText(txt, count, clip_rect, flags);
- font->SetAlpha(1);
- }
+ if (font && txt && count) {
+ font->DrawText(txt, count, clip_rect, flags);
+ font->SetAlpha(1);
+ }
- // if calc only, update the rectangle:
- if (flags & DT_CALCRECT) {
- txt_rect.h = clip_rect.h;
- txt_rect.w = clip_rect.w;
- }
+ // if calc only, update the rectangle:
+ if (flags & DT_CALCRECT) {
+ txt_rect.h = clip_rect.h;
+ txt_rect.w = clip_rect.w;
+ }
}