xpra icon
Bug tracker and wiki

This bug tracker and wiki are being discontinued
please use https://github.com/Xpra-org/xpra instead.


Ticket #189: cursor-scaling.patch

File cursor-scaling.patch, 5.7 KB (added by Antoine Martin, 8 years ago)

adds --cursor-scaling=pct options to choose between auto and custom scaling options

  • xpra/client/gtk2/client.py

     
    238238                pixbuf = gdk.pixbuf_new_from_data(pixels, gdk.COLORSPACE_RGB, True, 8, w, h, w * 4)
    239239                x = max(0, min(xhot, w-1))
    240240                y = max(0, min(yhot, h-1))
    241                 size = gdk.display_get_default().get_default_cursor_size()
    242                 if size>0 and (size<w or size<h):
    243                     ratio = float(max(w,h))/size
    244                     pixbuf = pixbuf.scale_simple(int(w/ratio), int(h/ratio), gdk.INTERP_BILINEAR)
     241                if self.cursor_scaling==100:
     242                    #no scaling
     243                    ratio = 1
     244                elif self.cursor_scaling<0:
     245                    #auto detect ratio:
     246                    if self.server_cursor_default_size>0:
     247                        client_cursor_size = gdk.display_get_default().get_default_cursor_size()
     248                        ratio = self.server_cursor_default_size / client_cursor_size
     249                    else:
     250                        #cannot do auto as we don't know the default server size
     251                        ratio = 1
     252                else:
     253                    ratio = 100/self.cursor_scaling
     254
     255                log.info("cursor scaling ratio=%s", ratio)
     256                if ratio!=1:
     257                    sw = max(1, int(w/ratio))
     258                    sh = max(1, int(h/ratio))
     259                    pixbuf = pixbuf.scale_simple(sw, sh, gdk.INTERP_BILINEAR)
    245260                    x = int(x/ratio)
    246261                    y = int(y/ratio)
    247262                cursor = gdk.Cursor(gdk.display_get_default(), pixbuf, x, y)
  • xpra/client/ui_client_base.py

     
    8181        self.server_platform = ""
    8282        self.server_actual_desktop_size = None
    8383        self.server_max_desktop_size = None
     84        self.server_cursor_default_size = 0
    8485        self.server_display = None
    8586        self.server_randr = False
    8687        self.server_auto_refresh_delay = 0
     
    134135        self.readonly = False
    135136        self.windows_enabled = True
    136137        self.pings = False
     138        self.cursor_scaling = -1
    137139
    138140        self.client_supports_notifications = False
    139141        self.client_supports_system_tray = False
     
    185187        self.readonly = opts.readonly
    186188        self.windows_enabled = opts.windows
    187189        self.pings = opts.pings
     190        self.cursor_scaling = opts.cursor_scaling
    188191
    189192        self.client_supports_notifications = opts.notifications
    190193        self.client_supports_system_tray = opts.system_tray and SYSTEM_TRAY_SUPPORTED
     
    652655        self.server_display = capabilities.get("display")
    653656        self.server_actual_desktop_size = capabilities.get("actual_desktop_size")
    654657        log("server actual desktop size=%s", self.server_actual_desktop_size)
     658        self.server_cursor_default_size = capabilities.get("cursor.default_size", 0)
    655659        self.server_randr = capabilities.get("resize_screen", False)
    656660        log.debug("server has randr: %s", self.server_randr)
    657661        self.server_info_request = capabilities.get("info-request", False)
  • xpra/scripts/config.py

     
    306306                    "port"              : int,
    307307                    "compression_level" : int,
    308308                    "dpi"               : int,
     309                    "cursor-scaling"    : int,
    309310                    #float options:
    310311                    "max-bandwidth"     : float,
    311312                    "auto-refresh-delay": float,
     
    386387                    "port"              : -1,
    387388                    "compression_level" : 3,
    388389                    "dpi"               : 96,
     390                    "cursor-scaling"    : 100,
    389391                    "max-bandwidth"     : 0.0,
    390392                    "auto-refresh-delay": 0.25,
    391393                    "debug"             : False,
  • xpra/scripts/main.py

     
    291291    group.add_option("--no-keyboard-sync", action="store_false",
    292292                      dest="keyboard_sync", default=defaults.keyboard_sync,
    293293                      help="Disable keyboard state synchronization, prevents keys from repeating on high latency links but also may disrupt applications which access the keyboard directly")
     294    group.add_option("--cursor-scaling", action="store",
     295                          dest="cursor_scaling", type="int", default=defaults.cursor_scaling,
     296                          help="Scaling ratio for custom cursors as a percentage. Set to 100 to disable scaling, use a negative value to use automatic mode. (default %default)")
    294297    parser.add_option_group(group)
    295298
    296299    group = OptionGroup(parser, "Advanced Options",
  • xpra/server/server_base.py

     
    719719        if key_repeat:
    720720            capabilities["key_repeat"] = key_repeat
    721721            capabilities["key_repeat_modifiers"] = True
     722        capabilities["cursor.default_size"] = gtk.gdk.display_get_default().get_default_cursor_size()
    722723        capabilities["clipboard"] = self._clipboard_helper is not None and self._clipboard_client == server_source
    723724        if server_cipher:
    724725            capabilities.update(server_cipher)