Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

120 lines (95 sloc) 4.442 kb
/******************************************************************************
*******************************************************************************
*******************************************************************************
Copyright (C) 2013 Ben Martin
This file is part of FontForge.
FontForge is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
FontForge is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with FontForge. If not, see <http://www.gnu.org/licenses/>.
For more details see the COPYING.gplv3 file in the root directory of this
distribution.
*******************************************************************************
*******************************************************************************
******************************************************************************/
#ifndef _ALREADY_INCLUDED_FF_COLLAB_CLIENT_H
#define _ALREADY_INCLUDED_FF_COLLAB_CLIENT_H
#include <fontforge-config.h>
#include "baseviews.h"
#include "views.h"
extern int pref_collab_sessionJoinTimeoutMS;
extern int pref_collab_roundTripTimerMS;
/**
* Sometimes code *might* have created a new undo in the process of a
* complex set of tests and nested calls. To help that code, the
* CVAddUndo() calls this function to inform the collab code that a
* new undo has infact been created.
*
* So the client code can just call sendRedo() and if there was no new
* undo created then nothing is sent to the collab session. On the
* other hand if an undo was created, then it will have called here
* during the process of being added to the undo stack, so the
* sendRedo() will send this new undo to ther server.
*
* A classic case for this chain of events is clicking on the charview
* canvas. If there was nothing selected and the user clicks on the
* background then there will be no new undo created. If the user
* picks a new node then there *will* be a new undo created. Either
* way, the client code can safely just call sendRedo() and if there
* was a new undo created it will be sent, if not then nothing will be
* sent.
*/
extern void collabclient_CVPreserveStateCalled( CharViewBase *cv );
extern void collabclient_SCPreserveStateCalled( SplineChar *sc );
/**
* Some parts of the system like charview's "undo" menu item might need
* to override this setting so that UI redraws happen by default.
*/
extern void collabclient_setGeneratingUndoForWire( int v );
/**
* If an undo takes place, it needs to know if it should repaint
* the window to reflect the changes. If collabclient_generatingUndoForWire
* returns true, then we don't really want to repaint just yet.
*
* Consider the process of events
*
* (a) User performs moving the top node in A left a bit
* (b) the collab code runs "undo" so it can get the redo information
* (c) the undo repaints the window
* (d) the redo info is sent to the server
* (e) delay
* (f) server publishes this redo to all clients (including us)
* (g) we "redo" the information from the server
* (h) the redo repaints the window
*
* We would give a better user experience if (c) doesn't happen. So
* the user doesn't see the older state appear and cancelled out again
* moments later.
*
* So an undo should check this function and
* if( collabclient_generatingUndoForWire() )
* {
* dont repaint UI
* }
*/
extern int collabclient_generatingUndoForWire( CharViewBase *cv );
/**
* Return >0 if this charview is part of a collab session
*/
extern int collabclient_inSession( CharViewBase *cv );
extern int collabclient_inSessionFV( FontViewBase* fv );
/**
* Get the state as a enum or string. This can tell the user if we
* have never connected, are running a local server, or are simply a
* client. Also we can let them know if we were once connected but are
* now disconnected.
*/
extern enum collabState_t collabclient_getState( FontViewBase* fv );
extern const char* collabclient_stateToString( enum collabState_t s );
#endif
Jump to Line
Something went wrong with that request. Please try again.