init
This commit is contained in:
commit
4f2a5c87ad
6 changed files with 911 additions and 0 deletions
187
main.cpp
Normal file
187
main.cpp
Normal file
|
|
@ -0,0 +1,187 @@
|
|||
#include <iostream> // for standard input/output
|
||||
#include <windows.h>
|
||||
using namespace std; // using the standard namespace
|
||||
|
||||
#include <SFML/Graphics.hpp> // include the SFML Graphics Library
|
||||
#include <SFML/Audio.hpp>
|
||||
#include <cmath>
|
||||
|
||||
using namespace sf; // using the sf namespace
|
||||
|
||||
void makeLines(float scale, RenderWindow &window, vector<RectangleShape> &lines) {
|
||||
lines.clear();
|
||||
|
||||
for (float i = 0; i <= window.getSize().x; i+=scale) {
|
||||
float height = 0;
|
||||
|
||||
if (i/(100*scale) == round(i/(100*scale))) {
|
||||
height = window.getSize().y/2.0;
|
||||
} else if (i/(50*scale) == round(i/(50*scale))) {
|
||||
height = window.getSize().y/4.0 * 1.5;
|
||||
} else if (i/(5*scale) == round(i/(5*scale))) {
|
||||
height = window.getSize().y/4.0;
|
||||
}
|
||||
|
||||
if (height != 0) {
|
||||
lines.emplace_back(Vector2f(2, height));
|
||||
lines[lines.size() - 1].setFillColor(Color::Black);
|
||||
lines[lines.size() - 1].setPosition(i - 1, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void setMeasurement(Text &measurement, Text &unit, float scale, vector<RectangleShape> &lines, RenderWindow &window) {
|
||||
measurement.setString(to_string((int) round(window.getSize().x / scale)));
|
||||
|
||||
if (measurement.getGlobalBounds().width + 10 + 7 + unit.getGlobalBounds().width < window.getSize().x/2) {
|
||||
measurement.setOrigin(measurement.getGlobalBounds().width / 2.0, measurement.getGlobalBounds().height / 2.0);
|
||||
measurement.setPosition(window.getSize().x / 2.0, 3 * window.getSize().y / 4.0);
|
||||
unit.setPosition(measurement.getPosition().x + measurement.getGlobalBounds().width / 2.0 + 7, measurement.getPosition().y + measurement.getGlobalBounds().height / 2.0 - unit.getGlobalBounds().height);
|
||||
} else {
|
||||
measurement.setOrigin(0, measurement.getGlobalBounds().height / 2.0);
|
||||
measurement.setPosition(5, 3 * window.getSize().y / 4.0);
|
||||
unit.setPosition(measurement.getPosition().x + measurement.getGlobalBounds().width + 7, measurement.getPosition().y + measurement.getGlobalBounds().height / 2.0 - unit.getGlobalBounds().height);
|
||||
}
|
||||
|
||||
makeLines(scale, window, lines);
|
||||
}
|
||||
|
||||
int main() {
|
||||
ShowWindow(FindWindowA("ConsoleWindowClass", NULL), false);
|
||||
|
||||
// create a RenderWindow object
|
||||
RenderWindow window( VideoMode(500, 64), "Pixel Ruler", Style::None);
|
||||
|
||||
bool dragging = false;
|
||||
bool sizing = false;
|
||||
|
||||
float scale = 1;
|
||||
|
||||
//********************************************
|
||||
// PLACE ANY FILE INPUT PROCESSING BELOW HERE
|
||||
//********************************************
|
||||
RectangleShape dragBox(Vector2f(8, 8));
|
||||
dragBox.setPosition(window.getSize().x - dragBox.getSize().x - 1, window.getSize().y - dragBox.getSize().y - 1);
|
||||
dragBox.setOutlineColor(Color::Black);
|
||||
dragBox.setOutlineThickness(1);
|
||||
RectangleShape sizeBox(Vector2f(8, 8));
|
||||
sizeBox.setPosition(window.getSize().x - dragBox.getSize().x - 1, window.getSize().y - 2 * dragBox.getSize().y - 1);
|
||||
sizeBox.setOutlineColor(Color::Black);
|
||||
sizeBox.setOutlineThickness(1);
|
||||
|
||||
Font arial;
|
||||
arial.loadFromFile("./data/arial.ttf");
|
||||
Text measurement(to_string(window.getSize().x), arial);
|
||||
measurement.setFillColor(Color::Black);
|
||||
measurement.setCharacterSize(16);
|
||||
measurement.setOrigin(measurement.getGlobalBounds().width/2.0, measurement.getGlobalBounds().height/2.0);
|
||||
measurement.setPosition(window.getSize().x/2.0, 3*window.getSize().y/4.0);
|
||||
Text unit("px", arial);
|
||||
unit.setFillColor(Color::Black);
|
||||
unit.setCharacterSize(12);
|
||||
unit.setPosition(measurement.getPosition().x + measurement.getGlobalBounds().width/2.0 + 7, measurement.getPosition().y + measurement.getGlobalBounds().height/2.0 - unit.getGlobalBounds().height);
|
||||
|
||||
vector<RectangleShape> lines;
|
||||
makeLines(scale, window, lines);
|
||||
|
||||
Cursor arrow;
|
||||
arrow.loadFromSystem(Cursor::Arrow);
|
||||
Cursor stretch;
|
||||
stretch.loadFromSystem(Cursor::SizeHorizontal);
|
||||
Cursor reposition;
|
||||
reposition.loadFromSystem(Cursor::SizeAll);
|
||||
//********************************************
|
||||
// PLACE ANY FILE INPUT PROCESSING ABOVE HERE
|
||||
//********************************************
|
||||
|
||||
// while our window is open, keep it open
|
||||
// this is our draw loop
|
||||
while( window.isOpen() ) {
|
||||
window.clear( Color(186, 140, 99) ); // clear the contents of the old frame
|
||||
// by setting the window to black
|
||||
|
||||
//****************************************
|
||||
// ADD ALL OF OUR DRAWING BELOW HERE
|
||||
//****************************************
|
||||
if (dragging) {
|
||||
window.setMouseCursor(reposition);
|
||||
window.setPosition(Vector2i(sf::Mouse::getPosition().x - dragBox.getPosition().x - dragBox.getSize().x/2, sf::Mouse::getPosition().y - dragBox.getPosition().y - dragBox.getSize().y/2));
|
||||
} else if (sizing) {
|
||||
window.setMouseCursor(stretch);
|
||||
window.setSize(Vector2<unsigned int>(sf::Mouse::getPosition().x - window.getPosition().x + sizeBox.getSize().x/2, window.getSize().y));
|
||||
sf::FloatRect view(0, 0, window.getSize().x, window.getSize().y);
|
||||
window.setView(View(view));
|
||||
dragBox.setPosition(window.getSize().x - dragBox.getSize().x - 1, window.getSize().y - dragBox.getSize().y - 1);
|
||||
sizeBox.setPosition(window.getSize().x - dragBox.getSize().x - 1, window.getSize().y - 2 * dragBox.getSize().y - 1);
|
||||
|
||||
setMeasurement(measurement, unit, scale, lines, window);
|
||||
} else {
|
||||
sf::Vector2f mousePosF(static_cast<float>( sf::Mouse::getPosition(window).x ), static_cast<float>( sf::Mouse::getPosition(window).y ));
|
||||
if (dragBox.getGlobalBounds().contains(mousePosF)) {
|
||||
window.setMouseCursor(reposition);
|
||||
} else if (sizeBox.getGlobalBounds().contains(mousePosF)) {
|
||||
window.setMouseCursor(stretch);
|
||||
} else {
|
||||
window.setMouseCursor(arrow);
|
||||
}
|
||||
}
|
||||
|
||||
window.draw(dragBox);
|
||||
window.draw(sizeBox);
|
||||
window.draw(measurement);
|
||||
window.draw(unit);
|
||||
|
||||
for (auto l : lines) {
|
||||
window.draw(l);
|
||||
}
|
||||
//****************************************
|
||||
// ADD ALL OF OUR DRAWING ABOVE HERE
|
||||
//****************************************
|
||||
window.display(); // display the window
|
||||
|
||||
//****************************************
|
||||
// HANDLE EVENTS BELOW HERE
|
||||
//****************************************
|
||||
Event event;
|
||||
while( window.pollEvent(event) ) { // ask the window if any events occurred
|
||||
if( event.type == Event::Closed ) { // if event type is a closed event
|
||||
// i.e. they clicked the X on the window
|
||||
window.close(); // then close our window
|
||||
} else if (event.type == Event::MouseButtonPressed) {
|
||||
sf::Vector2f mousePosF(static_cast<float>( sf::Mouse::getPosition(window).x ), static_cast<float>( sf::Mouse::getPosition(window).y ));
|
||||
if (dragBox.getGlobalBounds().contains(mousePosF)) {
|
||||
dragging = true;
|
||||
} else if (sizeBox.getGlobalBounds().contains(mousePosF)) {
|
||||
sizing = true;
|
||||
}
|
||||
} else if (event.type == Event::MouseButtonReleased) {
|
||||
dragging = false;
|
||||
sizing = false;
|
||||
} else if (event.type == Event::MouseWheelScrolled) {
|
||||
if (Mouse::getPosition(window).x > 0 && Mouse::getPosition(window).y > 0 && Mouse::getPosition(window).x <= window.getSize().x && Mouse::getPosition(window).y <= window.getSize().y) {
|
||||
if (event.mouseWheelScroll.delta > 0) {
|
||||
scale += 0.5;
|
||||
} else if (scale > 0.5) {
|
||||
scale -= 0.5;
|
||||
}
|
||||
|
||||
if (scale != 1) {
|
||||
string unitLabel = to_string(scale);
|
||||
if (round(scale) == scale) {
|
||||
unitLabel = unitLabel.substr(0,unitLabel.find('.'));
|
||||
} else {
|
||||
unitLabel = unitLabel.substr(0,unitLabel.find('0', unitLabel.find('.')));
|
||||
}
|
||||
|
||||
unit.setString("px\tx" + unitLabel);
|
||||
} else
|
||||
unit.setString("px");
|
||||
|
||||
setMeasurement(measurement, unit, scale, lines, window);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return EXIT_SUCCESS; // report our program exited successfully
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue