1. 23 Sep, 2010 1 commit
    • Joel Martin's avatar
      Misc cleanup: debug logging, record filename, etc. · 005d9ee9
      Joel Martin authored
      - include/canvas.js: When 'debug' logging, show browser detection
        values.
      - test/canvas.html: Only restore the canvas to it's starting state if
        the logging level is not 'debug'.
      - wsproxy.py: Append the session number to the record filename so that
        multiple sessions don't stomp on each other.
      005d9ee9
  2. 08 Sep, 2010 1 commit
  3. 31 Aug, 2010 1 commit
  4. 26 Aug, 2010 1 commit
    • Joel Martin's avatar
      Indexed receive queue. Up to 2X speedup in Chrome. · 67b4e987
      Joel Martin authored
      Generally, most servers send hextile updates as single updates
      containing many rects. Some servers send hextile updates as many small
      framebuffer updates with a few rects each (such as QEMU). This latter
      cases revealed that shifting off the beginning of the receive queue
      (which happens after each hextile FBU) performs poorly.
      
      This change switches to using an indexed receive queue (instead of
      actually shifting off the array). When the receive queue has grown to
      a certain size, then it is compacted all at once.
      
      The code is not as clean, but this change results in more than 2X
      speedup under Chrome for the pessimal case and 10-20% in firefox.
      67b4e987
  5. 04 Aug, 2010 2 commits
  6. 02 Aug, 2010 2 commits
    • Joel Martin's avatar
      New API. Refactor Canvas and RFB objects. · 8db09746
      Joel Martin authored
      New API:
      
      To use the RFB object, you now must instantiate it (this allows more
      than one instance of it on the same page).
      
          rfb = new RFB(settings);
      
      The 'settings' variable is a namespace that contains initial default
      settings. These can also be set and read using 'rfb.set_FOO()' and
      'rfb.get_FOO()' where FOO is the setting name. The current settings
      are (and defaults) are:
          - target: the DOM Canvas element to use ('VNC_canvas').
          - encrypt: whether to encrypt the connection (false)
          - true_color: true_color or palette (true)
          - b64encode: base64 encode the WebSockets data (true)
          - local_cursor: use local cursor rendering (true if supported)
          - connectTimeout: milliseconds to wait for connect (2000)
          - updateState: callback when RFB state changes (none)
          - clipboardReceive: callback when clipboard data received (none)
      
      The parameters to the updateState callback have also changed. The
      function spec is now updateState(rfb, state, oldstate, msg):
          - rfb: the RFB object that this state change is for.
          - state: the new state
          - oldstate: the previous state
          - msg: a message associate with the state (not always set).
      
      The clipboardReceive spec is clipboardReceive(rfb, text):
          - rfb: the RFB object that this text is from.
          - text: the clipboard text received.
      
      Changes:
      
      - The RFB and Canvas namespaces are now more proper objects. Private
        implementation is no longer exposed and the public API has been made
        explicit. Also, instantiation allows more than one VNC connection
        on the same page (to complete this, DefaultControls will also need
        this same refactoring).
      
      - Added 'none' logging level.
      
      - Removed automatic stylesheet selection workaround in util.js and
        move it to defaultcontrols so that it doesn't interfere with
        intergration.
      
      - Also, some major JSLinting.
      
      - Fix input, canvas, and cursor tests to work with new model.
      8db09746
    • Joel Martin's avatar
      Catch exceptions in cursor detection. · 8171f4d8
      Joel Martin authored
      If cursor Data URI scheme detection threw an exception, it would cause
      canvas initialization to fail. cursor detection exceptions should just
      disable local cursor change support, not cause canvas init to fail.
      8171f4d8
  7. 30 Jul, 2010 1 commit
    • Joel Martin's avatar
      Preliminary scaling code (deactivated). · 125d8bbb
      Joel Martin authored
      Uses the CSS "scale()" operation. The main problem is that the DOM
      container is not rescaled, only the size of the displayed content
      within it so there will need to be some sort of mechanism to handle
      this better so other elements reflow to the new size. Or it might just
      not work and be removed later. The zoom property seems to do the right
      behavior, but it's not widely supported. Worth exploring though.
      125d8bbb
  8. 22 Jul, 2010 2 commits
    • Joel Martin's avatar
      JSLint. RFB obj to rfb.js; vnc.js the 'loader'. · a7a89626
      Joel Martin authored
      Move the whole RFB object to rfb.js. vnc.js is now just the loader
      file. This allows an integrating project to easily replace vnc.js with
      an alternate loader mechanism (or just do it directly in the html
      file). Thanks for the idea primalmotion (http://github.com/primalmotion).
      
      Also, JSLint the various files.
      a7a89626
    • Joel Martin's avatar
      API changes. Client cursor and settings menu. · da6dd893
      Joel Martin authored
      The following API changes may affect integrators:
      
          - Settings have been moved out of the RFB.connect() call. Each
            setting now has it's own setter function: setEncrypt, setBase64,
            setTrueColor, setCursor.
      
          - Encrypt and cursor settings now default to on.
      
          - CSS changes:
              - VNC_status_bar for input buttons switched to a element class.
      
              - VNC_buttons split into VNC_buttons_right and
                VNC_buttons_left
      
              - New id styles for VNC_settings_menu and VNC_setting
      
      Note: the encrypt, true_color and cursor, logging setting can all be
        set on load using query string variables (in addition to host, port
        and password).
      
      Client cursor (cursor pseudo-encoding) support has been polished and
      activated.
      
      The RFB settings are now presented as radio button list items in
      a drop-down "Settings" menu when using the default controls.
      
      Also, in the settings menu is the ability to select between alternate
      style-sheets.
      
      Cookie and stylesheet selection support added to util.js.
      da6dd893
  9. 20 Jul, 2010 1 commit
    • Joel Martin's avatar
      Add Cursor pseudo-encoding support (disabled for now). · 2c2b492c
      Joel Martin authored
      To change the appearance of the cursor, we use the CSS cursor style
      and set the url to a data URI scheme. The image data sent via the
      cursor pseudo-encoding has to be encoded to a CUR format file before
      being used in the data URI.
      
      During Canvas initialization we try and set a simple cursor to see if
      the browser has support. Opera is missing support for data URI scheme
      in cursor URLs.
      
      Disabled for now until we have a better way of specifying settings
      overall (too many settings for control bar now).
      2c2b492c
  10. 06 Jul, 2010 1 commit
    • Joel Martin's avatar
      Refactor console logging code. · 81e5adaf
      Joel Martin authored
      Util.Debug, Util.Info, Util.Warn, Util.Error routines instead of
      direct calls to console.*. Add "logging=XXX" query variable that sets
      the logging level (default is "warn").
      
      Logging values:
          debug: code debug logging (many calls in performance path are also
                 commented for performance reasons).
          info: informative messages including timing information.
          warn: significant events
          error: something has gone wrong
      81e5adaf
  11. 02 Jul, 2010 1 commit
  12. 01 Jul, 2010 1 commit
    • Joel Martin's avatar
      Always prefer JS ops if we have imageData. · 67134184
      Joel Martin authored
      All browsers with Canvas imageData are faster with JS ops instead of
      canvas ops. This gives significant performance improvement in Opera.
      Except for missing web-socet-js message notifications, Opera 10.60 is
      now faster than firefox 3.5.
      67134184
  13. 29 Jun, 2010 1 commit
  14. 24 Jun, 2010 1 commit
  15. 23 Jun, 2010 1 commit
    • Joel Martin's avatar
      Various cross-browser fixes. · d93d3e09
      Joel Martin authored
      Now working under Arora 0.5.
      
      But not Konqueror 4.2.2 (WebSockets never connects).
      
      IE support with excanvas still pending.
      d93d3e09
  16. 15 Jun, 2010 3 commits
  17. 14 Jun, 2010 1 commit
  18. 10 Jun, 2010 2 commits
  19. 03 Jun, 2010 1 commit
  20. 01 Jun, 2010 1 commit
    • Joel Martin's avatar
      Add colour map support (non-true-color). · d41c33e4
      Joel Martin authored
      In colourMap mode there are 256 colours in a colour palette sent from
      the server via the SetColourMapEntries message. This reduces the
      bandwidth by about 1/4. However, appearance can be somewhat less than
      ideal (pinks instead of gray, etc).
      
      It also increases client side rendering performance especially on
      firefox. Rendering a full 800x600 update takes about 950ms in
      firefox on my system compared to about 1400ms. Round-trip time for
      a full frame buffer update is even better on firefox (due to
      performance of the flash WebSocket emulator). Reduced from about
      1800ms to 1100ms on firefox (for 800x600 full update).
      d41c33e4
  21. 26 May, 2010 1 commit
    • Joel Martin's avatar
      Change license to LGPL-3 and add some implementation notes. · af6b17ce
      Joel Martin authored
      The purpose of the code is to be incorporated into other web projects
      (whether those are free or not). AGPL prevents combination with other
      HTML and javascript that is under a weaker (or proprietary) license.
      Better would be a lesser AGPL, but there is not GNU standard for that.
      So LGPL-3 meets most of my requirements. If somebody modifies the
      actual client code and conveys it, then they must release the changes
      under LGPL-3 also.
      
      Add some implementation notes in docs/notes.
      af6b17ce
  22. 25 May, 2010 1 commit
  23. 20 May, 2010 1 commit
  24. 17 May, 2010 1 commit
    • Joel Martin's avatar
      Double Chrome hextile perf again. Add canvas test. · 97763d0e
      Joel Martin authored
      - By dereferencing the 'data' field of the imageData object before the
        loop, the hextile performance on Chrome is down to 140ms or so for
        a full 800x600 update. Still have to fall back to Canvas operations
        for firefox.
      
      - Fix RQ empty after reorder bug.
      97763d0e
  25. 15 May, 2010 4 commits
  26. 18 Apr, 2010 2 commits
    • Joel Martin's avatar
      Status/error refactor. Fix firefox bugs. · 8759ea6f
      Joel Martin authored
      - All state/status updates go through updateState routine which
        updates the status line also.
      
      - Old firefox (and opera) don't support canvas createImageData, so use
        getImageData as replacement.
      
      - Add console.warn and console.error stubs so that firefox without
        firebug doesn't crap out.
      
      - If no WebSockets then error if no flash or if URL is location (flash
        will refuse to load the object for security reasons).
      8759ea6f
    • Joel Martin's avatar
      Fix firefox '-' key mapping. · 9fec75c0
      Joel Martin authored
      9fec75c0
  27. 15 Apr, 2010 1 commit
  28. 14 Apr, 2010 3 commits