X-Git-Url: https://git.ucc.asn.au/?p=ipdf%2Fcode.git;a=blobdiff_plain;f=src%2Fcontrolpanel.cpp;h=462105f9b415bcca92bae8b1153e7f95b4df6dfc;hp=e4e68d68c817ffb8ca765c5289b357f484adec7a;hb=f0b6c9b6b95fde134927c395afbfbbbc057868e6;hpb=e7066887c0d142ddef87ec9ae07ef08ff31573dc diff --git a/src/controlpanel.cpp b/src/controlpanel.cpp index e4e68d6..462105f 100644 --- a/src/controlpanel.cpp +++ b/src/controlpanel.cpp @@ -136,10 +136,16 @@ QMenu * ControlPanel::CreateScreenMenu() m_screen_cpu_rendering = new QAction("&CPU Rendering", this); m_screen_cpu_rendering->setCheckable(true); m_screen_gpu_rendering->setToolTip("Uses the CPU for Rendering"); + + m_screen_lazy_rendering = new QAction("&Lazy Rendering", this); + m_screen_lazy_rendering->setCheckable(true); screen->addAction(m_screen_gpu_rendering); screen->addAction(m_screen_cpu_rendering); + screen->addAction(m_screen_lazy_rendering); + connect(m_screen_lazy_rendering, SIGNAL(triggered()), this, SLOT(ToggleLazyRendering())); + connect(m_screen_gpu_rendering, SIGNAL(triggered()), this, SLOT(SetGPURendering())); connect(m_screen_cpu_rendering, SIGNAL(triggered()), this, SLOT(SetCPURendering())); @@ -171,6 +177,7 @@ void ControlPanel::UpdateAll() m_screen_gpu_rendering->setChecked(using_gpu_rendering); m_screen_cpu_rendering->setChecked(!using_gpu_rendering); m_screen_show_debug->setChecked(m_screen.DebugFontShown()); + m_screen_lazy_rendering->setChecked(m_view.UsingLazyRendering()); m_view_show_bezier_bounds->setChecked(m_view.ShowingBezierBounds()); m_view_show_bezier_type->setChecked(m_view.ShowingBezierType()); @@ -264,6 +271,13 @@ void ControlPanel::SetCPURendering() UpdateAll(); } +void ControlPanel::ToggleLazyRendering() +{ + bool state = m_view.UsingLazyRendering(); + m_view.SetLazyRendering(!state); + UpdateAll(); +} + void ControlPanel::ToggleScreenDebugFont() { bool state = m_screen.DebugFontShown(); @@ -295,7 +309,17 @@ void ControlPanel::InsertTextIntoDocument() string msg = m_text_edit->toPlainText().toStdString(); Real scale = bounds.h / Real(2); Debug("Insert \"%s\" at %f, %f, scale %f", msg.c_str(), Float(xx), Float(yy), Float(scale)); +#ifndef QUADTREE_DISABLED + m_doc.SetQuadtreeInsertNode(m_view.GetCurrentQuadtreeNode()); +#endif m_doc.AddText(msg, scale, xx, yy); +#ifndef QUADTREE_DISABLED + m_doc.PropagateQuadChanges(m_view.GetCurrentQuadtreeNode()); + // We may have split the object across up-to four nodes, so try the neighbouring nodes. + m_doc.PropagateQuadChanges(m_doc.GetQuadTree().GetNeighbour(m_view.GetCurrentQuadtreeNode(), 0, 1, 0)); + m_doc.PropagateQuadChanges(m_doc.GetQuadTree().GetNeighbour(m_view.GetCurrentQuadtreeNode(), 1, 0, 0)); + m_doc.PropagateQuadChanges(m_doc.GetQuadTree().GetNeighbour(m_view.GetCurrentQuadtreeNode(), 1, 1, 0)); +#endif m_view.ForceRenderDirty(); m_view.ForceBufferDirty(); m_view.ForceBoundsDirty(); @@ -303,10 +327,23 @@ void ControlPanel::InsertTextIntoDocument() void ControlPanel::InsertSVGIntoDocument() { Rect bounds(m_view.GetBounds()); + bounds.x += bounds.w/Real(2); + bounds.y += bounds.h/Real(2); + bounds.w /= Real(m_screen.ViewportWidth()); bounds.h /= Real(m_screen.ViewportHeight()); +#ifndef QUADTREE_DISABLED + m_doc.SetQuadtreeInsertNode(m_view.GetCurrentQuadtreeNode()); +#endif m_doc.ParseSVG(m_text_edit->toPlainText().toStdString(), bounds); +#ifndef QUADTREE_DISABLED + m_doc.PropagateQuadChanges(m_view.GetCurrentQuadtreeNode()); + // We may have split the object across up-to four nodes, so try the neighbouring nodes. + m_doc.PropagateQuadChanges(m_doc.GetQuadTree().GetNeighbour(m_view.GetCurrentQuadtreeNode(), 0, 1, 0)); + m_doc.PropagateQuadChanges(m_doc.GetQuadTree().GetNeighbour(m_view.GetCurrentQuadtreeNode(), 1, 0, 0)); + m_doc.PropagateQuadChanges(m_doc.GetQuadTree().GetNeighbour(m_view.GetCurrentQuadtreeNode(), 1, 1, 0)); +#endif m_view.ForceRenderDirty(); m_view.ForceBufferDirty(); m_view.ForceBoundsDirty(); @@ -319,11 +356,28 @@ void ControlPanel::LoadSVGIntoDocument() if (filename == "") return; + #ifdef TRANSFORM_OBJECTS_NOT_VIEW + Rect bounds(0,0,1,1); + #else Rect bounds(m_view.GetBounds()); + #endif + bounds.x += bounds.w/Real(2); + bounds.y += bounds.h/Real(2); + bounds.w /= Real(m_screen.ViewportWidth()); bounds.h /= Real(m_screen.ViewportHeight()); +#ifndef QUADTREE_DISABLED + m_doc.SetQuadtreeInsertNode(m_view.GetCurrentQuadtreeNode()); +#endif m_doc.LoadSVG(filename.toStdString(), bounds); +#ifndef QUADTREE_DISABLED + m_doc.PropagateQuadChanges(m_view.GetCurrentQuadtreeNode()); + // We may have split the object across up-to four nodes, so try the neighbouring nodes. + m_doc.PropagateQuadChanges(m_doc.GetQuadTree().GetNeighbour(m_view.GetCurrentQuadtreeNode(), 0, 1, 0)); + m_doc.PropagateQuadChanges(m_doc.GetQuadTree().GetNeighbour(m_view.GetCurrentQuadtreeNode(), 1, 0, 0)); + m_doc.PropagateQuadChanges(m_doc.GetQuadTree().GetNeighbour(m_view.GetCurrentQuadtreeNode(), 1, 1, 0)); +#endif m_view.ForceRenderDirty(); m_view.ForceBufferDirty(); m_view.ForceBoundsDirty();