diff --git a/src/render/render_context.c b/src/render/render_context.c index 6930302f..a1b1fd07 100644 --- a/src/render/render_context.c +++ b/src/render/render_context.c @@ -62,7 +62,7 @@ static void listAllocate(GLuint* base, GLsizei* range, GLsizei newrange) { *range = newrange; if (newrange) { *base = glGenLists(*range); - if (*base<=0) { + if (*base <= 0) { mju_error("Could not allocate display lists"); } } @@ -79,8 +79,8 @@ static void makePlane(const mjModel* m, mjrContext* con) { // count planes nplane = 0; - for (int i=0; ingeom; i++) { - if (m->geom_type[i]==mjGEOM_PLANE) { + for (int i=0; i < m->ngeom; i++) { + if (m->geom_type[i] == mjGEOM_PLANE) { nplane++; } } @@ -93,8 +93,8 @@ static void makePlane(const mjModel* m, mjrContext* con) { glBegin(GL_QUADS); glNormal3d(0, 0, 1); double d = 2.0/m->vis.quality.numquads; - for (int x=0; xvis.quality.numquads; x++) { - for (int y=0; yvis.quality.numquads; y++) { + for (int x=0; x < m->vis.quality.numquads; x++) { + for (int y=0; y < m->vis.quality.numquads; y++) { glVertex3d(d*(x+0)-1, d*(y+0)-1, 0); glVertex3d(d*(x+1)-1, d*(y+0)-1, 0); glVertex3d(d*(x+1)-1, d*(y+1)-1, 0); @@ -106,16 +106,16 @@ static void makePlane(const mjModel* m, mjrContext* con) { // construct planes, offset by 1 nplane = 0; - for (int i=0; ingeom; i++) { - if (m->geom_type[i]==mjGEOM_PLANE) { + for (int i=0; i < m->ngeom; i++) { + if (m->geom_type[i] == mjGEOM_PLANE) { // get sizes sz[0] = m->geom_size[3*i]; sz[1] = m->geom_size[3*i+1]; // loop over (x, y) - for (int k=0; k<2; k++) { + for (int k=0; k < 2; k++) { // regular dimension - if (sz[k]>0) { + if (sz[k] > 0) { // limit number of grid lines, leave room for padding sz2 = mju_max(m->geom_size[3*i+2], sz[k]/(mjMAXPLANEGRID-2)); @@ -128,14 +128,14 @@ static void makePlane(const mjModel* m, mjrContext* con) { nn[k] += 2; // make grid - for (int x=0; xgeom_matid[i]; - if (matid>=0 && m->mat_texrepeat[2*matid+k]>0) { + if (matid >= 0 && m->mat_texrepeat[2*matid+k] > 0) { sX = 2/m->mat_texrepeat[2*matid+k]; } else { sX = 2.1*zfar/(mjMAXPLANEGRID-2); @@ -157,7 +157,7 @@ static void makePlane(const mjModel* m, mjrContext* con) { // create grid, larger than skybox d = (2.1*zfar + 2*sX)/mjMAXPLANEGRID; - for (int x=0; x<=mjMAXPLANEGRID; x++) { + for (int x=0; x <= mjMAXPLANEGRID; x++) { grid[k][x] = d*x - d*(mjMAXPLANEGRID/2); } @@ -172,8 +172,8 @@ static void makePlane(const mjModel* m, mjrContext* con) { glNormal3d(0, 0, 1); // make grid - for (int x=0; xbaseMesh, &con->rangeMesh, 2*m->nmesh); // process meshes - for (int i=0; inmesh; i++) { + for (int i=0; i < m->nmesh; i++) { mjr_uploadMesh(m, con, i); } } @@ -212,7 +212,7 @@ void mjr_uploadMesh(const mjModel* m, const mjrContext* con, int meshid) { float normal[3], *v1, *v2, *v3, *n1, *n2, *n3, *t1, *t2, *t3; // check index - if (meshid<0 || meshid>=m->nmesh) { + if (meshid < 0 || meshid >= m->nmesh) { mju_error("Invalid mesh index %d", meshid); } @@ -241,7 +241,7 @@ void mjr_uploadMesh(const mjModel* m, const mjrContext* con, int meshid) { n3 = m->mesh_normal + 3*(m->mesh_facenormal[3*face+2] + normaladr); // compute texcoord addresses - if (texcoordadr>=0) { + if (texcoordadr >= 0) { t1 = m->mesh_texcoord + 2*(m->mesh_facetexcoord[3*face] + texcoordadr); t2 = m->mesh_texcoord + 2*(m->mesh_facetexcoord[3*face+1] + texcoordadr); t3 = m->mesh_texcoord + 2*(m->mesh_facetexcoord[3*face+2] + texcoordadr); @@ -296,14 +296,14 @@ void mjr_uploadMesh(const mjModel* m, const mjrContext* con, int meshid) { glEndList(); // render convex hull if present - if (m->mesh_graphadr[meshid]>=0) { + if (m->mesh_graphadr[meshid] >= 0) { // get sizes of convex hull numvert = m->mesh_graph[m->mesh_graphadr[meshid]]; numface = m->mesh_graph[m->mesh_graphadr[meshid]+1]; glNewList(con->baseMesh + 2*meshid+1, GL_COMPILE); glBegin(GL_TRIANGLES); - for (int face=0; facemesh_graphadr[meshid] + 2 + 3*numvert + 3*numface + 3*face; @@ -313,7 +313,7 @@ void mjr_uploadMesh(const mjModel* m, const mjrContext* con, int meshid) { v3 = m->mesh_vert + 3*(m->mesh_graph[j+2] + vertadr); // compute texcoord addresses - if (texcoordadr>=0) { + if (texcoordadr >= 0) { t1 = m->mesh_texcoord + 2*(m->mesh_graph[j] + texcoordadr); t2 = m->mesh_texcoord + 2*(m->mesh_graph[j+1] + texcoordadr); t3 = m->mesh_texcoord + 2*(m->mesh_graph[j+2] + texcoordadr); @@ -364,7 +364,7 @@ static void addVert(float x, float y, float z, float sclz, struct vertbuf* buf) buf->nvert++; // triangle ready - if (buf->nvert>=3) { + if (buf->nvert >= 3) { // compensate for alternating orientation if (buf->nvert%2) { mjr_makeNormal(normal, buf->vert1, buf->vert2, buf->vert3); @@ -390,7 +390,7 @@ static void makeHField(const mjModel* m, mjrContext* con) { listAllocate(&con->baseHField, &con->rangeHField, m->nhfield); // uploaed all heightfields - for (int i=0; inhfield; i++) { + for (int i=0; i < m->nhfield; i++) { mjr_uploadHField(m, con, i); } } @@ -405,7 +405,7 @@ void mjr_uploadHField(const mjModel* m, const mjrContext* con, int hfieldid) { float* data; // check index - if (hfieldid<0 || hfieldid>=m->nhfield) { + if (hfieldid < 0 || hfieldid >= m->nhfield) { mju_error("Invalid height field index %d", hfieldid); } @@ -421,7 +421,7 @@ void mjr_uploadHField(const mjModel* m, const mjrContext* con, int hfieldid) { height = 0.5f * (m->hfield_nrow[hfieldid]-1); // convert size to float - for (int r=0; r<4; r++) { + for (int r=0; r < 4; r++) { sz[r] = (float)m->hfield_size[4*hfieldid+r]; } @@ -429,9 +429,9 @@ void mjr_uploadHField(const mjModel* m, const mjrContext* con, int hfieldid) { glBegin(GL_TRIANGLES); int nr = m->hfield_nrow[hfieldid]; int nc = m->hfield_ncol[hfieldid]; - for (int r=0; rvis.quality.numquads; r++) { - for (int c=0; cvis.quality.numquads; c++) { + for (int r=0; r < m->vis.quality.numquads; r++) { + for (int c=0; c < m->vis.quality.numquads; c++) { glVertex3f(sz[0]*((c+0)/width-1.0f), sz[1]*((r+0)/height-1.0f), -sz[3]); glVertex3f(sz[0]*((c+0)/width-1.0f), sz[1]*((r+1)/height-1.0f), -sz[3]); glVertex3f(sz[0]*((c+1)/width-1.0f), sz[1]*((r+1)/height-1.0f), -sz[3]); @@ -516,7 +516,7 @@ static void halfSphere(int sign, int nSlice, int nStack) { // pole: use triangles glBegin(GL_TRIANGLES); el1 = (mjPI/2.0f * sign * (nStack-1)) / (float)nStack; - for (int j=0; j0) { + if (sign > 0) { glNormal3fv(n1); glVertex3fv(v1); glNormal3fv(n2); @@ -549,11 +549,11 @@ static void halfSphere(int sign, int nSlice, int nStack) { // the rest: use quads glBegin(GL_QUADS); - for (int i=0; i0) { + if (sign > 0) { glNormal3fv(n1); glVertex3fv(v1); glNormal3fv(n2); @@ -598,9 +598,9 @@ static void sphere(int nSlice, int nStack) { // poles: use triangles glBegin(GL_TRIANGLES); - for (int sign=-1; sign<=1; sign+=2) { + for (int sign=-1; sign <= 1; sign+=2) { el1 = (0.5*mjPI * sign * (nStack/2-1)) / (float)(nStack/2); - for (int j=0; j0) { + if (sign > 0) { glNormal3fv(n1); glVertex3fv(v1); glNormal3fv(n2); @@ -634,12 +634,12 @@ static void sphere(int nSlice, int nStack) { // the rest: use quads glBegin(GL_QUADS); - for (int sign=-1; sign<=1; sign+=2) { - for (int i=0; i0) { + if (sign > 0) { glNormal3fv(n1); glVertex3fv(v1); glNormal3fv(n2); @@ -689,13 +689,13 @@ static void setVertexDisk(float* v, float az, float r, int sign) { static void disk(int sign, int nSlice, int nStack) { float az1, az2, r1, r2; float v1[3], v2[3], v3[3], v4[3]; - float normal[3] = {0, 0, (sign==0 ? -1 : sign)}; + float normal[3] = {0, 0, (sign == 0 ? -1 : sign)}; // pole: use triangles glBegin(GL_TRIANGLES); glNormal3fv(normal); r1 = 1.0f / (float)nStack; - for (int j=0; j0) { + if (sign > 0) { glVertex3fv(v1); glVertex3fv(v2); glVertex3fv(v3); @@ -721,11 +721,11 @@ static void disk(int sign, int nSlice, int nStack) { // the rest: use quads glBegin(GL_QUADS); glNormal3fv(normal); - for (int i=0; i0) { + if (sign > 0) { glVertex3fv(v1); glVertex3fv(v2); glVertex3fv(v3); @@ -779,7 +779,7 @@ static void cone(int nSlice, int nStack) { // pole: use triangles glBegin(GL_TRIANGLES); r1 = 1.0f / (float)nStack; - for (int j=0; jbaseBuiltin + mjrBOX, GL_COMPILE); glBegin(GL_QUADS); - for (int x=0; xoffSamples>sMax) { + if (con->offSamples > sMax) { con->offSamples = sMax; } @@ -1137,7 +1137,7 @@ static void makeOff(mjrContext* con) { // check FBO status GLenum err = glCheckFramebufferStatus(GL_FRAMEBUFFER); - if (err!=GL_FRAMEBUFFER_COMPLETE) { + if (err != GL_FRAMEBUFFER_COMPLETE) { mju_error("Offscreen framebuffer is not complete, error 0x%x", err); } @@ -1175,7 +1175,7 @@ static void makeOff(mjrContext* con) { // check FBO status GLenum err = glCheckFramebufferStatus(GL_FRAMEBUFFER); - if (err!=GL_FRAMEBUFFER_COMPLETE) { + if (err != GL_FRAMEBUFFER_COMPLETE) { mju_error("Offscreen framebuffer_r is not complete, error 0x%x", err); } } @@ -1241,14 +1241,14 @@ static void makeFont(mjrContext* con, int fontscale) { con->baseFontNormal = glGenLists(con->rangeFont); con->baseFontShadow = glGenLists(con->rangeFont); con->baseFontBig = glGenLists(con->rangeFont); - if (con->baseFontNormal==0 || con->baseFontShadow==0 || con->baseFontBig==0) { + if (con->baseFontNormal == 0 || con->baseFontShadow == 0 || con->baseFontBig == 0) { mju_error("Could not allocate font lists"); } // loop over printable characters (32-126) - for (unsigned char i=32; i<=126; i++) { + for (unsigned char i=32; i <= 126; i++) { // assert character code; SHOULD NOT OCCUR - if (font_normal[adr]!=i || font_back[adr]!=i || font_big[adr_big]!=i) { + if (font_normal[adr] != i || font_back[adr] != i || font_big[adr_big] != i) { mju_error("Invalid font data index"); } @@ -1286,7 +1286,7 @@ static void makeFont(mjrContext* con, int fontscale) { } // assert 123 termination token; SHOULD NOT OCCUR - if (font_normal[adr]!=123 || font_back[adr]!=123 || font_big[adr_big]!=123) { + if (font_normal[adr] != 123 || font_back[adr] != 123 || font_big[adr_big] != 123) { mju_error("Invalid font data termination"); } } @@ -1296,7 +1296,7 @@ static void makeFont(mjrContext* con, int fontscale) { // make textures static void makeTexture(const mjModel* m, mjrContext* con) { // checks size - if (m->ntex>mjMAXTEXTURE) { + if (m->ntex > mjMAXTEXTURE) { mju_error("Maximum number of textures is %d", mjMAXTEXTURE); } @@ -1308,7 +1308,7 @@ static void makeTexture(const mjModel* m, mjrContext* con) { // allocate and upload glGenTextures(con->ntexture, con->texture); - for (int i=0; intex; i++) { + for (int i=0; i < m->ntex; i++) { con->textureType[i] = m->tex_type[i]; mjr_uploadTexture(m, con, i); } @@ -1322,7 +1322,7 @@ void mjr_uploadTexture(const mjModel* m, const mjrContext* con, int texid) { float plane[4]; // 2D texture - if (m->tex_type[texid]==mjTEXTURE_2D) { + if (m->tex_type[texid] == mjTEXTURE_2D) { // OpenGL settings glActiveTexture(GL_TEXTURE0); glEnable(GL_TEXTURE_2D); @@ -1373,8 +1373,8 @@ void mjr_uploadTexture(const mjModel* m, const mjrContext* con, int texid) { glTexGenfv(GL_R, GL_OBJECT_PLANE, plane); // assign data: repeated - if (m->tex_width[texid]==m->tex_height[texid]) { - for (int i=0; i<6; i++) { + if (m->tex_width[texid] == m->tex_height[texid]) { + for (int i=0; i < 6; i++) { glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X+i, 0, GL_RGB, w, w, 0, GL_RGB, GL_UNSIGNED_BYTE, m->tex_rgb + m->tex_adr[texid]); } @@ -1382,7 +1382,7 @@ void mjr_uploadTexture(const mjModel* m, const mjrContext* con, int texid) { // assign data: separate faces else { - for (int i=0; i<6; i++) { + for (int i=0; i < 6; i++) { glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X+i, 0, GL_RGB, w, w, 0, GL_RGB, GL_UNSIGNED_BYTE, m->tex_rgb + m->tex_adr[texid] + i*3*w*w); } @@ -1418,9 +1418,9 @@ static void makeSkin(const mjModel* m, mjrContext* con) { glGenBuffers(nskin, con->skinfaceVBO); // process skins - for (int i=0; iskin_texcoordadr[i]>=0) { + if (m->skin_texcoordadr[i] >= 0) { glBindBuffer(GL_ARRAY_BUFFER, con->skintexcoordVBO[i]); glBufferData(GL_ARRAY_BUFFER, 2*m->skin_vertnum[i]*sizeof(float), @@ -1469,9 +1469,9 @@ void mjr_makeContext_offSize(const mjModel* m, mjrContext* con, int fontscale, int default_offwidth, int default_offheight) { // fix fontscale fontscale = 50 * mju_round(((mjtNum)fontscale)/50.0); - if (fontscale<100) { + if (fontscale < 100) { fontscale = 100; - } else if (fontscale>300) { + } else if (fontscale > 300) { fontscale = 300; } @@ -1494,9 +1494,9 @@ void mjr_makeContext_offSize(const mjModel* m, mjrContext* con, int fontscale, // determine window availability (could be EGL-headless) glBindFramebuffer(GL_FRAMEBUFFER, 0); unsigned int status = glCheckFramebufferStatus(GL_FRAMEBUFFER); - if (status==GL_FRAMEBUFFER_COMPLETE) { + if (status == GL_FRAMEBUFFER_COMPLETE) { con->windowAvailable = 1; - } else if (status==GL_FRAMEBUFFER_UNDEFINED) { + } else if (status == GL_FRAMEBUFFER_UNDEFINED) { con->windowAvailable = 0; } else { mju_error("Default framebuffer is not complete, error 0x%x", status); @@ -1640,7 +1640,7 @@ void mjr_changeFont(int fontscale, mjrContext* con) { // Add Aux buffer to context; free previous Aux buffer. void mjr_addAux(int index, int width, int height, int samples, mjrContext* con) { // check index - if (index<0 || index>=mjNAUX) { + if (index < 0 || index >= mjNAUX) { mju_error("Invalid aux buffer index"); } @@ -1663,21 +1663,21 @@ void mjr_addAux(int index, int width, int height, int samples, mjrContext* con) con->auxFBO_r[index] = 0; // return if size is not positive - if (width<1 || height<1) { + if (width < 1 || height < 1) { return; } // check max size int maxSize = 0; glGetIntegerv(GL_MAX_RENDERBUFFER_SIZE, &maxSize); - if (width>maxSize || height>maxSize) { + if (width > maxSize || height > maxSize) { mju_error("Auxiliary buffer size exceeds maximum allowed by OpenGL implementation"); } // clamp samples request int maxSample = 0; glGetIntegerv(GL_MAX_SAMPLES, &maxSample); - if (samples>maxSample) { + if (samples > maxSample) { samples = maxSample; } @@ -1706,7 +1706,7 @@ void mjr_addAux(int index, int width, int height, int samples, mjrContext* con) // check FBO status GLenum err = glCheckFramebufferStatus(GL_FRAMEBUFFER); - if (err!=GL_FRAMEBUFFER_COMPLETE) { + if (err != GL_FRAMEBUFFER_COMPLETE) { mju_error("Auxiliary framebuffer is not complete, error 0x%x", err); } @@ -1730,7 +1730,7 @@ void mjr_addAux(int index, int width, int height, int samples, mjrContext* con) // check FBO status err = glCheckFramebufferStatus(GL_FRAMEBUFFER); - if (err!=GL_FRAMEBUFFER_COMPLETE) { + if (err != GL_FRAMEBUFFER_COMPLETE) { mju_error("Auxiliary framebuffer resolve is not complete, error 0x%x", err); } @@ -1759,7 +1759,7 @@ void mjr_freeContext(mjrContext* con) { if (con->offFBO_r) glDeleteFramebuffers(1, &con->offFBO_r); if (con->shadowTex) glDeleteTextures(1, &con->shadowTex); if (con->shadowFBO) glDeleteFramebuffers(1, &con->shadowFBO); - for (int i=0; iauxColor[i]) glDeleteRenderbuffers(1, con->auxColor + i); if (con->auxColor_r[i]) glDeleteRenderbuffers(1, con->auxColor_r + i); if (con->auxFBO[i]) glDeleteFramebuffers(1, con->auxFBO + i); diff --git a/src/render/render_gl2.c b/src/render/render_gl2.c index bb9764ad..095d5b41 100644 --- a/src/render/render_gl2.c +++ b/src/render/render_gl2.c @@ -60,7 +60,7 @@ void mjr_setBuffer(int framebuffer, mjrContext* con) { // both available: use selected framebuffer else { // bind selected buffer - if (framebuffer==mjFB_WINDOW) { + if (framebuffer == mjFB_WINDOW) { glBindFramebuffer(GL_FRAMEBUFFER, 0); glReadBuffer(con->windowDoublebuffer ? GL_BACK : GL_FRONT); glDrawBuffer(con->windowDoublebuffer ? GL_BACK : GL_FRONT); @@ -79,7 +79,7 @@ void mjr_setBuffer(int framebuffer, mjrContext* con) { // make con->currentBuffer current again void mjr_restoreBuffer(const mjrContext* con) { - if (con->currentBuffer==mjFB_WINDOW) { + if (con->currentBuffer == mjFB_WINDOW) { glBindFramebuffer(GL_FRAMEBUFFER, 0); glReadBuffer(con->windowDoublebuffer ? GL_BACK : GL_FRONT); glDrawBuffer(con->windowDoublebuffer ? GL_BACK : GL_FRONT); @@ -106,7 +106,7 @@ void mjr_readPixels(unsigned char* rgb, float* depth, } // read from window - if (con->currentBuffer==mjFB_WINDOW) { + if (con->currentBuffer == mjFB_WINDOW) { // read rgb and depth if (rgb) { glReadPixels(viewport.left, viewport.bottom, viewport.width, viewport.height, @@ -193,7 +193,7 @@ void mjr_blitBuffer(mjrRect src, mjrRect dst, // construct mask and filter for blit GLbitfield mask = (flg_color ? GL_COLOR_BUFFER_BIT : 0) | (flg_depth ? GL_DEPTH_BUFFER_BIT : 0); - GLenum filter = (!flg_depth && (src.width!=dst.width || src.height!=dst.height)) ? + GLenum filter = (!flg_depth && (src.width != dst.width || src.height != dst.height)) ? GL_LINEAR : GL_NEAREST; // make sure both buffers are available and we have something to do @@ -207,7 +207,7 @@ void mjr_blitBuffer(mjrRect src, mjrRect dst, } // from window to offsreen - if (con->currentBuffer==mjFB_WINDOW) { + if (con->currentBuffer == mjFB_WINDOW) { // offscreen is multisample: go through resolve if (con->offSamples) { // prepare to blit from window to resolve @@ -291,7 +291,7 @@ void mjr_blitBuffer(mjrRect src, mjrRect dst, // Set Aux buffer for custom OpenGL rendering (call restoreBuffer when done). void mjr_setAux(int index, const mjrContext* con) { // check index - if (index<0 || index>=mjNAUX) { + if (index < 0 || index >= mjNAUX) { mju_error("Invalid aux buffer index"); } @@ -310,7 +310,7 @@ void mjr_setAux(int index, const mjrContext* con) { // Blit from Aux buffer to con->currentBuffer. void mjr_blitAux(int index, mjrRect src, int left, int bottom, const mjrContext* con) { // check index - if (index<0 || index>=mjNAUX) { + if (index < 0 || index >= mjNAUX) { mju_error("Invalid aux buffer index"); } @@ -338,7 +338,7 @@ void mjr_blitAux(int index, mjrRect src, int left, int bottom, const mjrContext* glReadBuffer(GL_COLOR_ATTACHMENT0); // set destination - if (con->currentBuffer==mjFB_WINDOW) { + if (con->currentBuffer == mjFB_WINDOW) { glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); glDrawBuffer(con->windowDoublebuffer ? GL_BACK : GL_FRONT); } else { @@ -391,7 +391,7 @@ void mjr_textActual(int font, const char* txt, const mjrContext* con, } // shadow text - if (font==mjFONT_SHADOW) { + if (font == mjFONT_SHADOW) { // blend shadow with black glListBase(con->baseFontShadow); glColor4f(0, 0, 0, 0.5); @@ -407,7 +407,7 @@ void mjr_textActual(int font, const char* txt, const mjrContext* con, // regular text (normal or big) else { - glListBase(font==mjFONT_BIG ? con->baseFontBig : con->baseFontNormal); + glListBase(font == mjFONT_BIG ? con->baseFontBig : con->baseFontNormal); glColor4f(r, g, b, 1); glRasterPos3f(x, y, z); glCallLists((GLsizei)strlen(txt), GL_UNSIGNED_BYTE, txt); @@ -433,16 +433,16 @@ static int draw_overlay(int font, mjrRect viewport, int skip, int gridpos, float red, float green, float blue, const char* overlay, const mjrContext* con) { - int pos, ncthis, nc, nr, W, H, flg_big = (font==mjFONT_BIG); + int pos, ncthis, nc, nr, W, H, flg_big = (font == mjFONT_BIG); int PAD = 5, sz = mjMIN(mjMAXOVERLAY, (int)strlen(overlay)); char text[mjMAXOVERLAY]; // count rows and columns of text rectangle in pixels nr = flg_big ? con->charHeightBig : con->charHeight; ncthis = nc = 0; - for (int i=0; icharWidthBig[(unsigned char)overlay[i]] : con->charWidth[(unsigned char)overlay[i]]; nc = mjMAX(nc, ncthis); @@ -503,10 +503,10 @@ static int draw_overlay(int font, mjrRect viewport, int skip, int gridpos, // draw text line by line nr = flg_big ? con->charHeightBig : con->charHeight; pos = 0; - for (int i=0; icurrentBuffer==mjFB_WINDOW) { + if (con->currentBuffer == mjFB_WINDOW) { glGetIntegerv(GL_SCISSOR_BOX, dims); res.width = dims[2]; res.height = dims[3]; @@ -589,7 +589,7 @@ mjrRect mjr_maxViewport(const mjrContext* con) { // draw rectangle void mjr_rectangle(mjrRect viewport, float r, float g, float b, float a) { // empty viewport: nothing to do - if (viewport.width<=0 || viewport.height<=0) { + if (viewport.width <= 0 || viewport.height <= 0) { return; } @@ -616,7 +616,7 @@ void mjr_label(mjrRect viewport, int font, const char* txt, float r, float g, float b, float a, float rt, float gt, float bt, const mjrContext* con) { // empty viewport: nothing to do - if (viewport.width<=0 || viewport.height<=0) { + if (viewport.width <= 0 || viewport.height <= 0) { return; } @@ -658,7 +658,7 @@ void mjr_label(mjrRect viewport, int font, const char* txt, if (txt && con->rangeFont) { // compute width int i = 0, width = 0; - if (font==mjFONT_BIG) { + if (font == mjFONT_BIG) { while (txt[i]) { width += con->charWidthBig[(unsigned char)txt[i++]]; } @@ -670,10 +670,10 @@ void mjr_label(mjrRect viewport, int font, const char* txt, // compute center int cx = (W - width)/2; - int cy = (H - (font==mjFONT_BIG ? con->charHeightBig : con->charHeight))/2; + int cy = (H - (font == mjFONT_BIG ? con->charHeightBig : con->charHeight))/2; // draw - glListBase(font==mjFONT_BIG ? con->baseFontBig : con->baseFontNormal); + glListBase(font == mjFONT_BIG ? con->baseFontBig : con->baseFontNormal); glColor3f(rt, gt, bt); glRasterPos2i(mjMAX(0, cx), cy); glCallLists((GLsizei)strlen(txt), GL_UNSIGNED_BYTE, txt); @@ -691,15 +691,15 @@ static void maketext(const char* format, char* txt, float num, int txt_sz) { // locate trailing zeros i = strlen(txt); - while (i>0 && txt[i-1]=='0') { + while (i > 0 && txt[i-1] == '0') { i--; } - if (i<=1) { + if (i <= 1) { return; } // strip if preceding char is '.' - if (txt[i-1]=='.') { + if (txt[i-1] == '.') { txt[i-1] = 0; } @@ -707,12 +707,12 @@ static void maketext(const char* format, char* txt, float num, int txt_sz) { else { // find regular preceding digits j = i-1; - while (j>=0 && txt[j]>='0' && txt[j]<='9') { + while (j >= 0 && txt[j] >= '0' && txt[j] <= '9') { j--; } // '.' found: strip - if (j>=0 && txt[j]=='.') { + if (j >= 0 && txt[j] == '.') { txt[i] = 0; } } @@ -743,7 +743,7 @@ void mjr_figure(mjrRect viewport, mjvFigure* fig, const mjrContext* con) { char datatxt[STRING_BUFSIZE]; // empty viewport: nothing to do - if (viewport.width<=0 || viewport.height<=0) { + if (viewport.width <= 0 || viewport.height <= 0) { return; } @@ -763,12 +763,12 @@ void mjr_figure(mjrRect viewport, mjvFigure* fig, const mjrContext* con) { glDisable(GL_BLEND); // determine range along (x,y) - for (int axis=0; axis<2; axis++) { + for (int axis=0; axis < 2; axis++) { // init ranges, set flag range[axis][0] = fig->range[axis][0]; range[axis][1] = fig->range[axis][1]; int flg; - if (fig->range[axis][0]range[axis][1]) { + if (fig->range[axis][0] < fig->range[axis][1]) { flg = 1; } else { flg = 0; @@ -776,8 +776,8 @@ void mjr_figure(mjrRect viewport, mjvFigure* fig, const mjrContext* con) { // determine range: scan line data, find min and max if (!flg || fig->flg_extend) { - for (int n=0; nlinepnt[n]; i++) { + for (int n=0; n < mjMAXLINE; n++) { + for (int i=0; i < fig->linepnt[n]; i++) { // get data float ldata = fig->linedata[n][2*i+axis]; @@ -796,12 +796,12 @@ void mjr_figure(mjrRect viewport, mjvFigure* fig, const mjrContext* con) { // otherwise regular update else { // update minimum - if (range[axis][0]>ldata) { + if (range[axis][0] > ldata) { range[axis][0] = ldata; } // update maximum - if (range[axis][1]title[0]) { // find address of selected subplot title int subadr = 0, subcnt = 0; - while (subcntsubplot && subadr<1000 && fig->title[subadr]) { + while (subcnt < fig->subplot && subadr < 1000 && fig->title[subadr]) { // skip non-space - while (subadr<1000 && fig->title[subadr] && fig->title[subadr]!=' ') { + while (subadr < 1000 && fig->title[subadr] && fig->title[subadr] != ' ') { subadr++; } // skip space, count int cntspace = 0; - while (subadr<1000 && fig->title[subadr]==' ') { + while (subadr < 1000 && fig->title[subadr] == ' ') { subadr++; cntspace++; } // count subplot if 2+ spaces - if (cntspace>1) { + if (cntspace > 1) { subcnt++; } } // find length of selected subplot title (skip non-space or single space) int sublen = 0; - while ((subadr+sublen<1000 && fig->title[subadr+sublen] && fig->title[subadr+sublen]!=' ') || - (subadr+sublen+1<1000 && fig->title[subadr+sublen+1] && fig->title[subadr+sublen+1]!=' ')) { + while ((subadr+sublen < 1000 && + fig->title[subadr+sublen] && + fig->title[subadr+sublen] != ' ') || + (subadr+sublen+1 < 1000 && fig->title[subadr+sublen+1] && + fig->title[subadr+sublen+1] != ' ')) { sublen++; } @@ -876,7 +879,7 @@ void mjr_figure(mjrRect viewport, mjvFigure* fig, const mjrContext* con) { // get title size int sx_title = 0; - for (int i=subadr; icharWidth[(unsigned char)fig->title[i]]; } @@ -885,15 +888,15 @@ void mjr_figure(mjrRect viewport, mjvFigure* fig, const mjrContext* con) { // compute left edge and address of extended title int left1 = left, subadr1 = subadr; - while (subadr1>0 && left1>=con->charWidth[(unsigned char)fig->title[subadr1-1]]) { + while (subadr1 > 0 && left1 >= con->charWidth[(unsigned char)fig->title[subadr1-1]]) { left1 -= con->charWidth[(unsigned char)fig->title[subadr1-1]]; subadr1--; } // compute right edge and length of extended title int sublen1 = 0, right1 = left1; - while (sublen1+subadr1<1000 && fig->title[subadr1+sublen1] && - right1+con->charWidth[(unsigned char)fig->title[subadr1+sublen1]]title[subadr1+sublen1] && + right1+con->charWidth[(unsigned char)fig->title[subadr1+sublen1]] < viewport.width) { right1 += con->charWidth[(unsigned char)fig->title[subadr1+sublen1]]; sublen1++; } @@ -932,7 +935,7 @@ void mjr_figure(mjrRect viewport, mjvFigure* fig, const mjrContext* con) { // reduce viewport viewport.bottom += (sy_label ? sy_label + PAD/2 : 0); viewport.height -= (sy_label ? sy_label + PAD/2 : 0) + (sy_title ? sy_title + PAD : 0); - if (viewport.width<=0 || viewport.height<=0) { + if (viewport.width <= 0 || viewport.height <= 0) { return; } glViewport(viewport.left, viewport.bottom, viewport.width, viewport.height); @@ -944,7 +947,7 @@ void mjr_figure(mjrRect viewport, mjvFigure* fig, const mjrContext* con) { } // draw optional tick labels, reduce viewport - if (fig->gridsize[0]>1 && fig->gridsize[1]>1) { + if (fig->gridsize[0] > 1 && fig->gridsize[1] > 1) { char txt[STRING_BUFSIZE]; // determine xtick height @@ -965,7 +968,7 @@ void mjr_figure(mjrRect viewport, mjvFigure* fig, const mjrContext* con) { int n = mjMIN(20, fig->gridsize[1]); // generate all strings, find max width - for (int i=0; iyformat, txt, range[1][0] + (range[1][1]-range[1][0])*i/(float)(n-1), txt_sz); @@ -981,7 +984,7 @@ void mjr_figure(mjrRect viewport, mjvFigure* fig, const mjrContext* con) { int n = mjMIN(20, fig->gridsize[0]); // process ticks - for (int i=0; itextrgb[0], fig->textrgb[0], fig->textrgb[0]); @@ -1006,7 +1009,7 @@ void mjr_figure(mjrRect viewport, mjvFigure* fig, const mjrContext* con) { int n = mjMIN(20, fig->gridsize[1]); // process ticks - for (int i=0; igridsize[0]>1 && fig->gridsize[1]>1) { + if (fig->gridsize[0] > 1 && fig->gridsize[1] > 1) { // common GL state glVertexPointer(2, GL_FLOAT, 0, griddata); glColor3fv(fig->gridrgb); @@ -1075,7 +1078,7 @@ void mjr_figure(mjrRect viewport, mjvFigure* fig, const mjrContext* con) { // prepare vertical lines int n = mjMIN(20, fig->gridsize[0]); - for (int i=0; igridsize[1]); - for (int i=0; i=0; n--) + for (int n=mjMAXLINE-1; n >= 0; n--) if (fig->linepnt[n]) { // GL state glVertexPointer(2, GL_FLOAT, 0, fig->linedata[n]); @@ -1134,14 +1137,14 @@ void mjr_figure(mjrRect viewport, mjvFigure* fig, const mjrContext* con) { // set matrix projection in pixels glMatrixMode(GL_PROJECTION); glLoadIdentity(); - if (viewport.width<=1 || viewport.height<=1) { + if (viewport.width <= 1 || viewport.height <= 1) { return; } glOrtho(0, viewport.width-1, 0, viewport.height-1, -1, 1); // find legend size int lw = 0, lh = 0, cnt = 0; - for (int n=fig->legendoffset; nlegendoffset; n < mjMAXLINE; n++) { if (fig->linename[n][0]) { // max width, accumulate height lw = mjMAX(lw, textwidth(con, fig->linename[n])); @@ -1151,7 +1154,7 @@ void mjr_figure(mjrRect viewport, mjvFigure* fig, const mjrContext* con) { cnt++; // too big: correct and break - if (lh+2*PAD >=viewport.height) { + if (lh+2*PAD >= viewport.height) { cnt--; lh -= con->charHeight; break; @@ -1163,10 +1166,10 @@ void mjr_figure(mjrRect viewport, mjvFigure* fig, const mjrContext* con) { int hcnt = -1; int hx = fig->highlight[0] - viewport.left; int hy = fig->highlight[1] - viewport.bottom; - if (hx>=viewport.width-PAD-lw && - hx<=viewport.width-PAD && - hy>=viewport.height-PAD-lh && - hy<=viewport.height-PAD) { + if (hx >= viewport.width-PAD-lw && + hx <= viewport.width-PAD && + hy >= viewport.height-PAD-lh && + hy <= viewport.height-PAD) { hcnt = (viewport.height-PAD-hy) / con->charHeight; } @@ -1185,7 +1188,7 @@ void mjr_figure(mjrRect viewport, mjvFigure* fig, const mjrContext* con) { // find named lines and draw text cnt = 0; - for (int n=fig->legendoffset; nlegendoffset; n < mjMAXLINE; n++) { if (fig->linename[n][0]) { // get width int width = textwidth(con, fig->linename[n]); @@ -1196,7 +1199,7 @@ void mjr_figure(mjrRect viewport, mjvFigure* fig, const mjrContext* con) { fig->linergb[n][0], fig->linergb[n][1], fig->linergb[n][2]); // save hlight - if (hcnt==cnt) { + if (hcnt == cnt) { hlight = n; } @@ -1212,7 +1215,7 @@ void mjr_figure(mjrRect viewport, mjvFigure* fig, const mjrContext* con) { } // draw highlight - if (hlight>=0 && hlight= 0 && hlight < mjMAXLINE) { // line-rendering projection glMatrixMode(GL_PROJECTION); glLoadIdentity(); @@ -1230,8 +1233,8 @@ void mjr_figure(mjrRect viewport, mjvFigure* fig, const mjrContext* con) { // find nearest x-value int ibest = -1; float best = 0; - for (int i=0; ilinepnt[hlight]; i++) { - if (ibest<0 || best>fabs(fig->selection-fig->linedata[hlight][2*i])) { + for (int i=0; i < fig->linepnt[hlight]; i++) { + if (ibest < 0 || best > fabs(fig->selection-fig->linedata[hlight][2*i])) { ibest = i; best = fabs(fig->selection-fig->linedata[hlight][2*i]); } diff --git a/src/render/render_gl3.c b/src/render/render_gl3.c index 92deec68..69a20f23 100644 --- a/src/render/render_gl3.c +++ b/src/render/render_gl3.c @@ -44,9 +44,9 @@ static int isBehind(const float* headpos, const float* pos, const float* mat) { // check if geom is reflective static int isReflective(const mjvGeom* geom) { - return ((geom->type==mjGEOM_PLANE || geom->type==mjGEOM_BOX) && + return ((geom->type == mjGEOM_PLANE || geom->type == mjGEOM_BOX) && !geom->transparent && - (geom->reflectance>0)); + (geom->reflectance > 0)); } @@ -64,7 +64,7 @@ static void settexture(int type, int state, const mjrContext* con, const mjvGeom float plane[4], scl[2]; // shadow - if (type==mjtexSHADOW) { + if (type == mjtexSHADOW) { // enable if (state) { glActiveTexture(GL_TEXTURE1); @@ -88,7 +88,7 @@ static void settexture(int type, int state, const mjrContext* con, const mjvGeom } // explicit texture coordinates - else if (type==mjtexREGULAR && geom->texcoord) { + else if (type == mjtexREGULAR && geom->texcoord) { // enable if (state) { glActiveTexture(GL_TEXTURE0); @@ -104,7 +104,7 @@ static void settexture(int type, int state, const mjrContext* con, const mjvGeom } // 2D - else if (type==mjtexREGULAR && con->textureType[geom->texid]==mjTEXTURE_2D) { + else if (type == mjtexREGULAR && con->textureType[geom->texid] == mjTEXTURE_2D) { // enable if (state) { glActiveTexture(GL_TEXTURE0); @@ -116,23 +116,23 @@ static void settexture(int type, int state, const mjrContext* con, const mjvGeom // determine scaling, adjust for pre-scaled geoms scl[0] = geom->texrepeat[0]; scl[1] = geom->texrepeat[1]; - if (geom->dataid>=0) { - if (geom->size[0]>0) { + if (geom->dataid >= 0) { + if (geom->size[0] > 0) { scl[0] = scl[0] / mju_max(mjMINVAL, geom->size[0]); } - if (geom->size[1]>0) { + if (geom->size[1] > 0) { scl[1] = scl[1] / mju_max(mjMINVAL, geom->size[1]); } } // uniform: repeat relative to spatial units rather than object if (geom->texuniform) { - if (geom->size[0]>0) { + if (geom->size[0] > 0) { scl[0] = scl[0] * geom->size[0]; } - if (geom->size[1]>0) { + if (geom->size[1] > 0) { scl[1] = scl[1] * geom->size[1]; } } @@ -165,7 +165,7 @@ static void settexture(int type, int state, const mjrContext* con, const mjvGeom glBindTexture(GL_TEXTURE_CUBE_MAP, con->texture[geom->texid]); // set mapping : cube - if (type==mjtexREGULAR) { + if (type == mjtexREGULAR) { mjr_setf4(plane, geom->texuniform ? geom->size[0] : 1, 0, 0, 0); glTexGenfv(GL_S, GL_OBJECT_PLANE, plane); mjr_setf4(plane, 0, geom->texuniform ? geom->size[1] : 1, 0, 0); @@ -217,7 +217,7 @@ static void renderGeom(const mjvGeom* geom, int mode, const float* headpos, int behind, whichface, lighting; // lines to do not cast shadows - if (mode==mjrRND_SHADOWCAST && geom->type==mjGEOM_LINE) { + if (mode == mjrRND_SHADOWCAST && geom->type == mjGEOM_LINE) { return; } @@ -233,18 +233,18 @@ static void renderGeom(const mjvGeom* geom, int mode, const float* headpos, behind = isBehind(headpos, geom->pos, geom->mat); // enable texture in normal and shadowmap mode - if (geom->texid>=0 && con->ntexture>0 && - (mode==mjrRND_NORMAL || mode==mjrRND_SHADOWMAP)) { + if (geom->texid >= 0 && con->ntexture > 0 && + (mode == mjrRND_NORMAL || mode == mjrRND_SHADOWMAP)) { settexture(mjtexREGULAR, 1, con, geom); } // make plane more transparent from the back - if (geom->type==mjGEOM_PLANE && behind && mode==mjrRND_NORMAL) { + if (geom->type == mjGEOM_PLANE && behind && mode == mjrRND_NORMAL) { rgba[3] *= 0.3; } // set material emission: none in shadow mode - if (mode==mjrRND_NORMAL) { + if (mode == mjrRND_NORMAL) { mjr_setf4(temp, geom->emission*rgba[0], geom->emission*rgba[1], @@ -261,9 +261,9 @@ static void renderGeom(const mjvGeom* geom, int mode, const float* headpos, glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, temp); // set color for segmentation mode - if (mode>=mjrRND_SEGMENT) { + if (mode >= mjrRND_SEGMENT) { // segid color - if (mode==mjrRND_IDCOLOR) { + if (mode == mjrRND_IDCOLOR) { unsigned char seg[4] = { (geom->segid+1) & 0xFF, ((geom->segid+1)>>8) & 0xFF, @@ -287,7 +287,7 @@ static void renderGeom(const mjvGeom* geom, int mode, const float* headpos, // apply coordinate transformation, except for skin which is global glPushMatrix(); - if (geom->type!=mjGEOM_SKIN) { + if (geom->type != mjGEOM_SKIN) { glTranslatef(geom->pos[0], geom->pos[1], geom->pos[2]); glMultMatrixf(mat); } @@ -297,13 +297,13 @@ static void renderGeom(const mjvGeom* geom, int mode, const float* headpos, case mjGEOM_PLANE: // plane if (behind) { glGetIntegerv(GL_CULL_FACE_MODE, &whichface); - if (whichface==GL_BACK) { + if (whichface == GL_BACK) { glCullFace(GL_FRONT); } } // use plane-specific displaylist if available - if (geom->dataid>=0) { + if (geom->dataid >= 0) { glCallList(con->basePlane + geom->dataid+1); } @@ -313,13 +313,13 @@ static void renderGeom(const mjvGeom* geom, int mode, const float* headpos, glCallList(con->basePlane); } - if (behind && whichface==GL_BACK) { + if (behind && whichface == GL_BACK) { glCullFace(GL_BACK); } break; case mjGEOM_HFIELD: // height field - if (geom->dataid>=0) { + if (geom->dataid >= 0) { glCallList(con->baseHField + geom->dataid); } break; @@ -356,7 +356,7 @@ static void renderGeom(const mjvGeom* geom, int mode, const float* headpos, break; case mjGEOM_MESH: // mesh - if (geom->dataid>=0) { + if (geom->dataid >= 0) { glCallList(con->baseMesh + geom->dataid); } break; @@ -443,8 +443,8 @@ static void renderGeom(const mjvGeom* geom, int mode, const float* headpos, glPopMatrix(); // disable texture if enabled - if (geom->texid>=0 && con->ntexture>0 && - (mode==mjrRND_NORMAL || mode==mjrRND_SHADOWMAP)) { + if (geom->texid >= 0 && con->ntexture > 0 && + (mode == mjrRND_NORMAL || mode == mjrRND_SHADOWMAP)) { settexture(mjtexREGULAR, 0, con, geom); } } @@ -456,7 +456,7 @@ void renderGeomReflection(int id, float reflectance, float headpos[3], float old_rgb[3]; // save rgb, modulate rgb by this->reflectance - for (int k=0; k<3; k++) { + for (int k=0; k < 3; k++) { old_rgb[k] = scn->geoms[id].rgba[k]; scn->geoms[id].rgba[k] *= reflectance; } @@ -465,7 +465,7 @@ void renderGeomReflection(int id, float reflectance, float headpos[3], renderGeom(scn->geoms+id, mjrRND_NORMAL, headpos, scn, con); // restore rgb - for (int k=0; k<3; k++) { + for (int k=0; k < 3; k++) { scn->geoms[id].rgba[k] = old_rgb[k]; } } @@ -532,14 +532,14 @@ static void initLights(mjvScene* scn, const float* headpos, const float* gazedir // headlight: set pos and dir if (scn->lights[0].headlight) { - for (int i=0; i<3; i++) { + for (int i=0; i < 3; i++) { scn->lights[0].pos[i] = headpos[i]; scn->lights[0].dir[i] = gazedir[i]; } } // set light properties - for (int i=0; inlight; i++) { + for (int i=0; i < scn->nlight; i++) { // colors glLightfv(GL_LIGHT0+i, GL_AMBIENT, scn->lights[i].ambient); glLightfv(GL_LIGHT0+i, GL_DIFFUSE, scn->lights[i].diffuse); @@ -565,7 +565,7 @@ static void initLights(mjvScene* scn, const float* headpos, const float* gazedir } // disable all lights (enable selectively in render) - for (int i=0; inlight; i++) { + for (int i=0; i < scn->nlight; i++) { glDisable(GL_LIGHT0+i); } } @@ -578,7 +578,7 @@ static void setView(int view, mjrRect viewport, const mjvScene* scn, const mjrCo mjvGLCamera cam; // copy specified camera for stereo, average for mono (view = -1) - if (view>=0) { + if (view >= 0) { cam = scn->camera[view]; } else { cam = mjv_averageCamera(scn->camera, scn->camera+1); @@ -674,7 +674,7 @@ void mjr_render(mjrRect viewport, mjvScene* scn, const mjrContext* con) { mjvLight *thislight; // empty viewport: nothing to do - if (viewport.width<=0 || viewport.height<=0) { + if (viewport.width <= 0 || viewport.height <= 0) { return; } @@ -682,7 +682,7 @@ void mjr_render(mjrRect viewport, mjvScene* scn, const mjrContext* con) { cam = mjv_averageCamera(scn->camera, scn->camera+1); // check znear - if (cam.frustum_nearngeom) { mju_error("mjvScene frustum_near too small in mjr_render"); @@ -695,7 +695,7 @@ void mjr_render(mjrRect viewport, mjvScene* scn, const mjrContext* con) { } // upload dynamic skin data to GPU - for (int i=0; inskin; i++) { + for (int i=0; i < scn->nskin; i++) { // upload positions to VBO glBindBuffer(GL_ARRAY_BUFFER, con->skinvertVBO[i]); glBufferData(GL_ARRAY_BUFFER, @@ -712,7 +712,7 @@ void mjr_render(mjrRect viewport, mjvScene* scn, const mjrContext* con) { } // determine drawbuffer; may be changed by stereo later - if (con->currentBuffer==mjFB_WINDOW) { + if (con->currentBuffer == mjFB_WINDOW) { drawbuffer = (con->windowDoublebuffer ? GL_BACK : GL_FRONT); } else { drawbuffer = GL_COLOR_ATTACHMENT0; @@ -728,12 +728,12 @@ void mjr_render(mjrRect viewport, mjvScene* scn, const mjrContext* con) { // make list of transparent geoms nt = 0; - for (int i=0; igeoms + i; - if (thisgeom->rgba[3]<0.995 || (thisgeom->type==mjGEOM_PLANE && - isBehind(headpos, thisgeom->pos, thisgeom->mat))) { + if (thisgeom->rgba[3] < 0.995 || (thisgeom->type == mjGEOM_PLANE && + isBehind(headpos, thisgeom->pos, thisgeom->mat))) { // include index in list scn->geomorder[nt++] = i; thisgeom->transparent = 1; @@ -747,7 +747,7 @@ void mjr_render(mjrRect viewport, mjvScene* scn, const mjrContext* con) { thisgeom->camdist -= mjv_rbound(thisgeom); // plane always far away - if (thisgeom->type==mjGEOM_PLANE) { + if (thisgeom->type == mjGEOM_PLANE) { thisgeom->camdist = 1E+10; } } else { @@ -760,7 +760,7 @@ void mjr_render(mjrRect viewport, mjvScene* scn, const mjrContext* con) { // allow only one reflective geom int j = 0; - for (int i=0; igeoms[i].reflectance = 0; } else if (isReflective(scn->geoms + i)) { @@ -782,19 +782,20 @@ void mjr_render(mjrRect viewport, mjvScene* scn, const mjrContext* con) { // determine stereo; quadbuffered reverts to sidebyside if hardware not available stereo = scn->stereo; - if (stereo==mjSTEREO_QUADBUFFERED && (con->currentBuffer!=mjFB_WINDOW || !con->windowStereo)) { + if (stereo == mjSTEREO_QUADBUFFERED && + (con->currentBuffer != mjFB_WINDOW || !con->windowStereo)) { stereo = mjSTEREO_SIDEBYSIDE; } // SIDEBYSIDE: reduce viewport - if (stereo==mjSTEREO_SIDEBYSIDE) { + if (stereo == mjSTEREO_SIDEBYSIDE) { viewport.width /= 2; } // render with stereo - for (int view=(stereo?0:-1); view<(stereo?2:0); view++) { + for (int view=(stereo?0:-1); view < (stereo?2:0); view++) { // change drawbuffer for QUADBUFFERED stereo - if (stereo==mjSTEREO_QUADBUFFERED) { + if (stereo == mjSTEREO_QUADBUFFERED) { if (con->windowDoublebuffer) { drawbuffer = (view ? GL_BACK_RIGHT : GL_BACK_LEFT); } else { @@ -809,7 +810,7 @@ void mjr_render(mjrRect viewport, mjvScene* scn, const mjrContext* con) { } // change viewport for SIDEBYSIDE stereo - else if (stereo==mjSTEREO_SIDEBYSIDE) { + else if (stereo == mjSTEREO_SIDEBYSIDE) { // move viewport to the right for view 1 if (view) { viewport.left += viewport.width; @@ -834,8 +835,8 @@ void mjr_render(mjrRect viewport, mjvScene* scn, const mjrContext* con) { glDisable(GL_MULTISAMPLE); // render all geoms - for (int i=0; igeoms[i].segid>=0) { + for (int i=0; i < ngeom; i++) { + if (scn->geoms[i].segid >= 0) { renderGeom(scn->geoms+i, scn->flags[mjRND_IDCOLOR] ? mjrRND_IDCOLOR : mjrRND_SEGMENT, headpos, scn, con); @@ -850,13 +851,13 @@ void mjr_render(mjrRect viewport, mjvScene* scn, const mjrContext* con) { // plane and box reflection rendering if (scn->flags[mjRND_REFLECTION]) { - for (int i=0; igeoms + i; if (isReflective(thisgeom)) { // if box, replace with temporary plane matching Z+ box side - if (thisgeom->type==mjGEOM_BOX) { + if (thisgeom->type == mjGEOM_BOX) { // copy and convert to plane tempgeom = *thisgeom; tempgeom.type = mjGEOM_PLANE; @@ -911,14 +912,14 @@ void mjr_render(mjrRect viewport, mjvScene* scn, const mjrContext* con) { mjr_reflect(thisgeom->pos, thisgeom->mat); // set light position and direction, enable - for (int j=0; jlights+j, j); glEnable(GL_LIGHT0+j); } // render reflected non-transparent geoms, except for thisgeom - for (int j=0; jgeoms[j].transparent && i!=j) { + for (int j=0; j < ngeom; j++) { + if (!scn->geoms[j].transparent && i != j) { renderGeomReflection(j, thisgeom->reflectance, headpos, scn, con); } } @@ -931,14 +932,14 @@ void mjr_render(mjrRect viewport, mjvScene* scn, const mjrContext* con) { } else { glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); } - for (int j=0; jgeomorder[j]) { + for (int j=0; j < nt; j++) { + if (i != scn->geomorder[j]) { renderGeomReflection(scn->geomorder[j], thisgeom->reflectance, headpos, scn, con); } } if (!scn->flags[mjRND_ADDITIVE]) { - for (int j=nt-1; j>=0; j--) { - if (i!=scn->geomorder[j]) { + for (int j=nt-1; j >= 0; j--) { + if (i != scn->geomorder[j]) { renderGeomReflection(scn->geomorder[j], thisgeom->reflectance, headpos, scn, con); } } @@ -947,7 +948,7 @@ void mjr_render(mjrRect viewport, mjvScene* scn, const mjrContext* con) { glDisable(GL_BLEND); // disable lights - for (int j=0; jlights + i; adjustLight(thislight, i); @@ -978,21 +979,21 @@ void mjr_render(mjrRect viewport, mjvScene* scn, const mjrContext* con) { // (only one allowed, more would result in weird transparency) glEnable(GL_BLEND); glBlendFunc(GL_ONE, GL_ONE); - for (int i=0; igeoms+i)) { renderGeom(scn->geoms+i, mjrRND_NORMAL, headpos, scn, con); } glDisable(GL_BLEND); // render remaining opaque geoms - for (int i=0; igeoms[i].transparent && !isReflective(scn->geoms+i)) { renderGeom(scn->geoms+i, mjrRND_NORMAL, headpos, scn, con); } } // disable lights - for (int i=0; iflags[mjRND_SHADOW] && con->shadowFBO) { - for (int i=0; ilights + i; @@ -1042,13 +1043,13 @@ void mjr_render(mjrRect viewport, mjvScene* scn, const mjrContext* con) { glColorMask(0, 0, 0, 0); // render all geoms to depth texture - for (int j=0; jgeoms+j, mjrRND_SHADOWCAST, headpos, scn, con); } // restore OpenGL settings glBindFramebuffer(GL_FRAMEBUFFER, - con->currentBuffer==mjFB_WINDOW ? 0 : con->offFBO); + con->currentBuffer == mjFB_WINDOW ? 0 : con->offFBO); glDrawBuffer(drawbuffer); glViewport(viewport.left, viewport.bottom, viewport.width, viewport.height); glCullFace(GL_BACK); @@ -1082,7 +1083,7 @@ void mjr_render(mjrRect viewport, mjvScene* scn, const mjrContext* con) { glEnable(GL_LIGHT0+i); // only opaque geoms accept shadows - for (int j=0; jgeoms[j].transparent) { renderGeom(scn->geoms+j, mjrRND_SHADOWMAP, headpos, scn, con); } @@ -1108,8 +1109,8 @@ void mjr_render(mjrRect viewport, mjvScene* scn, const mjrContext* con) { glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); // find skybox texture - for (int i=0; intexture; i++) { - if (con->textureType[i]==mjTEXTURE_SKYBOX) { + for (int i=0; i < con->ntexture; i++) { + if (con->textureType[i] == mjTEXTURE_SKYBOX) { // save first skybox texture id in tempgeom memset(&tempgeom, 0, sizeof(mjvGeom)); tempgeom.texid = i; @@ -1136,10 +1137,10 @@ void mjr_render(mjrRect viewport, mjvScene* scn, const mjrContext* con) { // haze if (scn->flags[mjRND_HAZE]) { - for (int j=0; jgeoms[j].type==mjGEOM_PLANE && - scn->geoms[j].size[0]==0 && - scn->geoms[j].size[1]==0) { + for (int j=0; j < ngeom; j++) { + if (scn->geoms[j].type == mjGEOM_PLANE && + scn->geoms[j].size[0] == 0 && + scn->geoms[j].size[1] == 0) { // compute headpos elevation above plane float* mat3 = scn->geoms[j].mat; float elevation = ((headpos[0]-scn->geoms[j].pos[0])*mat3[2] + @@ -1148,7 +1149,7 @@ void mjr_render(mjrRect viewport, mjvScene* scn, const mjrContext* con) { skyboxdst; // below plane: no rendering - if (elevation<0) { + if (elevation < 0) { break; } @@ -1195,7 +1196,7 @@ void mjr_render(mjrRect viewport, mjvScene* scn, const mjrContext* con) { //------------------------------------ transparent regular rendering // enable lights - for (int i=0; igeoms+scn->geomorder[i], mjrRND_NORMAL, headpos, scn, con); } // render transparent geoms: back to front, if not additive if (!scn->flags[mjRND_ADDITIVE]) { - for (int i=nt-1; i>=0; i--) { + for (int i=nt-1; i >= 0; i--) { renderGeom(scn->geoms+scn->geomorder[i], mjrRND_NORMAL, headpos, scn, con); } } @@ -1225,7 +1226,7 @@ void mjr_render(mjrRect viewport, mjvScene* scn, const mjrContext* con) { glDisable(GL_BLEND); // disable lights - for (int i=0; igeoms + i; if (thisgeom->label[0]) { diff --git a/src/render/render_util.c b/src/render/render_util.c index dbefc2c8..11c010b7 100644 --- a/src/render/render_util.c +++ b/src/render/render_util.c @@ -54,10 +54,10 @@ void mjr_setf3(float* vec, float f0, float f1, float f2) { // multiply 4-by-4 matrices, column-major void mjr_mulMat44(float* res, const float* A, const float* B) { - for (int r=0; r<4; r++) { - for (int c=0; c<4; c++) { + for (int r=0; r < 4; r++) { + for (int c=0; c < 4; c++) { res[r+4*c] = 0; - for (int i=0; i<4; i++) { + for (int i=0; i < 4; i++) { res[r+4*c] += A[r+4*i]*B[i+4*c]; } } @@ -89,7 +89,7 @@ void mjr_crossVec(float* a, const float* b, const float* c) { void mjr_normalizeVec(float* v) { float scl, len = sqrtf(v[0]*v[0] + v[1]*v[1] + v[2]*v[2]); - if (len<1E-10f) { + if (len < 1E-10f) { v[0] = 0; v[1] = 0; v[2] = 1; @@ -111,7 +111,7 @@ void mjr_orthoVec(float* res, const float* v) { mjr_crossVec(res, v, other); // success - if (res[0]*res[0]+res[1]*res[1]+res[2]*res[2]>0.01) { + if (res[0]*res[0]+res[1]*res[1]+res[2]*res[2] > 0.01) { mjr_normalizeVec(res); return; } @@ -134,9 +134,9 @@ float mjr_dotVec(const float* a, const float* b) { // multiply 4x4 matrix by vector; column-major (OpenGL format) void mjr_multiply4(float* res, const float* mat, const float* vec) { - for (int i=0; i<4; i++) { + for (int i=0; i < 4; i++) { res[i] = 0; - for (int j=0; j<4; j++) { + for (int j=0; j < 4; j++) { res[i] += mat[i+4*j]*vec[j]; } } @@ -207,8 +207,8 @@ void mjr_reflect(const float* pos, const float* mat) { v[2] = mat[8]; // compute outer product v*vT - for (int i=0; i<3; i++) { - for (int j=0; j<3; j++) { + for (int i=0; i < 3; i++) { + for (int j=0; j < 3; j++) { vvt[3*i+j] = v[i]*v[j]; } } @@ -273,11 +273,11 @@ void mjr_transform(const float* translate, const float* rotate, float scale) { // Find first rectangle containing mouse, -1: not found. int mjr_findRect(int x, int y, int nrect, const mjrRect* rect) { // scan - for (int i=0; i=rect[i].left && - x=rect[i].bottom && - y= rect[i].left && + x < rect[i].left+rect[i].width && + y >= rect[i].bottom && + y < rect[i].bottom+rect[i].height) { return i; } } diff --git a/src/ui/ui_main.c b/src/ui/ui_main.c index b602255a..523d9cca 100644 --- a/src/ui/ui_main.c +++ b/src/ui/ui_main.c @@ -201,12 +201,12 @@ static int textwidth(const char* text, const mjrContext* con, int limit) { int i = 0, width = 0; // zero limit - if (limit==0) { + if (limit == 0) { return 0; } // add character widths - while (text[i] && (limit<1 || icharWidth[(unsigned char)text[i++]]; } @@ -222,7 +222,7 @@ static void drawtext(const char* txt, int x, int y, int maxwidth, int len = 0, width = 0; while (txt[len]) { width += con->charWidth[(unsigned char)txt[len]]; - if (width>=maxwidth) { + if (width >= maxwidth) { break; } else { len++; @@ -283,7 +283,7 @@ static void drawoval(mjrRect rect, const float* rgb, const float* rgbback, const int ndivide = 20; // require horizontal - if (rect.height>rect.width) { + if (rect.height > rect.width) { return; } @@ -297,13 +297,13 @@ static void drawoval(mjrRect rect, const float* rgb, const float* rgbback, glBegin(GL_POLYGON); // draw left half-circle - for (int i=0; i<=ndivide; i++) { + for (int i=0; i <= ndivide; i++) { double angle = mjPI * (0.5 + (double)i / (double)ndivide); glVertex2d(lcenter[0] + radius*cos(angle), lcenter[1] + radius*sin(angle)); } // draw right half-circle - for (int i=0; i<=ndivide; i++) { + for (int i=0; i <= ndivide; i++) { double angle = mjPI * (1.5 + (double)i / (double)ndivide); glVertex2d(rcenter[0] + radius*cos(angle), rcenter[1] + radius*sin(angle)); } @@ -318,13 +318,13 @@ static void drawoval(mjrRect rect, const float* rgb, const float* rgbback, glBegin(GL_POLYGON); // draw left half-circle - for (int i=0; i<=ndivide; i++) { + for (int i=0; i <= ndivide; i++) { double angle = mjPI * (0.5 + (double)i / (double)ndivide); glVertex2d(lcenter[0] + radius*cos(angle), lcenter[1] + radius*sin(angle)); } // draw right half-circle - for (int i=0; i<=ndivide; i++) { + for (int i=0; i <= ndivide; i++) { double angle = mjPI * (1.5 + (double)i / (double)ndivide); glVertex2d(rcenter[0] + radius*cos(angle), rcenter[1] + radius*sin(angle)); } @@ -377,13 +377,13 @@ static void drawsymbol(mjrRect rect, int flg_open, int flg_sep, (ui->color.master[0] + ui->color.sectpane[0]) * 0.5, (ui->color.master[1] + ui->color.sectpane[1]) * 0.5, (ui->color.master[2] + ui->color.sectpane[2]) * 0.5 - ); + ); } else { glColor3f( (ui->color.secttitle[0] + ui->color.sectpane[0]) * 0.5, (ui->color.secttitle[1] + ui->color.sectpane[1]) * 0.5, (ui->color.secttitle[2] + ui->color.sectpane[2]) * 0.5 - ); + ); } glBegin(GL_TRIANGLES); glVertex2d(cx-margin, cy-y); @@ -419,7 +419,7 @@ static mjrRect radioelement(const mjuiItem* it, int n, }; // adjust width of last column - if (col==ncol-1) { + if (col == ncol-1) { r.width = it->rect.width - r.left + it->rect.left; } @@ -436,7 +436,7 @@ static void mouseinui(const mjUI* ui, const mjuiState* ins, int* x, int* y) { mjrRect rect = ins->rect[ui->rectid]; // correct for scrollbar - if (ui->height>rect.height) { + if (ui->height > rect.height) { *y -= ui->scroll; } @@ -483,7 +483,7 @@ static int findradio(const mjuiItem* it, const mjUI* ui, // result int ind = row*ncol + col; - if (indmulti.nelem) { + if (ind < it->multi.nelem) { return ind; } else { return -1; @@ -503,7 +503,7 @@ static void makeradioline(const mjuiItem* it, const mjrContext* con, int* sep) { } // compute element widths - for (int i=0; imulti.name[i], con, -1); totwid += elwid[i]; } @@ -513,7 +513,7 @@ static void makeradioline(const mjuiItem* it, const mjrContext* con, int* sep) { // compute separators sep[0] = 0; - for (int i=0; irect.width; @@ -534,8 +534,8 @@ static int findradioline(const mjuiItem* it, const mjUI* ui, // find interval int x = mju_round(rx*it->rect.width); - for (int i=0; imulti.nelem; i++) { - if (x>=sep[i] && xmulti.nelem; i++) { + if (x >= sep[i] && x < sep[i+1]) { return i; } } @@ -550,7 +550,7 @@ static int findradioline(const mjuiItem* it, const mjUI* ui, static int findselect(const mjuiItem* it, const mjUI* ui, const mjuiState* ins, const mjrContext* con) { // not tracking: nothing to do - if (!(ui->mousesect>0 && ui->mouseitem>=0 && it && it->type==mjITEM_SELECT)) { + if (!(ui->mousesect > 0 && ui->mouseitem >= 0 && it && it->type == mjITEM_SELECT)) { return -1; } @@ -564,7 +564,7 @@ static int findselect(const mjuiItem* it, const mjUI* ui, // find in box double rx, ry; mouseinrect(r, ui, ins, &rx, &ry); - if (ry>0 && ry<1 && rx>0 && rx<1) { + if (ry > 0 && ry < 1 && rx > 0 && rx < 1) { int k = (int)floor(ry*it->multi.nelem); k = mjMAX(0, mjMIN(it->multi.nelem-1, k)); return it->multi.nelem-1-k; @@ -597,7 +597,7 @@ void scrollrect(mjrRect rect, const mjUI* ui, const mjrContext* con, // is point in rectangle static int inside(int x, int y, mjrRect r) { - return (x>=r.left && x<=r.left+r.width && y>=r.bottom && y<=r.bottom+r.height); + return (x >= r.left && x <= r.left+r.width && y >= r.bottom && y <= r.bottom+r.height); } @@ -611,20 +611,20 @@ static int insideoval(int x, int y, mjrRect r) { // check center int radius = r.height/2; - if (x>=r.left+radius && x<=r.left+r.width-radius) { + if (x >= r.left+radius && x <= r.left+r.width-radius) { return 1; } // left circle int dx = x - (r.left+radius); int dy = y - (r.bottom+radius); - if (dx<0 && (dx*dx + dy*dy < radius*radius)) { + if (dx < 0 && (dx*dx + dy*dy < radius*radius)) { return 1; } // right circle dx = x - (r.left+r.width-radius); - if (dx>0 && (dx*dx + dy*dy < radius*radius)) { + if (dx > 0 && (dx*dx + dy*dy < radius*radius)) { return 1; } @@ -648,7 +648,7 @@ static void findmouse(const mjUI* ui, const mjuiState* ins, const mjrContext* co mjrRect rect = ins->rect[ui->rectid]; // scrollbar - if (ui->height>rect.height) { + if (ui->height > rect.height) { // construct rectangles mjrRect bar; mjrRect thumb; @@ -662,7 +662,7 @@ static void findmouse(const mjUI* ui, const mjuiState* ins, const mjrContext* co } // below thumb - else if (ynsect; n++) { + for (int n=0; n < ui->nsect; n++) { // get section pointer const mjuiSection* s = ui->sect + n; // in title - if (s->state<2 && inside(x, y, s->rtitle)) { + if (s->state < 2 && inside(x, y, s->rtitle)) { *sect = n+1; *item = -1; return; @@ -694,8 +694,8 @@ static void findmouse(const mjUI* ui, const mjuiState* ins, const mjrContext* co // in content and open: check items if (s->state && inside(x, y, s->rcontent)) { - for (int i=0; initem; i++) { - if (s->item[i].type==mjITEM_BUTTON ? + for (int i=0; i < s->nitem; i++) { + if (s->item[i].type == mjITEM_BUTTON ? insideoval(x, y, s->item[i].rect) : inside(x, y, s->item[i].rect)) { *sect = n+1; @@ -725,7 +725,7 @@ static void setslider(mjuiItem* it, mjUI* ui, mjtNum val = (mjtNum)(it->slider.range[0]*(1-rx) + it->slider.range[1]*rx); // set slider position - if (it->type==mjITEM_SLIDERINT) { + if (it->type == mjITEM_SLIDERINT) { *(int*)it->pdata = mju_round(val); } else { *(mjtNum*)it->pdata = val; @@ -738,14 +738,14 @@ static void setslider(mjuiItem* it, mjUI* ui, // return 0 if ok, error code otherwise static int checkedit(const char* text, const mjuiItem* it) { // text always passes - if (it->type==mjITEM_EDITTXT) { + if (it->type == mjITEM_EDITTXT) { return 0; } // check type - if (it->type!=mjITEM_EDITINT && - it->type!=mjITEM_EDITNUM && - it->type!=mjITEM_EDITFLOAT) { + if (it->type != mjITEM_EDITINT && + it->type != mjITEM_EDITNUM && + it->type != mjITEM_EDITFLOAT) { mju_error("Internal error: expected edit control"); } @@ -755,21 +755,21 @@ static int checkedit(const char* text, const mjuiItem* it) { val, val+1, val+2, val+3, val+4, val+5, val+6); // check length - if (n!=it->edit.nelem) { + if (n != it->edit.nelem) { return 1; } // check range when defined - for (int i=0; iedit.range[i][0]edit.range[i][1] && - (val[i]edit.range[i][0] || val[i]>it->edit.range[i][1])) { + for (int i=0; i < n; i++) + if (it->edit.range[i][0] < it->edit.range[i][1] && + (val[i] < it->edit.range[i][0] || val[i] > it->edit.range[i][1])) { return 2; } // require int values for int type - if (it->type==mjITEM_EDITINT) { - for (int i=0; itype == mjITEM_EDITINT) { + for (int i=0; i < n; i++) { + if (val[i] != (double)((int)val[i])) { return 3; } } @@ -784,7 +784,7 @@ static int checkedit(const char* text, const mjuiItem* it) { // return 0 if ok, error code otherwise static int text2array(const char* text, const mjuiItem* it) { // text: copy - if (it->type==mjITEM_EDITTXT) { + if (it->type == mjITEM_EDITTXT) { // copy string, assume mjMAXUINAME allocation char* pdata = (char*)it->pdata; strncpy(pdata, text, mjMAXUINAME); @@ -793,7 +793,7 @@ static int text2array(const char* text, const mjuiItem* it) { } // check type - if (it->type!=mjITEM_EDITINT && it->type!=mjITEM_EDITNUM && it->type!=mjITEM_EDITFLOAT) { + if (it->type != mjITEM_EDITINT && it->type != mjITEM_EDITNUM && it->type != mjITEM_EDITFLOAT) { mju_error("Internal error: expected edit control"); } @@ -803,42 +803,42 @@ static int text2array(const char* text, const mjuiItem* it) { val, val+1, val+2, val+3, val+4, val+5, val+6); // check length - if (n!=it->edit.nelem) { + if (n != it->edit.nelem) { return 1; } // check range when defined - for (int i=0; iedit.range[i][0]edit.range[i][1] && - (val[i]edit.range[i][0] || val[i]>it->edit.range[i][1])) { + for (int i=0; i < n; i++) { + if (it->edit.range[i][0] < it->edit.range[i][1] && + (val[i] < it->edit.range[i][0] || val[i] > it->edit.range[i][1])) { return 2; } } // require int values for int type - if (it->type==mjITEM_EDITINT) { - for (int i=0; itype == mjITEM_EDITINT) { + for (int i=0; i < n; i++) { + if (val[i] != (double)((int)val[i])) { return 3; } } } // copy values - if (it->type==mjITEM_EDITINT) { + if (it->type == mjITEM_EDITINT) { int* pdata = (int*)it->pdata; - for (int i=0; itype==mjITEM_EDITNUM) { + if (it->type == mjITEM_EDITNUM) { mjtNum* pdata = (mjtNum*)it->pdata; - for (int i=0; ipdata; - for (int i=0; itype==mjITEM_EDITTXT) { + if (it->type == mjITEM_EDITTXT) { // copy string, assume mjMAXUINAME allocation strncpy(text, (const char*)it->pdata, mjMAXUINAME); text[mjMAXUINAME-1] = 0; @@ -860,7 +860,7 @@ static void array2text(char* text, const mjuiItem* it) { } // check type - if (it->type!=mjITEM_EDITINT && it->type!=mjITEM_EDITNUM && it->type!=mjITEM_EDITFLOAT) { + if (it->type != mjITEM_EDITINT && it->type != mjITEM_EDITNUM && it->type != mjITEM_EDITFLOAT) { mju_error("Internal error: expected edit control"); } @@ -868,16 +868,16 @@ static void array2text(char* text, const mjuiItem* it) { int n = it->edit.nelem; char buf[50]; text[0] = 0; - for (int i=0; itype==mjITEM_EDITINT) { + for (int i=0; i < n; i++) { + if (it->type == mjITEM_EDITINT) { mjSNPRINTF(buf, "%d", ((int*)it->pdata)[i]); - } else if (it->type==mjITEM_EDITNUM) { + } else if (it->type == mjITEM_EDITNUM) { mjSNPRINTF(buf, "%.4g", ((mjtNum*)it->pdata)[i]); } else { mjSNPRINTF(buf, "%.4g", ((float*)it->pdata)[i]); } strncat(text, buf, mjMAXUITEXT - strlen(text) - 1); - if (i=32 && key<=127) { + if (type == mjITEM_EDITTXT) { + if (sz < mjMAXUINAME-1 && key >= 32 && key <= 127) { // lower case if Shift (Caps Lock cannot be detected in GLWF) - if (key>='A' && key<='Z' && !state->shift) { + if (key >= 'A' && key <= 'Z' && !state->shift) { key = key + 'a' - 'A'; } // Shift: remap remaining keys else if (state->shift) { - if (key=='`') { + if (key == '`') { key = '~'; - } else if (key=='-') { + } else if (key == '-') { key = '_'; - } else if (key=='=') { + } else if (key == '=') { key = '+'; - } else if (key=='[') { + } else if (key == '[') { key = '{'; - } else if (key==']') { + } else if (key == ']') { key = '}'; - } else if (key=='\\') { + } else if (key == '\\') { key = '|'; - } else if (key==';') { + } else if (key == ';') { key = ':'; - } else if (key=='\'') { + } else if (key == '\'') { key = '"'; - } else if (key==',') { + } else if (key == ',') { key = '<'; - } else if (key=='.') { + } else if (key == '.') { key = '>'; - } else if (key=='/') { + } else if (key == '/') { key = '?'; } } @@ -928,25 +928,25 @@ static int validkey(int key, int sz, int type, const mjuiState* state) { } // numeric - else if (type==mjITEM_EDITINT || type==mjITEM_EDITNUM || type==mjITEM_EDITFLOAT) { - if (sz<(mjMAXUITEXT-1) && - (key==' ' || key=='+' || key=='=' || key=='-' || (key>='0' && key<='9') || - (key>=mjKEY_NUMPAD_0 && key<=mjKEY_NUMPAD_9) || - ((key=='e' || key=='E' || key=='.') && - (type==mjITEM_EDITNUM || type==mjITEM_EDITFLOAT)))) { + else if (type == mjITEM_EDITINT || type == mjITEM_EDITNUM || type == mjITEM_EDITFLOAT) { + if (sz < (mjMAXUITEXT-1) && + (key == ' ' || key == '+' || key == '=' || key == '-' || (key >= '0' && key <= '9') || + (key >= mjKEY_NUMPAD_0 && key <= mjKEY_NUMPAD_9) || + ((key == 'e' || key == 'E' || key == '.') && + (type == mjITEM_EDITNUM || type == mjITEM_EDITFLOAT)))) { // remap '=' to '+' - if (key=='=') { + if (key == '=') { key = '+'; } // remap 'E' to 'e' - if (key=='E') { + if (key == 'E') { key = 'e'; } // remap numberpad to top row - if (key>=mjKEY_NUMPAD_0 && key<=mjKEY_NUMPAD_9) { + if (key >= mjKEY_NUMPAD_0 && key <= mjKEY_NUMPAD_9) { key = key - mjKEY_NUMPAD_0 + '0'; } @@ -968,7 +968,7 @@ static int validkey(int key, int sz, int type, const mjuiState* state) { // adjust editscroll so cursor is visible static void revealcursor(mjrRect r, mjUI* ui, const mjrContext* con) { // scroll left - if (ui->editcursor<=ui->editscroll) { + if (ui->editcursor <= ui->editscroll) { ui->editscroll = ui->editcursor; return; } @@ -978,13 +978,13 @@ static void revealcursor(mjrRect r, mjUI* ui, const mjrContext* con) { // scan backwards int i = ui->editcursor; - while (width>=0 && i>=ui->editscroll) { + while (width >= 0 && i >= ui->editscroll) { i--; width -= con->charWidth[(unsigned char)ui->edittext[i]]; } // adjust scroll if out of width - if (width<0) { + if (width < 0) { ui->editscroll = i+1; } } @@ -1004,10 +1004,10 @@ static void setcursor(mjrRect r, mjUI* ui, const mjuiState* ins, const mjrContex mouseinrect(r1, ui, ins, &rx, &ry); // outside rectangle - if (rx<0) { + if (rx < 0) { ui->editcursor = 0; ui->editscroll = 0; - } else if (rx>1) { + } else if (rx > 1) { ui->editcursor = strlen(ui->edittext); revealcursor(r, ui, con); } @@ -1018,12 +1018,12 @@ static void setcursor(mjrRect r, mjUI* ui, const mjuiState* ins, const mjrContex int R = mju_round(r1.width*rx), bestdif = R; // find closest between-char position - for (int i=ui->editscroll; iedittext); i++) { + for (int i=ui->editscroll; i < strlen(ui->edittext); i++) { // add next width cumsum += con->charWidth[(unsigned char)ui->edittext[i]]; // update best - if (bestdif>abs(cumsum-R)) { + if (bestdif > abs(cumsum-R)) { bestdif = abs(cumsum-R); besti = i+1; } @@ -1048,7 +1048,7 @@ static void parseshortcut(const char* text, int* mod, int* key) { } // require between 2 and 5 characters - if (strlen(text)<2 || strlen(text)>5) { + if (strlen(text) < 2 || strlen(text) > 5) { mju_error("mjui_add: invalid shortcut specification"); } @@ -1075,12 +1075,12 @@ static void parseshortcut(const char* text, int* mod, int* key) { } // key - if (text[1]=='#') { - if (sscanf(text+2, "%d", key)!=1) { + if (text[1] == '#') { + if (sscanf(text+2, "%d", key) != 1) { mju_error("mjui_add: invalid shortcut numeric code"); } } else { - if (text[2]!=0) { + if (text[2] != 0) { mju_error("mjui_add: invalid shortcut"); } *key = (int)text[1]; @@ -1092,12 +1092,12 @@ static void parseshortcut(const char* text, int* mod, int* key) { // check fpr matching modifier and shortcut static int matchshortcut(const mjuiState* ins, int mod, int key) { // match key - if (!key || ins->key!=key) { + if (!key || ins->key != key) { return 0; } // match modifier - if ((ins->control!=0) + 2*(ins->shift!=0) + 4*(ins->alt!=0) != mod) { + if ((ins->control != 0) + 2*(ins->shift != 0) + 4*(ins->alt != 0) != mod) { return 0; } @@ -1110,7 +1110,7 @@ static int matchshortcut(const mjuiState* ins, int mod, int key) { // Get builtin UI theme spacing (0-1). mjuiThemeSpacing mjui_themeSpacing(int ind) { - if (ind==0) { + if (ind == 0) { return themeSpacing0; } else { return themeSpacing1; @@ -1121,11 +1121,11 @@ mjuiThemeSpacing mjui_themeSpacing(int ind) { // Get builtin UI theme color (0-3). mjuiThemeColor mjui_themeColor(int ind) { - if (ind==0) { + if (ind == 0) { return themeColor0; - } else if (ind==1) { + } else if (ind == 1) { return themeColor1; - } else if (ind==2) { + } else if (ind == 2) { return themeColor2; } else { return themeColor3; @@ -1140,19 +1140,19 @@ void mjui_add(mjUI* ui, const mjuiDef* def) { double x[1+2*mjMAXUIEDIT]; // process entries until end marker - while (def[n].type!=mjITEM_END) { + while (def[n].type != mjITEM_END) { // section - if (def[n].type==mjITEM_SECTION) { + if (def[n].type == mjITEM_SECTION) { // check limit - if (ui->nsect>=mjMAXUISECT) { + if (ui->nsect >= mjMAXUISECT) { mju_error("mjui_add: too many sections"); } // check data - if (strlen(def[n].name)>=mjMAXUINAME-1) { + if (strlen(def[n].name) >= mjMAXUINAME-1) { mju_error("mjui_add: section name too long"); } - if (def[n].state<0 || def[n].state>2) { + if (def[n].state < 0 || def[n].state > 2) { mju_error("mjui_add: invalid section state"); } @@ -1168,26 +1168,26 @@ void mjui_add(mjUI* ui, const mjuiDef* def) { } // item - else if (def[n].type>=0 && def[n].type= 0 && def[n].type < mjNITEM) { // first section must be defined - if (ui->nsect<=0) { + if (ui->nsect <= 0) { mju_error("mjui_add: item defined outside section"); } mjuiSection* se = ui->sect + (ui->nsect-1); // check limit - if (se->nitem>=mjMAXUIITEM) { + if (se->nitem >= mjMAXUIITEM) { mju_error("mjui_add: too many items in section"); } // check item data - if (def[n].type<0 || def[n].type>=mjNITEM) { + if (def[n].type < 0 || def[n].type >= mjNITEM) { mju_error("mjui_add: invalid item type"); } - if (strlen(def[n].name)>=mjMAXUINAME) { + if (strlen(def[n].name) >= mjMAXUINAME) { mju_error("mjui_add: item name too long"); } - if (def[n].state<0) { + if (def[n].state < 0) { mju_error("mjui_add: invalid item state"); } @@ -1205,43 +1205,45 @@ void mjui_add(mjUI* ui, const mjuiDef* def) { it->itemid = se->nitem - 1; // data pointer check - if (it->type>mjITEM_BUTTON && it->pdata==0) { + if (it->type > mjITEM_BUTTON && it->pdata == 0) { mju_error("mjui_add: no data pointer for item with data"); } - if (it->type<=mjITEM_BUTTON && it->pdata) { + if (it->type <= mjITEM_BUTTON && it->pdata) { mju_error("mjui_add: data pointer for item without data"); } // parse button and check - if (it->type==mjITEM_BUTTON || it->type==mjITEM_CHECKINT || it->type==mjITEM_CHECKBYTE) { + if (it->type == mjITEM_BUTTON || + it->type == mjITEM_CHECKINT || + it->type == mjITEM_CHECKBYTE) { parseshortcut(def[n].other, &(it->single.modifier), &(it->single.shortcut)); } // parse static, radio, radioline, select - else if (it->type==mjITEM_STATIC || - it->type==mjITEM_RADIO || - it->type==mjITEM_RADIOLINE || - it->type==mjITEM_SELECT) { + else if (it->type == mjITEM_STATIC || + it->type == mjITEM_RADIO || + it->type == mjITEM_RADIOLINE || + it->type == mjITEM_SELECT) { // init it->multi.nelem = 0; num = strlen(def[n].other); i = 0; // find names in '/n'-separated string - while (imulti.nelem>=mjMAXUIMULTI) { + if (it->multi.nelem >= mjMAXUIMULTI) { mju_error("mjui_add: too many multi elements"); } // find next '\n' or 0 start = i; - while (def[n].other[i]!='\n' && def[n].other[i]!=0) { + while (def[n].other[i] != '\n' && def[n].other[i] != 0) { i++; } // check string - if (i==start || i-start>=mjMAXUINAME-1) { + if (i == start || i-start >= mjMAXUINAME-1) { mju_error("mjui_add: invalid multi element name"); } @@ -1257,10 +1259,10 @@ void mjui_add(mjUI* ui, const mjuiDef* def) { } // parse slider - else if (it->type==mjITEM_SLIDERINT || it->type==mjITEM_SLIDERNUM) { + else if (it->type == mjITEM_SLIDERINT || it->type == mjITEM_SLIDERNUM) { // read and check number num = sscanf(def[n].other, "%lf %lf %lf", x, x+1, x+2); - if (num!=2 && num!=3) { + if (num != 2 && num != 3) { mju_error("mjui_add: slider expects 'min max [div]'"); } @@ -1269,10 +1271,10 @@ void mjui_add(mjUI* ui, const mjuiDef* def) { it->slider.range[1] = x[1]; // assign divisions if provided, otherwise default - if (num==3) { + if (num == 3) { it->slider.divisions = mjMAX(1, x[2]); } else { - if (it->type==mjITEM_SLIDERINT) { + if (it->type == mjITEM_SLIDERINT) { it->slider.divisions = mjMAX(1, x[1]-x[0]); } else { it->slider.divisions = 200; @@ -1281,9 +1283,9 @@ void mjui_add(mjUI* ui, const mjuiDef* def) { } // parse edit numeric - else if (it->type==mjITEM_EDITINT || it->type==mjITEM_EDITNUM || it->type==mjITEM_EDITFLOAT) { + else if (it->type == mjITEM_EDITINT || it->type == mjITEM_EDITNUM || it->type == mjITEM_EDITFLOAT) { // check mjMAXUIEDIT - if (mjMAXUIEDIT>7) { + if (mjMAXUIEDIT > 7) { mju_error("internal error: mjMAXUIEDIT bigger than 7"); } @@ -1292,20 +1294,20 @@ void mjui_add(mjUI* ui, const mjuiDef* def) { x, x+1, x+2, x+3, x+4, x+5, x+6, x+7, x+8, x+9, x+10, x+11, x+12, x+13, x+14); // check length, assign - if (num<1) { + if (num < 1) { mju_error("mjui_add: edit length missing"); } it->edit.nelem = mju_round((mjtNum)x[0]); - if (it->edit.nelem<1 || it->edit.nelem>mjMAXUIEDIT) { + if (it->edit.nelem < 1 || it->edit.nelem > mjMAXUIEDIT) { mju_error("mjui_add: invalid edit length"); } - if (it->edit.nelem*2!=(num-1) && num>1) { + if (it->edit.nelem*2 != (num-1) && num > 1) { mju_error("mjui_add: incorrent number of edit ranges"); } // copy ranges - if (num>1) { - for (int i=0; iedit.nelem; i++) { + if (num > 1) { + for (int i=0; i < it->edit.nelem; i++) { it->edit.range[i][0] = x[1+2*i]; it->edit.range[i][1] = x[2+2*i]; } @@ -1313,7 +1315,7 @@ void mjui_add(mjUI* ui, const mjuiDef* def) { } // edit text: nothing to parse - else if (it->type==mjITEM_EDITTXT) { + else if (it->type == mjITEM_EDITTXT) { // clear nelem, for style it->edit.nelem = 0; } @@ -1365,7 +1367,7 @@ void mjui_resize(mjUI* ui, const mjrContext* con) { // process sections int skip; - for (int n=0; nnsect; n++) { + for (int n=0; n < ui->nsect; n++) { // vertical padding before section height += g_section; maxheight += g_section; @@ -1376,7 +1378,7 @@ void mjui_resize(mjUI* ui, const mjrContext* con) { // title rectangle s->rtitle.left = g_section; s->rtitle.width = w_master - w_scroll - 2*g_section; - if (s->state<2) { + if (s->state < 2) { s->rtitle.bottom = height + textheight; s->rtitle.height = textheight; } else { @@ -1394,7 +1396,7 @@ void mjui_resize(mjUI* ui, const mjrContext* con) { s->rcontent.height = 0; // process items within section - for (int i=0; initem; i++) { + for (int i=0; i < s->nitem; i++) { // get item pointer mjuiItem* it = s->item + i; @@ -1403,11 +1405,11 @@ void mjui_resize(mjUI* ui, const mjrContext* con) { // determine skip (collapsed separator before item) skip = 0; - if (i>0 && it->type!=mjITEM_SEPARATOR) { - for (int k=i-1; k>=0; k--) { - if (s->item[k].type==mjITEM_SEPARATOR) { + if (i > 0 && it->type != mjITEM_SEPARATOR) { + for (int k=i-1; k >= 0; k--) { + if (s->item[k].type == mjITEM_SEPARATOR) { // collapsed state: skip items below it - if (s->item[k].state==mjSEPCLOSED) { + if (s->item[k].state == mjSEPCLOSED) { skip = 1; } @@ -1417,11 +1419,13 @@ void mjui_resize(mjUI* ui, const mjrContext* con) { } // vertical padding before item - s->rcontent.height += it->type==mjITEM_SEPARATOR ? g_section : g_itemver; + s->rcontent.height += it->type == mjITEM_SEPARATOR ? g_section : g_itemver; // packed pair of items - if (initem-1 && s->item[i+1].type==it->type && - (it->type==mjITEM_BUTTON || it->type==mjITEM_CHECKINT || it->type==mjITEM_CHECKBYTE)) { + if (i < s->nitem-1 && s->item[i+1].type == it->type && + (it->type == mjITEM_BUTTON || + it->type == mjITEM_CHECKINT || + it->type == mjITEM_CHECKBYTE)) { // get next item pointer mjuiItem* it1 = s->item + (i+1); @@ -1452,21 +1456,21 @@ void mjui_resize(mjUI* ui, const mjrContext* con) { it->rect.left = s->rcontent.left + g_itemside; // static - if (it->type==mjITEM_STATIC) { + if (it->type == mjITEM_STATIC) { it->rect.width = s->rcontent.width - 2*g_itemside; it->rect.height = (con->charHeight+g_textver)*it->multi.nelem; } // single column - else if (it->type==mjITEM_BUTTON || - it->type==mjITEM_CHECKINT || - it->type==mjITEM_CHECKBYTE) { + else if (it->type == mjITEM_BUTTON || + it->type == mjITEM_CHECKINT || + it->type == mjITEM_CHECKBYTE) { it->rect.width = colwidth; it->rect.height = textheight; } // radio - else if (it->type==mjITEM_RADIO) { + else if (it->type == mjITEM_RADIO) { int ncol = ui->radiocol ? ui->radiocol : 2; int nrow = (it->multi.nelem-1)/ncol + 1; it->rect.width = s->rcontent.width - 2*g_itemside; @@ -1481,9 +1485,9 @@ void mjui_resize(mjUI* ui, const mjrContext* con) { // add room for label if (it->name[0] && - (it->type>=mjITEM_RADIO || - it->type>=mjITEM_RADIOLINE || - it->type==mjITEM_STATIC)) { + (it->type >= mjITEM_RADIO || + it->type >= mjITEM_RADIOLINE || + it->type == mjITEM_STATIC)) { it->rect.left = s->rcontent.left + g_itemside + g_label; it->rect.width = s->rcontent.width - (2*g_itemside + g_label); } @@ -1518,14 +1522,14 @@ void mjui_resize(mjUI* ui, const mjrContext* con) { maxheight += g_section; // invert bottom for all sections and items - for (int n=0; nnsect; n++) { + for (int n=0; n < ui->nsect; n++) { // section mjuiSection* s = ui->sect + n; s->rtitle.bottom = height - s->rtitle.bottom; s->rcontent.bottom = height - s->rcontent.bottom; // items - for (int i=0; initem; i++) { + for (int i=0; i < s->nitem; i++) { s->item[i].rect.bottom = height - s->item[i].rect.bottom; } } @@ -1540,9 +1544,9 @@ void mjui_resize(mjUI* ui, const mjrContext* con) { // predicate handler static int evalpredicate(int state, mjfItemEnable predicate, void* userdata) { - if (state<=0) { + if (state <= 0) { return 0; - } else if (state==1 || predicate==NULL) { + } else if (state == 1 || predicate == NULL) { return 1; } else { return predicate(state, userdata); @@ -1591,12 +1595,12 @@ static void shortcuthelp(mjrRect r, int modifier, int shortcut, // key: ascii or decode map char key[10] = ""; - if (shortcut>32 && shortcut<=126) { + if (shortcut > 32 && shortcut <= 126) { key[0] = (char)shortcut; key[1] = 0; } else { - for (int i=0; icolor.master[0], ui->color.master[1], ui->color.master[2], 1); glClear(GL_COLOR_BUFFER_BIT); @@ -1661,7 +1665,7 @@ void mjui_update(int section, int item, const mjUI* ui, // select sections int start_section = 0; int num_section = ui->nsect; - if (section>=0) { + if (section >= 0) { start_section = section; num_section = 1; } @@ -1671,7 +1675,7 @@ void mjui_update(int section, int item, const mjUI* ui, mjrRect r; char text[mjMAXUITEXT]; int sep[mjMAXUIMULTI+1]; - for (int n=start_section; nsect + n; @@ -1679,9 +1683,9 @@ void mjui_update(int section, int item, const mjUI* ui, int maxwidth = (s->rtitle.width - 2*g_itemside - g_itemmid)/2 - 2*g_texthor; // redraw section title and pane - if (section<0 || item<0) { + if (section < 0 || item < 0) { // title shown - if (s->state<2) { + if (s->state < 2) { // interpolated rectangle r = s->rtitle; glBegin(GL_QUADS); @@ -1718,18 +1722,18 @@ void mjui_update(int section, int item, const mjUI* ui, // select items int start_item = 0; int num_item = s->nitem; - if (section>=0 && item>=0) { + if (section >= 0 && item >= 0) { start_item = item; num_item = 1; } // draw item(s) - for (int i=start_item; iitem + i; // zero size: skip - if (it->rect.height==0) { + if (it->rect.height == 0) { continue; } @@ -1765,9 +1769,9 @@ void mjui_update(int section, int item, const mjUI* ui, it->rect.width-2*g_texthor, ui->color.sectfont, con); // symbol - if (it->state==mjSEPCLOSED+1) { + if (it->state == mjSEPCLOSED+1) { drawsymbol(it->rect, 1, 1, ui, con); - } else if (it->state==mjSEPCLOSED) { + } else if (it->state == mjSEPCLOSED) { drawsymbol(it->rect, 0, 1, ui, con); } @@ -1786,7 +1790,7 @@ void mjui_update(int section, int item, const mjUI* ui, drawrectangle(r, rgbpane, rgbpane, con); // text lines - for (int k=0; kmulti.nelem; k++) { + for (int k=0; k < it->multi.nelem; k++) { drawtext(it->multi.name[k], r.left+g_texthor, r.bottom+g_textver+(it->multi.nelem-k-1)*(con->charHeight+g_textver), @@ -1800,7 +1804,7 @@ void mjui_update(int section, int item, const mjUI* ui, } // outline or filled, depending on mouse - if (ui->mousesect==n+1 && ui->mouseitem==i && msect==n+1 && mitem==i) { + if (ui->mousesect == n+1 && ui->mouseitem == i && msect == n+1 && mitem == i) { drawoval(it->rect, rgbdecor, NULL, con); } else { drawoval(it->rect, rgbdecor, rgbpane, con); @@ -1819,14 +1823,15 @@ void mjui_update(int section, int item, const mjUI* ui, break; case mjITEM_CHECKINT: - case mjITEM_CHECKBYTE: { + case mjITEM_CHECKBYTE: + { if (state) { rgbdecor = ui->color.check; } // get value according to type int k; - if (it->type==mjITEM_CHECKINT) { + if (it->type == mjITEM_CHECKINT) { k = *(int*)it->pdata; } else { k = *(mjtByte*)it->pdata; @@ -1871,7 +1876,7 @@ void mjui_update(int section, int item, const mjUI* ui, drawrectangle(r, rgbdecor, NULL, con); // element names - for (int k=0; kmulti.nelem; k++) { + for (int k=0; k < it->multi.nelem; k++) { r = radioelement(it, k, ui, con); drawtext(it->multi.name[k], r.left+g_texthor, @@ -1880,7 +1885,8 @@ void mjui_update(int section, int item, const mjUI* ui, } break; - case mjITEM_RADIOLINE: { + case mjITEM_RADIOLINE: + { if (state) { rgbdecor = ui->color.radio; } @@ -1905,7 +1911,7 @@ void mjui_update(int section, int item, const mjUI* ui, drawrectangle(r, rgbdecor, NULL, con); // element names - for (int k=0; kmulti.nelem; k++) { + for (int k=0; k < it->multi.nelem; k++) { // compute rectangle for element r = it->rect; r.left += sep[k]; @@ -1932,7 +1938,7 @@ void mjui_update(int section, int item, const mjUI* ui, drawrectangle(it->rect, rgbdecor, NULL, con); // value: only if non-empty - if (it->multi.nelem>0) { + if (it->multi.nelem > 0) { drawtext(it->multi.name[*(int*)it->pdata], it->rect.left+g_texthor, it->rect.bottom+g_textver, @@ -1950,7 +1956,7 @@ void mjui_update(int section, int item, const mjUI* ui, } // compute relative slider position - if (it->type==mjITEM_SLIDERINT) { + if (it->type == mjITEM_SLIDERINT) { sel = (mjtNum)(*(int*)it->pdata); } else { sel = *(mjtNum*)it->pdata; @@ -1966,13 +1972,13 @@ void mjui_update(int section, int item, const mjUI* ui, drawrectangle(r, rgbdecor2, NULL, con); // show divisions if not too many - if (it->slider.divisions<=20) { + if (it->slider.divisions <= 20) { // repare rectangle r.width = SCL(2, con); r.height = g_textver; // draw ticks - for (int k=1; k<(int)it->slider.divisions; k++) { + for (int k=1; k < (int)it->slider.divisions; k++) { r.left = it->rect.left - r.width/2 + it->rect.width*k/it->slider.divisions; drawrectangle(r, rgbpane, NULL, con); @@ -1986,7 +1992,7 @@ void mjui_update(int section, int item, const mjUI* ui, g_label-2*g_texthor, rgbfont, con); // value - if (it->type==mjITEM_SLIDERINT) { + if (it->type == mjITEM_SLIDERINT) { mjSNPRINTF(text, "%d", *(int*)it->pdata); } else { mjSNPRINTF(text, "%.3g", *(mjtNum*)it->pdata); @@ -2012,9 +2018,9 @@ void mjui_update(int section, int item, const mjUI* ui, g_label-2*g_texthor, rgbfont, con); // activated - if (ui->editsect>0 && ui->editsect==n+1 && ui->edititem==i) { + if (ui->editsect > 0 && ui->editsect == n+1 && ui->edititem == i) { // fill box, indicate valid state with color - if (checkedit(ui->edittext, it)==0) { + if (checkedit(ui->edittext, it) == 0) { drawrectangle(it->rect, rgbdecor, NULL, con); } else { drawrectangle(it->rect, ui->color.edit2, NULL, con); @@ -2057,12 +2063,12 @@ void mjui_update(int section, int item, const mjUI* ui, } // select tracking - if (ui->mousesect>0 && ui->mouseitem>=0) { + if (ui->mousesect > 0 && ui->mouseitem >= 0) { // get item pointer const mjuiItem* it = ui->sect[ui->mousesect-1].item + ui->mouseitem; // proceed if select type - if (it->type==mjITEM_SELECT) { + if (it->type == mjITEM_SELECT) { // margin r = it->rect; r.left -= g_itemside; @@ -2079,7 +2085,7 @@ void mjui_update(int section, int item, const mjUI* ui, // hightlight row under mouse int k = findselect(it, ui, state, con); - if (k>=0) { + if (k >= 0) { mjrRect r1 = r; r1.bottom = r.bottom + (it->multi.nelem-1-k)*cellheight; r1.height = cellheight; @@ -2087,7 +2093,7 @@ void mjui_update(int section, int item, const mjUI* ui, } // values - for (int k=0; kmulti.nelem; k++) { + for (int k=0; k < it->multi.nelem; k++) { drawtext(it->multi.name[k], r.left+g_texthor, r.bottom+g_textver+(it->multi.nelem-1-k)*cellheight, @@ -2109,13 +2115,13 @@ mjuiItem* mjui_event(mjUI* ui, mjuiState* state, const mjrContext* con) { ui->editchanged = NULL; // non-left mouse events: handle shortcut help - if ((state->type==mjEVENT_PRESS || state->type==mjEVENT_MOVE || - state->type==mjEVENT_RELEASE) && state->button!=mjBUTTON_LEFT) { - if (state->button==mjBUTTON_RIGHT) { - if (state->type==mjEVENT_PRESS) { + if ((state->type == mjEVENT_PRESS || state->type == mjEVENT_MOVE || + state->type == mjEVENT_RELEASE) && state->button != mjBUTTON_LEFT) { + if (state->button == mjBUTTON_RIGHT) { + if (state->type == mjEVENT_PRESS) { ui->mousehelp = 1; mjui_update(-1, -1, ui, state, con); - } else if (state->type==mjEVENT_RELEASE) { + } else if (state->type == mjEVENT_RELEASE) { ui->mousehelp = 0; mjui_update(-1, -1, ui, state, con); } @@ -2129,7 +2135,7 @@ mjuiItem* mjui_event(mjUI* ui, mjuiState* state, const mjrContext* con) { int item_cur = -1; mjuiItem* it_cur = NULL; findmouse(ui, state, con, §_cur, &item_cur); - if (sect_cur>0 && item_cur >= 0) { + if (sect_cur > 0 && item_cur >= 0) { it_cur = ui->sect[sect_cur-1].item + item_cur; } @@ -2137,7 +2143,7 @@ mjuiItem* mjui_event(mjUI* ui, mjuiState* state, const mjrContext* con) { int sect_rec = ui->mousesect; int item_rec = -1; mjuiItem* it_rec = NULL; - if (sect_rec>0) { + if (sect_rec > 0) { item_rec = ui->mouseitem; it_rec = ui->sect[sect_rec-1].item + item_rec; } @@ -2146,7 +2152,7 @@ mjuiItem* mjui_event(mjUI* ui, mjuiState* state, const mjrContext* con) { int sect_edit = ui->editsect; int item_edit = -1; mjuiItem* it_edit = NULL; - if (sect_edit>0) { + if (sect_edit > 0) { item_edit = ui->edititem; it_edit = ui->sect[sect_edit-1].item + item_edit; } @@ -2155,9 +2161,9 @@ mjuiItem* mjui_event(mjUI* ui, mjuiState* state, const mjrContext* con) { switch (state->type) { case mjEVENT_MOVE: // move scrollbar - if (sect_rec==-1) { + if (sect_rec == -1) { ui->scroll -= mju_round((state->dy * ui->height) / - state->rect[ui->rectid].height); + state->rect[ui->rectid].height); ui->scroll = mjMAX(0, mjMIN(ui->scroll, ui->height-state->rect[ui->rectid].height)); } @@ -2165,7 +2171,7 @@ mjuiItem* mjui_event(mjUI* ui, mjuiState* state, const mjrContext* con) { // item else if (it_rec) { // move slider - if (it_rec->type==mjITEM_SLIDERINT || it_rec->type==mjITEM_SLIDERNUM) { + if (it_rec->type == mjITEM_SLIDERINT || it_rec->type == mjITEM_SLIDERNUM) { setslider(it_rec, ui, state, con); // redraw, return change @@ -2174,10 +2180,10 @@ mjuiItem* mjui_event(mjUI* ui, mjuiState* state, const mjrContext* con) { } // move edit - else if (it_rec->type==mjITEM_EDITINT || - it_rec->type==mjITEM_EDITNUM || - it_rec->type==mjITEM_EDITFLOAT || - it_rec->type==mjITEM_EDITTXT) { + else if (it_rec->type == mjITEM_EDITINT || + it_rec->type == mjITEM_EDITNUM || + it_rec->type == mjITEM_EDITFLOAT || + it_rec->type == mjITEM_EDITTXT) { setcursor(it_rec->rect, ui, state, con); } @@ -2188,9 +2194,9 @@ mjuiItem* mjui_event(mjUI* ui, mjuiState* state, const mjrContext* con) { case mjEVENT_PRESS: // edit in progress - if (sect_edit>0) { + if (sect_edit > 0) { // same: adjust cursor position - if (sect_edit==sect_cur && item_edit==item_cur) { + if (sect_edit == sect_cur && item_edit == item_cur) { // start mouse tracking ui->mousesect = sect_cur; ui->mouseitem = item_cur; @@ -2204,7 +2210,7 @@ mjuiItem* mjui_event(mjUI* ui, mjuiState* state, const mjrContext* con) { } // different: instantiate, record editchange - if (text2array(ui->edittext, it_edit)==0) { + if (text2array(ui->edittext, it_edit) == 0) { ui->editchanged = it_edit; } @@ -2219,27 +2225,27 @@ mjuiItem* mjui_event(mjUI* ui, mjuiState* state, const mjrContext* con) { ui->mousesect = 0; // start scrollbar drag - if (sect_cur==-1) { + if (sect_cur == -1) { ui->mousesect = -1; ui->mouseitem = 0; } // scroll down - else if (sect_cur==-2) { + else if (sect_cur == -2) { ui->scroll = ui->height - state->rect[ui->rectid].height; } // scroll up - else if (sect_cur==-3) { + else if (sect_cur == -3) { ui->scroll = 0; } // section title - else if (sect_cur>0 && item_cur<0) { + else if (sect_cur > 0 && item_cur < 0) { // double-click: make all sections like this if (state->doubleclick) { - for (int i=0; insect; i++) { - if (ui->sect[i].state<2 && ui->sect[sect_cur-1].state<2) { + for (int i=0; i < ui->nsect; i++) { + if (ui->sect[i].state < 2 && ui->sect[sect_cur-1].state < 2) { ui->sect[i].state = ui->sect[sect_cur-1].state; } } @@ -2247,7 +2253,7 @@ mjuiItem* mjui_event(mjUI* ui, mjuiState* state, const mjrContext* con) { // single click: toggle section state else { - if (ui->sect[sect_cur-1].state<2) { + if (ui->sect[sect_cur-1].state < 2) { ui->sect[sect_cur-1].state = 1 - ui->sect[sect_cur-1].state; } } @@ -2258,7 +2264,7 @@ mjuiItem* mjui_event(mjUI* ui, mjuiState* state, const mjrContext* con) { } // item - else if (sect_cur>0 && item_cur>=0) { + else if (sect_cur > 0 && item_cur >= 0) { // nothing to do for inactive item if (!evalpredicate(it_cur->state, ui->predicate, ui->userdata)) { return ui->editchanged; @@ -2268,14 +2274,14 @@ mjuiItem* mjui_event(mjUI* ui, mjuiState* state, const mjrContext* con) { switch (it_cur->type) { case mjITEM_SEPARATOR: // expanded: collapse - if (it_cur->state==mjSEPCLOSED+1) { + if (it_cur->state == mjSEPCLOSED+1) { it_cur->state = mjSEPCLOSED; mjui_resize(ui, con); mjui_update(-1, -1, ui, state, con); } // collapsed: expand - else if (it_cur->state==mjSEPCLOSED) { + else if (it_cur->state == mjSEPCLOSED) { it_cur->state = mjSEPCLOSED+1; mjui_resize(ui, con); mjui_update(-1, -1, ui, state, con); @@ -2306,7 +2312,7 @@ mjuiItem* mjui_event(mjUI* ui, mjuiState* state, const mjrContext* con) { case mjITEM_RADIO: // set selected element i = findradio(it_cur, ui, state, con); - if (i>=0) { + if (i >= 0) { *(int*)it_cur->pdata = i; change = 1; } @@ -2315,7 +2321,7 @@ mjuiItem* mjui_event(mjUI* ui, mjuiState* state, const mjrContext* con) { case mjITEM_RADIOLINE: // set selected element i = findradioline(it_cur, ui, state, con); - if (i>=0) { + if (i >= 0) { *(int*)it_cur->pdata = i; change = 1; } @@ -2369,10 +2375,10 @@ mjuiItem* mjui_event(mjUI* ui, mjuiState* state, const mjrContext* con) { case mjEVENT_RELEASE: // selection box change - if (it_rec && it_rec->type==mjITEM_SELECT) { + if (it_rec && it_rec->type == mjITEM_SELECT) { // find and set value i = findselect(it_rec, ui, state, con); - if (i>=0) { + if (i >= 0) { *(int*)it_rec->pdata = i; } @@ -2381,13 +2387,13 @@ mjuiItem* mjui_event(mjUI* ui, mjuiState* state, const mjrContext* con) { mjui_update(-1, -1, ui, state, con); // return if value set change - if (i>=0) { + if (i >= 0) { return it_rec; } } // button release - else if (it_rec && it_rec->type==mjITEM_BUTTON) { + else if (it_rec && it_rec->type == mjITEM_BUTTON) { // free mouse and redraw ui->mousesect = 0; mjui_update(sect_rec-1, item_rec, ui, state, con); @@ -2408,7 +2414,7 @@ mjuiItem* mjui_event(mjUI* ui, mjuiState* state, const mjrContext* con) { case mjEVENT_KEY: // editing - if (sect_edit>0) { + if (sect_edit > 0) { // copy key and clear key = state->key; state->key = 0; @@ -2420,7 +2426,7 @@ mjuiItem* mjui_event(mjUI* ui, mjuiState* state, const mjrContext* con) { break; case mjKEY_ENTER: // instantiate - if (text2array(ui->edittext, it_edit)==0) { + if (text2array(ui->edittext, it_edit) == 0) { ui->editsect = 0; // redraw @@ -2459,9 +2465,9 @@ mjuiItem* mjui_event(mjUI* ui, mjuiState* state, const mjrContext* con) { break; case mjKEY_BACKSPACE: // delete before cursor - if (ui->editcursor>0) { + if (ui->editcursor > 0) { // shift chars after cursor to the left - for (int i=ui->editcursor; i<=strlen(ui->edittext); i++) { + for (int i=ui->editcursor; i <= strlen(ui->edittext); i++) { ui->edittext[i-1] = ui->edittext[i]; } @@ -2471,9 +2477,9 @@ mjuiItem* mjui_event(mjUI* ui, mjuiState* state, const mjrContext* con) { break; case mjKEY_DELETE: // delete after cursor - if (ui->editcursoredittext)) { + if (ui->editcursor < strlen(ui->edittext)) { // shift chars after cursor to the left - for (int i=ui->editcursor; i<=strlen(ui->edittext); i++) { + for (int i=ui->editcursor; i <= strlen(ui->edittext); i++) { ui->edittext[i] = ui->edittext[i+1]; } } @@ -2483,7 +2489,7 @@ mjuiItem* mjui_event(mjUI* ui, mjuiState* state, const mjrContext* con) { key = validkey(key, strlen(ui->edittext), it_edit->type, state); if (key) { // shift chars after cursor to the right - for (int i=strlen(ui->edittext); i>=ui->editcursor; i--) { + for (int i=strlen(ui->edittext); i >= ui->editcursor; i--) { ui->edittext[i+1] = ui->edittext[i]; } @@ -2496,7 +2502,7 @@ mjuiItem* mjui_event(mjUI* ui, mjuiState* state, const mjrContext* con) { } // reveal cursor if still editing - if (ui->editsect>0) { + if (ui->editsect > 0) { revealcursor(it_edit->rect, ui, con); } @@ -2507,17 +2513,17 @@ mjuiItem* mjui_event(mjUI* ui, mjuiState* state, const mjrContext* con) { // shortcut search else { // search section shortcuts - for (int n=0; nnsect; n++) + for (int n=0; n < ui->nsect; n++) if (matchshortcut(state, ui->sect[n].modifier, ui->sect[n].shortcut)) { // collapse all - for (int i=0; insect; i++) { - if (ui->sect[i].state<2) { + for (int i=0; i < ui->nsect; i++) { + if (ui->sect[i].state < 2) { ui->sect[i].state = 0; } } // expand this - if (ui->sect[n].state<2) { + if (ui->sect[n].state < 2) { ui->sect[n].state = 1; } @@ -2531,14 +2537,14 @@ mjuiItem* mjui_event(mjUI* ui, mjuiState* state, const mjrContext* con) { } // search item shortcuts - for (int n=0; nnsect; n++) { - for (int i=0; isect[n].nitem; i++) { + for (int n=0; n < ui->nsect; n++) { + for (int i=0; i < ui->sect[n].nitem; i++) { // get pointer to item it = ui->sect[n].item + i;; // check - if ((it->type==mjITEM_BUTTON || it->type==mjITEM_CHECKINT || - it->type==mjITEM_CHECKBYTE) && + if ((it->type == mjITEM_BUTTON || it->type == mjITEM_CHECKINT || + it->type == mjITEM_CHECKBYTE) && matchshortcut(state, it->single.modifier, it->single.shortcut)) { // clear key state->key = 0; @@ -2546,10 +2552,10 @@ mjuiItem* mjui_event(mjUI* ui, mjuiState* state, const mjrContext* con) { // active: process shortcut if (evalpredicate(it->state, ui->predicate, ui->userdata)) { // toggle if check - if (it->type==mjITEM_CHECKINT) { + if (it->type == mjITEM_CHECKINT) { *(int*)it->pdata = 1 - *(int*)it->pdata; mjui_update(n, i, ui, state, con); - } else if (it->type==mjITEM_CHECKBYTE) { + } else if (it->type == mjITEM_CHECKBYTE) { *(mjtByte*)it->pdata = 1 - *(mjtByte*)it->pdata; mjui_update(n, i, ui, state, con); } @@ -2591,19 +2597,18 @@ void mjui_render(mjUI* ui, const mjuiState* state, const mjrContext* con) { ui->color.master[2], 1); // adjust scroll - if (ui->scroll>0 && ui->height-ui->scrollscroll > 0 && ui->height-ui->scroll < rect.height) { ui->scroll = mjMAX(0, ui->height - rect.height); } // blit to current buffer mjrRect raux = {0, mjMAX(0, ui->height - ui->scroll - rect.height), - ui->width, mjMIN(rect.height, ui->height - ui->scroll) - }; + ui->width, mjMIN(rect.height, ui->height - ui->scroll)}; mjr_blitAux(ui->auxid, raux, rect.left, rect.bottom + mjMAX(0, rect.height - ui->height + ui->scroll), con); // draw scrollbar on top if needed - if (ui->height>rect.height) { + if (ui->height > rect.height) { // construct rectangles mjrRect bar; mjrRect thumb;