void AppAnalog::loop() { byte h1, h2, m1, m2, m3, s1, s2, s3, d1, n1, len; bool h_c, m_c; dmd.selectFont(font8); h1 = time.Hour; m1 = time.Minute; s1 = time.Second; h_c = (h1 != HH); if (h_c) { if (HH == 99) HH = 0; h2 = HH; HH = h1; if (h1 > 11) h1 -= 12; if (h2 > 11) h2 -= 12; hourHand(h2, false); // set off for previous time hourHand(h1, true); /// set on for current time } m2 = (m1 == 0) ? 60 : m1; m2 = round(m2 / 5); if (m2 != M2) { m3 = M2; M2 = m2; minuteHand(m3, false); // set off for previous time minuteHand(m2, true); // set on for current time } m3 = (m1 % 5); if (m3 != M3) { M3 = m3; if (m3 == 0) dmd.drawLine(xo+1, yo+15, xo+5, yo+15, GRAPHICS_INVERSE); else dmd.drawLine(xo+1, yo+15, xo+m3, yo+15, GRAPHICS_NORMAL); // len = sprintf(buff, "%02d", m1); // dmd.drawString(xo+17, yo, buff, len, GRAPHICS_NORMAL); } s2 = (s1 == 0) ? 60 : s1; s2 = round(s2 / 5); if (s2 != S2) { s3 = S2; S2 = s2; secondHand(s3, false); // set off for previous time secondHand(s2, true); // set on for current time } s3 = (s1 % 5); if (s3 != S3) { S3 = s3; if (s3 == 0) dmd.drawLine(xo+9, yo+15, xo+13, yo+15, GRAPHICS_INVERSE); else dmd.drawLine(xo+14-s3, yo+15, xo+13, yo+15, GRAPHICS_NORMAL); // len = sprintf(buff, "%02d", s1); // dmd.drawString(xo+17, yo+8, buff, len, GRAPHICS_NORMAL); } // Show Month / Day if (h_c) { byte x; n1 = time.Month; d1 = time.Day; len = sprintf(buff, "%d", n1); x = (len == 1) ? 3 : 0; dmd.drawString(xo+17+x, yo, buff, len, GRAPHICS_NORMAL); len = sprintf(buff, "%d", d1); x = (len == 1) ? 3 : 0; dmd.drawString(xo+17+x, yo+8, buff, len, GRAPHICS_NORMAL); } }
int main() { //устанавливаем уровень сглаживания sf::ContextSettings settings; settings.antialiasingLevel = 8; //создаем окно приложения sf::RenderWindow window(sf::VideoMode(screenWidth, screenHeight), "My Analog Clock", sf::Style::Close, settings); float windowX = float(window.getSize().x); float windowY = float(window.getSize().y); //Определяем центр окна sf::Vector2f windowCenter = sf::Vector2f(windowX / 2.0f, windowY / 2.0f); //создаем точки sf::CircleShape dot[60]; createDots(dot,windowCenter); //создаем внешний контур sf::CircleShape clockCircle(clockCircleSize); //настраиваем внешний контур setCircle(&clockCircle,100, clockCircleThickness, sf::Color::Black,0, windowX / 2 + clockCircleThickness, windowY / 2 + clockCircleThickness); //создаем центральный круг sf::CircleShape centerCircle(10); //настраиваем центральный круг setCircle(¢erCircle, 100, 1, sf::Color::Yellow,1, windowX / 2, windowY / 2); //создаем стрелки sf::RectangleShape hourHand(sf::Vector2f(5, 150)); sf::RectangleShape minuteHand(sf::Vector2f(3, 200)); sf::RectangleShape secondsHand(sf::Vector2f(2, 220)); //массив стрелок sf::RectangleShape *strelki[3]; strelki[0] = &hourHand; strelki[1] = &minuteHand; strelki[2] = &secondsHand; //настройка стрелок setStrelki(strelki, windowCenter); //задний фон часов sf::Texture clockImage; if (!clockImage.loadFromFile("C:/Workshpase/Clock/fon.jpg")) { return EXIT_FAILURE; } clockCircle.setTexture(&clockImage); clockCircle.setTextureRect(sf::IntRect(40, 0, 500, 500)); while (window.isOpen()) { sf::Event event; while (window.pollEvent(event)) { if (event.type == sf::Event::Closed) window.close(); } //Поворачиваем стрелки moveStrelki(strelki); //Отрисовываем drawing(&window, dot, strelki, clockCircle, centerCircle); } return EXIT_SUCCESS; }