void dial_view::mouseMoveEvent(QGraphicsSceneMouseEvent *event) { o_dial_widget->mInitPos = event->pos(); QLineF line(boundingRect().center(), o_dial_widget->mInitPos); QLineF base_line(boundingRect().width() / 2, 0.0, boundingRect().center().x(), boundingRect().center().y()); o_dial_widget->mAngle = angle_to(line, base_line) - 180; o_dial_widget->m_is_pressed = 1; update(); std::for_each(std::begin(o_dial_widget->m_on_dial_callback_list), std::end(o_dial_widget->m_on_dial_callback_list), [=](on_dial_callback_func a_func) { if (a_func) a_func(o_dial_widget->mProgressValue); }); }
ts::Vector2<double> ts::graphics::Text::character_position(std::size_t index) const { if (geometry_.dirty) { update_geometry(); } if (index >= geometry_.character_offsets.size()) { return Vector2<double>(); } Vector2<double> result; result.x = geometry_.character_offsets[index]; result.y = base_line(index); return result; }
//RAII constructor Curve(const std::vector<vec2>& _vertexes) { const int size = _vertexes.size(); vertexes.resize(size); for (int i = 0; i < size; i++) vertexes[i] = curve_vertex(_vertexes[i]); std::sort(vertexes.begin(), vertexes.end(), [](const curve_vertex& v1, const curve_vertex& v2) -> bool {return v1.x < v2.x; }); line base_line(vertexes[0], vertexes[size - 1]); //path tracing int next_vertex_index = -1; int p = 0; while (next_vertex_index != size - 1) { for (int i = p + 1; i < size; i++) { float vertex_check_result = base_line.vertex_check(vertexes[i]); if (vertex_check_result >= 0.0f || floats_equal(vertex_check_result, 0.0f)) { vertexes[p].next_vertex_index = i; next_vertex_index = i; p = next_vertex_index; } } } //reverse path tracing next_vertex_index = -1; p = size - 1;; while (next_vertex_index != 0) { for (int i = p - 1; i >= 0; i--) { float vertex_check_result = base_line.vertex_check(vertexes[i]); if (vertex_check_result < 0.0f || floats_equal(vertex_check_result, 0.0f)) { vertexes[p].next_vertex_index = i; next_vertex_index = i; p = next_vertex_index; } } } }