Scroom  0.14
View Class Reference

#include <view.hh>

Inheritance diagram for View:
Inheritance graph
Collaboration diagram for View:
Collaboration graph

Public Types

using Ptr = boost::shared_ptr< View >
 
- Public Types inherited from ViewInterface
using Ptr = boost::shared_ptr< ViewInterface >
 
using WeakPtr = boost::weak_ptr< ViewInterface >
 

Public Member Functions

 ~View () override
 
 View (const View &)=delete
 
 View (View &&)=delete
 
View operator= (const View &)=delete
 
View operator= (View &&)=delete
 
void redraw (cairo_t *cr)
 
void hide ()
 
bool hasPresentation ()
 
void setPresentation (PresentationInterface::Ptr presentation)
 
void clearPresentation ()
 
void updateScrollbars ()
 
void updateZoom ()
 
void updateRulers ()
 
void updateTextbox ()
 
void toolButtonToggled (GtkToggleButton *button)
 
void on_newPresentationInterfaces_update (const std::map< NewPresentationInterface::Ptr, std::string > &newPresentationInterfaces)
 
void on_presentation_created (const PresentationInterface::Ptr &p)
 
void on_presentation_destroyed ()
 
void on_configure ()
 
void on_window_size_changed (const Scroom::Utils::Point< int > &newSize)
 
void on_zoombox_changed ()
 
void on_textbox_value_changed (GtkEditable *editable)
 
void on_scrollbar_value_changed (GtkAdjustment *adjustment)
 
void on_scrollwheel (GdkEventScroll *event)
 
void on_buttonPress (GdkEventButton *event)
 
void on_buttonRelease (GdkEventButton *event)
 
void on_motion_notify (GdkEventMotion *event)
 
void setFullScreen ()
 
void unsetFullScreen ()
 
void invalidate () override
 
ProgressInterface::Ptr getProgressInterface () override
 
void addSideWidget (std::string title, GtkWidget *w) override
 
void removeSideWidget (GtkWidget *w) override
 
void addToToolbar (GtkToolItem *ti) override
 
void removeFromToolbar (GtkToolItem *ti) override
 
void registerSelectionListener (SelectionListener::Ptr listener) override
 
void registerPostRenderer (PostRenderer::Ptr renderer) override
 
void setStatusMessage (const std::string &message) override
 
PresentationInterface::Ptr getCurrentPresentation () override
 
void addToolButton (GtkToggleButton *, ToolStateListener::Ptr) override
 
- Public Member Functions inherited from Scroom::Utils::Base
 Base ()=default
 
 Base (const Base &)=delete
 
 Base (Base &&)=delete
 
Baseoperator= (const Base &)=delete
 
Baseoperator= (Base &&)=delete
 
virtual ~Base ()=default
 
template<typename R >
boost::shared_ptr< R > shared_from_this ()
 
template<typename R >
boost::shared_ptr< R const > shared_from_this () const
 

Static Public Member Functions

static Ptr create (GtkBuilder *scroomXml, const PresentationInterface::Ptr &presentation)
 
static void updateScrollbar (GtkAdjustment *adj, int zoom, double value, double presentationStart, double presentationSize, double windowSize)
 

Private Types

enum  LocationChangeCause { SCROLLBAR, TEXTBOX, OTHER }
 

Private Member Functions

 View (GtkBuilder *scroomXml)
 
Scroom::Utils::Point< double > windowPointToPresentationPoint (Scroom::Utils::Point< double > wp) const
 
Scroom::Utils::Point< double > presentationPointToWindowPoint (Scroom::Utils::Point< double > presentationpoint) const
 
Scroom::Utils::Point< double > tweakedPosition () const
 
void updateNewWindowMenu ()
 
void on_zoombox_changed (int newzoom, const Scroom::Utils::Point< double > &mousePos)
 
void updateXY (const Scroom::Utils::Point< double > &newPos, const LocationChangeCause &source)
 

Private Attributes

GtkBuilder * scroomXml
 
PresentationInterface::Ptr presentation
 
SidebarManager sidebarManager
 
GtkWindow * window
 
GtkWidget * menubar
 
GtkWidget * drawingArea
 
Scroom::Utils::Point< int > drawingAreaSize
 
Scroom::Utils::Rectangle< double > presentationRect
 
GtkScrollbar * vscrollbar
 
GtkScrollbar * hscrollbar
 
GtkAdjustment * vscrollbaradjustment
 
GtkAdjustment * hscrollbaradjustment
 
GtkDrawingArea * hruler_area
 
GtkDrawingArea * vruler_area
 
Ruler::Ptr vruler
 
Ruler::Ptr hruler
 
GtkComboBox * zoomBox
 
GtkListStore * zoomItems
 
GtkProgressBar * progressBar
 
GtkStatusbar * statusBar
 
GtkToolbar * toolBar
 
GtkToolItem * toolBarSeparator
 
GtkEntry * xTextBox
 
GtkEntry * yTextBox
 
GtkWidget * statusArea
 
GtkWidget * toolbarArea
 
unsigned toolBarCount
 
int statusBarContextId
 
int zoom {0}
 
Freezable< Scroom::Utils::Point< double > > position
 
std::optional< Selectionselection
 
std::vector< SelectionListener::PtrselectionListeners
 
std::vector< PostRenderer::PtrpostRenderers
 
std::map< GtkToggleButton *, ToolStateListener::Ptrtools
 
Scroom::Utils::Point< double > aspectRatio
 
boost::shared_ptr< TweakPresentationPositiontweakPresentationPosition
 
boost::shared_ptr< TweakPositionTextBoxtweakPositionTextBox
 
boost::shared_ptr< TweakRulerstweakRulers
 
std::map< std::string, boost::shared_ptr< ITweakSelection > > tweakSelection
 
gint modifiermove {0}
 
Scroom::Utils::Point< double > cachedPoint
 
ProgressBarManager::Ptr progressBarManager
 
std::map< PresentationInterface::WeakPtr, GtkWidget * > presentations
 

Member Typedef Documentation

◆ Ptr

using View::Ptr = boost::shared_ptr<View>

Member Enumeration Documentation

◆ LocationChangeCause

Enumerator
SCROLLBAR 
TEXTBOX 
OTHER 
153  {
154  SCROLLBAR,
155  TEXTBOX,
156  OTHER
157  };

Constructor & Destructor Documentation

◆ View() [1/3]

View::View ( GtkBuilder *  scroomXml)
explicitprivate
293  : scroomXml(scroomXml_)
300 
301 {
303  window = GTK_WINDOW(GTK_WIDGET(gtk_builder_get_object(scroomXml_, "scroom")));
304  drawingArea = GTK_WIDGET(gtk_builder_get_object(scroomXml_, "drawingarea"));
305  vscrollbar = GTK_SCROLLBAR(GTK_WIDGET(gtk_builder_get_object(scroomXml_, "vscrollbar")));
306  hscrollbar = GTK_SCROLLBAR(GTK_WIDGET(gtk_builder_get_object(scroomXml_, "hscrollbar")));
307  vscrollbaradjustment = gtk_range_get_adjustment(GTK_RANGE(vscrollbar));
308  hscrollbaradjustment = gtk_range_get_adjustment(GTK_RANGE(hscrollbar));
309  vruler_area = GTK_DRAWING_AREA(GTK_WIDGET(gtk_builder_get_object(scroomXml_, "vruler_area")));
310  hruler_area = GTK_DRAWING_AREA(GTK_WIDGET(gtk_builder_get_object(scroomXml_, "hruler_area")));
311  xTextBox = GTK_ENTRY(GTK_WIDGET(gtk_builder_get_object(scroomXml_, "x_textbox")));
312  yTextBox = GTK_ENTRY(GTK_WIDGET(gtk_builder_get_object(scroomXml_, "y_textbox")));
313 
314  // Create rulers and attach ruler areas to them
317 
318  menubar = GTK_WIDGET(gtk_builder_get_object(scroomXml_, "menubar"));
319  statusArea = GTK_WIDGET(gtk_builder_get_object(scroomXml_, "status_area"));
320  toolbarArea = GTK_WIDGET(gtk_builder_get_object(scroomXml_, "toolbar_area"));
321 
322  zoomBox = GTK_COMBO_BOX(GTK_WIDGET(gtk_builder_get_object(scroomXml_, "zoomboxcombo")));
323  zoomItems = gtk_list_store_new(N_COLUMNS, G_TYPE_STRING, G_TYPE_INT);
324 
325  gtk_combo_box_set_model(zoomBox, GTK_TREE_MODEL(zoomItems));
326  GtkCellRenderer* txt = GTK_CELL_RENDERER(gtk_cell_renderer_text_new());
327  gtk_cell_layout_pack_end(GTK_CELL_LAYOUT(zoomBox), txt, true);
328  gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(zoomBox), txt, "text", COLUMN_TEXT, NULL);
329 
330  progressBar = GTK_PROGRESS_BAR(GTK_WIDGET(gtk_builder_get_object(scroomXml_, "progressbar")));
332  statusBar = GTK_STATUSBAR(GTK_WIDGET(gtk_builder_get_object(scroomXml_, "statusbar")));
333  statusBarContextId = gtk_statusbar_get_context_id(statusBar, "View");
334 
335  GtkWidget* panelWindow = GTK_WIDGET(gtk_builder_get_object(scroomXml_, "panelWindow"));
336  GtkBox* panel = GTK_BOX(GTK_WIDGET(gtk_builder_get_object(scroomXml_, "panel")));
337  sidebarManager.setWidgets(panelWindow, panel);
338  toolBar = GTK_TOOLBAR(GTK_WIDGET(gtk_builder_get_object(scroomXml_, "toolbar")));
339  toolBarSeparator = nullptr;
340  toolBarCount = 0;
341 
342  on_newPresentationInterfaces_update(pluginManager->getNewPresentationInterfaces());
344  on_configure();
345 }

Referenced by create().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ~View()

View::~View ( )
override
361 {
362  spdlog::debug("Destroying view...");
363  gtk_widget_destroy(GTK_WIDGET(window));
364 }

◆ View() [2/3]

View::View ( const View )
delete

◆ View() [3/3]

View::View ( View &&  )
delete

Member Function Documentation

◆ addSideWidget()

void View::addSideWidget ( std::string  title,
GtkWidget *  w 
)
overridevirtual

Request that the given widget be added to the sidebar.

Precondition
Should be called from within a Gdk critical section (i.e. between gdk_threads_enter() and gdk_threads_leave() calls)

Implements ViewInterface.

822 { sidebarManager.addSideWidget(title, w); }
Here is the call graph for this function:

◆ addToolButton()

void View::addToolButton ( GtkToggleButton *  ,
ToolStateListener::Ptr   
)
overridevirtual

Adds a new tool button to the toolbar. The given ToolStateListener will be informed when the tool is turned on or off. Only one tool will be active at the same time.

See also
ToolStateListener

Implements ViewInterface.

868 {
870  [=]
871  {
872  GtkToolItem* toolItem = gtk_tool_item_new();
873  gtk_container_add(GTK_CONTAINER(toolItem), GTK_WIDGET(button));
874  gtk_widget_set_visible(GTK_WIDGET(button), true);
875  g_signal_connect(static_cast<gpointer>(button), "toggled", G_CALLBACK(tool_button_toggled), this);
876 
877  addToToolbar(toolItem);
878 
879  tools[button] = callback;
880  if(tools.size() == 1)
881  {
882  gtk_toggle_button_set_active(button, true);
883  gtk_widget_set_sensitive(GTK_WIDGET(button), false);
884  callback->onEnable();
885  }
886  else
887  {
888  gtk_toggle_button_set_active(button, false);
889  gtk_widget_set_sensitive(GTK_WIDGET(button), true);
890  }
891  });
892 }
Here is the call graph for this function:

◆ addToToolbar()

void View::addToToolbar ( GtkToolItem *  ti)
overridevirtual

Request that the given tool item be added to the toolbar.

Precondition
Should be called from within a Gdk critical section (i.e. between gdk_threads_enter() and gdk_threads_leave() calls)

Implements ViewInterface.

827 {
828  if(toolBarCount == 0)
829  {
830  toolBarSeparator = gtk_separator_tool_item_new();
831  g_object_set(G_OBJECT(toolBarSeparator), "visible", true, "draw", true, NULL);
832  gtk_toolbar_insert(toolBar, toolBarSeparator, -1);
833  }
834 
835  g_object_set(G_OBJECT(ti), "visible", true, NULL);
836 
837  gtk_toolbar_insert(toolBar, ti, -1);
838  toolBarCount++;
839 }

Referenced by addToolButton().

Here is the caller graph for this function:

◆ clearPresentation()

void View::clearPresentation ( )
397 {
399 }

Referenced by on_view_destroyed().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ create()

View::Ptr View::create ( GtkBuilder *  scroomXml,
const PresentationInterface::Ptr presentation 
)
static
348 {
349  Ptr view(new View(scroomXml));
350  spdlog::debug("Creating a new view");
351 
352  if(presentation)
353  {
354  view->setPresentation(presentation);
355  }
356 
357  return view;
358 }

Referenced by create_scroom().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ getCurrentPresentation()

PresentationInterface::Ptr View::getCurrentPresentation ( )
overridevirtual

Returns a shared pointer to the current presentation.

See also
PresentationInterface

Implements ViewInterface.

863 { return presentation; }

◆ getProgressInterface()

ProgressInterface::Ptr View::getProgressInterface ( )
overridevirtual

Return a pointer to the progess interface associated with the View

Note
The progress bar should only be manipulated from within a Gdk critical section (i.e. between gdk_threads_enter() and gdk_threads_leave() calls)

Implements ViewInterface.

820 { return progressBarManager; }

◆ hasPresentation()

bool View::hasPresentation ( )
394 { return presentation != nullptr; }

◆ hide()

void View::hide ( )
392 { gtk_widget_hide(GTK_WIDGET(window)); }

Referenced by on_close_activate().

Here is the caller graph for this function:

◆ invalidate()

void View::invalidate ( )
overridevirtual

Request that the window content is redrawn.

Precondition
Should be called from within a Gdk critical section (i.e. between gdk_threads_enter() and gdk_threads_leave() calls)

Implements ViewInterface.

818 { gdk_window_invalidate_rect(gtk_widget_get_window(drawingArea), nullptr, false); }

Referenced by on_buttonRelease(), on_motion_notify(), on_window_size_changed(), on_zoombox_changed(), setPresentation(), and updateXY().

Here is the caller graph for this function:

◆ on_buttonPress()

void View::on_buttonPress ( GdkEventButton *  event)
731 {
732  if(event->button == 1 && modifiermove == 0)
733  {
734  // Begin left-dragging
735  modifiermove = GDK_BUTTON1_MASK;
736  cachedPoint = eventToPoint(event);
737  }
738  else if(event->button == 3)
739  {
740  auto point = windowPointToPresentationPoint(eventToPoint(event));
741  selection = point;
742  for(const auto& listener: selectionListeners)
743  {
744  auto f = tweakSelection.find(listener->getSelectionType());
745  auto tweaker = f == tweakSelection.end() ? tweakSelection.at(SelectionType::DEFAULT) : f->second;
746  const auto tweakedSelection = tweaker->tweakSelection(*selection);
747  listener->onSelectionStart(tweakedSelection, shared_from_this<ViewInterface>());
748  }
749  }
750 }

Referenced by on_button_press_event().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ on_buttonRelease()

void View::on_buttonRelease ( GdkEventButton *  event)
753 {
754  if(event->button == 1 && modifiermove == GDK_BUTTON1_MASK)
755  {
756  // End left-dragging
757  modifiermove = 0;
758  cachedPoint.x = 0;
759  cachedPoint.y = 0;
760  }
761  else if(event->button == 3 && selection)
762  {
764  for(const auto& listener: selectionListeners)
765  {
766  auto f = tweakSelection.find(listener->getSelectionType());
767  auto tweaker = f == tweakSelection.end() ? tweakSelection.at(SelectionType::DEFAULT) : f->second;
768  const auto tweakedSelection = tweaker->tweakSelection(*selection);
769  listener->onSelectionEnd(tweakedSelection, shared_from_this<ViewInterface>());
770  }
771  invalidate();
772  }
773 }

Referenced by on_button_release_event().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ on_configure()

void View::on_configure ( )
618 {
619  // There should be a simpler way to do this...
620  cairo_region_t* r = gdk_window_get_visible_region(gtk_widget_get_window(drawingArea));
621  cairo_rectangle_int_t rect;
622  cairo_region_get_extents(r, &rect);
623 
624  Scroom::Utils::Point<int> const newSize(rect.width, rect.height);
625 
626  if(drawingAreaSize != newSize)
627  {
628  on_window_size_changed(newSize);
629  }
630 
631  cairo_region_destroy(r);
632 }

Referenced by on_drawingarea_configure_event().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ on_motion_notify()

void View::on_motion_notify ( GdkEventMotion *  event)
776 {
777  if((event->state & GDK_BUTTON1_MASK) && modifiermove == GDK_BUTTON1_MASK)
778  {
779  auto mousePos = eventToPoint(event);
780 
781  const auto pixelSize = pixelSizeFromZoom(zoom);
782  const auto newPos = position - (mousePos - cachedPoint) / pixelSize;
783  cachedPoint = mousePos;
784 
785  updateXY(newPos, OTHER);
786  }
787  else if((event->state & GDK_BUTTON3_MASK) && selection)
788  {
790  for(const auto& listener: selectionListeners)
791  {
792  auto f = tweakSelection.find(listener->getSelectionType());
793  auto tweaker = f == tweakSelection.end() ? tweakSelection.at(SelectionType::DEFAULT) : f->second;
794  const auto tweakedSelection = tweaker->tweakSelection(*selection);
795  listener->onSelectionUpdate(tweakedSelection, shared_from_this<ViewInterface>());
796  }
797  invalidate();
798  }
799 }

Referenced by on_motion_notify_event().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ on_newPresentationInterfaces_update()

void View::on_newPresentationInterfaces_update ( const std::map< NewPresentationInterface::Ptr, std::string > &  newPresentationInterfaces)
583 {
584  GtkWidget* new_menu_item = GTK_WIDGET(gtk_builder_get_object(scroomXml, "new"));
585 
586  if(newPresentationInterfaces.empty())
587  {
588  gtk_widget_set_sensitive(new_menu_item, false);
589  gtk_menu_item_set_submenu(GTK_MENU_ITEM(new_menu_item), nullptr);
590  }
591  else
592  {
593  gtk_widget_set_sensitive(new_menu_item, true);
594 
595  GtkWidget* new_menu = gtk_menu_new();
596  gtk_menu_item_set_submenu(GTK_MENU_ITEM(new_menu_item), new_menu);
597 
598  for(auto cur = newPresentationInterfaces.begin(); cur != newPresentationInterfaces.end(); cur++)
599  {
600  GtkWidget* menu_item = gtk_menu_item_new_with_label(cur->second.c_str());
601  gtk_widget_show(menu_item);
602  gtk_container_add(GTK_CONTAINER(new_menu), menu_item);
603 
604  g_signal_connect(static_cast<gpointer>(menu_item), "activate", G_CALLBACK(on_new_activate), cur->first.get());
605  }
606  }
607 }
Here is the call graph for this function:

◆ on_presentation_created()

void View::on_presentation_created ( const PresentationInterface::Ptr p)
610 {
611  presentations[p] = nullptr;
613 }
Here is the call graph for this function:

◆ on_presentation_destroyed()

void View::on_presentation_destroyed ( )
615 { updateNewWindowMenu(); }
Here is the call graph for this function:

◆ on_scrollbar_value_changed()

void View::on_scrollbar_value_changed ( GtkAdjustment *  adjustment)
715 {
716  auto newPos = position.get();
717 
718  if(adjustment == vscrollbaradjustment)
719  {
720  newPos.y = gtk_adjustment_get_value(adjustment);
721  }
722  else
723  {
724  newPos.x = gtk_adjustment_get_value(adjustment);
725  }
726 
727  updateXY(newPos, SCROLLBAR);
728 }

Referenced by on_scrollbar_value_changed().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ on_scrollwheel()

void View::on_scrollwheel ( GdkEventScroll *  event)
647 {
648  if(event->direction == GDK_SCROLL_UP || event->direction == GDK_SCROLL_DOWN)
649  {
650  int newZoom = zoom + ((event->direction == GDK_SCROLL_UP) ? 1 : -1);
651  newZoom = std::min(MaxZoom, newZoom);
652 
653  GtkTreeIter iter;
654  for(bool valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(zoomItems), &iter); valid;
655  valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(zoomItems), &iter))
656  {
657  GValue value = G_VALUE_INIT;
658  gtk_tree_model_get_value(GTK_TREE_MODEL(zoomItems), &iter, COLUMN_ZOOM, &value);
659  const int foundZoom = g_value_get_int(&value);
660 
661  if(foundZoom == newZoom)
662  {
663  on_zoombox_changed(newZoom, {event->x, event->y});
664  gtk_combo_box_set_active_iter(zoomBox, &iter);
665  break;
666  }
667  }
668  }
669 }

Referenced by on_scroll_event().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ on_textbox_value_changed()

void View::on_textbox_value_changed ( GtkEditable *  editable)
701 {
702  try
703  {
704  auto newPos = tweakPositionTextBox->parse(gtk_entry_get_text(xTextBox), gtk_entry_get_text(yTextBox), drawingAreaSize, zoom);
705 
706  updateXY(newPos, TEXTBOX);
707  }
708  catch(boost::bad_lexical_cast& ex)
709  {
710  // User typed something invalid, probably a letter. Ignore...
711  }
712 }

Referenced by on_textbox_value_changed().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ on_window_size_changed()

void View::on_window_size_changed ( const Scroom::Utils::Point< int > &  newSize)
635 {
636  auto pixelSize = pixelSizeFromZoom(zoom);
637  position += (drawingAreaSize - newSize) / pixelSize / 2;
638 
639  std::scoped_lock const protect_position(position);
640  drawingAreaSize = newSize;
641  updateZoom();
643  invalidate();
644 }

Referenced by on_configure().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ on_zoombox_changed() [1/2]

void View::on_zoombox_changed ( )
672 {
673  GtkTreeIter iter;
674  GValue value = G_VALUE_INIT;
675  gtk_combo_box_get_active_iter(zoomBox, &iter);
676 
677  if(gtk_list_store_iter_is_valid(zoomItems, &iter))
678  {
679  gtk_tree_model_get_value(GTK_TREE_MODEL(zoomItems), &iter, COLUMN_ZOOM, &value);
680  const int newZoom = g_value_get_int(&value);
681  on_zoombox_changed(newZoom, drawingAreaSize.to<double>() / 2);
682  }
683 }

Referenced by on_scrollwheel(), and on_zoombox_changed().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ on_zoombox_changed() [2/2]

void View::on_zoombox_changed ( int  newzoom,
const Scroom::Utils::Point< double > &  mousePos 
)
private
686 {
687  if(newzoom != zoom)
688  {
689  position += mousePos / pixelSizeFromZoom(zoom);
690  position -= mousePos / pixelSizeFromZoom(newzoom);
691 
692  std::scoped_lock const protect_position(position);
693  zoom = newzoom;
695  updateTextbox();
696  invalidate();
697  }
698 }
Here is the call graph for this function:

◆ operator=() [1/2]

View View::operator= ( const View )
delete

◆ operator=() [2/2]

View View::operator= ( View &&  )
delete

◆ presentationPointToWindowPoint()

Scroom::Utils::Point< double > View::presentationPointToWindowPoint ( Scroom::Utils::Point< double >  presentationpoint) const
private
903 {
904  return (presentationpoint - tweakedPosition()) * pixelSizeFromZoom(zoom);
905 }
Here is the call graph for this function:

◆ redraw()

void View::redraw ( cairo_t *  cr)
367 {
368  if(presentation)
369  {
370  const double pixelSize = pixelSizeFromZoom(zoom);
371  Scroom::Utils::Point<double> const visibleRegionSize = drawingAreaSize.to<double>() / pixelSize;
372 
373  auto rect = Scroom::Utils::make_rect(tweakedPosition(), visibleRegionSize);
374 
375  presentation->redraw(shared_from_this<View>(), cr, rect, zoom);
376  for(const auto& renderer: postRenderers)
377  {
378  renderer->render(shared_from_this<View>(), cr, rect, zoom);
379  }
380  }
381  else
382  {
383  // A logo here would be nice...
384 
385  // char buffer[] = "View says \"Hi\"";
386  //
387  // cairo_move_to(cr, 50, 50);
388  // cairo_show_text(cr, buffer);
389  }
390 }

Referenced by on_drawingarea_expose_event().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ registerPostRenderer()

void View::registerPostRenderer ( PostRenderer::Ptr  )
overridevirtual

Register a postrenderer to be updated whenever a redraw occurs. When this happens, the 'render' function gets called on the instance that is passed to the given instance.

Note that the order in which different registered instances get updated is the order in which they register to the view. This order remains constant throughout the view's lifetime.

See also
PostRenderer

Implements ViewInterface.

855 { postRenderers.push_back(renderer); }

◆ registerSelectionListener()

void View::registerSelectionListener ( SelectionListener::Ptr  )
overridevirtual

Register a SelectionListener to be updated whenever the user selects a region . When the user changes the selection, various functions on the given instance are called.

See also
SelectionListener

Implements ViewInterface.

853 { selectionListeners.push_back(listener); }

◆ removeFromToolbar()

void View::removeFromToolbar ( GtkToolItem *  ti)
overridevirtual

Request that the given tool item be removed from the toolbar.

Precondition
Should be called from within a Gdk critical section (i.e. between gdk_threads_enter() and gdk_threads_leave() calls)

Implements ViewInterface.

842 {
843  gtk_container_remove(GTK_CONTAINER(toolBar), GTK_WIDGET(ti));
844  toolBarCount--;
845 
846  if(toolBarCount == 0)
847  {
848  gtk_container_remove(GTK_CONTAINER(toolBar), GTK_WIDGET(toolBarSeparator));
849  toolBarSeparator = nullptr;
850  }
851 }

◆ removeSideWidget()

void View::removeSideWidget ( GtkWidget *  w)
overridevirtual

Request that the given widget be removed from the sidebar.

Precondition
Should be called from within a Gdk critical section (i.e. between gdk_threads_enter() and gdk_threads_leave() calls)

Implements ViewInterface.

Here is the call graph for this function:

◆ setFullScreen()

void View::setFullScreen ( )
802 {
803  gtk_window_fullscreen(window);
804  gtk_widget_set_visible(toolbarArea, false);
805  gtk_widget_set_visible(statusArea, false);
806 }

Referenced by on_fullscreen_activate().

Here is the caller graph for this function:

◆ setPresentation()

void View::setPresentation ( PresentationInterface::Ptr  presentation)
402 {
403  View::Ptr const me = shared_from_this<View>();
404 
405  if(presentation)
406  {
407  presentation->close(me);
408  presentation.reset();
409  }
410 
411  presentation = std::move(presentation_);
412 
413  if(presentation)
414  {
415  presentation->open(me);
416  presentationRect = presentation->getRect();
417  aspectRatio = presentation->getAspectRatio();
418  std::string s = presentation->getTitle();
419 
420  tweakPresentationPosition->setAspectRatio(aspectRatio);
421  tweakPositionTextBox->setAspectRatio(aspectRatio);
422  tweakRulers->setAspectRatio(aspectRatio);
423  for(auto& [name, tweak]: tweakSelection)
424  {
425  tweak->setAspectRatio(aspectRatio);
426  }
427 
428  if(s.length())
429  {
430  s = "Scroom - " + s;
431  }
432  else
433  {
434  s = "Scroom";
435  }
436  gtk_window_set_title(window, s.c_str());
437  }
438 
439  zoom = 0;
440  const double pixelSize = pixelSizeFromZoom(zoom);
441  position = -drawingAreaSize.to<double>() / pixelSize / 2;
442 
443  updateZoom();
445  updateTextbox();
446  invalidate();
447 }

Referenced by clearPresentation().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ setStatusMessage()

void View::setStatusMessage ( const std::string &  )
overridevirtual

Sets the status message in the status bar of the application.

Implements ViewInterface.

858 {
859  gtk_statusbar_pop(statusBar, statusBarContextId);
860  gtk_statusbar_push(statusBar, statusBarContextId, message.c_str());
861 }

◆ toolButtonToggled()

void View::toolButtonToggled ( GtkToggleButton *  button)
561 {
562  if(gtk_toggle_button_get_active(button))
563  {
564  for(const auto& tool: tools)
565  {
566  if(tool.first != button && gtk_toggle_button_get_active(tool.first))
567  {
568  gtk_toggle_button_set_active(tool.first, false);
569  gtk_widget_set_sensitive(GTK_WIDGET(tool.first), true);
570  tools[tool.first]->onDisable();
571  }
572  }
573  gtk_widget_set_sensitive(GTK_WIDGET(button), false);
574  tools[button]->onEnable();
575  }
576 }

◆ tweakedPosition()

Scroom::Utils::Point< double > View::tweakedPosition ( ) const
private
1013 {
1014  return tweakPresentationPosition->tweakPosition(position, drawingAreaSize, zoom);
1015 }

Referenced by presentationPointToWindowPoint(), redraw(), updateRulers(), and windowPointToPresentationPoint().

Here is the caller graph for this function:

◆ unsetFullScreen()

void View::unsetFullScreen ( )
809 {
810  gtk_window_unfullscreen(window);
811  gtk_widget_set_visible(toolbarArea, true);
812  gtk_widget_set_visible(statusArea, true);
813 }

Referenced by on_fullscreen_activate().

Here is the caller graph for this function:

◆ updateNewWindowMenu()

void View::updateNewWindowMenu ( )
private
908 {
909  GtkWidget* newWindow_menu_item = GTK_WIDGET(gtk_builder_get_object(scroomXml, "newWindow"));
910 
911  GtkWidget* newWindow_menu = gtk_menu_item_get_submenu(GTK_MENU_ITEM(newWindow_menu_item));
912  if(!newWindow_menu)
913  {
914  newWindow_menu = gtk_menu_new();
915  }
916  g_object_ref_sink(G_OBJECT(newWindow_menu));
917 
918  auto cur = presentations.begin();
919  auto end = presentations.end();
920 
921  while(cur != end)
922  {
923  auto next = cur;
924  next++;
925 
927  PresentationInterface::Ptr const p = cur->first.lock();
928  GtkWidget* m = cur->second;
929  if(p && m)
930  {
931  // Do nothing
932  }
933  else if(p && !m)
934  {
935  // Add a menu item
936  std::string s = p->getTitle();
937  if(!s.length())
938  {
939  s = "Default";
940  }
941  m = gtk_menu_item_new_with_label(s.c_str());
942  gtk_widget_show(m);
943  cur->second = m;
944  gtk_container_add(GTK_CONTAINER(newWindow_menu), m);
945 
946  g_signal_connect(static_cast<gpointer>(m),
947  "activate",
948  G_CALLBACK(on_newWindow_activate),
949  const_cast<PresentationInterface::WeakPtr*>(&cur->first));
950  }
951  else if(!p && m)
952  {
953  // Remove menu item, then remove this element from the map
954  cur->second = NULL;
955  gtk_widget_destroy(m);
956  presentations.erase(cur);
957  }
958  else if(!p && !m)
959  {
960  // Remove this element from the map (menu already gone)
961  presentations.erase(cur);
962  }
963  else
964  {
965  // This cannot happen
966  defect();
967  }
969 
970  cur = next;
971  }
972 
973  if(presentations.empty())
974  {
975  gtk_widget_set_sensitive(newWindow_menu_item, false);
976  gtk_menu_item_set_submenu(GTK_MENU_ITEM(newWindow_menu_item), nullptr);
977  }
978  else
979  {
980  gtk_widget_set_sensitive(newWindow_menu_item, true);
981  gtk_menu_item_set_submenu(GTK_MENU_ITEM(newWindow_menu_item), newWindow_menu);
982  }
983 
984  g_object_unref(G_OBJECT(newWindow_menu));
985 }

Referenced by on_presentation_created(), and on_presentation_destroyed().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ updateRulers()

void View::updateRulers ( )
550 {
551  auto visible = tweakRulers->tweakRulers(tweakedPosition(), drawingAreaSize, zoom);
552 
553  const auto topLeft = visible.getTopLeft();
554  const auto bottomRight = visible.getBottomRight();
555 
556  hruler->setRange(topLeft.x, bottomRight.x);
557  vruler->setRange(topLeft.y, bottomRight.y);
558 }

Referenced by updateScrollbars(), and updateXY().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ updateScrollbar()

void View::updateScrollbar ( GtkAdjustment *  adj,
int  zoom,
double  value,
double  presentationStart,
double  presentationSize,
double  windowSize 
)
static
455 {
456  const double pixelSize = pixelSizeFromZoom(zoom_);
457 
458  presentationStart -= windowSize / pixelSize / 2;
459  presentationSize += windowSize / pixelSize;
460 
461  gtk_adjustment_configure(adj,
462  value,
463  presentationStart,
464  presentationStart + presentationSize,
465  1 / pixelSize / 2,
466  3 * windowSize / pixelSize / 4,
467  windowSize / pixelSize);
468 }

Referenced by updateScrollbars().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ updateScrollbars()

void View::updateScrollbars ( )
471 {
472  if(presentation)
473  {
474  gtk_widget_set_sensitive(GTK_WIDGET(vscrollbar), true);
475  gtk_widget_set_sensitive(GTK_WIDGET(hscrollbar), true);
476 
479  updateRulers();
480  }
481  else
482  {
483  gtk_widget_set_sensitive(GTK_WIDGET(vscrollbar), false);
484  gtk_widget_set_sensitive(GTK_WIDGET(hscrollbar), false);
485  }
486 }

Referenced by on_window_size_changed(), on_zoombox_changed(), setPresentation(), and updateXY().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ updateTextbox()

void View::updateTextbox ( )
489 {
490  if(presentation)
491  {
492  gtk_widget_set_sensitive(GTK_WIDGET(xTextBox), true);
493  gtk_widget_set_sensitive(GTK_WIDGET(yTextBox), true);
494 
495  const auto [xs, ys] = tweakPositionTextBox->display(position, drawingAreaSize, zoom);
496 
497  gtk_entry_set_text(xTextBox, xs.c_str());
498  gtk_entry_set_text(yTextBox, ys.c_str());
499  }
500  else
501  {
502  gtk_widget_set_sensitive(GTK_WIDGET(xTextBox), false);
503  gtk_widget_set_sensitive(GTK_WIDGET(yTextBox), false);
504  }
505 }

Referenced by on_zoombox_changed(), setPresentation(), and updateXY().

Here is the caller graph for this function:

◆ updateXY()

void View::updateXY ( const Scroom::Utils::Point< double > &  newPos,
const LocationChangeCause source 
)
private
988 {
989  if(position.get() != newPos)
990  {
991  position = newPos;
992 
993  std::scoped_lock const protect_position(position);
994  if(source != SCROLLBAR)
995  {
997  }
998  else
999  {
1000  updateRulers();
1001  }
1002 
1003  if(source != TEXTBOX)
1004  {
1005  updateTextbox();
1006  }
1007 
1008  invalidate();
1009  }
1010 }

Referenced by on_motion_notify(), on_scrollbar_value_changed(), and on_textbox_value_changed().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ updateZoom()

void View::updateZoom ( )
508 {
509  if(presentation)
510  {
511  int presentationHeight = presentationRect.height();
512  int presentationWidth = presentationRect.width();
513  int minZoom = 0;
514 
515  while(presentationHeight > drawingAreaSize.y / 2 || presentationWidth > drawingAreaSize.x / 2)
516  {
517  presentationHeight >>= 1;
518  presentationWidth >>= 1;
519  minZoom--;
520  }
521 
522  gtk_widget_set_sensitive(GTK_WIDGET(zoomBox), true);
523 
524  int zMax = MaxZoom - minZoom;
525  zMax = std::max(zMax, 1 + MaxZoom - zoom);
526  zMax = std::min<size_t>(zMax, sizeof(zoomfactor) / sizeof(zoomfactor[0]));
527 
528  gtk_list_store_clear(zoomItems);
529  for(int z = 0; z < zMax; z++)
530  {
531  GtkTreeIter iter;
532  gtk_list_store_insert_with_values(zoomItems, &iter, z, COLUMN_TEXT, zoomfactor[z], COLUMN_ZOOM, MaxZoom - z, -1);
533 
534  if(zoom == MaxZoom - z)
535  {
536  gtk_combo_box_set_active_iter(zoomBox, &iter);
537  }
538  }
539  }
540  else
541  {
542  gtk_widget_set_sensitive(GTK_WIDGET(zoomBox), false);
543  gtk_list_store_clear(zoomItems);
544  GtkTreeIter iter;
545  gtk_list_store_insert_with_values(zoomItems, &iter, 0, COLUMN_TEXT, zoomfactor[0], COLUMN_ZOOM, MaxZoom, -1);
546  }
547 }

Referenced by on_window_size_changed(), and setPresentation().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ windowPointToPresentationPoint()

Scroom::Utils::Point< double > View::windowPointToPresentationPoint ( Scroom::Utils::Point< double >  wp) const
private
898 {
899  return tweakedPosition() + wp / pixelSizeFromZoom(zoom);
900 }

Referenced by on_buttonPress(), on_buttonRelease(), and on_motion_notify().

Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ aspectRatio

Scroom::Utils::Point<double> View::aspectRatio
private

Referenced by setPresentation(), and View().

◆ cachedPoint

Scroom::Utils::Point<double> View::cachedPoint
private

◆ drawingArea

GtkWidget* View::drawingArea
private

Referenced by invalidate(), and on_configure().

◆ drawingAreaSize

◆ hruler

Ruler::Ptr View::hruler
private

Referenced by updateRulers().

◆ hruler_area

GtkDrawingArea* View::hruler_area
private

◆ hscrollbar

GtkScrollbar* View::hscrollbar
private

Referenced by updateScrollbars().

◆ hscrollbaradjustment

GtkAdjustment* View::hscrollbaradjustment
private

Referenced by updateScrollbars().

◆ menubar

GtkWidget* View::menubar
private

◆ modifiermove

gint View::modifiermove {0}
private

◆ position

◆ postRenderers

std::vector<PostRenderer::Ptr> View::postRenderers
private

Referenced by redraw(), and registerPostRenderer().

◆ presentation

◆ presentationRect

Scroom::Utils::Rectangle<double> View::presentationRect
private

◆ presentations

std::map<PresentationInterface::WeakPtr, GtkWidget*> View::presentations
private

◆ progressBar

GtkProgressBar* View::progressBar
private

◆ progressBarManager

ProgressBarManager::Ptr View::progressBarManager
private

Referenced by getProgressInterface().

◆ scroomXml

GtkBuilder* View::scroomXml
private

◆ selection

std::optional<Selection> View::selection
private

◆ selectionListeners

std::vector<SelectionListener::Ptr> View::selectionListeners
private

◆ sidebarManager

SidebarManager View::sidebarManager
private

Referenced by addSideWidget(), and removeSideWidget().

◆ statusArea

GtkWidget* View::statusArea
private

Referenced by setFullScreen(), and unsetFullScreen().

◆ statusBar

GtkStatusbar* View::statusBar
private

Referenced by setStatusMessage().

◆ statusBarContextId

int View::statusBarContextId
private

Referenced by setStatusMessage().

◆ toolBar

GtkToolbar* View::toolBar
private

Referenced by addToToolbar(), and removeFromToolbar().

◆ toolbarArea

GtkWidget* View::toolbarArea
private

Referenced by setFullScreen(), and unsetFullScreen().

◆ toolBarCount

unsigned View::toolBarCount
private

Referenced by addToToolbar(), and removeFromToolbar().

◆ toolBarSeparator

GtkToolItem* View::toolBarSeparator
private

Referenced by addToToolbar(), and removeFromToolbar().

◆ tools

std::map<GtkToggleButton*, ToolStateListener::Ptr> View::tools
private

Referenced by addToolButton(), and toolButtonToggled().

◆ tweakPositionTextBox

boost::shared_ptr<TweakPositionTextBox> View::tweakPositionTextBox
private

◆ tweakPresentationPosition

boost::shared_ptr<TweakPresentationPosition> View::tweakPresentationPosition
private

Referenced by setPresentation(), and tweakedPosition().

◆ tweakRulers

boost::shared_ptr<TweakRulers> View::tweakRulers
private

Referenced by setPresentation(), and updateRulers().

◆ tweakSelection

std::map<std::string, boost::shared_ptr<ITweakSelection> > View::tweakSelection
private

◆ vruler

Ruler::Ptr View::vruler
private

Referenced by updateRulers().

◆ vruler_area

GtkDrawingArea* View::vruler_area
private

◆ vscrollbar

GtkScrollbar* View::vscrollbar
private

Referenced by updateScrollbars().

◆ vscrollbaradjustment

GtkAdjustment* View::vscrollbaradjustment
private

◆ window

GtkWindow* View::window
private

◆ xTextBox

GtkEntry* View::xTextBox
private

◆ yTextBox

GtkEntry* View::yTextBox
private

◆ zoom

◆ zoomBox

GtkComboBox* View::zoomBox
private

◆ zoomItems

GtkListStore* View::zoomItems
private

The documentation for this class was generated from the following files:
View::on_window_size_changed
void on_window_size_changed(const Scroom::Utils::Point< int > &newSize)
Definition: view.cc:634
View::tools
std::map< GtkToggleButton *, ToolStateListener::Ptr > tools
Definition: view.hh:137
View::yTextBox
GtkEntry * yTextBox
Definition: view.hh:127
Scroom::Utils::Rectangle::x
value_type x() const
Definition: rectangle.hh:125
View::vscrollbaradjustment
GtkAdjustment * vscrollbaradjustment
Definition: view.hh:113
View::toolbarArea
GtkWidget * toolbarArea
Definition: view.hh:129
zoomfactor
static const std::array< const char *, 36 > zoomfactor
Definition: view.cc:39
View::updateXY
void updateXY(const Scroom::Utils::Point< double > &newPos, const LocationChangeCause &source)
Definition: view.cc:987
Scroom::Utils::Rectangle::width
value_type width() const
Definition: rectangle.hh:129
View::statusBarContextId
int statusBarContextId
Definition: view.hh:131
PluginManager::Ptr
boost::shared_ptr< PluginManager > Ptr
Definition: pluginmanager.hh:44
View::selectionListeners
std::vector< SelectionListener::Ptr > selectionListeners
Definition: view.hh:135
SidebarManager::addSideWidget
void addSideWidget(const std::string &title, GtkWidget *w)
Definition: sidebarmanager.cc:21
TweakGridSelection::create
static Ptr create(Point aspectRatio_)
Definition: view.cc:210
View::hruler
Ruler::Ptr hruler
Definition: view.hh:118
View::drawingAreaSize
Scroom::Utils::Point< int > drawingAreaSize
Definition: view.hh:109
SidebarManager::removeSideWidget
void removeSideWidget(GtkWidget *w)
Definition: sidebarmanager.cc:35
View::position
Freezable< Scroom::Utils::Point< double > > position
Definition: view.hh:133
View::tweakedPosition
Scroom::Utils::Point< double > tweakedPosition() const
Definition: view.cc:1012
View::statusBar
GtkStatusbar * statusBar
Definition: view.hh:123
View::tweakRulers
boost::shared_ptr< TweakRulers > tweakRulers
Definition: view.hh:141
View::toolBar
GtkToolbar * toolBar
Definition: view.hh:124
View::hruler_area
GtkDrawingArea * hruler_area
Definition: view.hh:115
on_new_activate
void on_new_activate(GtkMenuItem *, gpointer user_data)
Definition: callbacks.cc:88
SelectionType::PIXEL
const std::string PIXEL("PixelSelection")
View::toolBarCount
unsigned toolBarCount
Definition: view.hh:130
Scroom::Utils::make_rect
Rectangle< T > make_rect(T x, T y, T width, T height)
Definition: rectangle.hh:284
View::updateTextbox
void updateTextbox()
Definition: view.cc:488
SelectionType::DEFAULT
const std::string DEFAULT(GRID)
Scroom::Utils::Point::x
value_type x
Definition: point.hh:111
View::window
GtkWindow * window
Definition: view.hh:106
on_newWindow_activate
static void on_newWindow_activate(GtkMenuItem *, gpointer user_data)
Definition: view.cc:280
Scroom::Utils::make_point
Point< T > make_point(T x, T y)
Definition: point.hh:116
Scroom::GtkHelpers::sync_on_ui_thread
void sync_on_ui_thread(T f)
Definition: gtk-helpers.hh:59
View::zoomItems
GtkListStore * zoomItems
Definition: view.hh:121
PresentationInterface::WeakPtr
boost::weak_ptr< PresentationInterface > WeakPtr
Definition: presentationinterface.hh:75
View::presentationRect
Scroom::Utils::Rectangle< double > presentationRect
Definition: view.hh:110
View::tweakSelection
std::map< std::string, boost::shared_ptr< ITweakSelection > > tweakSelection
Definition: view.hh:142
Ruler::VERTICAL
@ VERTICAL
Definition: ruler.hh:23
View::addToToolbar
void addToToolbar(GtkToolItem *ti) override
Definition: view.cc:826
View::updateScrollbars
void updateScrollbars()
Definition: view.cc:470
View::presentations
std::map< PresentationInterface::WeakPtr, GtkWidget * > presentations
Definition: view.hh:149
View::SCROLLBAR
@ SCROLLBAR
Definition: view.hh:154
Scroom::Utils::Point::to
Point< U > to() const
Definition: point.hh:103
View::vscrollbar
GtkScrollbar * vscrollbar
Definition: view.hh:111
SelectionType::GRID
const std::string GRID("GridSelection")
View::xTextBox
GtkEntry * xTextBox
Definition: view.hh:126
View::invalidate
void invalidate() override
Definition: view.cc:818
eventToPoint
static Scroom::Utils::Point< double > eventToPoint(GdkEventButton *event)
Helpers.
Definition: view.cc:275
View::selection
std::optional< Selection > selection
Definition: view.hh:134
View::drawingArea
GtkWidget * drawingArea
Definition: view.hh:108
View::updateZoom
void updateZoom()
Definition: view.cc:507
View::cachedPoint
Scroom::Utils::Point< double > cachedPoint
Definition: view.hh:145
View::updateRulers
void updateRulers()
Definition: view.cc:549
PresentationInterface::Ptr
boost::shared_ptr< PresentationInterface > Ptr
Definition: presentationinterface.hh:74
Ruler::create
static Ptr create(Orientation orientation, GtkWidget *drawArea)
Definition: ruler.cc:12
MaxZoom
static const int MaxZoom
Definition: view.cc:46
SidebarManager::setWidgets
void setWidgets(GtkWidget *panelWindow, GtkBox *panel)
Definition: sidebarmanager.cc:15
View::updateNewWindowMenu
void updateNewWindowMenu()
Definition: view.cc:907
View::on_configure
void on_configure()
Definition: view.cc:617
View::scroomXml
GtkBuilder * scroomXml
Definition: view.hh:103
View::on_newPresentationInterfaces_update
void on_newPresentationInterfaces_update(const std::map< NewPresentationInterface::Ptr, std::string > &newPresentationInterfaces)
Definition: view.cc:581
View::on_zoombox_changed
void on_zoombox_changed()
Definition: view.cc:671
View::TEXTBOX
@ TEXTBOX
Definition: view.hh:155
View::aspectRatio
Scroom::Utils::Point< double > aspectRatio
Definition: view.hh:138
TweakRulers::create
static Ptr create(Point aspectRatio_)
Definition: view.cc:89
COLUMN_ZOOM
@ COLUMN_ZOOM
Definition: view.cc:51
TweakPixelSelection::create
static Ptr create(Point aspectRatio_)
Definition: view.cc:224
PluginManager::getInstance
static PluginManager::Ptr getInstance()
Definition: pluginmanager.cc:330
View::statusArea
GtkWidget * statusArea
Definition: view.hh:128
View::updateScrollbar
static void updateScrollbar(GtkAdjustment *adj, int zoom, double value, double presentationStart, double presentationSize, double windowSize)
Definition: view.cc:449
View::presentation
PresentationInterface::Ptr presentation
Definition: view.hh:104
View::View
View(GtkBuilder *scroomXml)
Definition: view.cc:292
pixelSizeFromZoom
double pixelSizeFromZoom(int zoom)
Definition: cairo-helpers.cc:112
TweakPositionTextBox::create
static Ptr create(Point aspectRatio_)
Definition: view.cc:243
View::vruler
Ruler::Ptr vruler
Definition: view.hh:117
Scroom::Utils::Rectangle::height
value_type height() const
Definition: rectangle.hh:131
View::hscrollbaradjustment
GtkAdjustment * hscrollbaradjustment
Definition: view.hh:114
View::progressBar
GtkProgressBar * progressBar
Definition: view.hh:122
N_COLUMNS
@ N_COLUMNS
Definition: view.cc:52
View::OTHER
@ OTHER
Definition: view.hh:156
View::Ptr
boost::shared_ptr< View > Ptr
Definition: view.hh:100
View::toolBarSeparator
GtkToolItem * toolBarSeparator
Definition: view.hh:125
Scroom::Utils::Rectangle::y
value_type y() const
Definition: rectangle.hh:127
View::windowPointToPresentationPoint
Scroom::Utils::Point< double > windowPointToPresentationPoint(Scroom::Utils::Point< double > wp) const
Definition: view.cc:897
pluginManager
static PluginManager::Ptr pluginManager
Definition: pluginmanager.cc:29
View::tweakPositionTextBox
boost::shared_ptr< TweakPositionTextBox > tweakPositionTextBox
Definition: view.hh:140
View::menubar
GtkWidget * menubar
Definition: view.hh:107
tool_button_toggled
static void tool_button_toggled(GtkToggleButton *button, gpointer data)
Definition: view.cc:865
Ruler::HORIZONTAL
@ HORIZONTAL
Definition: ruler.hh:22
View::progressBarManager
ProgressBarManager::Ptr progressBarManager
Definition: view.hh:147
View::zoom
int zoom
Definition: view.hh:132
View::setPresentation
void setPresentation(PresentationInterface::Ptr presentation)
Definition: view.cc:401
View::tweakPresentationPosition
boost::shared_ptr< TweakPresentationPosition > tweakPresentationPosition
Definition: view.hh:139
View::vruler_area
GtkDrawingArea * vruler_area
Definition: view.hh:116
View::hscrollbar
GtkScrollbar * hscrollbar
Definition: view.hh:112
defect
#define defect()
Definition: assertions.hh:40
Scroom::Utils::Point::y
value_type y
Definition: point.hh:112
G_VALUE_INIT
#define G_VALUE_INIT
Definition: view.cc:28
View::zoomBox
GtkComboBox * zoomBox
Definition: view.hh:120
View::postRenderers
std::vector< PostRenderer::Ptr > postRenderers
Definition: view.hh:136
Freezable::get
const value_type & get() const
Definition: view.hh:59
COLUMN_TEXT
@ COLUMN_TEXT
Definition: view.cc:50
View::sidebarManager
SidebarManager sidebarManager
Definition: view.hh:105
TweakPresentationPosition::create
static Ptr create(Point aspectRatio_)
Definition: view.cc:64
ProgressBarManager::create
static Ptr create(GtkProgressBar *progressBar=nullptr)
Definition: progressbarmanager.cc:115
Scroom::Utils::Point< int >
View::modifiermove
gint modifiermove
Definition: view.hh:144