From 845e64337574bd56630ee6caf48969177db5fe62 Mon Sep 17 00:00:00 2001 From: Wilrik de Loose Date: Fri, 25 Apr 2008 16:27:28 +0000 Subject: Buttons voorzien van vette font! --- menu_demo/Debug/BuildLog.htm | Bin 7106 -> 7160 bytes menu_demo/Debug/main.obj | Bin 13541 -> 13498 bytes menu_demo/Debug/menu.obj | Bin 13544 -> 13958 bytes menu_demo/Debug/menu_demo.exe | Bin 524288 -> 524288 bytes menu_demo/Debug/menu_demo.ilk | Bin 1245324 -> 1489244 bytes menu_demo/Debug/menu_demo.pdb | Bin 2108416 -> 2108416 bytes menu_demo/Debug/mt.dep | 2 +- menu_demo/Debug/vc80.idb | Bin 125952 -> 125952 bytes menu_demo/Debug/vc80.pdb | Bin 61440 -> 61440 bytes menu_demo/bitmap.c | 3 -- menu_demo/button.c | 111 ++++++++++++++++++++++++------------------ menu_demo/button.h | 6 +-- menu_demo/main.c | 18 ++++++- menu_demo/menu.c | 25 +++++++--- menu_demo/menu_demo.ncb | Bin 7891968 -> 7891968 bytes menu_demo/menu_demo.suo | Bin 25600 -> 28672 bytes menu_demo/menu_demo.vcproj | 8 +++ 17 files changed, 110 insertions(+), 63 deletions(-) diff --git a/menu_demo/Debug/BuildLog.htm b/menu_demo/Debug/BuildLog.htm index 4666c1a..7ca8acc 100644 Binary files a/menu_demo/Debug/BuildLog.htm and b/menu_demo/Debug/BuildLog.htm differ diff --git a/menu_demo/Debug/main.obj b/menu_demo/Debug/main.obj index de62d67..4047adf 100644 Binary files a/menu_demo/Debug/main.obj and b/menu_demo/Debug/main.obj differ diff --git a/menu_demo/Debug/menu.obj b/menu_demo/Debug/menu.obj index 6728d6c..59df73e 100644 Binary files a/menu_demo/Debug/menu.obj and b/menu_demo/Debug/menu.obj differ diff --git a/menu_demo/Debug/menu_demo.exe b/menu_demo/Debug/menu_demo.exe index 95a5e47..848976c 100644 Binary files a/menu_demo/Debug/menu_demo.exe and b/menu_demo/Debug/menu_demo.exe differ diff --git a/menu_demo/Debug/menu_demo.ilk b/menu_demo/Debug/menu_demo.ilk index 85dd353..34a0c2b 100644 Binary files a/menu_demo/Debug/menu_demo.ilk and b/menu_demo/Debug/menu_demo.ilk differ diff --git a/menu_demo/Debug/menu_demo.pdb b/menu_demo/Debug/menu_demo.pdb index d6a2e70..2014d73 100644 Binary files a/menu_demo/Debug/menu_demo.pdb and b/menu_demo/Debug/menu_demo.pdb differ diff --git a/menu_demo/Debug/mt.dep b/menu_demo/Debug/mt.dep index 90d46d2..bfc4a5e 100644 --- a/menu_demo/Debug/mt.dep +++ b/menu_demo/Debug/mt.dep @@ -1 +1 @@ -Manifest resource last updated at 11:38:14,45 on 25-04-2008 +Manifest resource last updated at 18:26:10,99 on 25-04-2008 diff --git a/menu_demo/Debug/vc80.idb b/menu_demo/Debug/vc80.idb index 9e79823..e7b81c6 100644 Binary files a/menu_demo/Debug/vc80.idb and b/menu_demo/Debug/vc80.idb differ diff --git a/menu_demo/Debug/vc80.pdb b/menu_demo/Debug/vc80.pdb index dd798d7..dc44629 100644 Binary files a/menu_demo/Debug/vc80.pdb and b/menu_demo/Debug/vc80.pdb differ diff --git a/menu_demo/bitmap.c b/menu_demo/bitmap.c index 1739c11..243952a 100644 --- a/menu_demo/bitmap.c +++ b/menu_demo/bitmap.c @@ -69,9 +69,6 @@ struct BitmapStruct BitmapLoad(char *filename) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - //glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - //glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); - //glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); l_sImage.m_iImageId = texture; l_sImage.m_iWidth = width; diff --git a/menu_demo/button.c b/menu_demo/button.c index e63143a..588e0e1 100644 --- a/menu_demo/button.c +++ b/menu_demo/button.c @@ -9,6 +9,7 @@ #include #include "button.h" +#include "font.h" @@ -24,40 +25,41 @@ struct ButtonStruct ButtonCreate(int f_dXPos, int f_dYPos, int f_dWidth, int f_d l_sButton.m_dWidth = f_dWidth; // copy title - memcpy(l_sButton.m_pcTitle, f_pcTitle, sizeof(f_pcTitle)); + memset(&l_sButton.m_pcTitle, 0, sizeof(l_sButton.m_pcTitle)); + memcpy(l_sButton.m_pcTitle, f_pcTitle, strlen(f_pcTitle)); switch (f_iType) { case BUTTON_CLICK: - l_sButton.m_piImgNormal[0] = BitmapLoad("img/button_click_left.bmp"); - l_sButton.m_piImgNormal[1] = BitmapLoad("img/button_click_center.bmp"); - l_sButton.m_piImgNormal[2] = BitmapLoad("img/button_click_right.bmp"); + l_sButton.m_psImgNormal[0] = BitmapLoad("img/button_click_left.bmp"); + l_sButton.m_psImgNormal[1] = BitmapLoad("img/button_click_center.bmp"); + l_sButton.m_psImgNormal[2] = BitmapLoad("img/button_click_right.bmp"); - l_sButton.m_piImgHover[0] = BitmapLoad("img/button_click_left_hover.bmp"); - l_sButton.m_piImgHover[1] = BitmapLoad("img/button_click_center_hover.bmp"); - l_sButton.m_piImgHover[2] = BitmapLoad("img/button_click_right_hover.bmp"); + l_sButton.m_psImgHover[0] = BitmapLoad("img/button_click_left_hover.bmp"); + l_sButton.m_psImgHover[1] = BitmapLoad("img/button_click_center_hover.bmp"); + l_sButton.m_psImgHover[2] = BitmapLoad("img/button_click_right_hover.bmp"); - BitmapConvertWidth(&l_sButton.m_piImgNormal[0], f_dHeight); - BitmapConvertWidth(&l_sButton.m_piImgNormal[1], f_dHeight); - BitmapConvertWidth(&l_sButton.m_piImgNormal[2], f_dHeight); + BitmapConvertWidth(&l_sButton.m_psImgNormal[0], f_dHeight); + BitmapConvertWidth(&l_sButton.m_psImgNormal[1], f_dHeight); + BitmapConvertWidth(&l_sButton.m_psImgNormal[2], f_dHeight); - BitmapConvertWidth(&l_sButton.m_piImgHover[0], f_dHeight); - BitmapConvertWidth(&l_sButton.m_piImgHover[1], f_dHeight); - BitmapConvertWidth(&l_sButton.m_piImgHover[2], f_dHeight); + BitmapConvertWidth(&l_sButton.m_psImgHover[0], f_dHeight); + BitmapConvertWidth(&l_sButton.m_psImgHover[1], f_dHeight); + BitmapConvertWidth(&l_sButton.m_psImgHover[2], f_dHeight); // calculate (center)width of image - l_sButton.m_dCenterWidth = max(f_dWidth - l_sButton.m_piImgNormal[0].m_iWidth - l_sButton.m_piImgNormal[2].m_iWidth, 0); - l_sButton.m_dWidth = l_sButton.m_dCenterWidth + l_sButton.m_piImgNormal[0].m_iWidth + l_sButton.m_piImgNormal[2].m_iWidth; + l_sButton.m_dCenterWidth = max(f_dWidth - l_sButton.m_psImgNormal[0].m_iWidth - l_sButton.m_psImgNormal[2].m_iWidth, 0); + l_sButton.m_dWidth = l_sButton.m_dCenterWidth + l_sButton.m_psImgNormal[0].m_iWidth + l_sButton.m_psImgNormal[2].m_iWidth; break; case BUTTON_RADIO: - l_sButton.m_piImgNormal[0] = BitmapLoad("img/button_radio.bmp"); - l_sButton.m_piImgHover[0] = BitmapLoad("img/button_radio_hover.bmp"); - l_sButton.m_piImgPressed[0] = BitmapLoad("img/button_radio_pressed.bmp"); + l_sButton.m_psImgNormal[0] = BitmapLoad("img/button_radio.bmp"); + l_sButton.m_psImgHover[0] = BitmapLoad("img/button_radio_hover.bmp"); + l_sButton.m_psImgPressed[0] = BitmapLoad("img/button_radio_pressed.bmp"); - BitmapConvertWidth(&l_sButton.m_piImgNormal[0], f_dHeight); - BitmapConvertWidth(&l_sButton.m_piImgHover[0], f_dHeight); - BitmapConvertWidth(&l_sButton.m_piImgPressed[0], f_dHeight); + BitmapConvertWidth(&l_sButton.m_psImgNormal[0], f_dHeight); + BitmapConvertWidth(&l_sButton.m_psImgHover[0], f_dHeight); + BitmapConvertWidth(&l_sButton.m_psImgPressed[0], f_dHeight); l_sButton.m_dCenterWidth = 0; l_sButton.m_dHeight = f_dHeight; @@ -88,23 +90,23 @@ int ButtonGetType(struct ButtonStruct *f_sButton) void ButtonClickRender(struct ButtonStruct *f_sButton) { - char l_pcTitle[BUTTON_MAX_TITLE]; + char l_pcTitle[BUTTON_MAX_TITLE]; struct BitmapStruct *l_sImgButton; - int l_iImgWidth, l_iImageIdLeft, l_iImageIdCenter, l_iImageIdRight; + int l_iImgWidth, l_iImageIdLeft, l_iImageIdCenter, l_iImageIdRight; + int l_iLen, l_iXOffset, l_iYOffset; double l_dXOffset, l_dYOffset; - double l_dYCoordTop = 1; - double l_dYCoordBot = 0; - // copy button attributes double l_dCnWdt = f_sButton->m_dCenterWidth; double l_dHeight = f_sButton->m_dHeight; double l_dXPos = f_sButton->m_dXPos; double l_dYPos = f_sButton->m_dYPos; + l_iLen = (int)strlen(f_sButton->m_pcTitle); + l_iXOffset = (int)(0.5 * f_sButton->m_dWidth - 0.5 * l_iLen * FONT_SPACING); + l_iYOffset = (int)(0.5 * f_sButton->m_dHeight - 0.5 * FONT_HEIGHT); + if (f_sButton->m_bPressed) { - //l_dYCoordBot += l_dYCoordTop; - //l_dYCoordTop -= l_dYCoordTop; glColor3d(0.8, 0.9, 1); } else { @@ -113,10 +115,10 @@ void ButtonClickRender(struct ButtonStruct *f_sButton) // get the right image struct if (f_sButton->m_bHover) { - l_sImgButton = f_sButton->m_piImgHover; + l_sImgButton = f_sButton->m_psImgHover; } else { - l_sImgButton = f_sButton->m_piImgNormal; + l_sImgButton = f_sButton->m_psImgNormal; } // copy buttom images @@ -125,8 +127,7 @@ void ButtonClickRender(struct ButtonStruct *f_sButton) l_iImageIdRight = l_sImgButton[2].m_iImageId; // copy button title - memset(&l_pcTitle, 0, sizeof(l_pcTitle)); - memcpy(&l_pcTitle, f_sButton->m_pcTitle, sizeof(f_sButton->m_pcTitle)); + memcpy(&l_pcTitle, f_sButton->m_pcTitle, strlen(f_sButton->m_pcTitle)); // render left side of button glBindTexture(GL_TEXTURE_2D, l_iImageIdLeft); @@ -136,10 +137,10 @@ void ButtonClickRender(struct ButtonStruct *f_sButton) l_dYOffset = l_dYPos; glBegin(GL_TRIANGLE_STRIP); - glTexCoord2d(0, l_dYCoordTop); glVertex3d(l_dXOffset + 1, l_dYOffset, 0); - glTexCoord2d(1, l_dYCoordTop); glVertex3d(l_dXOffset + l_iImgWidth, l_dYOffset, 0); - glTexCoord2d(0, l_dYCoordBot); glVertex3d(l_dXOffset + 1, l_dYOffset + l_dHeight, 0); - glTexCoord2d(1, l_dYCoordBot); glVertex3d(l_dXOffset + l_iImgWidth, l_dYOffset + l_dHeight, 0); + glTexCoord2d(0, 1); glVertex3d(l_dXOffset + 1, l_dYOffset, 0); + glTexCoord2d(1, 1); glVertex3d(l_dXOffset + l_iImgWidth, l_dYOffset, 0); + glTexCoord2d(0, 0); glVertex3d(l_dXOffset + 1, l_dYOffset + l_dHeight, 0); + glTexCoord2d(1, 0); glVertex3d(l_dXOffset + l_iImgWidth, l_dYOffset + l_dHeight, 0); glEnd(); l_dXOffset = l_dXPos + l_iImgWidth + l_dCnWdt; @@ -150,10 +151,10 @@ void ButtonClickRender(struct ButtonStruct *f_sButton) l_iImgWidth = l_sImgButton[2].m_iWidth; glBegin(GL_TRIANGLE_STRIP); - glTexCoord2d(0, l_dYCoordTop); glVertex3d(l_dXOffset - 1, l_dYOffset, 0); - glTexCoord2d(1, l_dYCoordTop); glVertex3d(l_dXOffset + l_iImgWidth, l_dYOffset, 0); - glTexCoord2d(0, l_dYCoordBot); glVertex3d(l_dXOffset - 1, l_dYOffset + l_dHeight, 0); - glTexCoord2d(1, l_dYCoordBot); glVertex3d(l_dXOffset + l_iImgWidth, l_dYOffset + l_dHeight, 0); + glTexCoord2d(0, 1); glVertex3d(l_dXOffset - 1, l_dYOffset, 0); + glTexCoord2d(1, 1); glVertex3d(l_dXOffset + l_iImgWidth, l_dYOffset, 0); + glTexCoord2d(0, 0); glVertex3d(l_dXOffset - 1, l_dYOffset + l_dHeight, 0); + glTexCoord2d(1, 0); glVertex3d(l_dXOffset + l_iImgWidth, l_dYOffset + l_dHeight, 0); glEnd(); l_dXOffset = l_dXOffset - l_dCnWdt; @@ -164,10 +165,10 @@ void ButtonClickRender(struct ButtonStruct *f_sButton) glBindTexture(GL_TEXTURE_2D, l_iImageIdCenter); glBegin(GL_TRIANGLE_STRIP); - glTexCoord2d(0, l_dYCoordTop); glVertex3d(l_dXOffset - 1, l_dYOffset, 0); - glTexCoord2d(1, l_dYCoordTop); glVertex3d(l_dXOffset + l_dCnWdt, l_dYOffset, 0); - glTexCoord2d(0, l_dYCoordBot); glVertex3d(l_dXOffset - 1, l_dYOffset + l_dHeight, 0); - glTexCoord2d(1, l_dYCoordBot); glVertex3d(l_dXOffset + l_dCnWdt, l_dYOffset + l_dHeight, 0); + glTexCoord2d(0, 1); glVertex3d(l_dXOffset - 1, l_dYOffset, 0); + glTexCoord2d(1, 1); glVertex3d(l_dXOffset + l_dCnWdt, l_dYOffset, 0); + glTexCoord2d(0, 0); glVertex3d(l_dXOffset - 1, l_dYOffset + l_dHeight, 0); + glTexCoord2d(1, 0); glVertex3d(l_dXOffset + l_dCnWdt, l_dYOffset + l_dHeight, 0); glEnd(); } @@ -176,6 +177,10 @@ void ButtonClickRender(struct ButtonStruct *f_sButton) glColor3d(1, 1, 1); } + glPrint(f_sButton->m_dXPos + l_iXOffset, + f_sButton->m_dYPos + l_iYOffset, + f_sButton->m_pcTitle); + } // ButtonClickRender @@ -183,7 +188,7 @@ void ButtonClickRender(struct ButtonStruct *f_sButton) void ButtonRadioRender(struct ButtonStruct *f_sButton) { struct BitmapStruct *l_sImgButton; - int l_iImageId; + int l_iLen, l_iXOffset, l_iYOffset, l_iImageId; // copy button attributes double l_dWidth = f_sButton->m_dWidth; @@ -191,14 +196,20 @@ void ButtonRadioRender(struct ButtonStruct *f_sButton) double l_dXPos = f_sButton->m_dXPos; double l_dYPos = f_sButton->m_dYPos; + l_iLen = (int)strlen(f_sButton->m_pcTitle); + l_iXOffset = (int)(f_sButton->m_dWidth + FONT_SPACING); + l_iYOffset = (int)(0.5 * f_sButton->m_dHeight - 0.5 * FONT_HEIGHT); + + glColor3d(1, 1, 1); + // get the right image struct if (f_sButton->m_bHover) { - l_sImgButton = f_sButton->m_piImgHover; + l_sImgButton = f_sButton->m_psImgHover; } else { - l_sImgButton = f_sButton->m_piImgNormal; + l_sImgButton = f_sButton->m_psImgNormal; } // copy buttom images @@ -216,7 +227,7 @@ void ButtonRadioRender(struct ButtonStruct *f_sButton) if (f_sButton->m_bPressed) { - l_iImageId = f_sButton->m_piImgPressed[0].m_iImageId; + l_iImageId = f_sButton->m_psImgPressed[0].m_iImageId; glBindTexture(GL_TEXTURE_2D, l_iImageId); glBegin(GL_TRIANGLE_STRIP); @@ -227,6 +238,10 @@ void ButtonRadioRender(struct ButtonStruct *f_sButton) glEnd(); } + glPrint(f_sButton->m_dXPos + l_iXOffset, + f_sButton->m_dYPos + l_iYOffset, + f_sButton->m_pcTitle); + } // ButtonRadioRender diff --git a/menu_demo/button.h b/menu_demo/button.h index 454b77e..0708c1f 100644 --- a/menu_demo/button.h +++ b/menu_demo/button.h @@ -21,9 +21,9 @@ struct ButtonStruct { char m_pcTitle[BUTTON_MAX_TITLE]; // button images - struct BitmapStruct m_piImgNormal[BUTTON_MAX_IMGS]; - struct BitmapStruct m_piImgHover[BUTTON_MAX_IMGS]; - struct BitmapStruct m_piImgPressed[BUTTON_MAX_IMGS]; + struct BitmapStruct m_psImgNormal[BUTTON_MAX_IMGS]; + struct BitmapStruct m_psImgHover[BUTTON_MAX_IMGS]; + struct BitmapStruct m_psImgPressed[BUTTON_MAX_IMGS]; }; enum ButtonType { diff --git a/menu_demo/main.c b/menu_demo/main.c index ce07a15..31fdf2c 100644 --- a/menu_demo/main.c +++ b/menu_demo/main.c @@ -24,8 +24,22 @@ void init_gl(void) void render_scene(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glClearColor(0, 0, 0, 0.5); - + glClearColor(1, 1, 1, 1); + + //// render teapot + //glMatrixMode(GL_PROJECTION); + //glPushMatrix(); + // glLoadIdentity(); + // gluPerspective(45, 1.0, 1.0, 200.0); + // glMatrixMode(GL_MODELVIEW); + // glTranslated(0, 0, -5); + // glColor3d(1, 0, 0); + // glutSolidTeapot(1); + // glTranslated(0, 0, 5); + // glMatrixMode(GL_PROJECTION); + //glPopMatrix(); + + glClearColor(1, 1, 1, 1); MenuRender(); glutSwapBuffers(); diff --git a/menu_demo/menu.c b/menu_demo/menu.c index ce1a998..e6a15ee 100644 --- a/menu_demo/menu.c +++ b/menu_demo/menu.c @@ -9,6 +9,7 @@ #include "menu.h" #include "button.h" +#include "font.h" #define MENU_MAX_BUTTONS 16 @@ -56,8 +57,9 @@ void MenuInit(int f_iWinWidth, int f_iWinHeight) // init main menu g_sMenuMain.m_eMenuId = MENU_MAIN; - MenuAddButton(50, 50, 200, 100, "Start", BUTTON_CLICK); - MenuAddButton(300, 50, 200, 200, "Start", BUTTON_RADIO); + MenuAddButton(32, 16, 256, 128, "Button 1", BUTTON_CLICK); + MenuAddButton(32, 128, 256, 128, "Button 2", BUTTON_CLICK); + MenuAddButton(312, 16, 110, 110, "Radio 1", BUTTON_RADIO); // init start menu g_sMenuStart.m_eMenuId = MENU_START; @@ -70,6 +72,9 @@ void MenuInit(int f_iWinWidth, int f_iWinHeight) // set pointer to the current menu g_pCurMenu = &g_sMenuMain; + // init font + FontInit(f_iWinWidth, f_iWinHeight); + } // MenuInit @@ -87,14 +92,23 @@ void MenuRender(void) glPushMatrix(); glLoadIdentity(); - glOrtho(1, (GLfloat)g_iWinWidth, (GLfloat)g_iWinHeight, 0, 0, 1); + glOrtho(0, g_iWinWidth, g_iWinHeight, 0, 0, 1); glMatrixMode(GL_MODELVIEW); glEnable(GL_BLEND); - //glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); + //glBlendFunc(GL_ONE, GL_ZERO); + + //glColor4d(0.25, 0.5, 1, 0.1); + //glBegin(GL_TRIANGLE_STRIP); + // glVertex2i(0, 0); + // glVertex2i(g_iWinWidth, 0); + // glVertex2i(0, g_iWinHeight); + // glVertex2i(g_iWinWidth, g_iWinHeight); + //glEnd(); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - // render the buttons (mask) on the current menu + // render the buttons of the current menu i = 0; while (i < g_pCurMenu->m_iButtonCount) { @@ -108,7 +122,6 @@ void MenuRender(void) glMatrixMode(GL_PROJECTION); glPopMatrix(); - glMatrixMode(GL_MODELVIEW); } // MenuRender diff --git a/menu_demo/menu_demo.ncb b/menu_demo/menu_demo.ncb index 5134090..3e54d2d 100644 Binary files a/menu_demo/menu_demo.ncb and b/menu_demo/menu_demo.ncb differ diff --git a/menu_demo/menu_demo.suo b/menu_demo/menu_demo.suo index b0cd317..ddcf217 100644 Binary files a/menu_demo/menu_demo.suo and b/menu_demo/menu_demo.suo differ diff --git a/menu_demo/menu_demo.vcproj b/menu_demo/menu_demo.vcproj index 7bc27a1..79af145 100644 --- a/menu_demo/menu_demo.vcproj +++ b/menu_demo/menu_demo.vcproj @@ -187,6 +187,10 @@ > + + @@ -209,6 +213,10 @@ > + + -- cgit v0.12