From 0246add3e952eb2a1bbb3f30c9959cff09010906 Mon Sep 17 00:00:00 2001 From: Jonathan Westhues Date: Sun, 2 May 2010 21:04:42 -0800 Subject: [PATCH] Replace ugly text links to hide/show things with icons. So add code to draw those, and hit test with the mouse, and display tool tips when the user hovers with the mouse. Also, underline links only when they're hovered, and not otherwise. And add a separate menu option to align the view to the active workplane, vs. activating the active group's workplane, and remap the bottom two graphics window toolbar icons to that and "nearest iso view" instead of draw in 2d/3d, since people tended to click on those without understanding and cause trouble. And by default, we force a parallel projection; so the factory default camera tangent is now 0.3, not 0. [git-p4: depot-paths = "//depot/solvespace/": change = 2131] --- Makefile | 2 +- clipboard.cpp | 2 +- draw.cpp | 6 +- export.cpp | 2 +- generate.cpp | 14 +-- glhelper.cpp | 90 ++++++++++++-- graphicswin.cpp | 36 ++++-- icons/constraint.png | Bin 0 -> 26545 bytes icons/edges.png | Bin 0 -> 27374 bytes icons/faces.png | Bin 0 -> 609 bytes icons/hidden-lines.png | Bin 0 -> 26946 bytes icons/mesh.png | Bin 0 -> 28445 bytes icons/normal.png | Bin 0 -> 26211 bytes icons/shaded.png | Bin 0 -> 317 bytes icons/workplane.png | Bin 0 -> 395 bytes png2c.pl | 11 +- solvespace.cpp | 6 +- solvespace.h | 5 + textscreens.cpp | 44 +++---- textwin.cpp | 266 +++++++++++++++++++++++++++++++++++------ toolbar.cpp | 44 ++----- ui.h | 31 ++++- win32/w32main.cpp | 28 +++-- wishlist.txt | 3 +- 24 files changed, 435 insertions(+), 155 deletions(-) create mode 100644 icons/constraint.png create mode 100644 icons/edges.png create mode 100644 icons/faces.png create mode 100644 icons/hidden-lines.png create mode 100644 icons/mesh.png create mode 100644 icons/normal.png create mode 100644 icons/shaded.png create mode 100644 icons/workplane.png diff --git a/Makefile b/Makefile index 65972e6..fa4da9f 100644 --- a/Makefile +++ b/Makefile @@ -97,5 +97,5 @@ toolbar.cpp: $(OBJDIR)/icons.h glhelper.cpp: bitmapfont.table font.table $(OBJDIR)/icons.h: icons/* png2c.pl - perl png2c.pl > $(OBJDIR)/icons.h + perl png2c.pl $(OBJDIR)/icons.h $(OBJDIR)/icons-proto.h diff --git a/clipboard.cpp b/clipboard.cpp index 4965eb1..cbf40fd 100644 --- a/clipboard.cpp +++ b/clipboard.cpp @@ -359,7 +359,7 @@ void TextWindow::ShowPasteTransformed(void) { Printf(true, "%Ba %FtREPEAT%E %d time%s %Fl%Lt%f[change]%E", shown.paste.times, (shown.paste.times == 1) ? "" : "s", &ScreenChangePasteTransformed); - Printf(false, "%Bd %FtROTATE%E %@° %Fl%Lr%f[change]%E", + Printf(false, "%Bd %FtROTATE%E %@ degrees %Fl%Lr%f[change]%E", shown.paste.theta*180/PI, &ScreenChangePasteTransformed); Printf(false, "%Ba %FtABOUT PT%E (%s, %s, %s) %Fl%Lo%f[use selected]%E", diff --git a/draw.cpp b/draw.cpp index 2d88218..56e2ee8 100644 --- a/draw.cpp +++ b/draw.cpp @@ -454,11 +454,13 @@ Vector GraphicsWindow::VectorFromProjs(Vector rightUpForward) { return r; } -void GraphicsWindow::Paint(int w, int h) { +void GraphicsWindow::Paint(void) { int i; havePainted = true; - width = w; height = h; + int w, h; + GetGraphicsWindowSize(&w, &h); + width = w; height = h; glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); diff --git a/export.cpp b/export.cpp index e9abc60..b89513b 100644 --- a/export.cpp +++ b/export.cpp @@ -716,7 +716,7 @@ void SolveSpace::ExportAsPngTo(char *filename) { // so repaint the scene. And hide the toolbar too. int prevShowToolbar = SS.showToolbar; SS.showToolbar = false; - SS.GW.Paint(w, h); + SS.GW.Paint(); SS.showToolbar = prevShowToolbar; FILE *f = fopen(filename, "wb"); diff --git a/generate.cpp b/generate.cpp index 74d5b45..2edec89 100644 --- a/generate.cpp +++ b/generate.cpp @@ -200,20 +200,10 @@ void SolveSpace::GenerateAll(int first, int last, bool andFindFree) { double left = 80, top = -20, width = 240, height = 24; glColor3d(0.9, 0.8, 0.8); - glBegin(GL_QUADS); - glVertex2d(left, top); - glVertex2d(left+width, top); - glVertex2d(left+width, top-height); - glVertex2d(left, top-height); - glEnd(); + glxAxisAlignedQuad(left, left+width, top, top-height); glLineWidth(1); glColor3d(0.0, 0.0, 0.0); - glBegin(GL_LINE_LOOP); - glVertex2d(left, top); - glVertex2d(left+width, top); - glVertex2d(left+width, top-height); - glVertex2d(left, top-height); - glEnd(); + glxAxisAlignedLineLoop(left, left+width, top, top-height); glxCreateBitmapFont(); glColor3d(0, 0, 0); diff --git a/glhelper.cpp b/glhelper.cpp index f8cbf18..dd3b613 100644 --- a/glhelper.cpp +++ b/glhelper.cpp @@ -10,7 +10,8 @@ static bool ColorLocked; static bool DepthOffsetLocked; #define FONT_SCALE(h) ((h)/22.0) -double glxStrWidth(char *str, double h) { +double glxStrWidth(char *str, double h) +{ int w = 0; for(; *str; str++) { int c = *str; @@ -21,7 +22,8 @@ double glxStrWidth(char *str, double h) { } return w*FONT_SCALE(h)/SS.GW.scale; } -double glxStrHeight(double h) { +double glxStrHeight(double h) +{ // The characters have height ~22, as they appear in the table. return 22.0*FONT_SCALE(h)/SS.GW.scale; } @@ -99,6 +101,26 @@ void glxVertex3v(Vector u) glVertex3f((GLfloat)u.x, (GLfloat)u.y, (GLfloat)u.z); } +void glxAxisAlignedQuad(double l, double r, double t, double b) +{ + glBegin(GL_QUADS); + glVertex2d(l, t); + glVertex2d(l, b); + glVertex2d(r, b); + glVertex2d(r, t); + glEnd(); +} + +void glxAxisAlignedLineLoop(double l, double r, double t, double b) +{ + glBegin(GL_LINE_LOOP); + glVertex2d(l, t); + glVertex2d(l, b); + glVertex2d(r, b); + glVertex2d(r, t); + glEnd(); +} + static void FatLineEndcap(Vector p, Vector u, Vector v) { // A table of cos and sin of (pi*i/10 + pi/2), as i goes from 0 to 10 @@ -123,7 +145,8 @@ static void FatLineEndcap(Vector p, Vector u, Vector v) glEnd(); } -void glxFatLine(Vector a, Vector b, double width) { +void glxFatLine(Vector a, Vector b, double width) +{ // The half-width of the line we're drawing. double hw = width / 2; Vector ab = b.Minus(a); @@ -277,10 +300,10 @@ void glxFillMesh(int specColor, SMesh *m, DWORD h, DWORD s1, DWORD s2) glEnd(); } -static void GLX_CALLBACK Vertex(Vector *p) { +static void GLX_CALLBACK Vertex(Vector *p) +{ glxVertex3v(*p); } - void glxFillPolygon(SPolygon *p) { GLUtesselator *gt = gluNewTess(); @@ -434,7 +457,8 @@ void glxMarkPolygonNormal(SPolygon *p) glEnable(GL_LIGHTING); } -void glxDepthRangeOffset(int units) { +void glxDepthRangeOffset(int units) +{ if(!DepthOffsetLocked) { // The size of this step depends on the resolution of the Z buffer; for // a 16-bit buffer, this should be fine. @@ -443,7 +467,8 @@ void glxDepthRangeOffset(int units) { } } -void glxDepthRangeLockToFront(bool yes) { +void glxDepthRangeLockToFront(bool yes) +{ if(yes) { DepthOffsetLocked = true; glDepthRange(0, 0); @@ -453,7 +478,8 @@ void glxDepthRangeLockToFront(bool yes) { } } -void glxCreateBitmapFont(void) { +void glxCreateBitmapFont(void) +{ glBindTexture(GL_TEXTURE_2D, TEXTURE_BITMAP_FONT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); @@ -467,7 +493,8 @@ void glxCreateBitmapFont(void) { FontTexture); } -void glxBitmapCharQuad(char c, double x, double y) { +void glxBitmapCharQuad(char c, double x, double y) +{ int w = SS.TW.CHAR_WIDTH, h = SS.TW.CHAR_HEIGHT; @@ -491,7 +518,8 @@ void glxBitmapCharQuad(char c, double x, double y) { } } -void glxBitmapText(char *str, Vector p) { +void glxBitmapText(char *str, Vector p) +{ glEnable(GL_TEXTURE_2D); glBegin(GL_QUADS); while(*str) { @@ -504,3 +532,45 @@ void glxBitmapText(char *str, Vector p) { glDisable(GL_TEXTURE_2D); } +void glxDrawPixelsWithTexture(BYTE *data, int w, int h) +{ +#define MAX_DIM 32 + static BYTE Texture[MAX_DIM*MAX_DIM*3]; + int i, j; + if(w > MAX_DIM || h > MAX_DIM) oops(); + + for(i = 0; i < w; i++) { + for(j = 0; j < h; j++) { + Texture[(j*MAX_DIM + i)*3 + 0] = data[(j*w + i)*3 + 0]; + Texture[(j*MAX_DIM + i)*3 + 1] = data[(j*w + i)*3 + 1]; + Texture[(j*MAX_DIM + i)*3 + 2] = data[(j*w + i)*3 + 2]; + } + } + + glBindTexture(GL_TEXTURE_2D, TEXTURE_DRAW_PIXELS); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); + glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); + + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, MAX_DIM, MAX_DIM, 0, + GL_RGB, GL_UNSIGNED_BYTE, Texture); + + glEnable(GL_TEXTURE_2D); + glBegin(GL_QUADS); + glTexCoord2d(0, 0); + glVertex2d(0, h); + + glTexCoord2d(((double)w)/MAX_DIM, 0); + glVertex2d(w, h); + + glTexCoord2d(((double)w)/MAX_DIM, ((double)h)/MAX_DIM); + glVertex2d(w, 0); + + glTexCoord2d(0, ((double)h)/MAX_DIM); + glVertex2d(0, 0); + glEnd(); + glDisable(GL_TEXTURE_2D); +} + diff --git a/graphicswin.cpp b/graphicswin.cpp index 9b2d263..9bc33fb 100644 --- a/graphicswin.cpp +++ b/graphicswin.cpp @@ -52,13 +52,14 @@ const GraphicsWindow::MenuEntry GraphicsWindow::menu[] = { { 1, "Zoom &Out\t-", MNU_ZOOM_OUT, '-', mView }, { 1, "Zoom To &Fit\tF", MNU_ZOOM_TO_FIT, 'F', mView }, { 1, NULL, 0, NULL }, -{ 1, "Show Snap &Grid\t>", MNU_SHOW_GRID, '.'|S, mView }, -{ 1, "Force &Parallel Projection\t`", MNU_PARALLEL_PROJ, '`', mView }, -{ 1, NULL, 0, NULL }, +{ 1, "Align View to &Workplane\tW", MNU_ONTO_WORKPLANE, 'W', mView }, { 1, "Nearest &Ortho View\tF2", MNU_NEAREST_ORTHO, F(2), mView }, { 1, "Nearest &Isometric View\tF3", MNU_NEAREST_ISO, F(3), mView }, { 1, "&Center View At Point\tF4", MNU_CENTER_VIEW, F(4), mView }, { 1, NULL, 0, NULL }, +{ 1, "Show Snap &Grid\t>", MNU_SHOW_GRID, '.'|S, mView }, +{ 1, "Force &Parallel Projection\t`", MNU_PARALLEL_PROJ, '`', mView }, +{ 1, NULL, 0, NULL }, { 1, "Show Text &Window\tTab", MNU_SHOW_TEXT_WND, '\t', mView }, { 1, "Show &Toolbar", MNU_SHOW_TOOLBAR, 0, mView }, { 1, NULL, 0, NULL }, @@ -81,7 +82,7 @@ const GraphicsWindow::MenuEntry GraphicsWindow::menu[] = { {11, "Import Recent", MNU_GROUP_RECENT, 0, mGrp }, { 0, "&Sketch", 0, NULL }, -{ 1, "In &Workplane\tW", MNU_SEL_WORKPLANE, 'W', mReq }, +{ 1, "In &Workplane\t2", MNU_SEL_WORKPLANE, '2', mReq }, { 1, "Anywhere In &3d\t3", MNU_FREE_IN_3D, '3', mReq }, { 1, NULL, 0, NULL }, { 1, "Datum &Point\tP", MNU_DATUM_POINT, 'P', mReq }, @@ -373,6 +374,16 @@ void GraphicsWindow::MenuView(int id) { InvalidateGraphics(); break; + case MNU_ONTO_WORKPLANE: + if(!SS.GW.LockedInWorkplane()) { + Error("No workplane is active."); + break; + } + SS.GW.AnimateOntoWorkplane(); + SS.GW.ClearSuper(); + SS.later.showTW = true; + break; + case MNU_NEAREST_ORTHO: case MNU_NEAREST_ISO: { static const Vector ortho[3] = { @@ -813,11 +824,15 @@ void GraphicsWindow::MenuRequest(int id) { } else if(g->type == Group::DRAWING_WORKPLANE) { // The group's default workplane g->activeWorkplane = g->h.entity(0); + Message("No workplane selected. Activating default workplane " + "for this group."); } if(!SS.GW.LockedInWorkplane()) { - Error("Select workplane (e.g., the XY plane) " - "before locking on."); + Error("No workplane is selected, and the active group does " + "not have a default workplane. Try selecting a " + "workplane, or activating a sketch-in-new-workplane " + "group."); break; } // Align the view with the selected workplane @@ -892,17 +907,16 @@ void GraphicsWindow::ClearSuper(void) { EnsureValidActives(); } -void GraphicsWindow::ToggleBool(int link, DWORD v) { - bool *vb = (bool *)v; - *vb = !*vb; +void GraphicsWindow::ToggleBool(bool *v) { + *v = !*v; // The faces are shown as special stippling on the shaded triangle mesh, // so not meaningful to show them and hide the shaded. - if(!SS.GW.showShaded) SS.GW.showFaces = false; + if(!showShaded) showFaces = false; // We might need to regenerate the mesh and edge list, since the edges // wouldn't have been generated if they were previously hidden. - if(SS.GW.showEdges) (SK.GetGroup(SS.GW.activeGroup))->displayDirty = true; + if(showEdges) (SK.GetGroup(activeGroup))->displayDirty = true; SS.GenerateAll(); InvalidateGraphics(); diff --git a/icons/constraint.png b/icons/constraint.png new file mode 100644 index 0000000000000000000000000000000000000000..a0e1889ae80a08b643a0749fd5ec55fc085b68dd GIT binary patch literal 26545 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 literal 0 HcmV?d00001 diff --git a/icons/hidden-lines.png b/icons/hidden-lines.png new file mode 100644 index 0000000000000000000000000000000000000000..cf43afbde50f5aa87a343ad69bcca0905557ecd8 GIT binary patch literal 26946 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 Z?dtdKFi^Gr{C9u3a>?dm@%h_N{|_q!YU}_2 literal 0 HcmV?d00001 diff --git a/icons/mesh.png b/icons/mesh.png new file mode 100644 index 0000000000000000000000000000000000000000..dde867b613bb9a50e03e0ca387e6f8816ca158c8 GIT binary patch literal 28445 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 z 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 literal 0 HcmV?d00001 diff --git a/icons/workplane.png b/icons/workplane.png new file mode 100644 index 0000000000000000000000000000000000000000..c451453b56059e59d9d6094a3ba4394bf874c09f GIT binary patch literal 395 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbMaAv7|ftIx;YR|DNig)WpGT%PfAtr%uP&B4N6T+sVqF1Y6DcH65tc!s-&b88XD^2;!<8-zGKIZ z*4EY)D^>^!3U+jK7#ka>rKJHC_Qt;g8T!`K#WAGfR?>rGj0{X2j4m6Ble`#M1R|Px zXErxCcTbj$WKw82AS9y@>l338sWwB$fuT`#hU5a9GCw^r4Pl_1Q%?_vvc&=ukc7kx zK_P>?42(w_7V&tRJ1``A94KLC5eR9LJuK9~(Bx52nB)O8-KB~1W~2a69m~W7hfOT2 zq!k(@c3jMDf5pb3;KR8huYm#Ro`*U>9bN^73%!9lLYgLX-;D%nn3~{TCKdrS`XJMs zR>5OUAT1Kp8wEwWd*&2?Z5EpA^T2`)q>0&0D$out") or die "$out: $!"; +open(PROTO, ">$proto") or die "$proto: $!"; + for $file () { $file =~ m#.*/(.*)\.png#; @@ -17,7 +21,8 @@ for $file () { ($width, $height) = $img->getBounds(); die "$file: $width, $height" if ($width != 24) or ($height != 24); - print "unsigned char $base\[24*24*3] = {\n"; + print PROTO "extern unsigned char $base\[24*24*3\];"; + print OUT "unsigned char $base\[24*24*3] = {\n"; for($y = 0; $y < 24; $y++) { for($x = 0; $x < 24; $x++) { @@ -26,10 +31,10 @@ for $file () { if($r + $g + $b < 11) { ($r, $g, $b) = (30, 30, 30); } - printf " 0x%02x, 0x%02x, 0x%02x,\n", $r, $g, $b; + printf OUT " 0x%02x, 0x%02x, 0x%02x,\n", $r, $g, $b; } } - print "};\n\n"; + print OUT "};\n\n"; } diff --git a/solvespace.cpp b/solvespace.cpp index db90236..5cf13f6 100644 --- a/solvespace.cpp +++ b/solvespace.cpp @@ -63,7 +63,7 @@ void SolveSpace::Init(char *cmdLine) { // View units viewUnits = (Unit)CnfThawDWORD((DWORD)UNIT_MM, "ViewUnits"); // Camera tangent (determines perspective) - cameraTangent = CnfThawFloat(0.0f, "CameraTangent"); + cameraTangent = CnfThawFloat(0.3f, "CameraTangent"); // Grid spacing gridSpacing = CnfThawFloat(5.0f, "GridSpacing"); // Export scale factor @@ -114,6 +114,10 @@ void SolveSpace::Init(char *cmdLine) { // configuration file, but we will automatically load those as we need // them. + // The factory default settings include a non-zero perspective factor, + // but we'll default to that off. + forceParallelProj = true; + // Start with either an empty file, or the file specified on the // command line. NewFile(); diff --git a/solvespace.h b/solvespace.h index d7e7157..e4c5316 100644 --- a/solvespace.h +++ b/solvespace.h @@ -144,6 +144,7 @@ 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); @@ -197,6 +198,8 @@ typedef IdList ParamList; // Utility functions that are provided in the platform-independent code. void glxVertex3v(Vector u); +void glxAxisAlignedQuad(double l, double r, double t, double b); +void glxAxisAlignedLineLoop(double l, double r, double t, double b); #define DEFAULT_TEXT_HEIGHT (11.5) #define GLX_CALLBACK __stdcall typedef void GLX_CALLBACK glxCallbackFptr(void); @@ -221,11 +224,13 @@ void glxColorRGB(DWORD rgb); void glxColorRGBa(DWORD rgb, double a); void glxDepthRangeOffset(int units); void glxDepthRangeLockToFront(bool yes); +void glxDrawPixelsWithTexture(BYTE *data, int w, int h); void glxCreateBitmapFont(void); void glxBitmapText(char *str, Vector p); void glxBitmapCharQuad(char c, double x, double y); #define TEXTURE_BACKGROUND_IMG 10 #define TEXTURE_BITMAP_FONT 20 +#define TEXTURE_DRAW_PIXELS 30 #define arraylen(x) (sizeof((x))/sizeof((x)[0])) diff --git a/textscreens.cpp b/textscreens.cpp index 8ec5c96..6af619c 100644 --- a/textscreens.cpp +++ b/textscreens.cpp @@ -10,42 +10,26 @@ void TextWindow::ScreenHome(int link, DWORD v) { void TextWindow::ShowHeader(bool withNav) { ClearScreen(); - char *cd = SS.GW.LockedInWorkplane() ? - SK.GetEntity(SS.GW.ActiveWorkplane())->DescriptionString() : - "free in 3d"; + char cd[1024], cd2[1024]; + if(SS.GW.LockedInWorkplane()) { + sprintf(cd, "in plane: "); + strcpy(cd2, SK.GetEntity(SS.GW.ActiveWorkplane())->DescriptionString()); + } else { + sprintf(cd, "drawing / constraining in 3d"); + strcpy(cd2, ""); + } // Navigation buttons if(withNav) { - Printf(false, " %Fl%Lh%fhome%E %Bt%Ft wrkpl:%Fd %s", - (&TextWindow::ScreenHome), - cd); + Printf(false, " %Fl%Lh%fhome%E %Ft%s%E%s", + (&TextWindow::ScreenHome), cd, cd2); } else { - Printf(false, " %Bt%Ft wrkpl:%Fd %s", cd); + Printf(false, " %Ft%s%E%s", cd, cd2); } -#define hs(b) ((b) ? 's' : 'h') - Printf(false, "%Bt%Ftshow: " - "%Fp%Ll%D%fwrkpls%E " - "%Fp%Ll%D%fnormals%E " - "%Fp%Ll%D%fpoints%E " - "%Fp%Ll%D%fconstraints%E ", - hs(SS.GW.showWorkplanes), (DWORD)&(SS.GW.showWorkplanes), &(SS.GW.ToggleBool), - hs(SS.GW.showNormals), (DWORD)&(SS.GW.showNormals), &(SS.GW.ToggleBool), - hs(SS.GW.showPoints), (DWORD)&(SS.GW.showPoints), &(SS.GW.ToggleBool), -hs(SS.GW.showConstraints), (DWORD)(&SS.GW.showConstraints), &(SS.GW.ToggleBool) - ); - Printf(false, "%Bt%Ft " - "%Fp%Ll%D%fshaded%E " - "%Fp%Ll%D%fedges%E " - "%Fp%Ll%D%fmesh%E " - "%Fp%Ll%D%ffaces%E " - "%Fp%Ll%D%fhidden-lns%E", -hs(SS.GW.showShaded), (DWORD)(&SS.GW.showShaded), &(SS.GW.ToggleBool), -hs(SS.GW.showEdges), (DWORD)(&SS.GW.showEdges), &(SS.GW.ToggleBool), -hs(SS.GW.showMesh), (DWORD)(&SS.GW.showMesh), &(SS.GW.ToggleBool), -hs(SS.GW.showFaces), (DWORD)(&SS.GW.showFaces), &(SS.GW.ToggleBool), -hs(SS.GW.showHdnLines), (DWORD)(&SS.GW.showHdnLines), &(SS.GW.ToggleBool) - ); + // Leave space for the icons that are painted here. + Printf(false, ""); + Printf(false, ""); } //----------------------------------------------------------------------------- diff --git a/textwin.cpp b/textwin.cpp index ed9c591..ae34c98 100644 --- a/textwin.cpp +++ b/textwin.cpp @@ -1,4 +1,5 @@ #include "solvespace.h" +#include "obj/icons-proto.h" #include const TextWindow::Color TextWindow::fgColors[] = { @@ -22,6 +23,22 @@ const TextWindow::Color TextWindow::bgColors[] = { { 0, 0 }, }; +bool TextWindow::SPACER = false; +TextWindow::HideShowIcon TextWindow::hideShowIcons[] = { + { &(SS.GW.showWorkplanes), Icon_workplane, "workplanes from inactive groups"}, + { &(SS.GW.showNormals), Icon_normal, "normals" }, + { &(SS.GW.showPoints), Icon_point, "points" }, + { &(SS.GW.showConstraints), Icon_constraint, "constraints and dimensions" }, + { &(SS.GW.showFaces), Icon_faces, "XXX - special cased" }, + { &SPACER, 0 }, + { &(SS.GW.showShaded), Icon_shaded, "shaded view of solid model" }, + { &(SS.GW.showEdges), Icon_edges, "edges of solid model" }, + { &(SS.GW.showMesh), Icon_mesh, "triangle mesh of solid model" }, + { &SPACER, 0 }, + { &(SS.GW.showHdnLines), Icon_hidden_lines, "hidden lines" }, + { 0, 0 }, +}; + void TextWindow::MakeColorTable(const Color *in, float *out) { int i; for(i = 0; in[i].c != 0; i++) { @@ -259,7 +276,140 @@ void TextWindow::Show(void) { InvalidateText(); } -void TextWindow::Paint(int width, int height) { +void TextWindow::TimerCallback(void) +{ + tooltippedIcon = hoveredIcon; + InvalidateText(); +} + +void TextWindow::DrawOrHitTestIcons(int how, double mx, double my) +{ + int width, height; + GetTextWindowSize(&width, &height); + + int x = 20, y = 33 + LINE_HEIGHT; + y -= scrollPos*(LINE_HEIGHT/2); + + double grey = 30.0/255; + double top = y - 28, bot = y + 4; + glColor4d(grey, grey, grey, 1.0); + glxAxisAlignedQuad(0, width, top, bot); + + HideShowIcon *oldHovered = hoveredIcon; + if(how != PAINT) { + hoveredIcon = NULL; + } + + HideShowIcon *hsi; + for(hsi = &(hideShowIcons[0]); hsi->var; hsi++) { + if(hsi->var == &SPACER) { + // Draw a darker-grey spacer in between the groups of icons. + if(how == PAINT) { + int l = x, r = l + 4, + t = y, b = t - 24; + glColor4d(0.17, 0.17, 0.17, 1); + glxAxisAlignedQuad(l, r, t, b); + } + x += 12; + continue; + } + + if(how == PAINT) { + glPushMatrix(); + glTranslated(x, y-24, 0); + // Only thing that matters about the color is the alpha, + // should be one for no transparency + glColor3d(0, 0, 0); + glxDrawPixelsWithTexture(hsi->icon, 24, 24); + glPopMatrix(); + + if(hsi == hoveredIcon) { + glColor4d(1, 1, 0, 0.3); + glxAxisAlignedQuad(x - 2, x + 26, y + 2, y - 26); + } + if(!*(hsi->var)) { + glColor4d(1, 0, 0, 0.6); + glLineWidth(2); + int s = 0, f = 24; + glBegin(GL_LINES); + glVertex2d(x+s, y-s); + glVertex2d(x+f, y-f); + glVertex2d(x+s, y-f); + glVertex2d(x+f, y-s); + glEnd(); + } + } else { + if(mx > x - 2 && mx < x + 26 && + my < y + 2 && my > y - 26) + { + // The mouse is hovered over this icon, so do the tooltip + // stuff. + if(hsi != tooltippedIcon) { + oldMousePos = Point2d::From(mx, my); + } + if(hsi != oldHovered || how == CLICK) { + SetTimerFor(1000); + } + hoveredIcon = hsi; + if(how == CLICK) { + SS.GW.ToggleBool(hsi->var); + } + } + } + + x += 32; + } + + if(how != PAINT && hoveredIcon != oldHovered) { + InvalidateText(); + } + + if(tooltippedIcon) { + if(how == PAINT) { + char str[1024]; + + if(tooltippedIcon->icon == Icon_faces) { + if(SS.GW.showFaces) { + strcpy(str, "Don't select faces with mouse"); + } else { + strcpy(str, "Select faces with mouse"); + } + } else { + sprintf(str, "%s %s", *(tooltippedIcon->var) ? "Hide" : "Show", + tooltippedIcon->tip); + } + + double ox = oldMousePos.x, oy = oldMousePos.y - LINE_HEIGHT; + int tw = (strlen(str) + 1)*CHAR_WIDTH; + ox = min(ox, (width - 25) - tw); + oy = max(oy, 5); + + glxCreateBitmapFont(); + glLineWidth(1); + glColor4d(1.0, 1.0, 0.6, 1.0); + glxAxisAlignedQuad(ox, ox+tw, oy, oy+LINE_HEIGHT); + glColor4d(0.0, 0.0, 0.0, 1.0); + glxAxisAlignedLineLoop(ox, ox+tw, oy, oy+LINE_HEIGHT); + + glColor4d(0, 0, 0, 1); + glxBitmapText(str, Vector::From(ox+5, oy-3+LINE_HEIGHT, 0)); + } else { + if(!hoveredIcon || + (hoveredIcon != tooltippedIcon)) + { + tooltippedIcon = NULL; + InvalidateGraphics(); + } + // And if we're hovered, then we've set a timer that will cause + // us to show the tool tip later. + } + } +} + +void TextWindow::Paint(void) { + int width, height; + GetTextWindowSize(&width, &height); + // We would like things pixel-exact, to avoid shimmering. glViewport(0, 0, width, height); glMatrixMode(GL_PROJECTION); @@ -276,12 +426,12 @@ void TextWindow::Paint(int width, int height) { halfRows = height / (LINE_HEIGHT/2); - int bottom = SS.TW.top[SS.TW.rows-1] + 2; + int bottom = top[rows-1] + 2; scrollPos = min(scrollPos, bottom - halfRows); scrollPos = max(scrollPos, 0); // Let's set up the scroll bar first - MoveTextScrollbarTo(scrollPos, SS.TW.top[SS.TW.rows - 1] + 1, halfRows); + MoveTextScrollbarTo(scrollPos, top[rows - 1] + 1, halfRows); // Create the bitmap font that we're going to use. glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); @@ -289,33 +439,31 @@ void TextWindow::Paint(int width, int height) { // Now paint the window. int r, c, a; - for(a = 0; a < 3; a++) { + for(a = 0; a < 2; a++) { if(a == 0) { glBegin(GL_QUADS); } else if(a == 1) { glEnable(GL_TEXTURE_2D); glxCreateBitmapFont(); glBegin(GL_QUADS); - } else { - glBegin(GL_LINES); } - for(r = 0; r < SS.TW.rows; r++) { - int top = SS.TW.top[r]; - if(top < (scrollPos-1)) continue; - if(top > scrollPos+halfRows) break; + for(r = 0; r < rows; r++) { + int ltop = top[r]; + if(ltop < (scrollPos-1)) continue; + if(ltop > scrollPos+halfRows) break; - for(c = 0; c < min((width/CHAR_WIDTH)+1, SS.TW.MAX_COLS); c++) { + for(c = 0; c < min((width/CHAR_WIDTH)+1, MAX_COLS); c++) { int x = LEFT_MARGIN + c*CHAR_WIDTH; - int y = (top-scrollPos)*(LINE_HEIGHT/2) + 2; + int y = (ltop-scrollPos)*(LINE_HEIGHT/2) + 4; - int fg = SS.TW.meta[r][c].fg; - int bg = SS.TW.meta[r][c].bg; + int fg = meta[r][c].fg; + int bg = meta[r][c].bg; // On the first pass, all the background quads; on the next // pass, all the foreground (i.e., font) quads. if(a == 0) { - int bh = LINE_HEIGHT, adj = 0; + int bh = LINE_HEIGHT, adj = -2; if(bg & 0x80000000) { glColor3f(REDf(bg), GREENf(bg), BLUEf(bg)); bh = CHAR_HEIGHT; @@ -328,23 +476,45 @@ void TextWindow::Paint(int width, int height) { // Move the quad down a bit, so that the descenders // still have the correct background. y += adj; - glBegin(GL_QUADS); - glVertex2d(x, y); - glVertex2d(x + CHAR_WIDTH, y); - glVertex2d(x + CHAR_WIDTH, y + bh); - glVertex2d(x, y + bh); - glEnd(); + glxAxisAlignedQuad(x, x + CHAR_WIDTH, y, y + bh); y -= adj; } } else if(a == 1) { glColor3fv(&(fgColorTable[fg*3])); - glxBitmapCharQuad(SS.TW.text[r][c], x, y + CHAR_HEIGHT); - } else { - if(SS.TW.meta[r][c].link && SS.TW.meta[r][c].link != 'n') { - glColor3fv(&(fgColorTable[fg*3])); - y += CHAR_HEIGHT + 1; - glVertex2d(x, y); - glVertex2d(x + CHAR_WIDTH, y); + glxBitmapCharQuad(text[r][c], x, y + CHAR_HEIGHT); + + // If this is a link and it's hovered, then draw the + // underline. + if(meta[r][c].link && meta[r][c].link != 'n' && + (r == hoveredRow && c == hoveredCol)) + { + int cs = c, cf = c; + while(cs >= 0 && meta[r][cs].link && + meta[r][cs].f == meta[r][c].f && + meta[r][cs].data == meta[r][c].data) + { + cs--; + } + cs++; + + while( meta[r][cf].link && + meta[r][cf].f == meta[r][c].f && + meta[r][cf].data == meta[r][c].data) + { + cf++; + } + glEnd(); + + glDisable(GL_TEXTURE_2D); + glLineWidth(1); + glBegin(GL_LINES); + int yp = y + CHAR_HEIGHT; + glVertex2d(LEFT_MARGIN + cs*CHAR_WIDTH, yp); + glVertex2d(LEFT_MARGIN + cf*CHAR_WIDTH, yp); + glEnd(); + + glEnable(GL_TEXTURE_2D); + glBegin(GL_QUADS); } } } @@ -353,6 +523,9 @@ void TextWindow::Paint(int width, int height) { glEnd(); glDisable(GL_TEXTURE_2D); } + + // The header has some icons that are drawn separately from the text + DrawOrHitTestIcons(PAINT, 0, 0); } void TextWindow::MouseEvent(bool leftClick, double x, double y) { @@ -366,29 +539,39 @@ void TextWindow::MouseEvent(bool leftClick, double x, double y) { return; } + DrawOrHitTestIcons(leftClick ? CLICK : HOVER, x, y); + GraphicsWindow::Selection ps = SS.GW.hover; SS.GW.hover.Clear(); + int prevHoveredRow = hoveredRow, + prevHoveredCol = hoveredCol; + hoveredRow = 0; + hoveredCol = 0; + // Find the corresponding character in the text buffer int c = (int)((x - LEFT_MARGIN) / CHAR_WIDTH); int hh = (LINE_HEIGHT)/2; y += scrollPos*hh; int r; - for(r = 0; r < SS.TW.rows; r++) { - if(y >= SS.TW.top[r]*hh && y <= (SS.TW.top[r]+2)*hh) { + for(r = 0; r < rows; r++) { + if(y >= top[r]*hh && y <= (top[r]+2)*hh) { break; } } - if(r >= SS.TW.rows) { + if(r >= rows) { SetMousePointerToHand(false); goto done; } -#define META (SS.TW.meta[r][c]) + hoveredRow = r; + hoveredCol = c; + +#define META (meta[r][c]) if(leftClick) { if(META.link && META.f) { (META.f)(META.link, META.data); - SS.TW.Show(); + Show(); InvalidateGraphics(); } } else { @@ -403,19 +586,30 @@ void TextWindow::MouseEvent(bool leftClick, double x, double y) { } done: - if(!ps.Equals(&(SS.GW.hover))) { + if((!ps.Equals(&(SS.GW.hover))) || + prevHoveredRow != hoveredRow || + prevHoveredCol != hoveredCol) + { InvalidateGraphics(); + InvalidateText(); } } +void TextWindow::MouseLeave(void) { + tooltippedIcon = NULL; + hoveredRow = 0; + hoveredCol = 0; + InvalidateText(); +} + void TextWindow::ScrollbarEvent(int newPos) { - int bottom = SS.TW.top[SS.TW.rows-1] + 2; + int bottom = top[rows-1] + 2; newPos = min(newPos, bottom - halfRows); newPos = max(newPos, 0); if(newPos != scrollPos) { scrollPos = newPos; - MoveTextScrollbarTo(scrollPos, SS.TW.top[SS.TW.rows - 1] + 1, halfRows); + MoveTextScrollbarTo(scrollPos, top[rows - 1] + 1, halfRows); if(TextEditControlIsVisible()) { extern int TextEditControlCol, TextEditControlHalfRow; diff --git a/toolbar.cpp b/toolbar.cpp index b5e826a..9eee4d6 100644 --- a/toolbar.cpp +++ b/toolbar.cpp @@ -39,8 +39,8 @@ static const struct { { Icon_assemble, GraphicsWindow::MNU_GROUP_IMPORT, "New group importing / assembling file" }, { SPACER }, - { Icon_in3d, GraphicsWindow::MNU_FREE_IN_3D, "Sketch / constrain in 3d" }, - { Icon_ontoworkplane, GraphicsWindow::MNU_SEL_WORKPLANE, "Sketch / constrain in workplane" }, + { Icon_in3d, GraphicsWindow::MNU_NEAREST_ISO, "Nearest isometric view" }, + { Icon_ontoworkplane, GraphicsWindow::MNU_ONTO_WORKPLANE, "Align view to active workplane" }, { NULL }, }; @@ -122,12 +122,7 @@ bool GraphicsWindow::ToolbarDrawOrHitTest(int mx, int my, double c = 30.0/255; glColor4d(c, c, c, 1.0); - glBegin(GL_QUADS); - glVertex2d(aleft, atop); - glVertex2d(aleft, abot); - glVertex2d(aright, abot); - glVertex2d(aright, atop); - glEnd(); + glxAxisAlignedQuad(aleft, aright, atop, abot); } struct { @@ -151,12 +146,7 @@ bool GraphicsWindow::ToolbarDrawOrHitTest(int mx, int my, glColor4d(0.17, 0.17, 0.17, 1); x += 16; y += 24; - glBegin(GL_QUADS); - glVertex2d(x+divw, y+divh); - glVertex2d(x+divw, y-divh); - glVertex2d(x-divw, y-divh); - glVertex2d(x-divw, y+divh); - glEnd(); + glxAxisAlignedQuad(x+divw, x-divw, y+divh, y-divh); x -= 16; y -= 24; } @@ -172,12 +162,7 @@ bool GraphicsWindow::ToolbarDrawOrHitTest(int mx, int my, // Highlight the hovered or pending item. glColor4d(1, 1, 0, 0.3); int boxhw = 15; - glBegin(GL_QUADS); - glVertex2d(x+boxhw, y+boxhw); - glVertex2d(x+boxhw, y-boxhw); - glVertex2d(x-boxhw, y-boxhw); - glVertex2d(x-boxhw, y+boxhw); - glEnd(); + glxAxisAlignedQuad(x+boxhw, x-boxhw, y+boxhw, y-boxhw); } if(toolbarTooltipped == Toolbar[i].menu) { @@ -218,13 +203,16 @@ bool GraphicsWindow::ToolbarDrawOrHitTest(int mx, int my, if(toolbarTooltipped == SS.GW.menu[i].id) { int accel = SS.GW.menu[i].accel; int ac = accel & 0xff; + + char *s = str+strlen(str); if(isalnum(ac) || ac == '[') { - char *s = str+strlen(str); if(accel & 0x100) { sprintf(s, " (Shift+%c)", ac); } else if((accel & ~0xff) == 0) { sprintf(s, " (%c)", ac); } + } else if(ac == 0xf3) { + sprintf(s, " (F3)"); } break; } @@ -236,19 +224,9 @@ bool GraphicsWindow::ToolbarDrawOrHitTest(int mx, int my, double ox = toolbarMouseX + 3, oy = toolbarMouseY + 3; glLineWidth(1); glColor4d(1.0, 1.0, 0.6, 1.0); - glBegin(GL_QUADS); - glVertex2d(ox, oy); - glVertex2d(ox+tw, oy); - glVertex2d(ox+tw, oy+th); - glVertex2d(ox, oy+th); - glEnd(); + glxAxisAlignedQuad(ox, ox+tw, oy, oy+th); glColor4d(0.0, 0.0, 0.0, 1.0); - glBegin(GL_LINE_LOOP); - glVertex2d(ox, oy); - glVertex2d(ox+tw, oy); - glVertex2d(ox+tw, oy+th); - glVertex2d(ox, oy+th); - glEnd(); + glxAxisAlignedLineLoop(ox, ox+tw, oy, oy+th); glColor4d(0, 0, 0, 1); glPushMatrix(); diff --git a/ui.h b/ui.h index efd4d58..6b82819 100644 --- a/ui.h +++ b/ui.h @@ -31,7 +31,7 @@ public: static const int CHAR_WIDTH = 9; static const int CHAR_HEIGHT = 16; static const int LINE_HEIGHT = 20; - static const int LEFT_MARGIN = 4; + static const int LEFT_MARGIN = 6; int scrollPos; // The scrollbar position, in half-row units int halfRows; // The height of our window, in half-row units @@ -47,15 +47,35 @@ public: LinkFunction *f; LinkFunction *h; } meta[MAX_ROWS][MAX_COLS]; - int top[MAX_ROWS]; // in half-line units, or -1 for unused + int hoveredRow, hoveredCol; + + int top[MAX_ROWS]; // in half-line units, or -1 for unused int rows; + // The row of icons at the top of the text window, to hide/show things + typedef struct { + bool *var; + BYTE *icon; + char *tip; + } HideShowIcon; + static HideShowIcon hideShowIcons[]; + static bool SPACER; + // These are called by the platform-specific code. - void Paint(int w, int h); + void Paint(void); void MouseEvent(bool leftDown, double x, double y); void MouseScroll(double x, double y, int delta); + void MouseLeave(void); void ScrollbarEvent(int newPos); + + static const int PAINT = 0; + static const int HOVER = 1; + static const int CLICK = 2; + void DrawOrHitTestIcons(int how, double mx, double my); + void TimerCallback(void); + Point2d oldMousePos; + HideShowIcon *hoveredIcon, *tooltippedIcon; void Init(void); void MakeColorTable(const Color *in, float *out); @@ -282,6 +302,7 @@ public: MNU_ZOOM_TO_FIT, MNU_SHOW_GRID, MNU_PARALLEL_PROJ, + MNU_ONTO_WORKPLANE, MNU_NEAREST_ORTHO, MNU_NEAREST_ISO, MNU_CENTER_VIEW, @@ -567,7 +588,7 @@ public: bool showFaces; bool showMesh; bool showHdnLines; - static void ToggleBool(int link, DWORD v); + void ToggleBool(bool *v); bool showSnapGrid; @@ -578,7 +599,7 @@ public: void UpdateDraggedPoint(hEntity hp, double mx, double my); // These are called by the platform-specific code. - void Paint(int w, int h); + void Paint(void); void MouseMoved(double x, double y, bool leftDown, bool middleDown, bool rightDown, bool shiftDown, bool ctrlDown); void MouseLeftDown(double x, double y); diff --git a/win32/w32main.cpp b/win32/w32main.cpp index 4a7fc5b..0c6dc8a 100644 --- a/win32/w32main.cpp +++ b/win32/w32main.cpp @@ -229,6 +229,7 @@ void CALLBACK TimerCallback(HWND hwnd, UINT msg, UINT_PTR id, DWORD time) // The timer is periodic, so needs to be killed explicitly. KillTimer(GraphicsWnd, 1); SS.GW.TimerCallback(); + SS.TW.TimerCallback(); } void SetTimerFor(int milliseconds) { @@ -246,6 +247,10 @@ void GetGraphicsWindowSize(int *w, int *h) { GetWindowSize(GraphicsWnd, w, h); } +void GetTextWindowSize(int *w, int *h) +{ + GetWindowSize(TextWnd, w, h); +} void OpenWebsite(char *url) { ShellExecute(GraphicsWnd, "open", url, NULL, NULL, SW_SHOWNORMAL); @@ -291,9 +296,7 @@ static void PaintTextWnd(HDC hdc) { wglMakeCurrent(GetDC(TextWnd), TextGl); - int w, h; - GetWindowSize(TextWnd, &w, &h); - SS.TW.Paint(w, h); + SS.TW.Paint(); SwapBuffers(GetDC(TextWnd)); // Leave the graphics window context active, except when we're painting @@ -439,8 +442,21 @@ LRESULT CALLBACK TextWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) break; } + case WM_MOUSELEAVE: + SS.TW.MouseLeave(); + break; + case WM_LBUTTONDOWN: case WM_MOUSEMOVE: { + // We need this in order to get the WM_MOUSELEAVE + TRACKMOUSEEVENT tme; + ZERO(&tme); + tme.cbSize = sizeof(tme); + tme.dwFlags = TME_LEAVE; + tme.hwndTrack = TextWnd; + TrackMouseEvent(&tme); + + // And process the actual message int x = LOWORD(lParam); int y = HIWORD(lParam); SS.TW.MouseEvent(msg == WM_LBUTTONDOWN, x, y); @@ -595,9 +611,7 @@ static void CreateGlContext(HWND hwnd, HGLRC *glrc) void PaintGraphics(void) { - int w, h; - GetWindowSize(GraphicsWnd, &w, &h); - SS.GW.Paint(w, h); + SS.GW.Paint(); SwapBuffers(GetDC(GraphicsWnd)); } void InvalidateGraphics(void) @@ -1021,7 +1035,7 @@ static void CreateMainWindows(void) // We get the desired Alt+Tab behaviour by specifying that the text // window is a child of the graphics window. TextWnd = CreateWindowEx(0, - "TextWnd", "SolveSpace (Text Window)", WS_THICKFRAME | WS_CLIPCHILDREN, + "TextWnd", "SolveSpace - Browser", WS_THICKFRAME | WS_CLIPCHILDREN, 650, 500, 420, 300, GraphicsWnd, (HMENU)NULL, Instance, NULL); if(!TextWnd) oops(); diff --git a/wishlist.txt b/wishlist.txt index 5bc2f33..d7bf20e 100644 --- a/wishlist.txt +++ b/wishlist.txt @@ -1,9 +1,8 @@ -replace show/hide links with icons add checked/unchecked checkbox and radio button fix bug with rotation in plane where green line stays displayed lock point where dragged constraint -remove toolbar icons for sketch in 3d, add View -> Align to Workplane expose transformed point stuff in library, and email McNeel +assign default name for import groups based on filename ----- rounding, as a special group