// // Draw_TString void Draw_TString(int x, int y, char *str) { TextBegin(network_text); DrawString(network_text, x, y, str); TextEnd(); } // end of the func
// gradient demos linear and radial gradients void gradient(int width, int height) { VGfloat x1, y1, x2, y2, cx, cy, fx, fy, r; VGfloat w = (VGfloat)width; VGfloat h = (VGfloat)height; VGfloat dotcolor[4] = {0, 0, 0, 0.3}; VGfloat stops[] = { 0.0, 1.0, 1.0, 1.0, 1.0, 0.5, 0.5, 0.5, 0.5, 1.0, 1.0, 0.0, 0.0, 0.0, 1.0 }; x1 = w/8; x2 = (w*3)/8; y1 = h/3; y2 = (h*2)/3; cx = (w*3)/4; cy = (h/2); r = (x2-x1); fx = cx + (r/4); fy = cy + (r/4); Start(w, h); Background(128, 128, 128); FillLinearGradient(x1, y1, x2, y2, stops, 3); Rect(x1, y1, x2-x1, y2-y1); FillRadialGradient(cx, cy, fx, fy, r, stops, 3); Circle(cx, cy, r); RGBA(.5, 0, 0, 0.3, dotcolor); setfill(dotcolor); Circle(x1, y1, 10); Circle(x2, y2, 10); Circle(cx, cy, 10); Circle(cx+r/2, cy, 10); Circle(fx, fy, 10); RGB(0,0,0,dotcolor); setfill(dotcolor); TextMid(x1, y1-20, "(x1, y1)", 18); TextMid(x2, y2+10, "(x2, y2)", 18); TextMid(cx, cy, "(cx, cy)", 18); TextMid(fx, fy, "(fx, fy)", 18); TextEnd(cx+(r/2)+20, cy, "r", 18); TextMid(x1+((x2-x1)/2), h/6, "Linear Gradient", 36); TextMid(cx, h/6, "Radial Gradient", 36); End(); }
// // Print_Score // void Print_Score(void) { int i = 0; char buffer[80]; int x,y; for (i = 0; i < MAX_SCORE_DISPLAY; i++) { sprintf(buffer, "P%d %0.2f %d\n", ant_globals->score_obj[i].name, ant_globals->score_obj[i].score, ant_globals->score_obj[i].kills); TextBegin(score_text); DrawString(score_text, 10, 4+(i*10), buffer); TextEnd(); } // end of the for // Also, print frames per second sprintf(buffer, "FPS: %0.2f", framerate); TextBegin(score_text); DrawString(score_text, 500, 4, buffer); TextEnd(); // And the score and health sprintf(buffer, "Armor: %0.2f", ant_globals->player_health); TextBegin(score_text); DrawString(score_text, 300, 4, buffer); TextEnd(); // Print the current position sprintf(buffer, "%d/%d Bots", ant_globals->alive_bots, (MAX_FIRE_ANTS-1)); TextBegin(score_text); DrawString(score_text, 300, 14, buffer); TextEnd(); // Print some paused text if (ant_globals->paused) { // find the correct x pos x = 12 * 8; x /= 2; x = (SCREEN_WIDTH/2) - x; y = (SCREEN_HEIGHT / 2); // And the score and health sprintf(buffer, "- PAUSED -", ant_globals->player_health); TextBegin(score_text); DrawString(score_text, x, y, buffer); TextEnd(); sprintf(buffer, "(GLANTS)"); TextBegin(score_text); DrawString(score_text, x+8, y+10, buffer); TextEnd(); } // end of the if } // end of the function
void show_osd(int played, int duration, char* title) { if (MAIN_OSD == NULL) { // Calling ``init_osd`` everytime seems wasteful, but it is needed to // ensure that the OSD is visible. The main issue is that if the player // is stopped and then restarted, the graphics library needs to be // reinitalized, otherwise the OSD is not drawn ontop of the video. init_osd(); } OSD* osd = MAIN_OSD; if (played > duration) { played = duration; } osd->duration = duration; osd->played = played; osd->title = title; Start(osd->width, osd->height); Fill(255,255,255,1); Text(32, 120+82+20, "PAUSED", OpenSansBold, 16); // Main OSD background Fill(0, 0, 0, 0.5); Roundrect(22, 82, osd->width-44, 120, 15, 15); /////////////////////////////////////////////////////////////////////// // Header /////////////////////////////////////////////////////////////////////// Fill(0, 0, 0, 1); Roundrect(22, 120+82-20, osd->width-44, 20, 15, 15); // Top of the header Rect(22, 120+82-(54+10), osd->width-44, 54); // Bottom of header // Current time get_time(osd->time_now, 0); Fill(102, 102, 102, 1); Text(46, 162, osd->time_now, OpenSansSemiBold, 14); // End time if (duration > 0) { get_time(osd->time_end, osd->duration-osd->played); TextEnd(osd->width-46, 162, osd->time_end, OpenSansSemiBold, 14); } // Title text Fill(255, 255, 255, 1); int title_width = TextWidth(osd->title, OpenSansSemiBold, 20); Text((osd->width/2)-(title_width/2), 162, osd->title, OpenSansSemiBold, 20); /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// // Progress Bar /////////////////////////////////////////////////////////////////////////// if (duration > 0) { int pbar_width = osd->width-288; float pct_player = (float)played/duration; Fill(255, 255, 255, 0.2); // Transparent bg Roundrect(142, 102, pbar_width, 12, 10, 10); // Centered Fill(209, 125, 30, 1); // Orange bar (progress) Roundrect(142, 102, pbar_width*pct_player, 12, 10, 10); // Left justified // Progress text seconds_to_str(osd->pos_now, osd->played); seconds_to_str(osd->pos_end, osd->duration-osd->played); // Text shadow Fill(0, 0, 0, 1); Text(46-1, 102-1, osd->pos_now, OpenSansSemiBold, 12); TextEnd(osd->width-46-1, 102-1, osd->pos_end, OpenSansSemiBold, 12); // Actual text Fill(255,255,255,1); Text(46, 102, osd->pos_now, OpenSansSemiBold, 12); TextEnd(osd->width-46, 102, osd->pos_end, OpenSansSemiBold, 12); } ////////////////////////////////////////////////////////////////////// End(); }
// // Draw_NetworkScreen // void Draw_NetworkScreen(void) { const float box_x_min = 50.0f; const float box_x_max = 500.0f; const float box_y_min = 50.0f; const float box_y_max = 440.0f; const float msg_y = box_y_max - 32.0f; char buffer[80]; glDisable(GL_TEXTURE_2D); // Draw a blue screen // in the background glColor3ub(20, 120, 235); glLineWidth(3.0f); glBegin(GL_QUADS); glVertex3f(box_x_min, box_y_min, 0.0f); glVertex3f(box_x_max, box_y_min, 0.0f); glVertex3f(box_x_max, box_y_max, 0.0f); glVertex3f(box_x_min, box_y_max, 0.0f); glEnd(); // draw outline around object glColor3ub(255, 255, 255); glBegin(GL_LINE_LOOP); glVertex3f(box_x_min, box_y_min, 0.0f); glVertex3f(box_x_max, box_y_min, 0.0f); glVertex3f(box_x_max, box_y_max, 0.0f); glVertex3f(box_x_min, box_y_max, 0.0f); glEnd(); // The next line // will be used for the message screen glBegin(GL_LINE_LOOP); glVertex3f(box_x_min, msg_y, 0.0f); glVertex3f(box_x_max, msg_y, 0.0f); glEnd(); glLineWidth(1.0f); // before drawing the name, save selection Display_NetSel(network_str_); // Print the actual text Setup_NetMenu(CLIENT_NET_MENU, END_CLIENT_NET, VERT_TYPE_); Setup_NetMenu(C_HORZ_MENU, END_CLIENT_NET, HORZ_TYPE_); Setup_NetMenu(N_TITLE_X, N_TITLE_YY2, SERVER_SETTINGS); Setup_NetMenu(SERVER_NET_MENU, END_SERVER_NET, VERT_TYPE_); Setup_NetMenu(S_SERV_HORZ, E_SERV_HORZ, HORZ_TYPE_); // Draw the static text TextBegin(network_text); DrawString(network_text, T_COL_6, T_ROW_1, network_str_[_TEXT_CONNECT_]); TextEnd(); TextBegin(network_text); DrawString(network_text, T_COL_7, T_ROW_1, network_str_[_TEXT_DISCONNECT_]); TextEnd(); // Server buttons -- TextBegin(network_text); DrawString(network_text, T_COL_6, T_ROW_2, network_str_[_TEXT_START_]); TextEnd(); TextBegin(network_text); DrawString(network_text, T_COL_7, T_ROW_2, network_str_[_TEXT_SHUTDOWN_]); TextEnd(); // And at the bottom // the network and help screens and messages TextBegin(network_text); // get network message Get_NetworkMsg(buffer); DrawString(network_text, TEXT_HORZ_START, T_ROW_3, buffer); TextEnd(); // print connections if there are any printConnections(); } // end of the functino
// // Set_Net_Menu(int // - setup the horizontal or vertical positions // and draw the text -- // static void Setup_NetMenu(int start_pos, int end_pos, int h_type) { int i; float horz_pos; float vert_pos; // // set the text changes before the code below switch(h_type) { case HORZ_TYPE_: // we only have two diferent cases to handle if (start_pos == C_HORZ_MENU) { horz_pos = TEXT_HORZ_START; vert_pos = TXT_V_START; TextBegin(network_text); DrawString(network_text, horz_pos, vert_pos, network_str_[C_HORZ_MENU]); TextEnd(); // next col -- horz_pos = T_COL_1; vert_pos = TXT_V_START; TextBegin(network_text); DrawString(network_text, horz_pos, vert_pos, network_str_[C_HORZ_MENU+1]); TextEnd(); // next col -- horz_pos = T_COL_2; vert_pos = TXT_V_START; TextBegin(network_text); DrawString(network_text, horz_pos, vert_pos, network_str_[C_HORZ_MENU+2]); TextEnd(); // next col -- horz_pos = T_COL_3; vert_pos = TXT_V_START; TextBegin(network_text); DrawString(network_text, horz_pos, vert_pos, network_str_[C_HORZ_MENU+3]); TextEnd(); // next col -- horz_pos = T_COL_4; vert_pos = TXT_V_START; TextBegin(network_text); DrawString(network_text, horz_pos, vert_pos, network_str_[C_HORZ_MENU+4]); TextEnd(); // next col -- horz_pos = T_COL_5; vert_pos = TXT_V_START; TextBegin(network_text); DrawString(network_text, horz_pos, vert_pos, network_str_[C_HORZ_MENU+5]); TextEnd(); } // end of the else { horz_pos = TEXT_HORZ_START; vert_pos = TXT_V_STARTYY2; TextBegin(network_text); DrawString(network_text, horz_pos, vert_pos, network_str_[S_SERV_HORZ]); TextEnd(); // next col horz_pos = T_COL_1; vert_pos = TXT_V_STARTYY2; TextBegin(network_text); DrawString(network_text, horz_pos, vert_pos, network_str_[S_SERV_HORZ+1]); TextEnd(); horz_pos = T_COL_2; vert_pos = TXT_V_STARTYY2; TextBegin(network_text); DrawString(network_text, horz_pos, vert_pos, network_str_[S_SERV_HORZ+2]); TextEnd(); horz_pos = T_COL_3; vert_pos = TXT_V_STARTYY2; TextBegin(network_text); DrawString(network_text, horz_pos, vert_pos, network_str_[S_SERV_HORZ+3]); TextEnd(); } // end of the if-else break; case VERT_TYPE_: if (start_pos == CLIENT_NET_MENU) vert_pos = TEXT_VERT_START; else vert_pos = TEXT_VERT_STARTY2; for (i = start_pos; i <= end_pos; i++) { TextBegin(network_text); DrawString(network_text, TEXT_HORZ_START, vert_pos, network_str_[i]); TextEnd(); vert_pos = vert_pos + TEXT_VERT_HEIGHT; } // end of the for break; case STAT_TYPE_: break; case SERVER_SETTINGS: TextBegin(network_text); DrawString(network_text, start_pos, end_pos, network_str_[SERVER_SETTINGS]); TextEnd(); break; case CLIENT_SETTINGS: TextBegin(network_text); DrawString(network_text, start_pos, end_pos, network_str_[CLIENT_SETTINGS]); TextEnd(); break; }; } // end of the function
// refcard shows a reference card of shapes void refcard(int width, int height) { char *shapenames[] = { "Circle", "Ellipse", "Rectangle", "Rounded Rectangle", "Line", "Polyline", "Polygon", "Arc", "Quadratic Bezier", "Cubic Bezier", "Image" }; VGfloat shapecolor[4]; RGB(202, 225, 255, shapecolor); VGfloat top = height * .95, sx = 500, sy = top, sw = width * .05, sh = height * .045, dotsize = 7, spacing = 2.0; int i, ns = sizeof(shapenames) / sizeof(char *), fontsize = height * .033; Start(width, height); sx = width * 0.10; Fill(128, 0, 0, 1); TextEnd(width - 20, height / 2, "OpenVG on the Raspberry Pi", fontsize + (fontsize / 2)); Fill(0, 0, 0, 1); for (i = 0; i < ns; i++) { Text(sx + sw + sw / 2, sy, shapenames[i], fontsize); sy -= sh * spacing; } sy = top; VGfloat cx = sx + (sw / 2), ex = sx + sw; setfill(shapecolor); Circle(cx, sy, sw); coordpoint(cx, sy, dotsize, shapecolor); sy -= sh * spacing; Ellipse(cx, sy, sw, sh); coordpoint(cx, sy, dotsize, shapecolor); sy -= sh * spacing; Rect(sx, sy, sw, sh); coordpoint(sx, sy, dotsize, shapecolor); sy -= sh * spacing; Roundrect(sx, sy, sw, sh, 20, 20); coordpoint(sx, sy, dotsize, shapecolor); sy -= sh * spacing; StrokeWidth(1); Stroke(204, 204, 204, 1); Line(sx, sy, ex, sy); coordpoint(sx, sy, dotsize, shapecolor); coordpoint(ex, sy, dotsize, shapecolor); sy -= sh; VGfloat px[5] = { sx, sx + (sw / 4), sx + (sw / 2), sx + ((sw * 3) / 4), sx + sw }; VGfloat py[5] = { sy, sy - sh, sy, sy - sh, sy }; Polyline(px, py, 5); coordpoint(px[0], py[0], dotsize, shapecolor); coordpoint(px[1], py[1], dotsize, shapecolor); coordpoint(px[2], py[2], dotsize, shapecolor); coordpoint(px[3], py[3], dotsize, shapecolor); coordpoint(px[4], py[4], dotsize, shapecolor); sy -= sh * spacing; py[0] = sy; py[1] = sy - sh; py[2] = sy - (sh / 2); py[3] = py[1] - (sh / 4); py[4] = sy; Polygon(px, py, 5); sy -= (sh * spacing) + sh; Arc(sx + (sw / 2), sy, sw, sh, 0, 180); coordpoint(sx + (sw / 2), sy, dotsize, shapecolor); sy -= sh * spacing; VGfloat cy = sy + (sh / 2), ey = sy; Qbezier(sx, sy, cx, cy, ex, ey); coordpoint(sx, sy, dotsize, shapecolor); coordpoint(cx, cy, dotsize, shapecolor); coordpoint(ex, ey, dotsize, shapecolor); sy -= sh * spacing; ey = sy; cy = sy + sh; Cbezier(sx, sy, cx, cy, cx, sy, ex, ey); coordpoint(sx, sy, dotsize, shapecolor); coordpoint(cx, cy, dotsize, shapecolor); coordpoint(cx, sy, dotsize, shapecolor); coordpoint(ex, ey, dotsize, shapecolor); sy -= (sh * spacing * 1.5); Image(sx, sy, 100, 100, "starx.jpg"); End(); }
BOOL WINPROC EXPORT DlgTextProc( /***********************************************************************/ HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) { int i; WORD wKey; HFONT hFont; STRING szString; switch (msg) { case WM_INITDIALOG: RibbonInit( hDlg ); ColorInit( hDlg ); GetFonts( hDlg ); CheckRadioButton( hDlg, IDC_TEXT_T1, IDC_TEXT_T10, Text.nFont+IDC_TEXT_T1 ); Text.Size = 48; InitSlide( hDlg, IDC_TEXT_SIZE, Text.Size, 24, 200 ); Text.Angle = 0; InitSlide( hDlg, IDC_TEXT_ANGLE, 0, -2, 2 ); ControlEnable(hDlg, IDC_TEXT_ANGLE, TextCanRotate(hDlg, Text.nFont)); for ( i=0; i<max(10,Text.nFont); i++ ) { hFont = CreateFont( /* Height */ 45, /* Width */ 0, /* Escapement */ 0, /* Orientation */ 0, /* Weight */ FW_NORMAL, /* Italic */ FALSE, /* UnderLine */ FALSE, /* StrikeOut */ FALSE, /* CharSet */ Text.lpFontList[i].fdCharSet, /* Output Precis */ OUT_CHARACTER_PRECIS, /* Clip Precis */ CLIP_DEFAULT_PRECIS, /* Quality */ PROOF_QUALITY, /* PitchAndFamily */ Text.lpFontList[i].fdPitchAndFamily, /* Face */ Text.lpFontList[i].fdFaceName ); if ( hFont ) SendDlgItemMessage( hDlg, IDC_TEXT_T1+i, WM_SETFONT, (WPARAM)hFont, 0L ); } if ( lpImage ) { bTextBegun = TextBegin( lpImage->hWnd, 10/*x*/, 40/*y*/ ); Tool.bActive = YES; SetFocus( lpImage->hWnd ); } else bTextBegun = NO; // fall thru case WM_CONTROLENABLE: case WM_DOCACTIVATED: break; case WM_DESTROY: if ( bTextBegun ) { if ( lpImage ) { TextEnd( lpImage->hWnd, NO/*fCancel*/ ); Tool.bActive = NO; AstralUpdateWindow( lpImage->hWnd ); } bTextBegun = NO; } for ( i=0; i<max(10,Text.nFont); i++ ) { if ( hFont = (HFONT)SendDlgItemMessage( hDlg, IDC_TEXT_T1+i, WM_GETFONT, (WPARAM)0, 0L ) ) DeleteObject( hFont ); } if ( Text.lpFontList ) { FreeUp((LPTR)Text.lpFontList); Text.lpFontList = NULL; } break; case WM_CHAR: if ( !lpImage || !bTextBegun ) return( FALSE ); TextSetFocus(); wKey = (WORD)lParam; TextKeystroke( lpImage->hWnd, wKey ); if ( wKey == VK_RETURN ) { TextAnchor( lpImage->hWnd ); RandomizeActiveColor(); break; } szString[0] = '_'; szString[1] = wKey; szString[2] = '\0'; Lowercase( szString ); SoundStartResource( szString, NO/*bLoop*/, NULL/*hInstance*/ ); break; case WM_KEYDOWN: if ( !lpImage || !bTextBegun ) return( FALSE ); wKey = lParam; switch (wKey) { case VK_UP: TextRMove( lpImage->hWnd, 0, -1 ); break; case VK_DOWN: TextRMove( lpImage->hWnd, 0, 1); break; case VK_LEFT: TextRMove( lpImage->hWnd, -1, 0); break; case VK_RIGHT: TextRMove( lpImage->hWnd, 1, 0); break; default: break; } break; case WM_SETCURSOR: return( SetupCursor( wParam, lParam, IDD_TEXT ) ); case WM_ERASEBKGND: break; // handle ERASEBKGND and do nothing; PAINT covers everything case WM_PAINT: LayoutPaint( hDlg ); break; case WM_CLOSE: AstralDlgEnd( hDlg, FALSE ); break; case WM_MEASUREITEM: case WM_DRAWITEM: return( OwnerDraw( hDlg, msg, lParam, NO ) ); case WM_CTLCOLOR: // We don't get this message // Print( "%u", HIWORD(lParam) ); // if ( HIWORD(lParam) == CTLCOLOR_BTN ) // { // SetTextColor( (HDC)wParam, RGB(0,0,255) ); // Blue text... // SetBkColor( (HDC)wParam, RGB(255,255,255) ); // on a white background // return( GetStockObject(WHITE_BRUSH) ); // } return( (BOOL)SetControlColors( (HDC)wParam, hDlg, (HWND)LOWORD(lParam), HIWORD(lParam) ) ); case WM_COMMAND: switch (wParam) { case IDC_ACTIVECOLOR: case IDC_COLORS_TEXT: ColorCommand( hDlg, wParam, lParam ); TextSetFocus(); if (bTextBegun) TextFontChanged(lpImage->hWnd); break; case IDC_TEXT_T1: case IDC_TEXT_T2: case IDC_TEXT_T3: case IDC_TEXT_T4: case IDC_TEXT_T5: case IDC_TEXT_T6: case IDC_TEXT_T7: case IDC_TEXT_T8: case IDC_TEXT_T9: case IDC_TEXT_T10: CheckRadioButton( hDlg, IDC_TEXT_T1, IDC_TEXT_T10, wParam ); Text.nFont = wParam - IDC_TEXT_T1; ControlEnable(hDlg, IDC_TEXT_ANGLE, TextCanRotate(hDlg, Text.nFont)); TextSetFocus(); if (bTextBegun) TextFontChanged(lpImage->hWnd); break; case IDC_TEXT_SIZE: Text.Size = HandleSlide( hDlg, (ITEMID)wParam, (UINT)lParam, NULL ); Text.Size = bound( Text.Size, 16, 216 ); if ( !LBUTTON ) TextSetFocus(); if (bTextBegun) TextFontChanged(lpImage->hWnd); break; case IDC_TEXT_ANGLE: i = HandleSlide( hDlg, (ITEMID)wParam, (UINT)lParam, NULL ); // -2 to 2 Text.Angle = (i * 45); if ( Text.Angle < 0 ) Text.Angle += 360; i = (Text.Angle + 22) / 45; // down to 0-8 if ( i > 4 ) i = bound( i - 8, -2, 0 ); else i = bound( i, 0, 2 ); SetSlide( hDlg, wParam, i ); if ( !LBUTTON ) TextSetFocus(); if (bTextBegun) TextFontChanged(lpImage->hWnd); break; default: return( FALSE ); } default: return( FALSE ); } return( TRUE ); }