void Viewport::set_canvas_transform(const Matrix32& p_transform) { canvas_transform=p_transform; VisualServer::get_singleton()->viewport_set_canvas_transform(viewport,find_world_2d()->get_canvas(),canvas_transform); Matrix32 xform = (global_canvas_transform * canvas_transform).affine_inverse(); Size2 ss = get_visible_rect().size; SpatialSound2DServer::get_singleton()->listener_set_transform(listener_2d,Matrix32(0,xform.xform(ss*0.5))); Vector2 ss2 = ss*xform.get_scale(); float panrange = MAX(ss2.x,ss2.y); SpatialSound2DServer::get_singleton()->listener_set_param(listener_2d,SpatialSound2DServer::LISTENER_PARAM_PAN_RANGE,panrange); }
void Viewport::_update_global_transform() { Matrix32 sxform = stretch_transform * global_canvas_transform; VisualServer::get_singleton()->viewport_set_global_canvas_transform(viewport,sxform); Matrix32 xform = (sxform * canvas_transform).affine_inverse(); Size2 ss = get_visible_rect().size; SpatialSound2DServer::get_singleton()->listener_set_transform(listener_2d,Matrix32(0,xform.xform(ss*0.5))); Vector2 ss2 = ss*xform.get_scale(); float panrange = MAX(ss2.x,ss2.y); SpatialSound2DServer::get_singleton()->listener_set_param(listener_2d,SpatialSound2DServer::LISTENER_PARAM_PAN_RANGE,panrange); }
void Viewport::update_worlds() { if (!is_inside_scene()) return; Rect2 xformed_rect = (global_canvas_transform * canvas_transform).affine_inverse().xform(get_visible_rect()); find_world_2d()->_update_viewport(this,xformed_rect); find_world_2d()->_update(); find_world()->_update(get_scene()->get_frame()); }
// // DND Drop handling // void NoteEditor::on_drag_data_received(const Glib::RefPtr<Gdk::DragContext> & context, int x, int y, const Gtk::SelectionData & selection_data, guint info, guint time) { bool has_url = false; std::vector<std::string> targets = context->list_targets(); for(std::vector<std::string>::const_iterator iter = targets.begin(); iter != targets.end(); ++iter) { const std::string & target(*iter); if (target == "text/uri-list" || target == "_NETSCAPE_URL") { has_url = true; break; } } if (has_url) { utils::UriList uri_list(selection_data); bool more_than_one = false; // Place the cursor in the position where the uri was // dropped, adjusting x,y by the TextView's VisibleRect. Gdk::Rectangle rect; get_visible_rect(rect); int adjustedX = x + rect.get_x(); int adjustedY = y + rect.get_y(); Gtk::TextIter cursor; get_iter_at_location (cursor, adjustedX, adjustedY); get_buffer()->place_cursor (cursor); Glib::RefPtr<Gtk::TextTag> link_tag = get_buffer()->get_tag_table()->lookup ("link:url"); for(utils::UriList::const_iterator iter = uri_list.begin(); iter != uri_list.end(); ++iter) { const sharp::Uri & uri(*iter); DBG_OUT("Got Dropped URI: %s", uri.to_string().c_str()); std::string insert; if (uri.is_file()) { // URL-escape the path in case // there are spaces (bug #303902) insert = sharp::Uri::escape_uri_string(uri.local_path()); } else { insert = uri.to_string (); } if (insert.empty() || sharp::string_trim(insert).empty()) continue; if (more_than_one) { cursor = get_buffer()->get_iter_at_mark (get_buffer()->get_insert()); // FIXME: The space here is a hack // around a bug in the URL Regex which // matches across newlines. if (cursor.get_line_offset() == 0) { get_buffer()->insert (cursor, " \n"); } else { get_buffer()->insert (cursor, ", "); } } get_buffer()->insert_with_tag(cursor, insert, link_tag); more_than_one = true; } context->drag_finish(more_than_one, false, time); } else { Gtk::TextView::on_drag_data_received (context, x, y, selection_data, info, time); } }