Use C99 integer types and C++ boolean types/values

This change comprehensively replaces the use of Microsoft-standard integer
and boolean types with their C99/C++ standard equivalents, as the latter is
more appropriate for a cross-platform application. With matter-of-course
exceptions in the Win32-specific code, the types/values have been converted
as follows:

    QWORD  --> uint64_t
    SQWORD --> int64_t
    DWORD  --> uint32_t
    SDWORD --> int32_t
    WORD   --> uint16_t
    SWORD  --> int16_t
    BYTE   --> uint8_t
    BOOL   --> bool
    TRUE   --> true
    FALSE  --> false

The following related changes are also included:

* Added C99 integer type definitions for Windows, as stdint.h is not
  available prior to Visual Studio 2010

* Changed types of some variables in the SolveSpace class from 'int' to
  'bool', as they actually represent boolean settings

* Implemented new Cnf{Freeze,Thaw}Bool() functions to support boolean
  variables in the Registry

* Cnf{Freeze,Thaw}DWORD() are now Cnf{Freeze,Thaw}Int()

* TtfFont::Get{WORD,DWORD}() are now TtfFont::Get{USHORT,ULONG}() (names
  inspired by the OpenType spec)

* RGB colors are packed into an integer of type uint32_t (nee DWORD), but
  in a few places, these were represented by an int; these have been
  corrected to uint32_t
pull/3/head
Daniel Richard G 2013-10-02 01:45:13 -04:00
parent 505e3d869c
commit dd168ad22c
39 changed files with 703 additions and 687 deletions

View File

@ -1,4 +1,4 @@
static const BYTE FontTexture[256*16*16] = {
static const uint8_t FontTexture[256*16*16] = {
0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0,
0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0,
0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0,

View File

@ -277,7 +277,7 @@ bool TextWindow::EditControlDoneForPaste(const char *s) {
return true;
}
void TextWindow::ScreenChangePasteTransformed(int link, DWORD v) {
void TextWindow::ScreenChangePasteTransformed(int link, uint32_t v) {
char str[300];
switch(link) {
case 't':
@ -300,7 +300,7 @@ void TextWindow::ScreenChangePasteTransformed(int link, DWORD v) {
}
}
void TextWindow::ScreenPasteTransformed(int link, DWORD v) {
void TextWindow::ScreenPasteTransformed(int link, uint32_t v) {
SS.GW.GroupSelection();
switch(link) {
case 'o':

View File

@ -6,7 +6,7 @@
//-----------------------------------------------------------------------------
#include "solvespace.h"
void TextWindow::ScreenChangeLightDirection(int link, DWORD v) {
void TextWindow::ScreenChangeLightDirection(int link, uint32_t v) {
char str[1024];
sprintf(str, "%.2f, %.2f, %.2f", CO(SS.lightDir[v]));
SS.TW.ShowEditControl(29+2*v, 8, str);
@ -14,7 +14,7 @@ void TextWindow::ScreenChangeLightDirection(int link, DWORD v) {
SS.TW.edit.i = v;
}
void TextWindow::ScreenChangeLightIntensity(int link, DWORD v) {
void TextWindow::ScreenChangeLightIntensity(int link, uint32_t v) {
char str[1024];
sprintf(str, "%.2f", SS.lightIntensity[v]);
SS.TW.ShowEditControl(29+2*v, 31, str);
@ -22,47 +22,47 @@ void TextWindow::ScreenChangeLightIntensity(int link, DWORD v) {
SS.TW.edit.i = v;
}
void TextWindow::ScreenChangeColor(int link, DWORD v) {
void TextWindow::ScreenChangeColor(int link, uint32_t v) {
SS.TW.ShowEditControlWithColorPicker(9+2*v, 13, SS.modelColor[v]);
SS.TW.edit.meaning = EDIT_COLOR;
SS.TW.edit.i = v;
}
void TextWindow::ScreenChangeChordTolerance(int link, DWORD v) {
void TextWindow::ScreenChangeChordTolerance(int link, uint32_t v) {
char str[1024];
sprintf(str, "%.2f", SS.chordTol);
SS.TW.ShowEditControl(37, 3, str);
SS.TW.edit.meaning = EDIT_CHORD_TOLERANCE;
}
void TextWindow::ScreenChangeMaxSegments(int link, DWORD v) {
void TextWindow::ScreenChangeMaxSegments(int link, uint32_t v) {
char str[1024];
sprintf(str, "%d", SS.maxSegments);
SS.TW.ShowEditControl(41, 3, str);
SS.TW.edit.meaning = EDIT_MAX_SEGMENTS;
}
void TextWindow::ScreenChangeCameraTangent(int link, DWORD v) {
void TextWindow::ScreenChangeCameraTangent(int link, uint32_t v) {
char str[1024];
sprintf(str, "%.3f", 1000*SS.cameraTangent);
SS.TW.ShowEditControl(47, 3, str);
SS.TW.edit.meaning = EDIT_CAMERA_TANGENT;
}
void TextWindow::ScreenChangeGridSpacing(int link, DWORD v) {
void TextWindow::ScreenChangeGridSpacing(int link, uint32_t v) {
SS.TW.ShowEditControl(51, 3, SS.MmToString(SS.gridSpacing));
SS.TW.edit.meaning = EDIT_GRID_SPACING;
}
void TextWindow::ScreenChangeDigitsAfterDecimal(int link, DWORD v) {
void TextWindow::ScreenChangeDigitsAfterDecimal(int link, uint32_t v) {
char buf[128];
sprintf(buf, "%d", SS.UnitDigitsAfterDecimal());
SS.TW.ShowEditControl(55, 3, buf);
SS.TW.edit.meaning = EDIT_DIGITS_AFTER_DECIMAL;
}
void TextWindow::ScreenChangeExportScale(int link, DWORD v) {
void TextWindow::ScreenChangeExportScale(int link, uint32_t v) {
char str[1024];
sprintf(str, "%.3f", (double)SS.exportScale);
@ -70,36 +70,36 @@ void TextWindow::ScreenChangeExportScale(int link, DWORD v) {
SS.TW.edit.meaning = EDIT_EXPORT_SCALE;
}
void TextWindow::ScreenChangeExportOffset(int link, DWORD v) {
void TextWindow::ScreenChangeExportOffset(int link, uint32_t v) {
SS.TW.ShowEditControl(65, 3, SS.MmToString(SS.exportOffset));
SS.TW.edit.meaning = EDIT_EXPORT_OFFSET;
}
void TextWindow::ScreenChangeFixExportColors(int link, DWORD v) {
void TextWindow::ScreenChangeFixExportColors(int link, uint32_t v) {
SS.fixExportColors = !SS.fixExportColors;
}
void TextWindow::ScreenChangeBackFaces(int link, DWORD v) {
void TextWindow::ScreenChangeBackFaces(int link, uint32_t v) {
SS.drawBackFaces = !SS.drawBackFaces;
InvalidateGraphics();
}
void TextWindow::ScreenChangeCheckClosedContour(int link, DWORD v) {
void TextWindow::ScreenChangeCheckClosedContour(int link, uint32_t v) {
SS.checkClosedContour = !SS.checkClosedContour;
InvalidateGraphics();
}
void TextWindow::ScreenChangeShadedTriangles(int link, DWORD v) {
void TextWindow::ScreenChangeShadedTriangles(int link, uint32_t v) {
SS.exportShadedTriangles = !SS.exportShadedTriangles;
InvalidateGraphics();
}
void TextWindow::ScreenChangePwlCurves(int link, DWORD v) {
void TextWindow::ScreenChangePwlCurves(int link, uint32_t v) {
SS.exportPwlCurves = !SS.exportPwlCurves;
InvalidateGraphics();
}
void TextWindow::ScreenChangeCanvasSizeAuto(int link, DWORD v) {
void TextWindow::ScreenChangeCanvasSizeAuto(int link, uint32_t v) {
if(link == 't') {
SS.exportCanvasSizeAuto = true;
} else {
@ -108,7 +108,7 @@ void TextWindow::ScreenChangeCanvasSizeAuto(int link, DWORD v) {
InvalidateGraphics();
}
void TextWindow::ScreenChangeCanvasSize(int link, DWORD v) {
void TextWindow::ScreenChangeCanvasSize(int link, uint32_t v) {
double d;
switch(v) {
case 0: d = SS.exportMargin.left; break;
@ -136,7 +136,7 @@ void TextWindow::ScreenChangeCanvasSize(int link, DWORD v) {
SS.TW.edit.i = v;
}
void TextWindow::ScreenChangeGCodeParameter(int link, DWORD v) {
void TextWindow::ScreenChangeGCodeParameter(int link, uint32_t v) {
char buf[1024] = "";
int row = 93;
switch(link) {

View File

@ -6,11 +6,11 @@
//-----------------------------------------------------------------------------
#include "solvespace.h"
void TextWindow::ScreenUnselectAll(int link, DWORD v) {
void TextWindow::ScreenUnselectAll(int link, uint32_t v) {
GraphicsWindow::MenuEdit(GraphicsWindow::MNU_UNSELECT_ALL);
}
void TextWindow::ScreenEditTtfText(int link, DWORD v) {
void TextWindow::ScreenEditTtfText(int link, uint32_t v) {
hRequest hr = { v };
Request *r = SK.GetRequest(hr);
@ -20,7 +20,7 @@ void TextWindow::ScreenEditTtfText(int link, DWORD v) {
}
#define gs (SS.GW.gs)
void TextWindow::ScreenSetTtfFont(int link, DWORD v) {
void TextWindow::ScreenSetTtfFont(int link, uint32_t v) {
int i = (int)v;
if(i < 0) return;
if(i >= SS.fonts.l.n) return;

View File

@ -61,7 +61,7 @@ void GraphicsWindow::Selection::Draw(void) {
topLeft = topLeft.Minus(SS.GW.offset);
glLineWidth(40);
DWORD rgb = Style::Color(Style::HOVERED);
uint32_t rgb = Style::Color(Style::HOVERED);
glColor4d(REDf(rgb), GREENf(rgb), BLUEf(rgb), 0.2);
glBegin(GL_LINES);
glxVertex3v(topLeft);
@ -366,7 +366,7 @@ void GraphicsWindow::HitTestMakeSelection(Point2d mp) {
Group *g = SK.GetGroup(activeGroup);
SMesh *m = &(g->displayMesh);
DWORD v = m->FirstIntersectionWith(mp);
uint32_t v = m->FirstIntersectionWith(mp);
if(v) {
s.entity.v = v;
}
@ -517,7 +517,7 @@ void GraphicsWindow::Paint(void) {
BLUEf(SS.backgroundColor), 1.0f);
} else {
// Draw a different background whenever we're having solve problems.
DWORD rgb = Style::Color(Style::DRAW_ERROR);
uint32_t rgb = Style::Color(Style::DRAW_ERROR);
glClearColor(0.4f*REDf(rgb), 0.4f*GREENf(rgb), 0.4f*BLUEf(rgb), 1.0f);
// And show the text window, which has info to debug it
ForceTextWindowShown();

View File

@ -562,7 +562,7 @@ void Constraint::DrawOrGetDistance(Vector *labelPos) {
// Let's adjust the color of this constraint to have the same
// rough luma as the point color, so that the constraint does not
// stand out in an ugly way.
DWORD cd = Style::Color(Style::DATUM),
uint32_t cd = Style::Color(Style::DATUM),
cc = Style::Color(Style::CONSTRAINT);
// convert from 8-bit color to a vector
Vector vd = Vector::From(REDf(cd), GREENf(cd), BLUEf(cd)),

7
dsc.h
View File

@ -7,9 +7,6 @@
#ifndef __DSC_H
#define __DSC_H
typedef unsigned long DWORD;
typedef unsigned char BYTE;
class Vector;
class Vector4;
class Point2d;
@ -232,8 +229,8 @@ public:
int n;
int elemsAllocated;
DWORD MaximumId(void) {
DWORD id = 0;
uint32_t MaximumId(void) {
uint32_t id = 0;
int i;
for(i = 0; i < n; i++) {

View File

@ -503,11 +503,11 @@ void VectorFileWriter::Output(SBezierLoopSetSet *sblss, SMesh *sm) {
b = sbl->l.First();
if(!b || !Style::Exportable(b->auxA)) continue;
hStyle hs = { (DWORD)b->auxA };
hStyle hs = { (uint32_t)b->auxA };
Style *stl = Style::Get(hs);
double lineWidth = Style::WidthMm(b->auxA)*s;
DWORD strokeRgb = Style::Color(hs, true);
DWORD fillRgb = Style::FillColor(hs, true);
uint32_t strokeRgb = Style::Color(hs, true);
uint32_t fillRgb = Style::FillColor(hs, true);
StartPath(strokeRgb, lineWidth, stl->filled, fillRgb);
for(sbl = sbls->l.First(); sbl; sbl = sbls->l.NextAfter(sbl)) {
@ -608,7 +608,7 @@ void SolveSpace::ExportMeshAsStlTo(FILE *f, SMesh *sm) {
strcpy(str, "STL exported mesh");
fwrite(str, 1, 80, f);
DWORD n = sm->l.n;
uint32_t n = sm->l.n;
fwrite(&n, 4, 1, f);
double s = SS.exportScale;
@ -677,7 +677,7 @@ void SolveSpace::ExportAsPngTo(char *filename) {
int w = (int)SS.GW.width, h = (int)SS.GW.height;
// No guarantee that the back buffer contains anything valid right now,
// so repaint the scene. And hide the toolbar too.
int prevShowToolbar = SS.showToolbar;
bool prevShowToolbar = SS.showToolbar;
SS.showToolbar = false;
SS.GW.Paint();
SS.showToolbar = prevShowToolbar;
@ -708,8 +708,8 @@ void SolveSpace::ExportAsPngTo(char *filename) {
png_write_info(png_ptr, info_ptr);
// Get the pixel data from the framebuffer
BYTE *pixels; pixels = (BYTE *)AllocTemporary(3*w*h);
BYTE **rowptrs; rowptrs = (BYTE **)AllocTemporary(h*sizeof(BYTE *));
uint8_t *pixels; pixels = (uint8_t *)AllocTemporary(3*w*h);
uint8_t **rowptrs; rowptrs = (uint8_t **)AllocTemporary(h*sizeof(uint8_t *));
glReadPixels(0, 0, w, h, GL_RGB, GL_UNSIGNED_BYTE, pixels);
int y;

View File

@ -64,12 +64,12 @@ void DxfFileWriter::StartFile(void) {
"ENTITIES\r\n");
}
void DxfFileWriter::StartPath(DWORD strokeRgb, double lineWidth,
bool filled, DWORD fillRgb)
void DxfFileWriter::StartPath(uint32_t strokeRgb, double lineWidth,
bool filled, uint32_t fillRgb)
{
}
void DxfFileWriter::FinishPath(DWORD strokeRgb, double lineWidth,
bool filled, DWORD fillRgb)
void DxfFileWriter::FinishPath(uint32_t strokeRgb, double lineWidth,
bool filled, uint32_t fillRgb)
{
}
@ -165,14 +165,14 @@ void EpsFileWriter::StartFile(void) {
MmToPts(ptMax.y - ptMin.y));
}
void EpsFileWriter::StartPath(DWORD strokeRgb, double lineWidth,
bool filled, DWORD fillRgb)
void EpsFileWriter::StartPath(uint32_t strokeRgb, double lineWidth,
bool filled, uint32_t fillRgb)
{
fprintf(f, "newpath\r\n");
prevPt = Vector::From(VERY_POSITIVE, VERY_POSITIVE, VERY_POSITIVE);
}
void EpsFileWriter::FinishPath(DWORD strokeRgb, double lineWidth,
bool filled, DWORD fillRgb)
void EpsFileWriter::FinishPath(uint32_t strokeRgb, double lineWidth,
bool filled, uint32_t fillRgb)
{
fprintf(f, " %.3f setlinewidth\r\n"
" %.3f %.3f %.3f setrgbcolor\r\n"
@ -277,7 +277,7 @@ void PdfFileWriter::StartFile(void) {
"%%%c%c%c%c\r\n",
0xe2, 0xe3, 0xcf, 0xd3);
xref[1] = (DWORD)ftell(f);
xref[1] = (uint32_t)ftell(f);
fprintf(f,
"1 0 obj\r\n"
" << /Type /Catalog\r\n"
@ -286,7 +286,7 @@ void PdfFileWriter::StartFile(void) {
" >>\r\n"
"endobj\r\n");
xref[2] = (DWORD)ftell(f);
xref[2] = (uint32_t)ftell(f);
fprintf(f,
"2 0 obj\r\n"
" << /Type /Outlines\r\n"
@ -294,7 +294,7 @@ void PdfFileWriter::StartFile(void) {
" >>\r\n"
"endobj\r\n");
xref[3] = (DWORD)ftell(f);
xref[3] = (uint32_t)ftell(f);
fprintf(f,
"3 0 obj\r\n"
" << /Type /Pages\r\n"
@ -303,7 +303,7 @@ void PdfFileWriter::StartFile(void) {
" >>\r\n"
"endobj\r\n");
xref[4] = (DWORD)ftell(f);
xref[4] = (uint32_t)ftell(f);
fprintf(f,
"4 0 obj\r\n"
" << /Type /Page\r\n"
@ -318,35 +318,35 @@ void PdfFileWriter::StartFile(void) {
MmToPts(ptMax.x - ptMin.x),
MmToPts(ptMax.y - ptMin.y));
xref[5] = (DWORD)ftell(f);
xref[5] = (uint32_t)ftell(f);
fprintf(f,
"5 0 obj\r\n"
" << /Length 6 0 R >>\r\n"
"stream\r\n");
bodyStart = (DWORD)ftell(f);
bodyStart = (uint32_t)ftell(f);
}
void PdfFileWriter::FinishAndCloseFile(void) {
DWORD bodyEnd = (DWORD)ftell(f);
uint32_t bodyEnd = (uint32_t)ftell(f);
fprintf(f,
"endstream\r\n"
"endobj\r\n");
xref[6] = (DWORD)ftell(f);
xref[6] = (uint32_t)ftell(f);
fprintf(f,
"6 0 obj\r\n"
" %d\r\n"
"endobj\r\n",
bodyEnd - bodyStart);
xref[7] = (DWORD)ftell(f);
xref[7] = (uint32_t)ftell(f);
fprintf(f,
"7 0 obj\r\n"
" [/PDF /Text]\r\n"
"endobj\r\n");
xref[8] = (DWORD)ftell(f);
xref[8] = (uint32_t)ftell(f);
fprintf(f,
"8 0 obj\r\n"
" << /Type /Font\r\n"
@ -357,13 +357,13 @@ void PdfFileWriter::FinishAndCloseFile(void) {
" >>\r\n"
"endobj\r\n");
xref[9] = (DWORD)ftell(f);
xref[9] = (uint32_t)ftell(f);
fprintf(f,
"9 0 obj\r\n"
" << /Creator (SolveSpace)\r\n"
" >>\r\n");
DWORD xrefStart = (DWORD)ftell(f);
uint32_t xrefStart = (uint32_t)ftell(f);
fprintf(f,
"xref\r\n"
"0 10\r\n"
@ -390,8 +390,8 @@ void PdfFileWriter::FinishAndCloseFile(void) {
}
void PdfFileWriter::StartPath(DWORD strokeRgb, double lineWidth,
bool filled, DWORD fillRgb)
void PdfFileWriter::StartPath(uint32_t strokeRgb, double lineWidth,
bool filled, uint32_t fillRgb)
{
fprintf(f, "1 J 1 j " // round endcaps and joins
"%.3f w "
@ -405,8 +405,8 @@ void PdfFileWriter::StartPath(DWORD strokeRgb, double lineWidth,
prevPt = Vector::From(VERY_POSITIVE, VERY_POSITIVE, VERY_POSITIVE);
}
void PdfFileWriter::FinishPath(DWORD strokeRgb, double lineWidth,
bool filled, DWORD fillRgb)
void PdfFileWriter::FinishPath(uint32_t strokeRgb, double lineWidth,
bool filled, uint32_t fillRgb)
{
if(filled) {
fprintf(f, "b\r\n");
@ -480,14 +480,14 @@ void SvgFileWriter::StartFile(void) {
// A little bit of extra space for the stroke width.
}
void SvgFileWriter::StartPath(DWORD strokeRgb, double lineWidth,
bool filled, DWORD fillRgb)
void SvgFileWriter::StartPath(uint32_t strokeRgb, double lineWidth,
bool filled, uint32_t fillRgb)
{
fprintf(f, "<path d='");
prevPt = Vector::From(VERY_POSITIVE, VERY_POSITIVE, VERY_POSITIVE);
}
void SvgFileWriter::FinishPath(DWORD strokeRgb, double lineWidth,
bool filled, DWORD fillRgb)
void SvgFileWriter::FinishPath(uint32_t strokeRgb, double lineWidth,
bool filled, uint32_t fillRgb)
{
char fill[100];
if(filled) {
@ -585,12 +585,12 @@ void HpglFileWriter::StartFile(void) {
fprintf(f, "SP1;\r\n");
}
void HpglFileWriter::StartPath(DWORD strokeRgb, double lineWidth,
bool filled, DWORD fillRgb)
void HpglFileWriter::StartPath(uint32_t strokeRgb, double lineWidth,
bool filled, uint32_t fillRgb)
{
}
void HpglFileWriter::FinishPath(DWORD strokeRgb, double lineWidth,
bool filled, DWORD fillRgb)
void HpglFileWriter::FinishPath(uint32_t strokeRgb, double lineWidth,
bool filled, uint32_t fillRgb)
{
}
@ -622,12 +622,12 @@ void HpglFileWriter::FinishAndCloseFile(void) {
void GCodeFileWriter::StartFile(void) {
ZERO(&sel);
}
void GCodeFileWriter::StartPath(DWORD strokeRgb, double lineWidth,
bool filled, DWORD fillRgb)
void GCodeFileWriter::StartPath(uint32_t strokeRgb, double lineWidth,
bool filled, uint32_t fillRgb)
{
}
void GCodeFileWriter::FinishPath(DWORD strokeRgb, double lineWidth,
bool filled, DWORD fillRgb)
void GCodeFileWriter::FinishPath(uint32_t strokeRgb, double lineWidth,
bool filled, uint32_t fillRgb)
{
}
void GCodeFileWriter::Triangle(STriangle *tr) {
@ -691,12 +691,12 @@ void Step2dFileWriter::StartFile(void) {
void Step2dFileWriter::Triangle(STriangle *tr) {
}
void Step2dFileWriter::StartPath(DWORD strokeRgb, double lineWidth,
bool filled, DWORD fillRgb)
void Step2dFileWriter::StartPath(uint32_t strokeRgb, double lineWidth,
bool filled, uint32_t fillRgb)
{
}
void Step2dFileWriter::FinishPath(DWORD strokeRgb, double lineWidth,
bool filled, DWORD fillRgb)
void Step2dFileWriter::FinishPath(uint32_t strokeRgb, double lineWidth,
bool filled, uint32_t fillRgb)
{
}

View File

@ -17,7 +17,7 @@ void Group::GenerateEquations(IdList<Equation,hEquation> *l) {
// Nothing to do for now.
}
void DoMessageBox(char *str, int rows, int cols, BOOL error)
void DoMessageBox(char *str, int rows, int cols, bool error)
{
}

View File

@ -20,10 +20,10 @@
extern "C" {
#endif
typedef DWORD Slvs_hParam;
typedef DWORD Slvs_hEntity;
typedef DWORD Slvs_hConstraint;
typedef DWORD Slvs_hGroup;
typedef uint32_t Slvs_hParam;
typedef uint32_t Slvs_hEntity;
typedef uint32_t Slvs_hConstraint;
typedef uint32_t Slvs_hGroup;
// To obtain the 3d (not projected into a workplane) of a constraint or
// an entity, specify this instead of the workplane.

View File

@ -372,10 +372,10 @@ Expr *Expr::PartialWrt(hParam p) {
}
}
QWORD Expr::ParamsUsed(void) {
QWORD r = 0;
if(op == PARAM) r |= ((QWORD)1 << (x.parh.v % 61));
if(op == PARAM_PTR) r |= ((QWORD)1 << (x.parp->h.v % 61));
uint64_t Expr::ParamsUsed(void) {
uint64_t r = 0;
if(op == PARAM) r |= ((uint64_t)1 << (x.parh.v % 61));
if(op == PARAM_PTR) r |= ((uint64_t)1 << (x.parp->h.v % 61));
int c = Children();
if(c >= 1) r |= a->ParamsUsed();

4
expr.h
View File

@ -12,7 +12,7 @@ class Expr;
class Expr {
public:
DWORD marker;
uint32_t marker;
enum {
// A parameter, by the hParam handle
@ -85,7 +85,7 @@ public:
Expr *PartialWrt(hParam p);
double Eval(void);
QWORD ParamsUsed(void);
uint64_t ParamsUsed(void);
bool DependsOn(hParam p);
static bool Tol(double a, double b);
Expr *FoldConstants(void);

View File

@ -210,7 +210,7 @@ void SolveSpace::SaveUsingTable(int type) {
void *p = SAVED[i].ptr;
// Any items that aren't specified are assumed to be zero
if(fmt == 'd' && *((int *)p) == 0) continue;
if(fmt == 'x' && *((DWORD *)p) == 0) continue;
if(fmt == 'x' && *((uint32_t *)p) == 0) continue;
if(fmt == 'f' && *((double *)p) == 0.0) continue;
if(fmt == 'N' && strlen(((NameStr *)p)->str) == 0) continue;
@ -218,7 +218,7 @@ void SolveSpace::SaveUsingTable(int type) {
switch(fmt) {
case 'd': fprintf(fh, "%d", *((int *)p)); break;
case 'b': fprintf(fh, "%d", *((bool *)p) ? 1 : 0); break;
case 'x': fprintf(fh, "%08x", *((DWORD *)p)); break;
case 'x': fprintf(fh, "%08x", *((uint32_t *)p)); break;
case 'f': fprintf(fh, "%.20f", *((double *)p)); break;
case 'N': fprintf(fh, "%s", ((NameStr *)p)->str); break;
case 'P': fprintf(fh, "%s", (char *)p); break;
@ -360,10 +360,11 @@ void SolveSpace::LoadUsingTable(char *key, char *val) {
for(i = 0; SAVED[i].type != 0; i++) {
if(strcmp(SAVED[i].desc, key)==0) {
void *p = SAVED[i].ptr;
unsigned int u = 0;
switch(SAVED[i].fmt) {
case 'd': *((int *)p) = atoi(val); break;
case 'b': *((bool *)p) = (atoi(val) != 0); break;
case 'x': sscanf(val, "%x", (DWORD *)p); break;
case 'x': sscanf(val, "%x", &u); *((uint32_t *)p) = u; break;
case 'f': *((double *)p) = atof(val); break;
case 'N': ((NameStr *)p)->strcpy(val); break;

View File

@ -179,13 +179,13 @@ void SolveSpace::GenerateAll(int first, int last, bool andFindFree) {
SK.param.MoveSelfInto(&prev);
SK.entity.Clear();
SDWORD inTime = GetMilliseconds();
int32_t inTime = GetMilliseconds();
bool displayedStatusMessage = false;
for(i = 0; i < SK.group.n; i++) {
Group *g = &(SK.group.elem[i]);
SDWORD now = GetMilliseconds();
int32_t now = GetMilliseconds();
// Display the status message if we've taken more than 400 ms, or
// if we've taken 200 ms but we're not even halfway done, or if
// we've already started displaying the status message.

View File

@ -178,7 +178,7 @@ void glxFatLine(Vector a, Vector b, double width)
}
void glxLockColorTo(DWORD rgb)
void glxLockColorTo(uint32_t rgb)
{
ColorLocked = false;
glColor3d(REDf(rgb), GREENf(rgb), BLUEf(rgb));
@ -190,21 +190,21 @@ void glxUnlockColor(void)
ColorLocked = false;
}
void glxColorRGB(DWORD rgb)
void glxColorRGB(uint32_t rgb)
{
// Is there a bug in some graphics drivers where this is not equivalent
// to glColor3d? There seems to be...
glxColorRGBa(rgb, 1.0);
}
void glxColorRGBa(DWORD rgb, double a)
void glxColorRGBa(uint32_t rgb, double a)
{
if(!ColorLocked) glColor4d(REDf(rgb), GREENf(rgb), BLUEf(rgb), a);
}
static void Stipple(BOOL forSel)
static void Stipple(bool forSel)
{
static BOOL Init;
static bool Init;
const int BYTES = (32*32)/8;
static GLubyte HoverMask[BYTES];
static GLubyte SelMask[BYTES];
@ -222,7 +222,7 @@ static void Stipple(BOOL forSel)
}
}
}
Init = TRUE;
Init = true;
}
glEnable(GL_POLYGON_STIPPLE);
@ -233,7 +233,7 @@ static void Stipple(BOOL forSel)
}
}
static void StippleTriangle(STriangle *tr, BOOL s, DWORD rgb)
static void StippleTriangle(STriangle *tr, bool s, uint32_t rgb)
{
glEnd();
glDisable(GL_LIGHTING);
@ -249,19 +249,19 @@ static void StippleTriangle(STriangle *tr, BOOL s, DWORD rgb)
glBegin(GL_TRIANGLES);
}
void glxFillMesh(int specColor, SMesh *m, DWORD h, DWORD s1, DWORD s2)
void glxFillMesh(uint32_t specColor, SMesh *m, uint32_t h, uint32_t s1, uint32_t s2)
{
DWORD rgbHovered = Style::Color(Style::HOVERED),
uint32_t rgbHovered = Style::Color(Style::HOVERED),
rgbSelected = Style::Color(Style::SELECTED);
glEnable(GL_NORMALIZE);
int prevColor = -1;
uint32_t prevColor = (uint32_t)-1;
glBegin(GL_TRIANGLES);
for(int i = 0; i < m->l.n; i++) {
STriangle *tr = &(m->l.elem[i]);
int color;
if(specColor < 0) {
uint32_t color;
if(specColor & 0x80000000) {
color = tr->meta.color;
} else {
color = specColor;
@ -296,10 +296,10 @@ void glxFillMesh(int specColor, SMesh *m, DWORD h, DWORD s1, DWORD s2)
if((s1 != 0 && tr->meta.face == s1) ||
(s2 != 0 && tr->meta.face == s2))
{
StippleTriangle(tr, TRUE, rgbSelected);
StippleTriangle(tr, true, rgbSelected);
}
if(h != 0 && tr->meta.face == h) {
StippleTriangle(tr, FALSE, rgbHovered);
StippleTriangle(tr, false, rgbHovered);
}
}
glEnd();
@ -488,7 +488,7 @@ void glxCreateBitmapFont(void)
// Place the font in our texture in a two-dimensional grid; 1d would
// be simpler, but long skinny textures (256*16 = 4096 pixels wide)
// won't work.
static BYTE MappedTexture[4*16*64*16];
static uint8_t MappedTexture[4*16*64*16];
int a, i;
for(a = 0; a < 256; a++) {
int row = a / 4, col = a % 4;
@ -515,7 +515,7 @@ void glxCreateBitmapFont(void)
void glxBitmapCharQuad(char c, double x, double y)
{
BYTE b = (BYTE)c;
uint8_t b = (uint8_t)c;
int w, h;
if(b & 0x80) {
@ -563,10 +563,10 @@ void glxBitmapText(const char *str, Vector p)
glDisable(GL_TEXTURE_2D);
}
void glxDrawPixelsWithTexture(BYTE *data, int w, int h)
void glxDrawPixelsWithTexture(uint8_t *data, int w, int h)
{
#define MAX_DIM 32
static BYTE Texture[MAX_DIM*MAX_DIM*3];
static uint8_t Texture[MAX_DIM*MAX_DIM*3];
int i, j;
if(w > MAX_DIM || h > MAX_DIM) oops();

View File

@ -249,13 +249,13 @@ void GraphicsWindow::AnimateOnto(Quaternion quatf, Vector offsetf) {
double mo = (offset0.Minus(offsetf)).Magnitude()*scale;
// Animate transition, unless it's a tiny move.
SDWORD dt = (mp < 0.01 && mo < 10) ? (-20) :
(SDWORD)(100 + 1000*mp + 0.4*mo);
int32_t dt = (mp < 0.01 && mo < 10) ? (-20) :
(int32_t)(100 + 1000*mp + 0.4*mo);
// Don't ever animate for longer than 2000 ms; we can get absurdly
// long translations (as measured in pixels) if the user zooms out, moves,
// and then zooms in again.
if(dt > 2000) dt = 2000;
SDWORD tn, t0 = GetMilliseconds();
int32_t tn, t0 = GetMilliseconds();
double s = 0;
Quaternion dq = quatf.Times(quat0.Inverse());
do {
@ -621,7 +621,7 @@ void GraphicsWindow::ForceTextWindowShown(void) {
if(!showTextWindow) {
showTextWindow = true;
CheckMenuById(MNU_SHOW_TEXT_WND, true);
ShowTextWindow(TRUE);
ShowTextWindow(true);
}
}

View File

@ -448,7 +448,7 @@ void Group::DrawDisplayItems(int t) {
// When we fill the mesh, we need to know which triangles are selected
// or hovered, in order to draw them differently.
DWORD mh = 0, ms1 = 0, ms2 = 0;
uint32_t mh = 0, ms1 = 0, ms2 = 0;
hEntity he = SS.GW.hover.entity;
if(he.v != 0 && SK.GetEntity(he)->IsFace()) {
mh = he.v;
@ -546,7 +546,7 @@ void Group::DrawFilledPaths(void) {
// In an assembled loop, all the styles should be the same; so doesn't
// matter which one we grab.
SBezier *sb = &(sbls->l.elem[0].l.elem[0]);
hStyle hs = { (DWORD)sb->auxA };
hStyle hs = { (uint32_t)sb->auxA };
Style *s = Style::Get(hs);
if(s->filled) {
// This is a filled loop, where the user specified a fill color.

View File

@ -324,12 +324,12 @@ bool SMesh::IsEmpty(void) {
return (l.n == 0);
}
DWORD SMesh::FirstIntersectionWith(Point2d mp) {
uint32_t SMesh::FirstIntersectionWith(Point2d mp) {
Vector p0 = Vector::From(mp.x, mp.y, 0);
Vector gn = Vector::From(0, 0, 1);
double maxT = -1e12;
DWORD face = 0;
uint32_t face = 0;
int i;
for(i = 0; i < l.n; i++) {
@ -795,7 +795,7 @@ void SKdNode::OcclusionTestLine(SEdge orig, SEdgeList *sel, int cnt) {
//-----------------------------------------------------------------------------
void SKdNode::FindEdgeOn(Vector a, Vector b, int *n, int cnt,
bool coplanarIsInter, bool *inter, bool *fwd,
DWORD *face)
uint32_t *face)
{
if(gt && lt) {
double ac = a.Element(which),
@ -919,7 +919,7 @@ void SKdNode::MakeCertainEdgesInto(SEdgeList *sel, int how,
int n = 0;
bool thisIntersects = false, fwd;
DWORD face;
uint32_t face;
FindEdgeOn(a, b, &n, cnt, coplanarIsInter,
&thisIntersects, &fwd, &face);

View File

@ -689,7 +689,7 @@ void GraphicsWindow::MouseRightUp(double x, double y) {
}
case CMNU_NEW_CUSTOM_STYLE: {
DWORD v = Style::CreateCustomStyle();
uint32_t v = Style::CreateCustomStyle();
Style::AssignSelectionToStyle(v);
break;
}
@ -1291,7 +1291,7 @@ void GraphicsWindow::SpaceNavigatorMoved(double tx, double ty, double tz,
// If we go five seconds without SpaceNavigator input, or if we've
// switched groups, then consider that a new action and save an undo
// point.
SDWORD now = GetMilliseconds();
int32_t now = GetMilliseconds();
if(now - lastSpaceNavigatorTime > 5000 ||
lastSpaceNavigatorGroup.v != g->h.v)
{

View File

@ -122,8 +122,8 @@ public:
};
typedef struct {
DWORD face;
int color;
uint32_t face;
uint32_t color;
} STriMeta;
class SPolygon {
@ -251,7 +251,7 @@ public:
bool IsEmpty(void);
void RemapFaces(Group *g, int remap);
DWORD FirstIntersectionWith(Point2d mp);
uint32_t FirstIntersectionWith(Point2d mp);
};
// A linked list of triangles
@ -284,7 +284,7 @@ public:
void FindEdgeOn(Vector a, Vector b, int *n, int cnt, bool coplanarIsInter,
bool *inter, bool *fwd,
DWORD *face);
uint32_t *face);
enum {
NAKED_OR_SELF_INTER_EDGES = 100,
SELF_INTER_EDGES = 200,

View File

@ -26,7 +26,7 @@ class Equation;
class hGroup {
public:
// bits 15: 0 -- group index
DWORD v;
uint32_t v;
inline hEntity entity(int i);
inline hParam param(int i);
@ -35,7 +35,7 @@ public:
class hRequest {
public:
// bits 15: 0 -- request index
DWORD v;
uint32_t v;
inline hEntity entity(int i);
inline hParam param(int i);
@ -46,7 +46,7 @@ class hEntity {
public:
// bits 15: 0 -- entity index
// 31:16 -- request index
DWORD v;
uint32_t v;
inline bool isFromRequest(void);
inline hRequest request(void);
@ -57,20 +57,20 @@ class hParam {
public:
// bits 15: 0 -- param index
// 31:16 -- request index
DWORD v;
uint32_t v;
inline hRequest request(void);
};
class hStyle {
public:
DWORD v;
uint32_t v;
};
class EntityId {
public:
DWORD v; // entity ID, starting from 0
uint32_t v; // entity ID, starting from 0
};
class EntityMap {
public:
@ -118,7 +118,7 @@ public:
double valA;
double valB;
double valC;
DWORD color;
uint32_t color;
struct {
int how;
@ -242,7 +242,7 @@ public:
void GenerateDisplayItems(void);
void DrawDisplayItems(int t);
void Draw(void);
DWORD GetLoopSetFillColor(SBezierLoopSet *sbls,
uint32_t GetLoopSetFillColor(SBezierLoopSet *sbls,
bool *allSame, Vector *errorAt);
void FillLoopSetAsPolygon(SBezierLoopSet *sbls);
void DrawFilledPaths(void);
@ -527,7 +527,7 @@ public:
class hConstraint {
public:
DWORD v;
uint32_t v;
inline hEquation equation(int i);
};
@ -666,7 +666,7 @@ public:
class hEquation {
public:
DWORD v;
uint32_t v;
inline bool isFromConstraint(void);
inline hConstraint constraint(void);
@ -729,9 +729,9 @@ public:
};
int textOrigin;
double textAngle;
DWORD color;
uint32_t color;
bool filled;
DWORD fillColor;
uint32_t fillColor;
bool visible;
bool exportable;
@ -740,7 +740,7 @@ public:
typedef struct {
hStyle h;
const char *cnfPrefix;
DWORD color;
uint32_t color;
double width;
} Default;
static const Default Defaults[];
@ -754,16 +754,16 @@ public:
static void FreezeDefaultStyles(void);
static void LoadFactoryDefaults(void);
static void AssignSelectionToStyle(DWORD v);
static DWORD CreateCustomStyle(void);
static void AssignSelectionToStyle(uint32_t v);
static uint32_t CreateCustomStyle(void);
static DWORD RewriteColor(DWORD rgb);
static uint32_t RewriteColor(uint32_t rgb);
static Style *Get(hStyle hs);
static DWORD Color(hStyle hs, bool forExport=false);
static DWORD FillColor(hStyle hs, bool forExport=false);
static uint32_t Color(hStyle hs, bool forExport=false);
static uint32_t FillColor(hStyle hs, bool forExport=false);
static float Width(hStyle hs);
static DWORD Color(int hs, bool forExport=false);
static uint32_t Color(int hs, bool forExport=false);
static float Width(int hs);
static double WidthMm(int hs);
static double TextHeight(hStyle hs);

View File

@ -15,14 +15,14 @@ void SolveSpace::Init(char *cmdLine) {
// Then, load the registry settings.
int i;
// Default list of colors for the model material
modelColor[0] = CnfThawDWORD(RGB(150, 150, 150), "ModelColor_0");
modelColor[1] = CnfThawDWORD(RGB(100, 100, 100), "ModelColor_1");
modelColor[2] = CnfThawDWORD(RGB( 30, 30, 30), "ModelColor_2");
modelColor[3] = CnfThawDWORD(RGB(150, 0, 0), "ModelColor_3");
modelColor[4] = CnfThawDWORD(RGB( 0, 100, 0), "ModelColor_4");
modelColor[5] = CnfThawDWORD(RGB( 0, 80, 80), "ModelColor_5");
modelColor[6] = CnfThawDWORD(RGB( 0, 0, 130), "ModelColor_6");
modelColor[7] = CnfThawDWORD(RGB( 80, 0, 80), "ModelColor_7");
modelColor[0] = CnfThawInt(RGB(150, 150, 150), "ModelColor_0");
modelColor[1] = CnfThawInt(RGB(100, 100, 100), "ModelColor_1");
modelColor[2] = CnfThawInt(RGB( 30, 30, 30), "ModelColor_2");
modelColor[3] = CnfThawInt(RGB(150, 0, 0), "ModelColor_3");
modelColor[4] = CnfThawInt(RGB( 0, 100, 0), "ModelColor_4");
modelColor[5] = CnfThawInt(RGB( 0, 80, 80), "ModelColor_5");
modelColor[6] = CnfThawInt(RGB( 0, 0, 130), "ModelColor_6");
modelColor[7] = CnfThawInt(RGB( 80, 0, 80), "ModelColor_7");
// Light intensities
lightIntensity[0] = CnfThawFloat(1.0f, "LightIntensity_0");
lightIntensity[1] = CnfThawFloat(0.5f, "LightIntensity_1");
@ -37,12 +37,12 @@ void SolveSpace::Init(char *cmdLine) {
// Chord tolerance
chordTol = CnfThawFloat(2.0f, "ChordTolerance");
// Max pwl segments to generate
maxSegments = CnfThawDWORD(10, "MaxSegments");
maxSegments = CnfThawInt(10, "MaxSegments");
// View units
viewUnits = (Unit)CnfThawDWORD((DWORD)UNIT_MM, "ViewUnits");
viewUnits = (Unit)CnfThawInt((uint32_t)UNIT_MM, "ViewUnits");
// Number of digits after the decimal point
afterDecimalMm = CnfThawDWORD(2, "AfterDecimalMm");
afterDecimalInch = CnfThawDWORD(3, "AfterDecimalInch");
afterDecimalMm = CnfThawInt(2, "AfterDecimalMm");
afterDecimalInch = CnfThawInt(3, "AfterDecimalInch");
// Camera tangent (determines perspective)
cameraTangent = CnfThawFloat(0.3f/1e3f, "CameraTangent");
// Grid spacing
@ -52,19 +52,19 @@ void SolveSpace::Init(char *cmdLine) {
// Export offset (cutter radius comp)
exportOffset = CnfThawFloat(0.0f, "ExportOffset");
// Rewrite exported colors close to white into black (assuming white bg)
fixExportColors = CnfThawDWORD(1, "FixExportColors");
fixExportColors = CnfThawBool(true, "FixExportColors");
// Draw back faces of triangles (when mesh is leaky/self-intersecting)
drawBackFaces = CnfThawDWORD(1, "DrawBackFaces");
drawBackFaces = CnfThawBool(true, "DrawBackFaces");
// Check that contours are closed and not self-intersecting
checkClosedContour = CnfThawDWORD(1, "CheckClosedContour");
checkClosedContour = CnfThawBool(true, "CheckClosedContour");
// Export shaded triangles in a 2d view
exportShadedTriangles = CnfThawDWORD(1, "ExportShadedTriangles");
exportShadedTriangles = CnfThawBool(true, "ExportShadedTriangles");
// Export pwl curves (instead of exact) always
exportPwlCurves = CnfThawDWORD(0, "ExportPwlCurves");
exportPwlCurves = CnfThawBool(false, "ExportPwlCurves");
// Background color on-screen
backgroundColor = CnfThawDWORD(RGB(0, 0, 0), "BackgroundColor");
backgroundColor = CnfThawInt(RGB(0, 0, 0), "BackgroundColor");
// Whether export canvas size is fixed or derived from bbox
exportCanvasSizeAuto = CnfThawDWORD(1, "ExportCanvasSizeAuto");
exportCanvasSizeAuto = CnfThawBool(true, "ExportCanvasSizeAuto");
// Margins for automatic canvas size
exportMargin.left = CnfThawFloat(5.0f, "ExportMargin_Left");
exportMargin.right = CnfThawFloat(5.0f, "ExportMargin_Right");
@ -77,11 +77,11 @@ void SolveSpace::Init(char *cmdLine) {
exportCanvas.dy = CnfThawFloat( 5.0f, "ExportCanvas_Dy");
// Extra parameters when exporting G code
gCode.depth = CnfThawFloat(10.0f, "GCode_Depth");
gCode.passes = CnfThawDWORD(1, "GCode_Passes");
gCode.passes = CnfThawInt(1, "GCode_Passes");
gCode.feed = CnfThawFloat(10.0f, "GCode_Feed");
gCode.plungeFeed = CnfThawFloat(10.0f, "GCode_PlungeFeed");
// Show toolbar in the graphics window
showToolbar = CnfThawDWORD(1, "ShowToolbar");
showToolbar = CnfThawBool(true, "ShowToolbar");
// Recent files menus
for(i = 0; i < MAX_RECENT; i++) {
char name[100];
@ -120,7 +120,7 @@ void SolveSpace::Exit(void) {
// Model colors
for(i = 0; i < MODEL_COLORS; i++) {
sprintf(name, "ModelColor_%d", i);
CnfFreezeDWORD(modelColor[i], name);
CnfFreezeInt(modelColor[i], name);
}
// Light intensities
CnfFreezeFloat((float)lightIntensity[0], "LightIntensity_0");
@ -135,34 +135,34 @@ void SolveSpace::Exit(void) {
// Chord tolerance
CnfFreezeFloat((float)chordTol, "ChordTolerance");
// Max pwl segments to generate
CnfFreezeDWORD((DWORD)maxSegments, "MaxSegments");
CnfFreezeInt((uint32_t)maxSegments, "MaxSegments");
// View units
CnfFreezeDWORD((DWORD)viewUnits, "ViewUnits");
CnfFreezeInt((uint32_t)viewUnits, "ViewUnits");
// Number of digits after the decimal point
CnfFreezeDWORD((DWORD)afterDecimalMm, "AfterDecimalMm");
CnfFreezeDWORD((DWORD)afterDecimalInch, "AfterDecimalInch");
CnfFreezeInt((uint32_t)afterDecimalMm, "AfterDecimalMm");
CnfFreezeInt((uint32_t)afterDecimalInch, "AfterDecimalInch");
// Camera tangent (determines perspective)
CnfFreezeFloat((float)cameraTangent, "CameraTangent");
// Grid spacing
CnfFreezeFloat(gridSpacing, "GridSpacing");
// Export scale (a float, stored as a DWORD)
// Export scale
CnfFreezeFloat(exportScale, "ExportScale");
// Export offset (cutter radius comp)
CnfFreezeFloat(exportOffset, "ExportOffset");
// Rewrite exported colors close to white into black (assuming white bg)
CnfFreezeDWORD(fixExportColors, "FixExportColors");
CnfFreezeBool(fixExportColors, "FixExportColors");
// Draw back faces of triangles (when mesh is leaky/self-intersecting)
CnfFreezeDWORD(drawBackFaces, "DrawBackFaces");
CnfFreezeBool(drawBackFaces, "DrawBackFaces");
// Check that contours are closed and not self-intersecting
CnfFreezeDWORD(checkClosedContour, "CheckClosedContour");
CnfFreezeBool(checkClosedContour, "CheckClosedContour");
// Export shaded triangles in a 2d view
CnfFreezeDWORD(exportShadedTriangles, "ExportShadedTriangles");
CnfFreezeBool(exportShadedTriangles, "ExportShadedTriangles");
// Export pwl curves (instead of exact) always
CnfFreezeDWORD(exportPwlCurves, "ExportPwlCurves");
CnfFreezeBool(exportPwlCurves, "ExportPwlCurves");
// Background color on-screen
CnfFreezeDWORD(backgroundColor, "BackgroundColor");
CnfFreezeInt(backgroundColor, "BackgroundColor");
// Whether export canvas size is fixed or derived from bbox
CnfFreezeDWORD(exportCanvasSizeAuto, "ExportCanvasSizeAuto");
CnfFreezeBool(exportCanvasSizeAuto, "ExportCanvasSizeAuto");
// Margins for automatic canvas size
CnfFreezeFloat(exportMargin.left, "ExportMargin_Left");
CnfFreezeFloat(exportMargin.right, "ExportMargin_Right");
@ -175,11 +175,11 @@ void SolveSpace::Exit(void) {
CnfFreezeFloat(exportCanvas.dy, "ExportCanvas_Dy");
// Extra parameters when exporting G code
CnfFreezeFloat(gCode.depth, "GCode_Depth");
CnfFreezeDWORD(gCode.passes, "GCode_Passes");
CnfFreezeInt(gCode.passes, "GCode_Passes");
CnfFreezeFloat(gCode.feed, "GCode_Feed");
CnfFreezeFloat(gCode.plungeFeed, "GCode_PlungeFeed");
// Show toolbar in the graphics window
CnfFreezeDWORD(showToolbar, "ShowToolbar");
CnfFreezeBool(showToolbar, "ShowToolbar");
// And the default styles, colors and line widths and such.
Style::FreezeDefaultStyles();

View File

@ -51,20 +51,29 @@ inline double ffabs(double v) { return (v > 0) ? v : (-v); }
#define isforname(c) (isalnum(c) || (c) == '_' || (c) == '-' || (c) == '#')
typedef unsigned __int64 QWORD;
typedef signed __int64 SQWORD;
typedef signed long SDWORD;
typedef signed short SWORD;
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <stdio.h>
#include <math.h>
#include <limits.h>
#include <windows.h> // required for GL stuff
#include <gl/gl.h>
#include <gl/glu.h>
#ifdef WIN32
# include <windows.h> // required by GL headers
#endif
#include <GL/gl.h>
#include <GL/glu.h>
#ifdef WIN32
// Define some useful C99 integer types.
typedef UINT64 uint64_t;
typedef INT64 int64_t;
typedef UINT32 uint32_t;
typedef INT32 int32_t;
typedef USHORT uint16_t;
typedef SHORT int16_t;
typedef UCHAR uint8_t;
typedef CHAR int8_t;
#endif
inline double Random(double vmax) {
return (vmax*rand()) / RAND_MAX;
@ -121,23 +130,23 @@ int SaveFileYesNoCancel(void);
// Comma-separated value, like a spreadsheet would use
#define CSV_PATTERN "CSV File (*.csv)\0*.csv\0All Files (*)\0*\0\0"
#define CSV_EXT "csv"
BOOL GetSaveFile(char *file, const char *defExtension, const char *selPattern);
BOOL GetOpenFile(char *file, const char *defExtension, const char *selPattern);
bool GetSaveFile(char *file, const char *defExtension, const char *selPattern);
bool GetOpenFile(char *file, const char *defExtension, const char *selPattern);
void GetAbsoluteFilename(char *file);
void LoadAllFontFiles(void);
void OpenWebsite(const char *url);
void CheckMenuById(int id, BOOL checked);
void RadioMenuById(int id, BOOL selected);
void EnableMenuById(int id, BOOL enabled);
void CheckMenuById(int id, bool checked);
void RadioMenuById(int id, bool selected);
void EnableMenuById(int id, bool enabled);
void ShowGraphicsEditControl(int x, int y, char *s);
void HideGraphicsEditControl(void);
BOOL GraphicsEditControlIsVisible(void);
bool GraphicsEditControlIsVisible(void);
void ShowTextEditControl(int x, int y, char *s);
void HideTextEditControl(void);
BOOL TextEditControlIsVisible(void);
bool TextEditControlIsVisible(void);
void MoveTextScrollbarTo(int pos, int maxPos, int page);
#define CONTEXT_SUBMENU (-1)
@ -146,14 +155,14 @@ void AddContextMenuItem(const char *legend, int id);
void CreateContextSubmenu(void);
int ShowContextMenu(void);
void ShowTextWindow(BOOL visible);
void ShowTextWindow(bool visible);
void InvalidateText(void);
void InvalidateGraphics(void);
void PaintGraphics(void);
void GetGraphicsWindowSize(int *w, int *h);
void GetTextWindowSize(int *w, int *h);
SDWORD GetMilliseconds(void);
SQWORD GetUnixTime(void);
int32_t GetMilliseconds(void);
int64_t GetUnixTime(void);
void dbp(const char *str, ...);
#define DBPTRI(tri) \
@ -162,16 +171,18 @@ void dbp(const char *str, ...);
void SetWindowTitle(const char *str);
void SetMousePointerToHand(bool yes);
void DoMessageBox(const char *str, int rows, int cols, BOOL error);
void DoMessageBox(const char *str, int rows, int cols, bool error);
void SetTimerFor(int milliseconds);
void ExitNow(void);
void CnfFreezeString(const char *str, const char *name);
void CnfFreezeDWORD(DWORD v, const char *name);
void CnfFreezeInt(uint32_t v, const char *name);
void CnfFreezeFloat(float v, const char *name);
void CnfFreezeBool(bool v, const char *name);
void CnfThawString(char *str, int maxLen, const char *name);
DWORD CnfThawDWORD(DWORD v, const char *name);
uint32_t CnfThawInt(uint32_t v, const char *name);
float CnfThawFloat(float v, const char *name);
bool CnfThawBool(bool v, const char *name);
void *AllocTemporary(size_t n);
void FreeTemporary(void *p);
@ -212,7 +223,7 @@ void glxAxisAlignedLineLoop(double l, double r, double t, double b);
typedef void GLX_CALLBACK glxCallbackFptr(void);
void glxTesselatePolygon(GLUtesselator *gt, SPolygon *p);
void glxFillPolygon(SPolygon *p);
void glxFillMesh(int color, SMesh *m, DWORD h, DWORD s1, DWORD s2);
void glxFillMesh(uint32_t color, SMesh *m, uint32_t h, uint32_t s1, uint32_t s2);
void glxDebugPolygon(SPolygon *p);
void glxDrawEdges(SEdgeList *l, bool endpointsToo);
void glxDebugMesh(SMesh *m);
@ -224,14 +235,14 @@ void glxWriteTextRefCenter(const char *str, double h, Vector t, Vector u, Vector
glxLineFn *fn, void *fndata);
double glxStrWidth(const char *str, double h);
double glxStrHeight(double h);
void glxLockColorTo(DWORD rgb);
void glxLockColorTo(uint32_t rgb);
void glxFatLine(Vector a, Vector b, double width);
void glxUnlockColor(void);
void glxColorRGB(DWORD rgb);
void glxColorRGBa(DWORD rgb, double a);
void glxColorRGB(uint32_t rgb);
void glxColorRGBa(uint32_t rgb, double a);
void glxDepthRangeOffset(int units);
void glxDepthRangeLockToFront(bool yes);
void glxDrawPixelsWithTexture(BYTE *data, int w, int h);
void glxDrawPixelsWithTexture(uint8_t *data, int w, int h);
void glxCreateBitmapFont(void);
void glxBitmapText(const char *str, Vector p);
void glxBitmapCharQuad(char c, double x, double y);
@ -340,8 +351,8 @@ public:
typedef struct {
bool onCurve;
bool lastInContour;
SWORD x;
SWORD y;
int16_t x;
int16_t y;
} FontPoint;
typedef struct {
@ -388,9 +399,9 @@ public:
Vector origin, u, v;
int Getc(void);
BYTE GetBYTE(void);
WORD GetWORD(void);
DWORD GetDWORD(void);
uint8_t GetBYTE(void);
uint16_t GetUSHORT(void);
uint32_t GetULONG(void);
void LoadGlyph(int index);
bool LoadFontFromFile(bool nameOnly);
@ -448,10 +459,10 @@ public:
void BezierAsPwl(SBezier *sb);
void BezierAsNonrationalCubic(SBezier *sb, int depth=0);
virtual void StartPath( DWORD strokeRgb, double lineWidth,
bool filled, DWORD fillRgb) = 0;
virtual void FinishPath(DWORD strokeRgb, double lineWidth,
bool filled, DWORD fillRgb) = 0;
virtual void StartPath( uint32_t strokeRgb, double lineWidth,
bool filled, uint32_t fillRgb) = 0;
virtual void FinishPath(uint32_t strokeRgb, double lineWidth,
bool filled, uint32_t fillRgb) = 0;
virtual void Bezier(SBezier *sb) = 0;
virtual void Triangle(STriangle *tr) = 0;
virtual void StartFile(void) = 0;
@ -460,10 +471,10 @@ public:
};
class DxfFileWriter : public VectorFileWriter {
public:
void StartPath( DWORD strokeRgb, double lineWidth,
bool filled, DWORD fillRgb);
void FinishPath(DWORD strokeRgb, double lineWidth,
bool filled, DWORD fillRgb);
void StartPath( uint32_t strokeRgb, double lineWidth,
bool filled, uint32_t fillRgb);
void FinishPath(uint32_t strokeRgb, double lineWidth,
bool filled, uint32_t fillRgb);
void Triangle(STriangle *tr);
void Bezier(SBezier *sb);
void StartFile(void);
@ -475,10 +486,10 @@ public:
Vector prevPt;
void MaybeMoveTo(Vector s, Vector f);
void StartPath( DWORD strokeRgb, double lineWidth,
bool filled, DWORD fillRgb);
void FinishPath(DWORD strokeRgb, double lineWidth,
bool filled, DWORD fillRgb);
void StartPath( uint32_t strokeRgb, double lineWidth,
bool filled, uint32_t fillRgb);
void FinishPath(uint32_t strokeRgb, double lineWidth,
bool filled, uint32_t fillRgb);
void Triangle(STriangle *tr);
void Bezier(SBezier *sb);
void StartFile(void);
@ -487,15 +498,15 @@ public:
};
class PdfFileWriter : public VectorFileWriter {
public:
DWORD xref[10];
DWORD bodyStart;
uint32_t xref[10];
uint32_t bodyStart;
Vector prevPt;
void MaybeMoveTo(Vector s, Vector f);
void StartPath( DWORD strokeRgb, double lineWidth,
bool filled, DWORD fillRgb);
void FinishPath(DWORD strokeRgb, double lineWidth,
bool filled, DWORD fillRgb);
void StartPath( uint32_t strokeRgb, double lineWidth,
bool filled, uint32_t fillRgb);
void FinishPath(uint32_t strokeRgb, double lineWidth,
bool filled, uint32_t fillRgb);
void Triangle(STriangle *tr);
void Bezier(SBezier *sb);
void StartFile(void);
@ -507,10 +518,10 @@ public:
Vector prevPt;
void MaybeMoveTo(Vector s, Vector f);
void StartPath( DWORD strokeRgb, double lineWidth,
bool filled, DWORD fillRgb);
void FinishPath(DWORD strokeRgb, double lineWidth,
bool filled, DWORD fillRgb);
void StartPath( uint32_t strokeRgb, double lineWidth,
bool filled, uint32_t fillRgb);
void FinishPath(uint32_t strokeRgb, double lineWidth,
bool filled, uint32_t fillRgb);
void Triangle(STriangle *tr);
void Bezier(SBezier *sb);
void StartFile(void);
@ -520,10 +531,10 @@ public:
class HpglFileWriter : public VectorFileWriter {
public:
static double MmToHpglUnits(double mm);
void StartPath( DWORD strokeRgb, double lineWidth,
bool filled, DWORD fillRgb);
void FinishPath(DWORD strokeRgb, double lineWidth,
bool filled, DWORD fillRgb);
void StartPath( uint32_t strokeRgb, double lineWidth,
bool filled, uint32_t fillRgb);
void FinishPath(uint32_t strokeRgb, double lineWidth,
bool filled, uint32_t fillRgb);
void Triangle(STriangle *tr);
void Bezier(SBezier *sb);
void StartFile(void);
@ -532,10 +543,10 @@ public:
};
class Step2dFileWriter : public VectorFileWriter {
StepFileWriter sfw;
void StartPath( DWORD strokeRgb, double lineWidth,
bool filled, DWORD fillRgb);
void FinishPath(DWORD strokeRgb, double lineWidth,
bool filled, DWORD fillRgb);
void StartPath( uint32_t strokeRgb, double lineWidth,
bool filled, uint32_t fillRgb);
void FinishPath(uint32_t strokeRgb, double lineWidth,
bool filled, uint32_t fillRgb);
void Triangle(STriangle *tr);
void Bezier(SBezier *sb);
void StartFile(void);
@ -545,10 +556,10 @@ class Step2dFileWriter : public VectorFileWriter {
class GCodeFileWriter : public VectorFileWriter {
public:
SEdgeList sel;
void StartPath( DWORD strokeRgb, double lineWidth,
bool filled, DWORD fillRgb);
void FinishPath(DWORD strokeRgb, double lineWidth,
bool filled, DWORD fillRgb);
void StartPath( uint32_t strokeRgb, double lineWidth,
bool filled, uint32_t fillRgb);
void FinishPath(uint32_t strokeRgb, double lineWidth,
bool filled, uint32_t fillRgb);
void Triangle(STriangle *tr);
void Bezier(SBezier *sb);
void StartFile(void);
@ -629,7 +640,7 @@ public:
// Little bits of extra configuration state
enum { MODEL_COLORS = 8 };
int modelColor[MODEL_COLORS];
uint32_t modelColor[MODEL_COLORS];
Vector lightDir[2];
double lightIntensity[2];
double ambientIntensity;
@ -639,14 +650,14 @@ public:
float gridSpacing;
float exportScale;
float exportOffset;
int fixExportColors;
int drawBackFaces;
int checkClosedContour;
int showToolbar;
DWORD backgroundColor;
int exportShadedTriangles;
int exportPwlCurves;
int exportCanvasSizeAuto;
bool fixExportColors;
bool drawBackFaces;
bool checkClosedContour;
bool showToolbar;
uint32_t backgroundColor;
bool exportShadedTriangles;
bool exportPwlCurves;
bool exportCanvasSizeAuto;
struct {
float left;
float right;
@ -761,7 +772,7 @@ public:
Vector ptB;
} extraLine;
struct {
BYTE *fromFile;
uint8_t *fromFile;
int w, h;
int rw, rh;
double scale; // pixels per mm

View File

@ -359,7 +359,7 @@ void SSurface::EdgeNormalsWithinSurface(Point2d auv, Point2d buv,
Vector *pt,
Vector *enin, Vector *enout,
Vector *surfn,
DWORD auxA,
uint32_t auxA,
SShell *shell, SShell *sha, SShell *shb)
{
// the midpoint of the edge

View File

@ -490,7 +490,7 @@ typedef struct {
} TrimLine;
void SShell::MakeFromExtrusionOf(SBezierLoopSet *sbls, Vector t0, Vector t1,
int color)
uint32_t color)
{
// Make the extrusion direction consistent with respect to the normal
// of the sketch we're extruding.
@ -610,7 +610,7 @@ typedef struct {
} Revolved;
void SShell::MakeFromRevolutionOf(SBezierLoopSet *sbls, Vector pt, Vector axis,
int color)
uint32_t color)
{
SBezierLoop *sbl;

View File

@ -58,12 +58,12 @@ class SShell;
class hSSurface {
public:
DWORD v;
uint32_t v;
};
class hSCurve {
public:
DWORD v;
uint32_t v;
};
// Stuff for rational polynomial curves, of degree one to three. These are
@ -250,8 +250,8 @@ public:
// when I copy things over.
hSSurface newH;
int color;
DWORD face;
uint32_t color;
uint32_t face;
int degm, degn;
Vector ctrl[4][4];
@ -279,7 +279,7 @@ public:
void EdgeNormalsWithinSurface(Point2d auv, Point2d buv,
Vector *pt, Vector *enin, Vector *enout,
Vector *surfn,
DWORD auxA,
uint32_t auxA,
SShell *shell, SShell *sha, SShell *shb);
void FindChainAvoiding(SEdgeList *src, SEdgeList *dest, SPointList *avoid);
SSurface MakeCopyTrimAgainst(SShell *parent, SShell *a, SShell *b,
@ -361,9 +361,9 @@ public:
bool booleanFailed;
void MakeFromExtrusionOf(SBezierLoopSet *sbls, Vector t0, Vector t1,
int color);
uint32_t color);
void MakeFromRevolutionOf(SBezierLoopSet *sbls, Vector pt, Vector axis,
int color);
uint32_t color);
void MakeFromUnionOf(SShell *a, SShell *b);
void MakeFromDifferenceOf(SShell *a, SShell *b);

View File

@ -334,7 +334,7 @@ void SSurface::IntersectAgainst(SSurface *b, SShell *agnstA, SShell *agnstB,
if(lsi.n == 0) continue;
// Find the other surface that this curve trims.
hSCurve hsc = { (DWORD)se->auxA };
hSCurve hsc = { (uint32_t)se->auxA };
SCurve *sc = shA->curve.FindById(hsc);
hSSurface hother = (sc->surfA.v == srfA->h.v) ?
sc->surfB : sc->surfA;

View File

@ -11,7 +11,7 @@
void SPolygon::UvTriangulateInto(SMesh *m, SSurface *srf) {
if(l.n <= 0) return;
SDWORD in = GetMilliseconds();
int32_t in = GetMilliseconds();
normal = Vector::From(0, 0, 1);

View File

@ -74,7 +74,7 @@ void Style::CreateDefaultStyle(hStyle h) {
Style ns;
ZERO(&ns);
ns.color = CnfThawDWORD(d->color, CnfColor(d->cnfPrefix));
ns.color = CnfThawInt(d->color, CnfColor(d->cnfPrefix));
ns.width = CnfThawFloat((float)(d->width), CnfWidth(d->cnfPrefix));
ns.widthAs = UNITS_AS_PIXELS;
ns.textHeight = DEFAULT_TEXT_HEIGHT;
@ -121,20 +121,20 @@ void Style::LoadFactoryDefaults(void) {
void Style::FreezeDefaultStyles(void) {
const Default *d;
for(d = &(Defaults[0]); d->h.v; d++) {
CnfFreezeDWORD(Color(d->h), CnfColor(d->cnfPrefix));
CnfFreezeInt(Color(d->h), CnfColor(d->cnfPrefix));
CnfFreezeFloat((float)Width(d->h), CnfWidth(d->cnfPrefix));
}
}
DWORD Style::CreateCustomStyle(void) {
uint32_t Style::CreateCustomStyle(void) {
SS.UndoRemember();
DWORD vs = max((DWORD)Style::FIRST_CUSTOM, SK.style.MaximumId() + 1);
uint32_t vs = max((uint32_t)Style::FIRST_CUSTOM, SK.style.MaximumId() + 1);
hStyle hs = { vs };
(void)Style::Get(hs);
return hs.v;
}
void Style::AssignSelectionToStyle(DWORD v) {
void Style::AssignSelectionToStyle(uint32_t v) {
bool showError = false;
SS.GW.GroupSelection();
@ -197,12 +197,12 @@ Style *Style::Get(hStyle h) {
// A couple of wrappers, so that I can call these functions with either an
// hStyle or with the integer corresponding to that hStyle.v.
//-----------------------------------------------------------------------------
DWORD Style::Color(int s, bool forExport) {
hStyle hs = { (DWORD)s };
uint32_t Style::Color(int s, bool forExport) {
hStyle hs = { (uint32_t)s };
return Color(hs, forExport);
}
float Style::Width(int s) {
hStyle hs = { (DWORD)s };
hStyle hs = { (uint32_t)s };
return Width(hs);
}
@ -210,7 +210,7 @@ float Style::Width(int s) {
// If a color is almost white, then we can rewrite it to black, just so that
// it won't disappear on file formats with a light background.
//-----------------------------------------------------------------------------
DWORD Style::RewriteColor(DWORD rgbin) {
uint32_t Style::RewriteColor(uint32_t rgbin) {
Vector rgb = Vector::From(REDf(rgbin), GREENf(rgbin), BLUEf(rgbin));
rgb = rgb.Minus(Vector::From(1, 1, 1));
if(rgb.Magnitude() < 0.4 && SS.fixExportColors) {
@ -227,7 +227,7 @@ DWORD Style::RewriteColor(DWORD rgbin) {
//-----------------------------------------------------------------------------
// Return the stroke color associated with our style as 8-bit RGB.
//-----------------------------------------------------------------------------
DWORD Style::Color(hStyle h, bool forExport) {
uint32_t Style::Color(hStyle h, bool forExport) {
Style *s = Get(h);
if(forExport) {
return RewriteColor(s->color);
@ -239,7 +239,7 @@ DWORD Style::Color(hStyle h, bool forExport) {
//-----------------------------------------------------------------------------
// Return the fill color associated with our style as 8-bit RGB.
//-----------------------------------------------------------------------------
DWORD Style::FillColor(hStyle h, bool forExport) {
uint32_t Style::FillColor(hStyle h, bool forExport) {
Style *s = Get(h);
if(forExport) {
return RewriteColor(s->fillColor);
@ -290,7 +290,7 @@ double Style::TextHeight(hStyle hs) {
// if it's both shown and exportable.
//-----------------------------------------------------------------------------
bool Style::Exportable(int si) {
hStyle hs = { (DWORD)si };
hStyle hs = { (uint32_t)si };
Style *s = Get(hs);
return (s->exportable) && (s->visible);
}
@ -331,25 +331,25 @@ char *Style::DescriptionString(void) {
}
void TextWindow::ScreenShowListOfStyles(int link, DWORD v) {
void TextWindow::ScreenShowListOfStyles(int link, uint32_t v) {
SS.TW.GoToScreen(SCREEN_LIST_OF_STYLES);
}
void TextWindow::ScreenShowStyleInfo(int link, DWORD v) {
void TextWindow::ScreenShowStyleInfo(int link, uint32_t v) {
SS.TW.GoToScreen(SCREEN_STYLE_INFO);
SS.TW.shown.style.v = v;
}
void TextWindow::ScreenLoadFactoryDefaultStyles(int link, DWORD v) {
void TextWindow::ScreenLoadFactoryDefaultStyles(int link, uint32_t v) {
Style::LoadFactoryDefaults();
SS.TW.GoToScreen(SCREEN_LIST_OF_STYLES);
}
void TextWindow::ScreenCreateCustomStyle(int link, DWORD v) {
void TextWindow::ScreenCreateCustomStyle(int link, uint32_t v) {
Style::CreateCustomStyle();
}
void TextWindow::ScreenChangeBackgroundColor(int link, DWORD v) {
DWORD rgb = SS.backgroundColor;
void TextWindow::ScreenChangeBackgroundColor(int link, uint32_t v) {
uint32_t rgb = SS.backgroundColor;
SS.TW.ShowEditControlWithColorPicker(v, 3, rgb);
SS.TW.edit.meaning = EDIT_BACKGROUND_COLOR;
}
@ -366,7 +366,7 @@ static int RoundUpToPowerOfTwo(int v)
return 0;
}
void TextWindow::ScreenBackgroundImage(int link, DWORD v) {
void TextWindow::ScreenBackgroundImage(int link, uint32_t v) {
if(SS.bgImage.fromFile) MemFree(SS.bgImage.fromFile);
SS.bgImage.fromFile = NULL;
@ -380,7 +380,7 @@ void TextWindow::ScreenBackgroundImage(int link, DWORD v) {
f = fopen(importFile, "rb");
if(!f) goto err;
BYTE header[8];
uint8_t header[8];
if (fread(header, 1, 8, f) != 8)
goto err;
if(png_sig_cmp(header, 0, 8)) goto err;
@ -402,14 +402,14 @@ void TextWindow::ScreenBackgroundImage(int link, DWORD v) {
int w; w = (int)png_get_image_width(png_ptr, info_ptr);
int h; h = (int)png_get_image_height(png_ptr, info_ptr);
BYTE **rows; rows = png_get_rows(png_ptr, info_ptr);
uint8_t **rows; rows = png_get_rows(png_ptr, info_ptr);
// Round to next-highest powers of two, since the textures require
// that. And round up to 4, to guarantee DWORD alignment.
// that. And round up to 4, to guarantee 32-bit alignment.
int rw; rw = max(4, RoundUpToPowerOfTwo(w));
int rh; rh = max(4, RoundUpToPowerOfTwo(h));
SS.bgImage.fromFile = (BYTE *)MemAlloc(rw*rh*3);
SS.bgImage.fromFile = (uint8_t *)MemAlloc(rw*rh*3);
for(int i = 0; i < h; i++) {
memcpy(SS.bgImage.fromFile + ((h - 1) - i)*(rw*3), rows[i], w*3);
}
@ -427,7 +427,7 @@ err:
SS.later.showTW = true;
}
void TextWindow::ScreenChangeBackgroundImageScale(int link, DWORD v) {
void TextWindow::ScreenChangeBackgroundImageScale(int link, uint32_t v) {
char str[300];
sprintf(str, "%.3f", SS.bgImage.scale * SS.MmPerUnit());
SS.TW.edit.meaning = EDIT_BACKGROUND_IMG_SCALE;
@ -455,7 +455,7 @@ void TextWindow::ShowListOfStyles(void) {
Printf(false, "");
DWORD rgb = SS.backgroundColor;
uint32_t rgb = SS.backgroundColor;
Printf(false, "%Ft background color (r, g, b)%E");
Printf(false, "%Ba %@, %@, %@ %Fl%D%f%Ll[change]%E",
REDf(rgb), GREENf(rgb), BLUEf(rgb),
@ -486,7 +486,7 @@ void TextWindow::ShowListOfStyles(void) {
}
void TextWindow::ScreenChangeStyleName(int link, DWORD v) {
void TextWindow::ScreenChangeStyleName(int link, uint32_t v) {
hStyle hs = { v };
Style *s = Style::Get(hs);
SS.TW.ShowEditControl(10, 12, s->name.str);
@ -494,7 +494,7 @@ void TextWindow::ScreenChangeStyleName(int link, DWORD v) {
SS.TW.edit.meaning = EDIT_STYLE_NAME;
}
void TextWindow::ScreenDeleteStyle(int link, DWORD v) {
void TextWindow::ScreenDeleteStyle(int link, uint32_t v) {
SS.UndoRemember();
hStyle hs = { v };
Style *s = SK.style.FindByIdNoOops(hs);
@ -507,7 +507,7 @@ void TextWindow::ScreenDeleteStyle(int link, DWORD v) {
InvalidateGraphics();
}
void TextWindow::ScreenChangeStyleWidthOrTextHeight(int link, DWORD v) {
void TextWindow::ScreenChangeStyleWidthOrTextHeight(int link, uint32_t v) {
hStyle hs = { v };
Style *s = Style::Get(hs);
double val = (link == 't') ? s->textHeight : s->width;
@ -534,7 +534,7 @@ void TextWindow::ScreenChangeStyleWidthOrTextHeight(int link, DWORD v) {
EDIT_STYLE_WIDTH;
}
void TextWindow::ScreenChangeStyleTextAngle(int link, DWORD v) {
void TextWindow::ScreenChangeStyleTextAngle(int link, uint32_t v) {
hStyle hs = { v };
Style *s = Style::Get(hs);
char str[300];
@ -544,12 +544,12 @@ void TextWindow::ScreenChangeStyleTextAngle(int link, DWORD v) {
SS.TW.edit.meaning = EDIT_STYLE_TEXT_ANGLE;
}
void TextWindow::ScreenChangeStyleColor(int link, DWORD v) {
void TextWindow::ScreenChangeStyleColor(int link, uint32_t v) {
hStyle hs = { v };
Style *s = Style::Get(hs);
// Same function used for stroke and fill colors
int row, col, em;
DWORD rgb;
uint32_t rgb;
if(link == 's') {
row = 15; col = 13;
em = EDIT_STYLE_COLOR;
@ -566,7 +566,7 @@ void TextWindow::ScreenChangeStyleColor(int link, DWORD v) {
SS.TW.edit.meaning = em;
}
void TextWindow::ScreenChangeStyleYesNo(int link, DWORD v) {
void TextWindow::ScreenChangeStyleYesNo(int link, uint32_t v) {
SS.UndoRemember();
hStyle hs = { v };
Style *s = Style::Get(hs);
@ -867,7 +867,7 @@ void TextWindow::ShowStyleInfo(void) {
}
}
void TextWindow::ScreenAssignSelectionToStyle(int link, DWORD v) {
void TextWindow::ScreenAssignSelectionToStyle(int link, uint32_t v) {
Style::AssignSelectionToStyle(v);
}

View File

@ -45,10 +45,10 @@ bool System::WriteJacobian(int tag) {
f = f->FoldConstants();
// Hash table (61 bits) to accelerate generation of zero partials.
QWORD scoreboard = f->ParamsUsed();
uint64_t scoreboard = f->ParamsUsed();
for(j = 0; j < mat.n; j++) {
Expr *pd;
if(scoreboard & ((QWORD)1 << (mat.param[j].v % 61)) &&
if(scoreboard & ((uint64_t)1 << (mat.param[j].v % 61)) &&
f->DependsOn(mat.param[j]))
{
pd = f->PartialWrt(mat.param[j]);

View File

@ -10,7 +10,7 @@
// A navigation bar that always appears at the top of the window, with a
// link to bring us back home.
//-----------------------------------------------------------------------------
void TextWindow::ScreenHome(int link, DWORD v) {
void TextWindow::ScreenHome(int link, uint32_t v) {
SS.TW.GoToScreen(SCREEN_LIST_OF_GROUPS);
}
void TextWindow::ShowHeader(bool withNav) {
@ -42,11 +42,11 @@ void TextWindow::ShowHeader(bool withNav) {
// The screen that shows a list of every group in the sketch, with options
// to hide or show them, and to view them in detail. This is our home page.
//-----------------------------------------------------------------------------
void TextWindow::ScreenSelectGroup(int link, DWORD v) {
void TextWindow::ScreenSelectGroup(int link, uint32_t v) {
SS.TW.GoToScreen(SCREEN_GROUP_INFO);
SS.TW.shown.group.v = v;
}
void TextWindow::ScreenToggleGroupShown(int link, DWORD v) {
void TextWindow::ScreenToggleGroupShown(int link, uint32_t v) {
hGroup hg = { v };
Group *g = SK.GetGroup(hg);
g->visible = !(g->visible);
@ -54,7 +54,7 @@ void TextWindow::ScreenToggleGroupShown(int link, DWORD v) {
// previously, so regenerate.
SS.GenerateAll();
}
void TextWindow::ScreenShowGroupsSpecial(int link, DWORD v) {
void TextWindow::ScreenShowGroupsSpecial(int link, uint32_t v) {
int i;
for(i = 0; i < SK.group.n; i++) {
Group *g = &(SK.group.elem[i]);
@ -66,7 +66,7 @@ void TextWindow::ScreenShowGroupsSpecial(int link, DWORD v) {
}
}
}
void TextWindow::ScreenActivateGroup(int link, DWORD v) {
void TextWindow::ScreenActivateGroup(int link, uint32_t v) {
hGroup hg = { v };
Group *g = SK.GetGroup(hg);
g->visible = true;
@ -80,20 +80,20 @@ void TextWindow::ReportHowGroupSolved(hGroup hg) {
SS.TW.shown.group.v = hg.v;
SS.later.showTW = true;
}
void TextWindow::ScreenHowGroupSolved(int link, DWORD v) {
void TextWindow::ScreenHowGroupSolved(int link, uint32_t v) {
if(SS.GW.activeGroup.v != v) {
ScreenActivateGroup(link, v);
}
SS.TW.GoToScreen(SCREEN_GROUP_SOLVE_INFO);
SS.TW.shown.group.v = v;
}
void TextWindow::ScreenShowConfiguration(int link, DWORD v) {
void TextWindow::ScreenShowConfiguration(int link, uint32_t v) {
SS.TW.GoToScreen(SCREEN_CONFIGURATION);
}
void TextWindow::ScreenShowEditView(int link, DWORD v) {
void TextWindow::ScreenShowEditView(int link, uint32_t v) {
SS.TW.GoToScreen(SCREEN_EDIT_VIEW);
}
void TextWindow::ScreenGoToWebsite(int link, DWORD v) {
void TextWindow::ScreenGoToWebsite(int link, uint32_t v) {
OpenWebsite("http://solvespace.com/txtlink");
}
void TextWindow::ShowListOfGroups(void) {
@ -154,7 +154,7 @@ void TextWindow::ShowListOfGroups(void) {
// The screen that shows information about a specific group, and allows the
// user to edit various things about it.
//-----------------------------------------------------------------------------
void TextWindow::ScreenHoverConstraint(int link, DWORD v) {
void TextWindow::ScreenHoverConstraint(int link, uint32_t v) {
if(!SS.GW.showConstraints) return;
hConstraint hc = { v };
@ -167,20 +167,20 @@ void TextWindow::ScreenHoverConstraint(int link, DWORD v) {
SS.GW.hover.constraint = hc;
SS.GW.hover.emphasized = true;
}
void TextWindow::ScreenHoverRequest(int link, DWORD v) {
void TextWindow::ScreenHoverRequest(int link, uint32_t v) {
SS.GW.hover.Clear();
hRequest hr = { v };
SS.GW.hover.entity = hr.entity(0);
SS.GW.hover.emphasized = true;
}
void TextWindow::ScreenSelectConstraint(int link, DWORD v) {
void TextWindow::ScreenSelectConstraint(int link, uint32_t v) {
SS.GW.ClearSelection();
GraphicsWindow::Selection sel;
ZERO(&sel);
sel.constraint.v = v;
SS.GW.selection.Add(&sel);
}
void TextWindow::ScreenSelectRequest(int link, DWORD v) {
void TextWindow::ScreenSelectRequest(int link, uint32_t v) {
SS.GW.ClearSelection();
GraphicsWindow::Selection sel;
ZERO(&sel);
@ -189,7 +189,7 @@ void TextWindow::ScreenSelectRequest(int link, DWORD v) {
SS.GW.selection.Add(&sel);
}
void TextWindow::ScreenChangeGroupOption(int link, DWORD v) {
void TextWindow::ScreenChangeGroupOption(int link, uint32_t v) {
SS.UndoRemember();
Group *g = SK.GetGroup(SS.TW.shown.group);
@ -218,14 +218,14 @@ void TextWindow::ScreenChangeGroupOption(int link, DWORD v) {
SS.GW.ClearSuper();
}
void TextWindow::ScreenColor(int link, DWORD v) {
void TextWindow::ScreenColor(int link, uint32_t v) {
SS.UndoRemember();
Group *g = SK.GetGroup(SS.TW.shown.group);
SS.TW.ShowEditControlWithColorPicker(v, 3, g->color);
SS.TW.edit.meaning = EDIT_GROUP_COLOR;
}
void TextWindow::ScreenChangeExprA(int link, DWORD v) {
void TextWindow::ScreenChangeExprA(int link, uint32_t v) {
Group *g = SK.GetGroup(SS.TW.shown.group);
// There's an extra line for the skipFirst parameter in one-sided groups.
@ -237,13 +237,13 @@ void TextWindow::ScreenChangeExprA(int link, DWORD v) {
SS.TW.edit.meaning = EDIT_TIMES_REPEATED;
SS.TW.edit.group.v = v;
}
void TextWindow::ScreenChangeGroupName(int link, DWORD v) {
void TextWindow::ScreenChangeGroupName(int link, uint32_t v) {
Group *g = SK.GetGroup(SS.TW.shown.group);
SS.TW.ShowEditControl(7, 12, g->DescriptionString()+5);
SS.TW.edit.meaning = EDIT_GROUP_NAME;
SS.TW.edit.group.v = v;
}
void TextWindow::ScreenChangeGroupScale(int link, DWORD v) {
void TextWindow::ScreenChangeGroupScale(int link, uint32_t v) {
Group *g = SK.GetGroup(SS.TW.shown.group);
char str[1024];
@ -252,7 +252,7 @@ void TextWindow::ScreenChangeGroupScale(int link, DWORD v) {
SS.TW.edit.meaning = EDIT_GROUP_SCALE;
SS.TW.edit.group.v = v;
}
void TextWindow::ScreenDeleteGroup(int link, DWORD v) {
void TextWindow::ScreenDeleteGroup(int link, uint32_t v) {
SS.UndoRemember();
hGroup hg = SS.TW.shown.group;
@ -497,7 +497,7 @@ void TextWindow::ShowGroupSolveInfo(void) {
// how many steps to take in between current and finish, re-solving each
// time.
//-----------------------------------------------------------------------------
void TextWindow::ScreenStepDimFinish(int link, DWORD v) {
void TextWindow::ScreenStepDimFinish(int link, uint32_t v) {
SS.TW.edit.meaning = EDIT_STEP_DIM_FINISH;
char s[1024];
if(SS.TW.shown.dimIsDistance) {
@ -507,13 +507,13 @@ void TextWindow::ScreenStepDimFinish(int link, DWORD v) {
}
SS.TW.ShowEditControl(12, 12, s);
}
void TextWindow::ScreenStepDimSteps(int link, DWORD v) {
void TextWindow::ScreenStepDimSteps(int link, uint32_t v) {
char str[1024];
sprintf(str, "%d", SS.TW.shown.dimSteps);
SS.TW.edit.meaning = EDIT_STEP_DIM_STEPS;
SS.TW.ShowEditControl(14, 12, str);
}
void TextWindow::ScreenStepDimGo(int link, DWORD v) {
void TextWindow::ScreenStepDimGo(int link, uint32_t v) {
hConstraint hc = SS.TW.shown.constraint;
Constraint *c = SK.constraint.FindByIdNoOops(hc);
if(c) {
@ -567,7 +567,7 @@ void TextWindow::ShowStepDimension(void) {
// thing). User gets to specify the radius, and whether the old untrimmed
// curves are kept or deleted.
//-----------------------------------------------------------------------------
void TextWindow::ScreenChangeTangentArc(int link, DWORD v) {
void TextWindow::ScreenChangeTangentArc(int link, uint32_t v) {
switch(link) {
case 'r': {
char str[1024];

View File

@ -85,7 +85,7 @@ void TextWindow::ShowEditControl(int halfRow, int col, char *s) {
ShowTextEditControl(x - 3, y + 2, s);
}
void TextWindow::ShowEditControlWithColorPicker(int halfRow, int col, DWORD rgb)
void TextWindow::ShowEditControlWithColorPicker(int halfRow, int col, uint32_t rgb)
{
char str[1024];
sprintf(str, "%.2f, %.2f, %.2f", REDf(rgb), GREENf(rgb), BLUEf(rgb));
@ -133,7 +133,7 @@ void TextWindow::Printf(bool halfLine, const char *fmt, ...) {
char fg = 'd';
int bg = 'd';
int link = NOT_A_LINK;
DWORD data = 0;
uint32_t data = 0;
LinkFunction *f = NULL, *h = NULL;
c = 0;
@ -151,7 +151,7 @@ void TextWindow::Printf(bool halfLine, const char *fmt, ...) {
break;
}
case 'x': {
DWORD v = va_arg(vl, DWORD);
unsigned int v = va_arg(vl, unsigned int);
sprintf(buf, "%08x", v);
break;
}
@ -237,10 +237,11 @@ void TextWindow::Printf(bool halfLine, const char *fmt, ...) {
h = va_arg(vl, LinkFunction *);
break;
case 'D':
data = va_arg(vl, DWORD);
case 'D': {
unsigned int v = va_arg(vl, unsigned int);
data = (uint32_t)v;
break;
}
case '%':
strcpy(buf, "%");
break;
@ -495,8 +496,8 @@ Vector TextWindow::HsvToRgb(Vector hsv) {
return rgb;
}
BYTE *TextWindow::HsvPattern2d(void) {
static BYTE Texture[256*256*3];
uint8_t *TextWindow::HsvPattern2d(void) {
static uint8_t Texture[256*256*3];
static bool Init;
if(!Init) {
@ -507,9 +508,9 @@ BYTE *TextWindow::HsvPattern2d(void) {
Vector hsv = Vector::From(6.0*i/255.0, 1.0*j/255.0, 1);
Vector rgb = HsvToRgb(hsv);
rgb = rgb.ScaledBy(255);
Texture[p++] = (BYTE)rgb.x;
Texture[p++] = (BYTE)rgb.y;
Texture[p++] = (BYTE)rgb.z;
Texture[p++] = (uint8_t)rgb.x;
Texture[p++] = (uint8_t)rgb.y;
Texture[p++] = (uint8_t)rgb.z;
}
}
Init = true;
@ -517,8 +518,8 @@ BYTE *TextWindow::HsvPattern2d(void) {
return Texture;
}
BYTE *TextWindow::HsvPattern1d(double h, double s) {
static BYTE Texture[256*4];
uint8_t *TextWindow::HsvPattern1d(double h, double s) {
static uint8_t Texture[256*4];
int i, p;
p = 0;
@ -526,9 +527,9 @@ BYTE *TextWindow::HsvPattern1d(double h, double s) {
Vector hsv = Vector::From(6*h, s, 1.0*(255 - i)/255.0);
Vector rgb = HsvToRgb(hsv);
rgb = rgb.ScaledBy(255);
Texture[p++] = (BYTE)rgb.x;
Texture[p++] = (BYTE)rgb.y;
Texture[p++] = (BYTE)rgb.z;
Texture[p++] = (uint8_t)rgb.x;
Texture[p++] = (uint8_t)rgb.y;
Texture[p++] = (uint8_t)rgb.z;
// Needs a padding byte, to make things four-aligned
p++;
}
@ -537,7 +538,7 @@ BYTE *TextWindow::HsvPattern1d(double h, double s) {
void TextWindow::ColorPickerDone(void) {
char str[1024];
DWORD rgb = editControl.colorPicker.rgb;
uint32_t rgb = editControl.colorPicker.rgb;
sprintf(str, "%.2f, %.2f, %.3f", REDf(rgb), GREENf(rgb), BLUEf(rgb));
EditControlDone(str);
}
@ -555,7 +556,7 @@ bool TextWindow::DrawOrHitTestColorPicker(int how, bool leftDown,
if(!editControl.colorPicker.show) return false;
if(how == CLICK || (how == HOVER && leftDown)) InvalidateText();
static const DWORD BaseColor[12] = {
static const uint32_t BaseColor[12] = {
RGB(255, 0, 0),
RGB( 0, 255, 0),
RGB( 0, 0, 255),
@ -608,7 +609,7 @@ bool TextWindow::DrawOrHitTestColorPicker(int how, bool leftDown,
for(i = 0; i < WIDTH/2; i++) {
for(j = 0; j < HEIGHT; j++) {
Vector rgb;
DWORD d;
uint32_t d;
if(i == 0 && j < 8) {
d = SS.modelColor[j];
rgb = Vector::From(REDf(d), GREENf(d), BLUEf(d));

View File

@ -8,9 +8,9 @@
#include "solvespace.h"
#include <icons.h>
BYTE SPACER[1];
uint8_t SPACER[1];
static const struct {
BYTE *image;
uint8_t *image;
int menu;
const char *tip;
} Toolbar[] = {

View File

@ -10,8 +10,8 @@ int main(void)
InitCommonControls();
// A monospaced font
HFONT font = CreateFont(16, 9, 0, 0, FW_REGULAR, FALSE,
FALSE, FALSE, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
HFONT font = CreateFont(16, 9, 0, 0, FW_REGULAR, false,
false, false, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY, FF_DONTCARE, "Lucida Console");
HDC hdc = CreateDC("DISPLAY", NULL, NULL, NULL);
@ -20,7 +20,7 @@ int main(void)
SelectObject(hdc, bitmap);
SelectObject(hdc, font);
printf("static const BYTE FontTexture[256*16*16] = {\n");
printf("static const uint8_t FontTexture[256*16*16] = {\n");
int c;
for(c = 0; c < 128; c++) {

306
ttf.cpp
View File

@ -67,23 +67,24 @@ int TtfFont::Getc(void) {
//-----------------------------------------------------------------------------
// Helpers to get 1, 2, or 4 bytes from the .ttf file. Big endian.
// The BYTE, USHORT and ULONG nomenclature comes from the OpenType spec.
//-----------------------------------------------------------------------------
BYTE TtfFont::GetBYTE(void) {
return (BYTE)Getc();
uint8_t TtfFont::GetBYTE(void) {
return (uint8_t)Getc();
}
WORD TtfFont::GetWORD(void) {
BYTE b0, b1;
b1 = (BYTE)Getc();
b0 = (BYTE)Getc();
uint16_t TtfFont::GetUSHORT(void) {
uint8_t b0, b1;
b1 = (uint8_t)Getc();
b0 = (uint8_t)Getc();
return (b1 << 8) | b0;
}
DWORD TtfFont::GetDWORD(void) {
BYTE b0, b1, b2, b3;
b3 = (BYTE)Getc();
b2 = (BYTE)Getc();
b1 = (BYTE)Getc();
b0 = (BYTE)Getc();
uint32_t TtfFont::GetULONG(void) {
uint8_t b0, b1, b2, b3;
b3 = (uint8_t)Getc();
b2 = (uint8_t)Getc();
b1 = (uint8_t)Getc();
b0 = (uint8_t)Getc();
return (b3 << 24) | (b2 << 16) | (b1 << 8) | b0;
}
@ -98,35 +99,35 @@ void TtfFont::LoadGlyph(int index) {
int i;
SWORD contours = (SWORD)GetWORD();
SWORD xMin = (SWORD)GetWORD();
SWORD yMin = (SWORD)GetWORD();
SWORD xMax = (SWORD)GetWORD();
SWORD yMax = (SWORD)GetWORD();
int16_t contours = (int16_t)GetUSHORT();
int16_t xMin = (int16_t)GetUSHORT();
int16_t yMin = (int16_t)GetUSHORT();
int16_t xMax = (int16_t)GetUSHORT();
int16_t yMax = (int16_t)GetUSHORT();
if(useGlyph['A'] == index) {
scale = (1024*1024) / yMax;
}
if(contours > 0) {
WORD *endPointsOfContours =
(WORD *)AllocTemporary(contours*sizeof(WORD));
uint16_t *endPointsOfContours =
(uint16_t *)AllocTemporary(contours*sizeof(uint16_t));
for(i = 0; i < contours; i++) {
endPointsOfContours[i] = GetWORD();
endPointsOfContours[i] = GetUSHORT();
}
WORD totalPts = endPointsOfContours[i-1] + 1;
uint16_t totalPts = endPointsOfContours[i-1] + 1;
WORD instructionLength = GetWORD();
uint16_t instructionLength = GetUSHORT();
for(i = 0; i < instructionLength; i++) {
// We can ignore the instructions, since we're doing vector
// output.
(void)GetBYTE();
}
BYTE *flags = (BYTE *)AllocTemporary(totalPts*sizeof(BYTE));
SWORD *x = (SWORD *)AllocTemporary(totalPts*sizeof(SWORD));
SWORD *y = (SWORD *)AllocTemporary(totalPts*sizeof(SWORD));
uint8_t *flags = (uint8_t *)AllocTemporary(totalPts*sizeof(uint8_t));
int16_t *x = (int16_t *)AllocTemporary(totalPts*sizeof(int16_t));
int16_t *y = (int16_t *)AllocTemporary(totalPts*sizeof(int16_t));
// Flags, that indicate format of the coordinates
#define FLAG_ON_CURVE (1 << 0)
@ -141,7 +142,7 @@ void TtfFont::LoadGlyph(int index) {
flags[i] = GetBYTE();
if(flags[i] & FLAG_REPEAT) {
int n = GetBYTE();
BYTE f = flags[i];
uint8_t f = flags[i];
int j;
for(j = 0; j < n; j++) {
i++;
@ -154,10 +155,10 @@ void TtfFont::LoadGlyph(int index) {
}
// x coordinates
SWORD xa = 0;
int16_t xa = 0;
for(i = 0; i < totalPts; i++) {
if(flags[i] & FLAG_DX_IS_BYTE) {
BYTE v = GetBYTE();
uint8_t v = GetBYTE();
if(flags[i] & FLAG_X_IS_POSITIVE) {
xa += v;
} else {
@ -167,7 +168,7 @@ void TtfFont::LoadGlyph(int index) {
if(flags[i] & FLAG_X_IS_SAME) {
// no change
} else {
SWORD d = (SWORD)GetWORD();
int16_t d = (int16_t)GetUSHORT();
xa += d;
}
}
@ -175,10 +176,10 @@ void TtfFont::LoadGlyph(int index) {
}
// y coordinates
SWORD ya = 0;
int16_t ya = 0;
for(i = 0; i < totalPts; i++) {
if(flags[i] & FLAG_DY_IS_BYTE) {
BYTE v = GetBYTE();
uint8_t v = GetBYTE();
if(flags[i] & FLAG_Y_IS_POSITIVE) {
ya += v;
} else {
@ -188,7 +189,7 @@ void TtfFont::LoadGlyph(int index) {
if(flags[i] & FLAG_Y_IS_SAME) {
// no change
} else {
SWORD d = (SWORD)GetWORD();
int16_t d = (int16_t)GetUSHORT();
ya += d;
}
}
@ -201,7 +202,7 @@ void TtfFont::LoadGlyph(int index) {
for(i = 0; i < totalPts; i++) {
g->pt[i].x = x[i];
g->pt[i].y = y[i];
g->pt[i].onCurve = (BYTE)(flags[i] & FLAG_ON_CURVE);
g->pt[i].onCurve = (uint8_t)(flags[i] & FLAG_ON_CURVE);
if(i == endPointsOfContours[contour]) {
g->pt[i].lastInContour = true;
@ -248,22 +249,22 @@ bool TtfFont::LoadFontFromFile(bool nameOnly) {
try {
// First, load the Offset Table
DWORD version = GetDWORD();
WORD numTables = GetWORD();
WORD searchRange = GetWORD();
WORD entrySelector = GetWORD();
WORD rangeShift = GetWORD();
uint32_t version = GetULONG();
uint16_t numTables = GetUSHORT();
uint16_t searchRange = GetUSHORT();
uint16_t entrySelector = GetUSHORT();
uint16_t rangeShift = GetUSHORT();
// Now load the Table Directory; our goal in doing this will be to
// find the addresses of the tables that we will need.
DWORD glyfAddr = (DWORD)-1, glyfLen;
DWORD cmapAddr = (DWORD)-1, cmapLen;
DWORD headAddr = (DWORD)-1, headLen;
DWORD locaAddr = (DWORD)-1, locaLen;
DWORD maxpAddr = (DWORD)-1, maxpLen;
DWORD nameAddr = (DWORD)-1, nameLen;
DWORD hmtxAddr = (DWORD)-1, hmtxLen;
DWORD hheaAddr = (DWORD)-1, hheaLen;
uint32_t glyfAddr = (uint32_t)-1, glyfLen;
uint32_t cmapAddr = (uint32_t)-1, cmapLen;
uint32_t headAddr = (uint32_t)-1, headLen;
uint32_t locaAddr = (uint32_t)-1, locaLen;
uint32_t maxpAddr = (uint32_t)-1, maxpLen;
uint32_t nameAddr = (uint32_t)-1, nameLen;
uint32_t hmtxAddr = (uint32_t)-1, hmtxLen;
uint32_t hheaAddr = (uint32_t)-1, hheaLen;
for(i = 0; i < numTables; i++) {
char tag[5] = "xxxx";
@ -271,9 +272,9 @@ bool TtfFont::LoadFontFromFile(bool nameOnly) {
tag[1] = (char)GetBYTE();
tag[2] = (char)GetBYTE();
tag[3] = (char)GetBYTE();
DWORD checksum = GetDWORD();
DWORD offset = GetDWORD();
DWORD length = GetDWORD();
uint32_t checksum = GetULONG();
uint32_t offset = GetULONG();
uint32_t length = GetULONG();
if(strcmp(tag, "glyf")==0) {
glyfAddr = offset;
@ -302,9 +303,14 @@ bool TtfFont::LoadFontFromFile(bool nameOnly) {
}
}
if(glyfAddr == (DWORD)-1 || cmapAddr == (DWORD)-1 || headAddr == (DWORD)-1 ||
locaAddr == (DWORD)-1 || maxpAddr == (DWORD)-1 || hmtxAddr == (DWORD)-1 ||
nameAddr == (DWORD)-1 || hheaAddr == (DWORD)-1)
if(glyfAddr == (uint32_t)-1 ||
cmapAddr == (uint32_t)-1 ||
headAddr == (uint32_t)-1 ||
locaAddr == (uint32_t)-1 ||
maxpAddr == (uint32_t)-1 ||
hmtxAddr == (uint32_t)-1 ||
nameAddr == (uint32_t)-1 ||
hheaAddr == (uint32_t)-1)
{
throw "missing table addr";
}
@ -313,19 +319,19 @@ bool TtfFont::LoadFontFromFile(bool nameOnly) {
// we need when we're giving the user a list to choose from.
fseek(fh, nameAddr, SEEK_SET);
WORD nameFormat = GetWORD();
WORD nameCount = GetWORD();
WORD nameStringOffset = GetWORD();
uint16_t nameFormat = GetUSHORT();
uint16_t nameCount = GetUSHORT();
uint16_t nameStringOffset = GetUSHORT();
// And now we're at the name records. Go through those till we find
// one that we want.
int displayNameOffset = 0, displayNameLength = 0;
for(i = 0; i < nameCount; i++) {
WORD platformID = GetWORD();
WORD encodingID = GetWORD();
WORD languageID = GetWORD();
WORD nameId = GetWORD();
WORD length = GetWORD();
WORD offset = GetWORD();
uint16_t platformID = GetUSHORT();
uint16_t encodingID = GetUSHORT();
uint16_t languageID = GetUSHORT();
uint16_t nameId = GetUSHORT();
uint16_t length = GetUSHORT();
uint16_t offset = GetUSHORT();
if(nameId == 4) {
displayNameOffset = offset;
@ -342,7 +348,7 @@ bool TtfFont::LoadFontFromFile(bool nameOnly) {
fseek(fh, nameAddr+nameStringOffset+displayNameOffset, SEEK_SET);
int c = 0;
for(i = 0; i < displayNameLength; i++) {
BYTE b = GetBYTE();
uint8_t b = GetBYTE();
if(b && c < ((int)sizeof(name.str) - 2)) {
name.str[c++] = b;
}
@ -358,25 +364,25 @@ bool TtfFont::LoadFontFromFile(bool nameOnly) {
// loca table, 16- or 32-bit entries
fseek(fh, headAddr, SEEK_SET);
DWORD headVersion = GetDWORD();
DWORD headFontRevision = GetDWORD();
DWORD headCheckSumAdj = GetDWORD();
DWORD headMagicNumber = GetDWORD();
WORD headFlags = GetWORD();
WORD headUnitsPerEm = GetWORD();
(void)GetDWORD(); // created time
(void)GetDWORD();
(void)GetDWORD(); // modified time
(void)GetDWORD();
WORD headXmin = GetWORD();
WORD headYmin = GetWORD();
WORD headXmax = GetWORD();
WORD headYmax = GetWORD();
WORD headMacStyle = GetWORD();
WORD headLowestRecPPEM = GetWORD();
WORD headFontDirectionHint = GetWORD();
WORD headIndexToLocFormat = GetWORD();
WORD headGlyphDataFormat = GetWORD();
uint32_t headVersion = GetULONG();
uint32_t headFontRevision = GetULONG();
uint32_t headCheckSumAdj = GetULONG();
uint32_t headMagicNumber = GetULONG();
uint16_t headFlags = GetUSHORT();
uint16_t headUnitsPerEm = GetUSHORT();
(void)GetULONG(); // created time
(void)GetULONG();
(void)GetULONG(); // modified time
(void)GetULONG();
uint16_t headXmin = GetUSHORT();
uint16_t headYmin = GetUSHORT();
uint16_t headXmax = GetUSHORT();
uint16_t headYmax = GetUSHORT();
uint16_t headMacStyle = GetUSHORT();
uint16_t headLowestRecPPEM = GetUSHORT();
uint16_t headFontDirectionHint = GetUSHORT();
uint16_t headIndexToLocFormat = GetUSHORT();
uint16_t headGlyphDataFormat = GetUSHORT();
if(headMagicNumber != 0x5F0F3CF5) {
throw "bad magic number";
@ -385,43 +391,43 @@ bool TtfFont::LoadFontFromFile(bool nameOnly) {
// Load the hhea table, which contains the number of entries in the
// horizontal metrics (hmtx) table.
fseek(fh, hheaAddr, SEEK_SET);
DWORD hheaVersion = GetDWORD();
WORD hheaAscender = GetWORD();
WORD hheaDescender = GetWORD();
WORD hheaLineGap = GetWORD();
WORD hheaAdvanceWidthMax = GetWORD();
WORD hheaMinLsb = GetWORD();
WORD hheaMinRsb = GetWORD();
WORD hheaXMaxExtent = GetWORD();
WORD hheaCaretSlopeRise = GetWORD();
WORD hheaCaretSlopeRun = GetWORD();
WORD hheaCaretOffset = GetWORD();
(void)GetWORD();
(void)GetWORD();
(void)GetWORD();
(void)GetWORD();
WORD hheaMetricDataFormat = GetWORD();
WORD hheaNumberOfMetrics = GetWORD();
uint32_t hheaVersion = GetULONG();
uint16_t hheaAscender = GetUSHORT();
uint16_t hheaDescender = GetUSHORT();
uint16_t hheaLineGap = GetUSHORT();
uint16_t hheaAdvanceWidthMax = GetUSHORT();
uint16_t hheaMinLsb = GetUSHORT();
uint16_t hheaMinRsb = GetUSHORT();
uint16_t hheaXMaxExtent = GetUSHORT();
uint16_t hheaCaretSlopeRise = GetUSHORT();
uint16_t hheaCaretSlopeRun = GetUSHORT();
uint16_t hheaCaretOffset = GetUSHORT();
(void)GetUSHORT();
(void)GetUSHORT();
(void)GetUSHORT();
(void)GetUSHORT();
uint16_t hheaMetricDataFormat = GetUSHORT();
uint16_t hheaNumberOfMetrics = GetUSHORT();
// Load the maxp table, which determines (among other things) the number
// of glyphs in the font
fseek(fh, maxpAddr, SEEK_SET);
DWORD maxpVersion = GetDWORD();
WORD maxpNumGlyphs = GetWORD();
WORD maxpMaxPoints = GetWORD();
WORD maxpMaxContours = GetWORD();
WORD maxpMaxComponentPoints = GetWORD();
WORD maxpMaxComponentContours = GetWORD();
WORD maxpMaxZones = GetWORD();
WORD maxpMaxTwilightPoints = GetWORD();
WORD maxpMaxStorage = GetWORD();
WORD maxpMaxFunctionDefs = GetWORD();
WORD maxpMaxInstructionDefs = GetWORD();
WORD maxpMaxStackElements = GetWORD();
WORD maxpMaxSizeOfInstructions = GetWORD();
WORD maxpMaxComponentElements = GetWORD();
WORD maxpMaxComponentDepth = GetWORD();
uint32_t maxpVersion = GetULONG();
uint16_t maxpNumGlyphs = GetUSHORT();
uint16_t maxpMaxPoints = GetUSHORT();
uint16_t maxpMaxContours = GetUSHORT();
uint16_t maxpMaxComponentPoints = GetUSHORT();
uint16_t maxpMaxComponentContours = GetUSHORT();
uint16_t maxpMaxZones = GetUSHORT();
uint16_t maxpMaxTwilightPoints = GetUSHORT();
uint16_t maxpMaxStorage = GetUSHORT();
uint16_t maxpMaxFunctionDefs = GetUSHORT();
uint16_t maxpMaxInstructionDefs = GetUSHORT();
uint16_t maxpMaxStackElements = GetUSHORT();
uint16_t maxpMaxSizeOfInstructions = GetUSHORT();
uint16_t maxpMaxComponentElements = GetUSHORT();
uint16_t maxpMaxComponentDepth = GetUSHORT();
glyphs = maxpNumGlyphs;
glyph = (Glyph *)MemAlloc(glyphs*sizeof(glyph[0]));
@ -430,11 +436,11 @@ bool TtfFont::LoadFontFromFile(bool nameOnly) {
// and advance width) of the font.
fseek(fh, hmtxAddr, SEEK_SET);
WORD hmtxAdvanceWidth = 0;
SWORD hmtxLsb = 0;
uint16_t hmtxAdvanceWidth = 0;
int16_t hmtxLsb = 0;
for(i = 0; i < min(glyphs, hheaNumberOfMetrics); i++) {
hmtxAdvanceWidth = GetWORD();
hmtxLsb = (SWORD)GetWORD();
hmtxAdvanceWidth = GetUSHORT();
hmtxLsb = (int16_t)GetUSHORT();
glyph[i].leftSideBearing = hmtxLsb;
glyph[i].advanceWidth = hmtxAdvanceWidth;
@ -449,14 +455,14 @@ bool TtfFont::LoadFontFromFile(bool nameOnly) {
// glyphs.
fseek(fh, cmapAddr, SEEK_SET);
DWORD usedTableAddr = (DWORD)-1;
uint32_t usedTableAddr = (uint32_t)-1;
WORD cmapVersion = GetWORD();
WORD cmapTableCount = GetWORD();
uint16_t cmapVersion = GetUSHORT();
uint16_t cmapTableCount = GetUSHORT();
for(i = 0; i < cmapTableCount; i++) {
WORD platformId = GetWORD();
WORD encodingId = GetWORD();
DWORD offset = GetDWORD();
uint16_t platformId = GetUSHORT();
uint16_t encodingId = GetUSHORT();
uint32_t offset = GetULONG();
if(platformId == 3 && encodingId == 1) {
// The Windows Unicode mapping is our preference
@ -464,7 +470,7 @@ bool TtfFont::LoadFontFromFile(bool nameOnly) {
}
}
if(usedTableAddr == (DWORD)-1) {
if(usedTableAddr == (uint32_t)-1) {
throw "no used table addr";
}
@ -472,13 +478,13 @@ bool TtfFont::LoadFontFromFile(bool nameOnly) {
// which is us.
fseek(fh, usedTableAddr, SEEK_SET);
WORD mapFormat = GetWORD();
WORD mapLength = GetWORD();
WORD mapVersion = GetWORD();
WORD mapSegCountX2 = GetWORD();
WORD mapSearchRange = GetWORD();
WORD mapEntrySelector = GetWORD();
WORD mapRangeShift = GetWORD();
uint16_t mapFormat = GetUSHORT();
uint16_t mapLength = GetUSHORT();
uint16_t mapVersion = GetUSHORT();
uint16_t mapSegCountX2 = GetUSHORT();
uint16_t mapSearchRange = GetUSHORT();
uint16_t mapEntrySelector = GetUSHORT();
uint16_t mapRangeShift = GetUSHORT();
if(mapFormat != 4) {
// Required to use format 4 per spec
@ -486,26 +492,26 @@ bool TtfFont::LoadFontFromFile(bool nameOnly) {
}
int segCount = mapSegCountX2 / 2;
WORD *endChar = (WORD *)AllocTemporary(segCount*sizeof(WORD));
WORD *startChar = (WORD *)AllocTemporary(segCount*sizeof(WORD));
WORD *idDelta = (WORD *)AllocTemporary(segCount*sizeof(WORD));
WORD *idRangeOffset = (WORD *)AllocTemporary(segCount*sizeof(WORD));
uint16_t *endChar = (uint16_t *)AllocTemporary(segCount*sizeof(uint16_t));
uint16_t *startChar = (uint16_t *)AllocTemporary(segCount*sizeof(uint16_t));
uint16_t *idDelta = (uint16_t *)AllocTemporary(segCount*sizeof(uint16_t));
uint16_t *idRangeOffset = (uint16_t *)AllocTemporary(segCount*sizeof(uint16_t));
DWORD *filePos = (DWORD *)AllocTemporary(segCount*sizeof(DWORD));
uint32_t *filePos = (uint32_t *)AllocTemporary(segCount*sizeof(uint32_t));
for(i = 0; i < segCount; i++) {
endChar[i] = GetWORD();
endChar[i] = GetUSHORT();
}
WORD mapReservedPad = GetWORD();
uint16_t mapReservedPad = GetUSHORT();
for(i = 0; i < segCount; i++) {
startChar[i] = GetWORD();
startChar[i] = GetUSHORT();
}
for(i = 0; i < segCount; i++) {
idDelta[i] = GetWORD();
idDelta[i] = GetUSHORT();
}
for(i = 0; i < segCount; i++) {
filePos[i] = (DWORD)ftell(fh);
idRangeOffset[i] = GetWORD();
filePos[i] = (uint32_t)ftell(fh);
idRangeOffset[i] = GetUSHORT();
}
// So first, null out the glyph table in our in-memory representation
@ -516,16 +522,16 @@ bool TtfFont::LoadFontFromFile(bool nameOnly) {
}
for(i = 0; i < segCount; i++) {
WORD v = idDelta[i];
uint16_t v = idDelta[i];
if(idRangeOffset[i] == 0) {
int j;
for(j = startChar[i]; j <= endChar[i]; j++) {
if(j > 0 && j < (int)arraylen(useGlyph)) {
// Don't create a reference to a glyph that we won't
// store because it's bigger than the table.
if((WORD)(j + v) < glyphs) {
if((uint16_t)(j + v) < glyphs) {
// Arithmetic is modulo 2^16
useGlyph[j] = (WORD)(j + v);
useGlyph[j] = (uint16_t)(j + v);
}
}
}
@ -534,11 +540,11 @@ bool TtfFont::LoadFontFromFile(bool nameOnly) {
for(j = startChar[i]; j <= endChar[i]; j++) {
if(j > 0 && j < (int)arraylen(useGlyph)) {
int fp = filePos[i];
fp += (j - startChar[i])*sizeof(WORD);
fp += (j - startChar[i])*sizeof(uint16_t);
fp += idRangeOffset[i];
fseek(fh, fp, SEEK_SET);
useGlyph[j] = GetWORD();
useGlyph[j] = GetUSHORT();
}
}
}
@ -548,15 +554,15 @@ bool TtfFont::LoadFontFromFile(bool nameOnly) {
// relative to the beginning of the glyf table.
fseek(fh, locaAddr, SEEK_SET);
DWORD *glyphOffsets = (DWORD *)AllocTemporary(glyphs*sizeof(DWORD));
uint32_t *glyphOffsets = (uint32_t *)AllocTemporary(glyphs*sizeof(uint32_t));
for(i = 0; i < glyphs; i++) {
if(headIndexToLocFormat == 1) {
// long offsets, 32 bits
glyphOffsets[i] = GetDWORD();
glyphOffsets[i] = GetULONG();
} else if(headIndexToLocFormat == 0) {
// short offsets, 16 bits but divided by 2
glyphOffsets[i] = GetWORD()*2;
glyphOffsets[i] = GetUSHORT()*2;
} else {
throw "bad headIndexToLocFormat";
}

148
ui.h
View File

@ -28,7 +28,7 @@ public:
#define BLUEf(v) (BLUE (v) / 255.0f)
typedef struct {
char c;
int color;
uint32_t color;
} Color;
static const Color fgColors[];
static const Color bgColors[];
@ -51,14 +51,14 @@ public:
int scrollPos; // The scrollbar position, in half-row units
int halfRows; // The height of our window, in half-row units
BYTE text[MAX_ROWS][MAX_COLS];
typedef void LinkFunction(int link, DWORD v);
uint8_t text[MAX_ROWS][MAX_COLS];
typedef void LinkFunction(int link, uint32_t v);
enum { NOT_A_LINK = 0 };
struct {
char fg;
int bg;
int link;
DWORD data;
uint32_t data;
LinkFunction *f;
LinkFunction *h;
} meta[MAX_ROWS][MAX_COLS];
@ -71,7 +71,7 @@ public:
// The row of icons at the top of the text window, to hide/show things
typedef struct {
bool *var;
BYTE *icon;
uint8_t *icon;
const char *tip;
} HideShowIcon;
static HideShowIcon hideShowIcons[];
@ -95,8 +95,8 @@ public:
HideShowIcon *hoveredIcon, *tooltippedIcon;
Vector HsvToRgb(Vector hsv);
BYTE *HsvPattern2d(void);
BYTE *HsvPattern1d(double h, double s);
uint8_t *HsvPattern2d(void);
uint8_t *HsvPattern1d(double h, double s);
void ColorPickerDone(void);
bool DrawOrHitTestColorPicker(int how, bool leftDown, double x, double y);
@ -206,7 +206,7 @@ public:
int col;
struct {
DWORD rgb;
uint32_t rgb;
double h, s, v;
bool show;
bool picker1dActive;
@ -216,7 +216,7 @@ public:
void HideEditControl(void);
void ShowEditControl(int halfRow, int col, char *s);
void ShowEditControlWithColorPicker(int halfRow, int col, DWORD rgb);
void ShowEditControlWithColorPicker(int halfRow, int col, uint32_t rgb);
void ClearSuper(void);
@ -240,82 +240,82 @@ public:
// All of these are callbacks from the GUI code; first from when
// we're describing an entity
static void ScreenEditTtfText(int link, DWORD v);
static void ScreenSetTtfFont(int link, DWORD v);
static void ScreenUnselectAll(int link, DWORD v);
static void ScreenEditTtfText(int link, uint32_t v);
static void ScreenSetTtfFont(int link, uint32_t v);
static void ScreenUnselectAll(int link, uint32_t v);
// and the rest from the stuff in textscreens.cpp
static void ScreenSelectGroup(int link, DWORD v);
static void ScreenActivateGroup(int link, DWORD v);
static void ScreenToggleGroupShown(int link, DWORD v);
static void ScreenHowGroupSolved(int link, DWORD v);
static void ScreenShowGroupsSpecial(int link, DWORD v);
static void ScreenDeleteGroup(int link, DWORD v);
static void ScreenSelectGroup(int link, uint32_t v);
static void ScreenActivateGroup(int link, uint32_t v);
static void ScreenToggleGroupShown(int link, uint32_t v);
static void ScreenHowGroupSolved(int link, uint32_t v);
static void ScreenShowGroupsSpecial(int link, uint32_t v);
static void ScreenDeleteGroup(int link, uint32_t v);
static void ScreenHoverConstraint(int link, DWORD v);
static void ScreenHoverRequest(int link, DWORD v);
static void ScreenSelectRequest(int link, DWORD v);
static void ScreenSelectConstraint(int link, DWORD v);
static void ScreenHoverConstraint(int link, uint32_t v);
static void ScreenHoverRequest(int link, uint32_t v);
static void ScreenSelectRequest(int link, uint32_t v);
static void ScreenSelectConstraint(int link, uint32_t v);
static void ScreenChangeGroupOption(int link, DWORD v);
static void ScreenColor(int link, DWORD v);
static void ScreenChangeGroupOption(int link, uint32_t v);
static void ScreenColor(int link, uint32_t v);
static void ScreenShowListOfStyles(int link, DWORD v);
static void ScreenShowStyleInfo(int link, DWORD v);
static void ScreenDeleteStyle(int link, DWORD v);
static void ScreenChangeStyleYesNo(int link, DWORD v);
static void ScreenCreateCustomStyle(int link, DWORD v);
static void ScreenLoadFactoryDefaultStyles(int link, DWORD v);
static void ScreenAssignSelectionToStyle(int link, DWORD v);
static void ScreenBackgroundImage(int link, DWORD v);
static void ScreenShowListOfStyles(int link, uint32_t v);
static void ScreenShowStyleInfo(int link, uint32_t v);
static void ScreenDeleteStyle(int link, uint32_t v);
static void ScreenChangeStyleYesNo(int link, uint32_t v);
static void ScreenCreateCustomStyle(int link, uint32_t v);
static void ScreenLoadFactoryDefaultStyles(int link, uint32_t v);
static void ScreenAssignSelectionToStyle(int link, uint32_t v);
static void ScreenBackgroundImage(int link, uint32_t v);
static void ScreenShowConfiguration(int link, DWORD v);
static void ScreenShowEditView(int link, DWORD v);
static void ScreenGoToWebsite(int link, DWORD v);
static void ScreenShowConfiguration(int link, uint32_t v);
static void ScreenShowEditView(int link, uint32_t v);
static void ScreenGoToWebsite(int link, uint32_t v);
static void ScreenChangeFixExportColors(int link, DWORD v);
static void ScreenChangeBackFaces(int link, DWORD v);
static void ScreenChangeCheckClosedContour(int link, DWORD v);
static void ScreenChangePwlCurves(int link, DWORD v);
static void ScreenChangeCanvasSizeAuto(int link, DWORD v);
static void ScreenChangeCanvasSize(int link, DWORD v);
static void ScreenChangeShadedTriangles(int link, DWORD v);
static void ScreenChangeFixExportColors(int link, uint32_t v);
static void ScreenChangeBackFaces(int link, uint32_t v);
static void ScreenChangeCheckClosedContour(int link, uint32_t v);
static void ScreenChangePwlCurves(int link, uint32_t v);
static void ScreenChangeCanvasSizeAuto(int link, uint32_t v);
static void ScreenChangeCanvasSize(int link, uint32_t v);
static void ScreenChangeShadedTriangles(int link, uint32_t v);
static void ScreenStepDimSteps(int link, DWORD v);
static void ScreenStepDimFinish(int link, DWORD v);
static void ScreenStepDimGo(int link, DWORD v);
static void ScreenStepDimSteps(int link, uint32_t v);
static void ScreenStepDimFinish(int link, uint32_t v);
static void ScreenStepDimGo(int link, uint32_t v);
static void ScreenChangeTangentArc(int link, DWORD v);
static void ScreenChangeTangentArc(int link, uint32_t v);
static void ScreenPasteTransformed(int link, DWORD v);
static void ScreenPasteTransformed(int link, uint32_t v);
static void ScreenHome(int link, DWORD v);
static void ScreenHome(int link, uint32_t v);
// These ones do stuff with the edit control
static void ScreenChangeExprA(int link, DWORD v);
static void ScreenChangeGroupName(int link, DWORD v);
static void ScreenChangeGroupScale(int link, DWORD v);
static void ScreenChangeLightDirection(int link, DWORD v);
static void ScreenChangeLightIntensity(int link, DWORD v);
static void ScreenChangeColor(int link, DWORD v);
static void ScreenChangeChordTolerance(int link, DWORD v);
static void ScreenChangeMaxSegments(int link, DWORD v);
static void ScreenChangeCameraTangent(int link, DWORD v);
static void ScreenChangeGridSpacing(int link, DWORD v);
static void ScreenChangeDigitsAfterDecimal(int link, DWORD v);
static void ScreenChangeExportScale(int link, DWORD v);
static void ScreenChangeExportOffset(int link, DWORD v);
static void ScreenChangeGCodeParameter(int link, DWORD v);
static void ScreenChangeStyleName(int link, DWORD v);
static void ScreenChangeStyleWidthOrTextHeight(int link, DWORD v);
static void ScreenChangeStyleTextAngle(int link, DWORD v);
static void ScreenChangeStyleColor(int link, DWORD v);
static void ScreenChangeBackgroundColor(int link, DWORD v);
static void ScreenChangeBackgroundImageScale(int link, DWORD v);
static void ScreenChangePasteTransformed(int link, DWORD v);
static void ScreenChangeViewScale(int link, DWORD v);
static void ScreenChangeViewOrigin(int link, DWORD v);
static void ScreenChangeViewProjection(int link, DWORD v);
static void ScreenChangeExprA(int link, uint32_t v);
static void ScreenChangeGroupName(int link, uint32_t v);
static void ScreenChangeGroupScale(int link, uint32_t v);
static void ScreenChangeLightDirection(int link, uint32_t v);
static void ScreenChangeLightIntensity(int link, uint32_t v);
static void ScreenChangeColor(int link, uint32_t v);
static void ScreenChangeChordTolerance(int link, uint32_t v);
static void ScreenChangeMaxSegments(int link, uint32_t v);
static void ScreenChangeCameraTangent(int link, uint32_t v);
static void ScreenChangeGridSpacing(int link, uint32_t v);
static void ScreenChangeDigitsAfterDecimal(int link, uint32_t v);
static void ScreenChangeExportScale(int link, uint32_t v);
static void ScreenChangeExportOffset(int link, uint32_t v);
static void ScreenChangeGCodeParameter(int link, uint32_t v);
static void ScreenChangeStyleName(int link, uint32_t v);
static void ScreenChangeStyleWidthOrTextHeight(int link, uint32_t v);
static void ScreenChangeStyleTextAngle(int link, uint32_t v);
static void ScreenChangeStyleColor(int link, uint32_t v);
static void ScreenChangeBackgroundColor(int link, uint32_t v);
static void ScreenChangeBackgroundImageScale(int link, uint32_t v);
static void ScreenChangePasteTransformed(int link, uint32_t v);
static void ScreenChangeViewScale(int link, uint32_t v);
static void ScreenChangeViewOrigin(int link, uint32_t v);
static void ScreenChangeViewProjection(int link, uint32_t v);
bool EditControlDoneForStyles(const char *s);
bool EditControlDoneForConfiguration(const char *s);
@ -643,7 +643,7 @@ public:
CMNU_FIRST_STYLE = 0x40000000
};
void ContextMenuListStyles(void);
SDWORD contextMenuCancelTime;
int32_t contextMenuCancelTime;
// The toolbar, in toolbar.cpp
bool ToolbarDrawOrHitTest(int x, int y, bool paint, int *menu);
@ -690,7 +690,7 @@ public:
bool KeyDown(int c);
void EditControlDone(const char *s);
SDWORD lastSpaceNavigatorTime;
int32_t lastSpaceNavigatorTime;
hGroup lastSpaceNavigatorGroup;
void SpaceNavigatorMoved(double tx, double ty, double tz,
double rx, double ry, double rz, bool shiftDown);

View File

@ -37,7 +37,7 @@ void TextWindow::ShowEditView(void) {
Printf(false, "configuration screen.");
}
void TextWindow::ScreenChangeViewScale(int link, DWORD v) {
void TextWindow::ScreenChangeViewScale(int link, uint32_t v) {
char buf[1024];
sprintf(buf, "%.3f", SS.GW.scale * SS.MmPerUnit());
@ -45,7 +45,7 @@ void TextWindow::ScreenChangeViewScale(int link, DWORD v) {
SS.TW.ShowEditControl(12, 3, buf);
}
void TextWindow::ScreenChangeViewOrigin(int link, DWORD v) {
void TextWindow::ScreenChangeViewOrigin(int link, uint32_t v) {
char buf[1024];
sprintf(buf, "%s, %s, %s",
SS.MmToString(-SS.GW.offset.x),
@ -56,7 +56,7 @@ void TextWindow::ScreenChangeViewOrigin(int link, DWORD v) {
SS.TW.ShowEditControl(18, 3, buf);
}
void TextWindow::ScreenChangeViewProjection(int link, DWORD v) {
void TextWindow::ScreenChangeViewProjection(int link, uint32_t v) {
char buf[1024];
sprintf(buf, "%.3f, %.3f, %.3f", CO(SS.GW.projRight));
SS.TW.edit.meaning = EDIT_VIEW_PROJ_RIGHT;

View File

@ -5,24 +5,18 @@
//
// Copyright 2008-2013 Jonathan Westhues.
//-----------------------------------------------------------------------------
#include <windows.h>
#include "solvespace.h"
#include <time.h>
#include <shellapi.h>
#include <commctrl.h>
#include <commdlg.h>
#include <gl/gl.h>
#include <gl/glu.h>
#include <stdarg.h>
#include <string.h>
#include <stdio.h>
#include <time.h>
#ifdef HAVE_SPACEWARE_INPUT
# include <si/si.h>
# include <si/siapp.h>
# undef uint32_t // thanks but no thanks
#endif
#include "solvespace.h"
#define FREEZE_SUBKEY "SolveSpace"
#include "freeze.h"
@ -66,7 +60,7 @@ SiHdl SpaceNavigator = SI_NO_HANDLE;
//-----------------------------------------------------------------------------
HWND MessageWnd, OkButton;
BOOL MessageDone;
bool MessageDone;
const char *MessageString;
static LRESULT CALLBACK MessageProc(HWND hwnd, UINT msg, WPARAM wParam,
@ -75,13 +69,13 @@ static LRESULT CALLBACK MessageProc(HWND hwnd, UINT msg, WPARAM wParam,
switch (msg) {
case WM_COMMAND:
if((HWND)lParam == OkButton && wParam == BN_CLICKED) {
MessageDone = TRUE;
MessageDone = true;
}
break;
case WM_CLOSE:
case WM_DESTROY:
MessageDone = TRUE;
MessageDone = true;
break;
case WM_PAINT: {
@ -130,10 +124,10 @@ HWND CreateWindowClient(DWORD exStyle, char *className, char *windowName,
return h;
}
void DoMessageBox(const char *str, int rows, int cols, BOOL error)
void DoMessageBox(const char *str, int rows, int cols, bool error)
{
EnableWindow(GraphicsWnd, FALSE);
EnableWindow(TextWnd, FALSE);
EnableWindow(GraphicsWnd, false);
EnableWindow(TextWnd, false);
HWND h = GetForegroundWindow();
// Register the window class for our dialog.
@ -168,14 +162,14 @@ void DoMessageBox(const char *str, int rows, int cols, BOOL error)
WS_CHILD | WS_TABSTOP | WS_CLIPSIBLINGS | WS_VISIBLE | BS_DEFPUSHBUTTON,
(width - 70)/2, rows*SS.TW.LINE_HEIGHT + 20,
70, 25, MessageWnd, NULL, Instance, NULL);
SendMessage(OkButton, WM_SETFONT, (WPARAM)FixedFont, TRUE);
SendMessage(OkButton, WM_SETFONT, (WPARAM)FixedFont, true);
ShowWindow(MessageWnd, TRUE);
ShowWindow(MessageWnd, true);
SetFocus(OkButton);
MSG msg;
DWORD ret;
MessageDone = FALSE;
MessageDone = false;
while((ret = GetMessage(&msg, NULL, 0, 0)) != 0 && !MessageDone) {
if((msg.message == WM_KEYDOWN &&
(msg.wParam == VK_RETURN ||
@ -183,7 +177,7 @@ void DoMessageBox(const char *str, int rows, int cols, BOOL error)
(msg.message == WM_KEYUP &&
(msg.wParam == VK_SPACE)))
{
MessageDone = TRUE;
MessageDone = true;
break;
}
@ -192,8 +186,8 @@ void DoMessageBox(const char *str, int rows, int cols, BOOL error)
}
MessageString = NULL;
EnableWindow(TextWnd, TRUE);
EnableWindow(GraphicsWnd, TRUE);
EnableWindow(TextWnd, true);
EnableWindow(GraphicsWnd, true);
SetForegroundWindow(GraphicsWnd);
DestroyWindow(MessageWnd);
}
@ -277,23 +271,29 @@ void ExitNow(void) {
void CnfFreezeString(const char *str, const char *name)
{ FreezeStringF(str, FREEZE_SUBKEY, name); }
void CnfFreezeDWORD(DWORD v, const char *name)
{ FreezeDWORDF(v, FREEZE_SUBKEY, name); }
void CnfFreezeInt(uint32_t v, const char *name)
{ FreezeDWORDF((DWORD)v, FREEZE_SUBKEY, name); }
void CnfFreezeFloat(float v, const char *name)
{ FreezeDWORDF(*((DWORD *)&v), FREEZE_SUBKEY, name); }
void CnfFreezeBool(bool v, const char *name)
{ FreezeDWORDF((DWORD)v, FREEZE_SUBKEY, name); }
void CnfThawString(char *str, int maxLen, const char *name)
{ ThawStringF(str, maxLen, FREEZE_SUBKEY, name); }
DWORD CnfThawDWORD(DWORD v, const char *name)
{ return ThawDWORDF(v, FREEZE_SUBKEY, name); }
uint32_t CnfThawInt(uint32_t v, const char *name)
{ return (uint32_t)ThawDWORDF((DWORD)v, FREEZE_SUBKEY, name); }
float CnfThawFloat(float v, const char *name) {
DWORD d = ThawDWORDF(*((DWORD *)&v), FREEZE_SUBKEY, name);
return *((float *)&d);
}
bool CnfThawBool(bool v, const char *name)
{ return ThawDWORDF((DWORD)v, FREEZE_SUBKEY, name) ? true : false; }
void SetWindowTitle(const char *str) {
SetWindowText(GraphicsWnd, str);
}
@ -324,7 +324,7 @@ void MoveTextScrollbarTo(int pos, int maxPos, int page)
si.nMax = maxPos;
si.nPos = pos;
si.nPage = page;
SetScrollInfo(TextWndScrollBar, SB_CTL, &si, TRUE);
SetScrollInfo(TextWndScrollBar, SB_CTL, &si, true);
}
void HandleTextWindowScrollBar(WPARAM wParam, LPARAM lParam)
@ -479,11 +479,11 @@ LRESULT CALLBACK TextWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
int sw = r.right - r.left;
GetClientRect(hwnd, &r);
MoveWindow(TextWndScrollBar, r.right - sw, r.top, sw,
(r.bottom - r.top), TRUE);
(r.bottom - r.top), true);
// If the window is growing, then the scrollbar position may
// be moving, so it's as if we're dragging the scrollbar.
HandleTextWindowScrollBar((WPARAM)-1, -1);
InvalidateRect(TextWnd, NULL, FALSE);
InvalidateRect(TextWnd, NULL, false);
break;
}
@ -502,7 +502,7 @@ LRESULT CALLBACK TextWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
return 1;
}
static BOOL ProcessKeyDown(WPARAM wParam)
static bool ProcessKeyDown(WPARAM wParam)
{
if(GraphicsEditControlIsVisible() && wParam != VK_ESCAPE) {
if(wParam == VK_RETURN) {
@ -510,9 +510,9 @@ static BOOL ProcessKeyDown(WPARAM wParam)
memset(s, 0, sizeof(s));
SendMessage(GraphicsEditControl, WM_GETTEXT, 900, (LPARAM)s);
SS.GW.EditControlDone(s);
return TRUE;
return true;
} else {
return FALSE;
return false;
}
}
if(TextEditControlIsVisible() && wParam != VK_ESCAPE) {
@ -522,7 +522,7 @@ static BOOL ProcessKeyDown(WPARAM wParam)
SendMessage(TextEditControl, WM_GETTEXT, 900, (LPARAM)s);
SS.TW.EditControlDone(s);
} else {
return FALSE;
return false;
}
}
@ -564,7 +564,7 @@ static BOOL ProcessKeyDown(WPARAM wParam)
case VK_EXECUTE:
case VK_APPS:
case VK_LWIN:
case VK_RWIN: return FALSE;
case VK_RWIN: return false;
default:
c = (int)wParam;
@ -584,13 +584,13 @@ static BOOL ProcessKeyDown(WPARAM wParam)
}
}
if(SS.GW.KeyDown(c)) return TRUE;
if(SS.GW.KeyDown(c)) return true;
// No accelerator; process the key as normal.
return FALSE;
return false;
}
void ShowTextWindow(BOOL visible)
void ShowTextWindow(bool visible)
{
ShowWindow(TextWnd, visible ? SW_SHOWNOACTIVATE : SW_HIDE);
}
@ -630,32 +630,32 @@ void PaintGraphics(void)
}
void InvalidateGraphics(void)
{
InvalidateRect(GraphicsWnd, NULL, FALSE);
InvalidateRect(GraphicsWnd, NULL, false);
}
SDWORD GetMilliseconds(void)
int32_t GetMilliseconds(void)
{
LARGE_INTEGER t, f;
QueryPerformanceCounter(&t);
QueryPerformanceFrequency(&f);
LONGLONG d = t.QuadPart/(f.QuadPart/1000);
return (SDWORD)d;
return (int32_t)d;
}
SQWORD GetUnixTime(void)
int64_t GetUnixTime(void)
{
__time64_t ret;
_time64(&ret);
return ret;
return (int64_t)ret;
}
void InvalidateText(void)
{
InvalidateRect(TextWnd, NULL, FALSE);
InvalidateRect(TextWnd, NULL, false);
}
static void ShowEditControl(HWND h, int x, int y, char *s) {
MoveWindow(h, x, y, EDIT_WIDTH, EDIT_HEIGHT, TRUE);
MoveWindow(h, x, y, EDIT_WIDTH, EDIT_HEIGHT, true);
ShowWindow(h, SW_SHOW);
if(s) {
SendMessage(h, WM_SETTEXT, 0, (LPARAM)s);
@ -673,9 +673,9 @@ void HideTextEditControl(void)
{
ShowWindow(TextEditControl, SW_HIDE);
}
BOOL TextEditControlIsVisible(void)
bool TextEditControlIsVisible(void)
{
return IsWindowVisible(TextEditControl);
return IsWindowVisible(TextEditControl) ? true : false;
}
void ShowGraphicsEditControl(int x, int y, char *s)
{
@ -696,9 +696,9 @@ void HideGraphicsEditControl(void)
{
ShowWindow(GraphicsEditControl, SW_HIDE);
}
BOOL GraphicsEditControlIsVisible(void)
bool GraphicsEditControlIsVisible(void)
{
return IsWindowVisible(GraphicsEditControl);
return IsWindowVisible(GraphicsEditControl) ? true : false;
}
LRESULT CALLBACK GraphicsWndProc(HWND hwnd, UINT msg, WPARAM wParam,
@ -709,7 +709,7 @@ LRESULT CALLBACK GraphicsWndProc(HWND hwnd, UINT msg, WPARAM wParam,
break;
case WM_SIZE:
InvalidateRect(GraphicsWnd, NULL, FALSE);
InvalidateRect(GraphicsWnd, NULL, false);
break;
case WM_PAINT: {
@ -817,7 +817,7 @@ LRESULT CALLBACK GraphicsWndProc(HWND hwnd, UINT msg, WPARAM wParam,
//-----------------------------------------------------------------------------
// Common dialog routines, to open or save a file.
//-----------------------------------------------------------------------------
BOOL GetOpenFile(char *file, const char *defExtension, const char *selPattern)
bool GetOpenFile(char *file, const char *defExtension, const char *selPattern)
{
OPENFILENAME ofn;
@ -831,18 +831,18 @@ BOOL GetOpenFile(char *file, const char *defExtension, const char *selPattern)
ofn.nMaxFile = MAX_PATH;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
EnableWindow(GraphicsWnd, FALSE);
EnableWindow(TextWnd, FALSE);
EnableWindow(GraphicsWnd, false);
EnableWindow(TextWnd, false);
BOOL r = GetOpenFileName(&ofn);
EnableWindow(TextWnd, TRUE);
EnableWindow(GraphicsWnd, TRUE);
EnableWindow(TextWnd, true);
EnableWindow(GraphicsWnd, true);
SetForegroundWindow(GraphicsWnd);
return r;
return r ? true : false;
}
BOOL GetSaveFile(char *file, const char *defExtension, const char *selPattern)
bool GetSaveFile(char *file, const char *defExtension, const char *selPattern)
{
OPENFILENAME ofn;
@ -856,29 +856,29 @@ BOOL GetSaveFile(char *file, const char *defExtension, const char *selPattern)
ofn.nMaxFile = MAX_PATH;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT;
EnableWindow(GraphicsWnd, FALSE);
EnableWindow(TextWnd, FALSE);
EnableWindow(GraphicsWnd, false);
EnableWindow(TextWnd, false);
BOOL r = GetSaveFileName(&ofn);
EnableWindow(TextWnd, TRUE);
EnableWindow(GraphicsWnd, TRUE);
EnableWindow(TextWnd, true);
EnableWindow(GraphicsWnd, true);
SetForegroundWindow(GraphicsWnd);
return r;
return r ? true : false;
}
int SaveFileYesNoCancel(void)
{
EnableWindow(GraphicsWnd, FALSE);
EnableWindow(TextWnd, FALSE);
EnableWindow(GraphicsWnd, false);
EnableWindow(TextWnd, false);
int r = MessageBox(GraphicsWnd,
"The program has changed since it was last saved.\r\n\r\n"
"Do you want to save the changes?", "SolveSpace",
MB_YESNOCANCEL | MB_ICONWARNING);
EnableWindow(TextWnd, TRUE);
EnableWindow(GraphicsWnd, TRUE);
EnableWindow(TextWnd, true);
EnableWindow(GraphicsWnd, true);
SetForegroundWindow(GraphicsWnd);
switch(r) {
@ -916,7 +916,7 @@ void LoadAllFontFiles(void)
}
}
static void MenuById(int id, BOOL yes, BOOL check)
static void MenuById(int id, bool yes, bool check)
{
int i;
int subMenu = -1;
@ -940,18 +940,18 @@ static void MenuById(int id, BOOL yes, BOOL check)
}
oops();
}
void CheckMenuById(int id, BOOL checked)
void CheckMenuById(int id, bool checked)
{
MenuById(id, checked, TRUE);
MenuById(id, checked, true);
}
void RadioMenuById(int id, BOOL selected)
void RadioMenuById(int id, bool selected)
{
// Windows does not natively support radio-button menu items
MenuById(id, selected, TRUE);
MenuById(id, selected, true);
}
void EnableMenuById(int id, BOOL enabled)
void EnableMenuById(int id, bool enabled)
{
MenuById(id, enabled, FALSE);
MenuById(id, enabled, false);
}
static void DoRecent(HMENU m, int base)
{
@ -1050,7 +1050,7 @@ static void CreateMainWindows(void)
GraphicsEditControl = CreateWindowEx(WS_EX_CLIENTEDGE, WC_EDIT, "",
WS_CHILD | ES_AUTOHSCROLL | WS_TABSTOP | WS_CLIPSIBLINGS,
50, 50, 100, 21, GraphicsWnd, NULL, Instance, NULL);
SendMessage(GraphicsEditControl, WM_SETFONT, (WPARAM)FixedFont, TRUE);
SendMessage(GraphicsEditControl, WM_SETFONT, (WPARAM)FixedFont, true);
// The text window, with a comand line and some textual information
// about the sketch.
@ -1077,7 +1077,7 @@ static void CreateMainWindows(void)
TextEditControl = CreateWindowEx(WS_EX_CLIENTEDGE, WC_EDIT, "",
WS_CHILD | ES_AUTOHSCROLL | WS_TABSTOP | WS_CLIPSIBLINGS,
50, 50, 100, 21, TextWnd, NULL, Instance, NULL);
SendMessage(TextEditControl, WM_SETFONT, (WPARAM)FixedFont, TRUE);
SendMessage(TextEditControl, WM_SETFONT, (WPARAM)FixedFont, true);
// Now that all our windows exist, set up gl contexts.
CreateGlContext(TextWnd, &TextGl);
@ -1092,17 +1092,17 @@ static void CreateMainWindows(void)
#ifdef HAVE_SPACEWARE_INPUT
//-----------------------------------------------------------------------------
// Test if a message comes from the SpaceNavigator device. If yes, dispatch
// it appropriately and return TRUE. Otherwise, do nothing and return FALSE.
// it appropriately and return true. Otherwise, do nothing and return false.
//-----------------------------------------------------------------------------
static BOOL ProcessSpaceNavigatorMsg(MSG *msg) {
if(SpaceNavigator == SI_NO_HANDLE) return FALSE;
static bool ProcessSpaceNavigatorMsg(MSG *msg) {
if(SpaceNavigator == SI_NO_HANDLE) return false;
SiGetEventData sged;
SiSpwEvent sse;
SiGetEventWinInit(&sged, msg->message, msg->wParam, msg->lParam);
int ret = SiGetEvent(SpaceNavigator, 0, &sged, &sse);
if(ret == SI_NOT_EVENT) return FALSE;
if(ret == SI_NOT_EVENT) return false;
// So the device is a SpaceNavigator event, or a SpaceNavigator error.
if(ret == SI_IS_EVENT) {
@ -1123,7 +1123,7 @@ static BOOL ProcessSpaceNavigatorMsg(MSG *msg) {
if(button == SI_APP_FIT_BUTTON) SS.GW.SpaceNavigatorButtonUp();
}
}
return TRUE;
return true;
}
#endif // HAVE_SPACEWARE_INPUT
@ -1139,8 +1139,8 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
// A monospaced font
FixedFont = CreateFont(SS.TW.CHAR_HEIGHT, SS.TW.CHAR_WIDTH, 0, 0,
FW_REGULAR, FALSE,
FALSE, FALSE, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
FW_REGULAR, false,
false, false, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY, FF_DONTCARE, "Lucida Console");
if(!FixedFont)
FixedFont = (HFONT)GetStockObject(SYSTEM_FONT);