Merge branch 'devel'
This commit is contained in:
commit
ee8998483b
@ -649,6 +649,12 @@ ssl_tls_accept(struct ssl_tls *self)
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (SSL_CTX_use_certificate_chain_file(self->ctx, self->cert) <= 0)
|
||||
{
|
||||
g_writeln("ssl_tls_accept: SSL_CTX_use_certificate_chain_file failed");
|
||||
return 1;
|
||||
}
|
||||
|
||||
self->ssl = SSL_new(self->ctx);
|
||||
|
||||
if (self->ssl == NULL)
|
||||
@ -657,12 +663,6 @@ ssl_tls_accept(struct ssl_tls *self)
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (SSL_use_certificate_file(self->ssl, self->cert, SSL_FILETYPE_PEM) <= 0)
|
||||
{
|
||||
g_writeln("ssl_tls_accept: SSL_use_certificate_file failed");
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (SSL_set_fd(self->ssl, self->trans->sck) < 1)
|
||||
{
|
||||
g_writeln("ssl_tls_accept: SSL_set_fd failed");
|
||||
@ -685,14 +685,24 @@ ssl_tls_accept(struct ssl_tls *self)
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/* returns error, */
|
||||
int APP_CC
|
||||
ssl_tls_disconnect(struct ssl_tls *self)
|
||||
{
|
||||
int status = SSL_shutdown(self->ssl);
|
||||
int status;
|
||||
|
||||
if (self == NULL)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
if (self->ssl == NULL)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
status = SSL_shutdown(self->ssl);
|
||||
while (status != 1)
|
||||
{
|
||||
status = SSL_shutdown(self->ssl);
|
||||
|
||||
if (status <= 0)
|
||||
{
|
||||
if (ssl_tls_print_error("SSL_shutdown", self->ssl, status))
|
||||
|
@ -19,6 +19,13 @@ setxkbmap -model pc104 -layout de
|
||||
setxkbmap -model pc104 -layout it
|
||||
./xrdp-genkeymap ../instfiles/km-0410.ini
|
||||
|
||||
# Japanese 'jp' 0x0411
|
||||
setxkbmap -model jp106 -layout jp -variant OADG109A
|
||||
./xrdp-genkeymap ../instfiles/km-0411.ini
|
||||
./xrdp-genkeymap ../instfiles/km-e0010411.ini
|
||||
./xrdp-genkeymap ../instfiles/km-e0200411.ini
|
||||
./xrdp-genkeymap ../instfiles/km-e0210411.ini
|
||||
|
||||
# Polish 'pl' 0x0415
|
||||
setxkbmap -model pc104 -layout pl
|
||||
./xrdp-genkeymap ../instfiles/km-0415.ini
|
||||
|
@ -22,10 +22,14 @@ startscript_DATA = \
|
||||
km-0409.ini \
|
||||
km-040c.ini \
|
||||
km-0410.ini \
|
||||
km-0411.ini \
|
||||
km-0415.ini \
|
||||
km-0419.ini \
|
||||
km-041d.ini \
|
||||
km-0816.ini
|
||||
km-0816.ini \
|
||||
km-e0010411.ini \
|
||||
km-e0200411.ini \
|
||||
km-e0210411.ini
|
||||
|
||||
# must be tab below
|
||||
install-data-hook:
|
||||
|
1055
instfiles/km-0411.ini
Normal file
1055
instfiles/km-0411.ini
Normal file
File diff suppressed because it is too large
Load Diff
1055
instfiles/km-e0010411.ini
Normal file
1055
instfiles/km-e0010411.ini
Normal file
File diff suppressed because it is too large
Load Diff
1055
instfiles/km-e0200411.ini
Normal file
1055
instfiles/km-e0200411.ini
Normal file
File diff suppressed because it is too large
Load Diff
1055
instfiles/km-e0210411.ini
Normal file
1055
instfiles/km-e0210411.ini
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,7 +1,12 @@
|
||||
.nofail
|
||||
.fail
|
||||
load-module module-augment-properties
|
||||
load-module module-xrdp-sink
|
||||
load-module module-xrdp-source
|
||||
load-module module-always-sink
|
||||
.ifexists module-xrdp-sink.so
|
||||
load-module module-xrdp-sink
|
||||
.endif
|
||||
.ifexists module-xrdp-source.so
|
||||
load-module module-xrdp-source
|
||||
.endif
|
||||
load-module module-native-protocol-unix
|
||||
|
||||
|
@ -117,16 +117,36 @@ xrdp_fastpath_init(struct xrdp_fastpath *self, struct stream *s)
|
||||
int APP_CC
|
||||
xrdp_fastpath_send(struct xrdp_fastpath *self, struct stream *s)
|
||||
{
|
||||
if (trans_force_write_s(self->trans, s) != 0)
|
||||
if (trans_force_write_s(self->trans, s) != 0)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
static int APP_CC
|
||||
xrdp_fastpath_session_callback(struct xrdp_fastpath *self, int msg,
|
||||
long param1, long param2,
|
||||
long param3, long param4)
|
||||
{
|
||||
if (self->session->callback != 0)
|
||||
{
|
||||
/* msg_type can be
|
||||
RDP_INPUT_SYNCHRONIZE - 0
|
||||
RDP_INPUT_SCANCODE - 4
|
||||
RDP_INPUT_MOUSE - 0x8001
|
||||
RDP_INPUT_MOUSEX - 0x8002 */
|
||||
/* call to xrdp_wm.c : callback */
|
||||
self->session->callback(self->session->id, msg,
|
||||
param1, param2, param3, param4);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/* FASTPATH_INPUT_EVENT_SCANCODE */
|
||||
int APP_CC
|
||||
static int APP_CC
|
||||
xrdp_fastpath_process_EVENT_SCANCODE(struct xrdp_fastpath *self,
|
||||
int eventFlags, struct stream *s)
|
||||
{
|
||||
@ -152,25 +172,17 @@ xrdp_fastpath_process_EVENT_SCANCODE(struct xrdp_fastpath *self,
|
||||
if ((eventFlags & FASTPATH_INPUT_KBDFLAGS_EXTENDED))
|
||||
flags |= KBD_FLAG_EXT;
|
||||
|
||||
if (self->session->callback != 0)
|
||||
{
|
||||
/* msg_type can be
|
||||
RDP_INPUT_SYNCHRONIZE - 0
|
||||
RDP_INPUT_SCANCODE - 4
|
||||
RDP_INPUT_MOUSE - 0x8001
|
||||
RDP_INPUT_MOUSEX - 0x8002 */
|
||||
/* call to xrdp_wm.c : callback */
|
||||
self->session->callback(self->session->id, RDP_INPUT_SCANCODE, code, 0,
|
||||
flags, 0);
|
||||
}
|
||||
xrdp_fastpath_session_callback(self, RDP_INPUT_SCANCODE,
|
||||
code, 0, flags, 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/* FASTPATH_INPUT_EVENT_MOUSE */
|
||||
int APP_CC
|
||||
xrdp_fastpath_process_EVENT_MOUSE(struct xrdp_fastpath *self, int eventFlags,
|
||||
struct stream *s)
|
||||
static int APP_CC
|
||||
xrdp_fastpath_process_EVENT_MOUSE(struct xrdp_fastpath *self,
|
||||
int eventFlags, struct stream *s)
|
||||
{
|
||||
int pointerFlags;
|
||||
int xPos;
|
||||
@ -190,23 +202,15 @@ xrdp_fastpath_process_EVENT_MOUSE(struct xrdp_fastpath *self, int eventFlags,
|
||||
in_uint16_le(s, xPos); /* xPos (2 bytes) */
|
||||
in_uint16_le(s, yPos); /* yPos (2 bytes) */
|
||||
|
||||
if (self->session->callback != 0)
|
||||
{
|
||||
/* msg_type can be
|
||||
RDP_INPUT_SYNCHRONIZE - 0
|
||||
RDP_INPUT_SCANCODE - 4
|
||||
RDP_INPUT_MOUSE - 0x8001
|
||||
RDP_INPUT_MOUSEX - 0x8002 */
|
||||
/* call to xrdp_wm.c : callback */
|
||||
self->session->callback(self->session->id, RDP_INPUT_MOUSE,
|
||||
xPos, yPos, pointerFlags, 0);
|
||||
}
|
||||
xrdp_fastpath_session_callback(self, RDP_INPUT_MOUSE,
|
||||
xPos, yPos, pointerFlags, 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/* FASTPATH_INPUT_EVENT_MOUSEX */
|
||||
int APP_CC
|
||||
static int APP_CC
|
||||
xrdp_fastpath_process_EVENT_MOUSEX(struct xrdp_fastpath *self,
|
||||
int eventFlags, struct stream *s)
|
||||
{
|
||||
@ -228,50 +232,35 @@ xrdp_fastpath_process_EVENT_MOUSEX(struct xrdp_fastpath *self,
|
||||
in_uint16_le(s, xPos); /* xPos (2 bytes) */
|
||||
in_uint16_le(s, yPos); /* yPos (2 bytes) */
|
||||
|
||||
if (self->session->callback != 0)
|
||||
{
|
||||
/* msg_type can be
|
||||
RDP_INPUT_SYNCHRONIZE - 0
|
||||
RDP_INPUT_SCANCODE - 4
|
||||
RDP_INPUT_MOUSE - 0x8001
|
||||
RDP_INPUT_MOUSEX - 0x8002 */
|
||||
/* call to xrdp_wm.c : callback */
|
||||
self->session->callback(self->session->id, RDP_INPUT_MOUSEX,
|
||||
xPos, yPos, pointerFlags, 0);
|
||||
}
|
||||
xrdp_fastpath_session_callback(self, RDP_INPUT_MOUSEX,
|
||||
xPos, yPos, pointerFlags, 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/* FASTPATH_INPUT_EVENT_SYNC */
|
||||
int APP_CC
|
||||
xrdp_fastpath_process_EVENT_SYNC(struct xrdp_fastpath *self, int eventCode,
|
||||
static int APP_CC
|
||||
xrdp_fastpath_process_EVENT_SYNC(struct xrdp_fastpath *self,
|
||||
int eventFlags, struct stream *s)
|
||||
{
|
||||
/*
|
||||
/*
|
||||
* The eventCode bitfield (3 bits in size) MUST be set to
|
||||
* FASTPATH_INPUT_EVENT_SYNC (3).
|
||||
* The eventFlags bitfield (5 bits in size) contains flags
|
||||
* indicating the "on"
|
||||
* status of the keyboard toggle keys.
|
||||
*/
|
||||
if (self->session->callback != 0)
|
||||
{
|
||||
/* msg_type can be
|
||||
RDP_INPUT_SYNCHRONIZE - 0
|
||||
RDP_INPUT_SCANCODE - 4
|
||||
RDP_INPUT_MOUSE - 0x8001
|
||||
RDP_INPUT_MOUSEX - 0x8002 */
|
||||
/* call to xrdp_wm.c : callback */
|
||||
self->session->callback(self->session->id, RDP_INPUT_SYNCHRONIZE,
|
||||
eventCode, 0, eventFlags, 0);
|
||||
}
|
||||
|
||||
xrdp_fastpath_session_callback(self, RDP_INPUT_SYNCHRONIZE,
|
||||
eventFlags, 0, 0, 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/* FASTPATH_INPUT_EVENT_UNICODE */
|
||||
int APP_CC
|
||||
static int APP_CC
|
||||
xrdp_fastpath_process_EVENT_UNICODE(struct xrdp_fastpath *self,
|
||||
int eventFlags, struct stream *s)
|
||||
{
|
||||
@ -286,7 +275,8 @@ xrdp_fastpath_process_EVENT_UNICODE(struct xrdp_fastpath *self,
|
||||
/*****************************************************************************/
|
||||
/* FASTPATH_INPUT_EVENT */
|
||||
int APP_CC
|
||||
xrdp_fastpath_process_input_event(struct xrdp_fastpath *self, struct stream *s)
|
||||
xrdp_fastpath_process_input_event(struct xrdp_fastpath *self,
|
||||
struct stream *s)
|
||||
{
|
||||
int i;
|
||||
int eventHeader;
|
||||
@ -315,7 +305,6 @@ xrdp_fastpath_process_input_event(struct xrdp_fastpath *self, struct stream *s)
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
|
||||
case FASTPATH_INPUT_EVENT_MOUSE:
|
||||
if (xrdp_fastpath_process_EVENT_MOUSE(self,
|
||||
eventFlags,
|
||||
@ -333,7 +322,7 @@ xrdp_fastpath_process_input_event(struct xrdp_fastpath *self, struct stream *s)
|
||||
}
|
||||
break;
|
||||
case FASTPATH_INPUT_EVENT_SYNC:
|
||||
if (xrdp_fastpath_process_EVENT_SYNC(self, eventCode,
|
||||
if (xrdp_fastpath_process_EVENT_SYNC(self,
|
||||
eventFlags,
|
||||
s) != 0)
|
||||
{
|
||||
@ -352,7 +341,7 @@ xrdp_fastpath_process_input_event(struct xrdp_fastpath *self, struct stream *s)
|
||||
g_writeln("xrdp_fastpath_process_input_event: unknown "
|
||||
"eventCode %d", eventCode);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
@ -51,7 +51,53 @@ xrdp_iso_delete(struct xrdp_iso *self)
|
||||
/*****************************************************************************/
|
||||
/* returns error */
|
||||
static int APP_CC
|
||||
xrdp_iso_process_rdpNegReq(struct xrdp_iso *self, struct stream *s)
|
||||
xrdp_iso_negotiate_security(struct xrdp_iso *self)
|
||||
{
|
||||
int rv = 0;
|
||||
int server_security_layer = self->mcs_layer->sec_layer->rdp_layer->client_info.security_layer;
|
||||
|
||||
self->selectedProtocol = server_security_layer;
|
||||
|
||||
switch (server_security_layer)
|
||||
{
|
||||
case PROTOCOL_RDP:
|
||||
self->rdpNegData = 0; /* no need to send rdp_neg_data back to client */
|
||||
break;
|
||||
case PROTOCOL_SSL:
|
||||
if (self->requestedProtocol & PROTOCOL_SSL)
|
||||
{
|
||||
self->selectedProtocol = PROTOCOL_SSL;
|
||||
}
|
||||
else
|
||||
{
|
||||
self->failureCode = SSL_REQUIRED_BY_SERVER;
|
||||
rv = 1; /* error */
|
||||
}
|
||||
break;
|
||||
case PROTOCOL_HYBRID:
|
||||
case PROTOCOL_HYBRID_EX:
|
||||
default:
|
||||
if (self->requestedProtocol & PROTOCOL_SSL)
|
||||
{
|
||||
/* thats a patch since we don't support CredSSP for now */
|
||||
self->selectedProtocol = PROTOCOL_SSL;
|
||||
}
|
||||
else
|
||||
{
|
||||
self->selectedProtocol = PROTOCOL_RDP;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
DEBUG(("xrdp_iso_negotiate_security: server security layer %d , client security layer %d",
|
||||
self->selectedProtocol, self->requestedProtocol));
|
||||
return rv;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/* returns error */
|
||||
static int APP_CC
|
||||
xrdp_iso_process_rdp_neg_req(struct xrdp_iso *self, struct stream *s)
|
||||
{
|
||||
int flags;
|
||||
int len;
|
||||
@ -85,11 +131,11 @@ xrdp_iso_process_rdpNegReq(struct xrdp_iso *self, struct stream *s)
|
||||
static int APP_CC
|
||||
xrdp_iso_recv_msg(struct xrdp_iso *self, struct stream *s, int *code, int *len)
|
||||
{
|
||||
int ver; // tpkt ver
|
||||
int plen; // tpkt len
|
||||
int ver;
|
||||
int plen;
|
||||
|
||||
*code = 0; // x.244 type
|
||||
*len = 0; // X.224 len indicator
|
||||
*code = 0;
|
||||
*len = 0;
|
||||
|
||||
if (s != self->trans->in_s)
|
||||
{
|
||||
@ -212,7 +258,6 @@ xrdp_iso_send_cc(struct xrdp_iso *self)
|
||||
out_uint32_le(s, self->selectedProtocol); /* selected protocol */
|
||||
}
|
||||
}
|
||||
|
||||
s_mark_end(s);
|
||||
|
||||
len = (int) (s->end - holdp);
|
||||
@ -235,6 +280,7 @@ xrdp_iso_send_cc(struct xrdp_iso *self)
|
||||
int APP_CC
|
||||
xrdp_iso_incoming(struct xrdp_iso *self)
|
||||
{
|
||||
int rv = 0;
|
||||
int code;
|
||||
int len;
|
||||
int cookie_index;
|
||||
@ -274,7 +320,7 @@ xrdp_iso_incoming(struct xrdp_iso *self)
|
||||
break;
|
||||
case RDP_NEG_REQ: /* rdpNegReq 1 */
|
||||
self->rdpNegData = 1;
|
||||
if (xrdp_iso_process_rdpNegReq(self, s) != 0)
|
||||
if (xrdp_iso_process_rdp_neg_req(self, s) != 0)
|
||||
{
|
||||
g_writeln("xrdp_iso_incoming: xrdp_iso_process_rdpNegReq returned non zero");
|
||||
return 1;
|
||||
@ -302,78 +348,8 @@ xrdp_iso_incoming(struct xrdp_iso *self)
|
||||
}
|
||||
}
|
||||
|
||||
int serverSecurityLayer = self->mcs_layer->sec_layer->rdp_layer->client_info.security_layer;
|
||||
/* security layer negotiation */
|
||||
if (self->rdpNegData)
|
||||
{
|
||||
self->selectedProtocol = PROTOCOL_RDP; /* set default security layer */
|
||||
|
||||
switch (serverSecurityLayer)
|
||||
{
|
||||
case (PROTOCOL_SSL | PROTOCOL_HYBRID | PROTOCOL_HYBRID_EX):
|
||||
/* server supports tls+hybrid+hybrid_ex */
|
||||
if (self->requestedProtocol == (PROTOCOL_SSL | PROTOCOL_HYBRID
|
||||
| PROTOCOL_HYBRID_EX))
|
||||
{
|
||||
/* client supports tls+hybrid+hybrid_ex */
|
||||
self->selectedProtocol = PROTOCOL_SSL; //TODO: change
|
||||
}
|
||||
else
|
||||
{
|
||||
self->failureCode = SSL_WITH_USER_AUTH_REQUIRED_BY_SERVER;
|
||||
}
|
||||
break;
|
||||
case (PROTOCOL_SSL | PROTOCOL_HYBRID):
|
||||
/* server supports tls+hybrid */
|
||||
if (self->requestedProtocol == (PROTOCOL_SSL | PROTOCOL_HYBRID))
|
||||
{
|
||||
/* client supports tls+hybrid */
|
||||
self->selectedProtocol = PROTOCOL_SSL; //TODO: change
|
||||
}
|
||||
else
|
||||
{
|
||||
self->failureCode = HYBRID_REQUIRED_BY_SERVER;
|
||||
}
|
||||
break;
|
||||
case PROTOCOL_SSL:
|
||||
/* server supports tls */
|
||||
if (self->requestedProtocol & PROTOCOL_SSL) //TODO
|
||||
{
|
||||
/* client supports tls */
|
||||
self->selectedProtocol = PROTOCOL_SSL;
|
||||
}
|
||||
else
|
||||
{
|
||||
self->failureCode = SSL_REQUIRED_BY_SERVER;
|
||||
}
|
||||
break;
|
||||
case PROTOCOL_RDP:
|
||||
/* server supports rdp */
|
||||
if (self->requestedProtocol == PROTOCOL_RDP)
|
||||
{
|
||||
/* client supports rdp */
|
||||
self->selectedProtocol = PROTOCOL_RDP;
|
||||
}
|
||||
else
|
||||
{
|
||||
self->failureCode = SSL_NOT_ALLOWED_BY_SERVER;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
/* unsupported protocol */
|
||||
g_writeln("xrdp_iso_incoming: unsupported protocol %d",
|
||||
self->requestedProtocol);
|
||||
self->failureCode = INCONSISTENT_FLAGS; //TODO: ?
|
||||
}
|
||||
}
|
||||
else if (self->requestedProtocol != serverSecurityLayer)
|
||||
{
|
||||
/* enforce server security */
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* set things for tls connection */
|
||||
|
||||
/* negotiate client-server security layer */
|
||||
rv = xrdp_iso_negotiate_security(self);
|
||||
|
||||
/* send connection confirm back to client */
|
||||
if (xrdp_iso_send_cc(self) != 0)
|
||||
@ -383,7 +359,7 @@ xrdp_iso_incoming(struct xrdp_iso *self)
|
||||
}
|
||||
|
||||
DEBUG((" out xrdp_iso_incoming"));
|
||||
return 0;
|
||||
return rv;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
@ -878,7 +878,7 @@ xrdp_mcs_send_connect_response(struct xrdp_mcs *self)
|
||||
xrdp_iso_init(self->iso_layer, s);
|
||||
//TODO: we should calculate the whole length include MCS_CONNECT_RESPONSE
|
||||
xrdp_mcs_ber_out_header(self, s, MCS_CONNECT_RESPONSE,
|
||||
data_len > 0x80 ? data_len + 38 : data_len + 36);
|
||||
data_len > 0x80 ? data_len + 38 : data_len + 36);
|
||||
xrdp_mcs_ber_out_header(self, s, BER_TAG_RESULT, 1);
|
||||
out_uint8(s, 0);
|
||||
xrdp_mcs_ber_out_header(self, s, BER_TAG_INTEGER, 1);
|
||||
|
@ -186,15 +186,15 @@ xrdp_rdp_read_config(struct xrdp_client_info *client_info)
|
||||
g_memset(client_info->certificate, 0, sizeof(char) * 1024);
|
||||
if (value[0] != '/')
|
||||
{
|
||||
/* default certificate path */
|
||||
/* default certificate path */
|
||||
g_snprintf(client_info->certificate, 1023, "%s/cert.pem", XRDP_CFG_PATH);
|
||||
log_message(LOG_LEVEL_ALWAYS,"WARNING: Invalid x.509 certificate path defined, "
|
||||
"default path will be used: %s", client_info->certificate);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* use user defined certificate */
|
||||
g_strncpy(client_info->certificate, value, 1023);
|
||||
/* use user defined certificate */
|
||||
g_strncpy(client_info->certificate, value, 1023);
|
||||
}
|
||||
}
|
||||
else if (g_strcasecmp(item, "key_file") == 0)
|
||||
@ -202,15 +202,15 @@ xrdp_rdp_read_config(struct xrdp_client_info *client_info)
|
||||
g_memset(client_info->key_file, 0, sizeof(char) * 1024);
|
||||
if (value[0] != '/')
|
||||
{
|
||||
/* default key_file path */
|
||||
/* default key_file path */
|
||||
g_snprintf(client_info->key_file, 1023, "%s/key.pem", XRDP_CFG_PATH);
|
||||
log_message(LOG_LEVEL_ALWAYS,"WARNING: Invalid x.509 certificate path defined, "
|
||||
"default path will be used: %s", client_info->key_file);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* use user defined key_file */
|
||||
g_strncpy(client_info->key_file, value, 1023);
|
||||
/* use user defined key_file */
|
||||
g_strncpy(client_info->key_file, value, 1023);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -480,16 +480,20 @@ xrdp_sec_init(struct xrdp_sec *self, struct stream *s)
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (self->crypt_level == CRYPT_LEVEL_FIPS)
|
||||
{
|
||||
s_push_layer(s, sec_hdr, 4 + 4 + 8);
|
||||
}
|
||||
else if (self->crypt_level > CRYPT_LEVEL_LOW)
|
||||
{
|
||||
s_push_layer(s, sec_hdr, 4 + 8);
|
||||
}
|
||||
else
|
||||
if (self->crypt_level > CRYPT_LEVEL_NONE) /* RDP encryption */
|
||||
{
|
||||
if (self->crypt_level == CRYPT_LEVEL_FIPS)
|
||||
{
|
||||
s_push_layer(s, sec_hdr, 4 + 4 + 8);
|
||||
}
|
||||
else if (self->crypt_level > CRYPT_LEVEL_LOW)
|
||||
{
|
||||
s_push_layer(s, sec_hdr, 4 + 8);
|
||||
}
|
||||
else if (self->crypt_level)
|
||||
{
|
||||
s_push_layer(s, sec_hdr, 4);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
@ -1408,30 +1412,33 @@ xrdp_sec_send(struct xrdp_sec *self, struct stream *s, int chan)
|
||||
DEBUG((" in xrdp_sec_send"));
|
||||
s_pop_layer(s, sec_hdr);
|
||||
|
||||
if (self->crypt_level == CRYPT_LEVEL_FIPS)
|
||||
if (self->crypt_level > CRYPT_LEVEL_NONE)
|
||||
{
|
||||
LLOGLN(10, ("xrdp_sec_send: fips"));
|
||||
out_uint32_le(s, SEC_ENCRYPT);
|
||||
datalen = (int)((s->end - s->p) - 12);
|
||||
out_uint16_le(s, 16); /* crypto header size */
|
||||
out_uint8(s, 1); /* fips version */
|
||||
pad = (8 - (datalen % 8)) & 7;
|
||||
g_memset(s->end, 0, pad);
|
||||
s->end += pad;
|
||||
out_uint8(s, pad); /* fips pad */
|
||||
xrdp_sec_fips_sign(self, s->p, 8, s->p + 8, datalen);
|
||||
xrdp_sec_fips_encrypt(self, s->p + 8, datalen + pad);
|
||||
}
|
||||
else if (self->crypt_level > CRYPT_LEVEL_LOW)
|
||||
{
|
||||
out_uint32_le(s, SEC_ENCRYPT);
|
||||
datalen = (int)((s->end - s->p) - 8);
|
||||
xrdp_sec_sign(self, s->p, 8, s->p + 8, datalen);
|
||||
xrdp_sec_encrypt(self, s->p + 8, datalen);
|
||||
}
|
||||
else
|
||||
{
|
||||
// out_uint32_le(s, 0);
|
||||
if (self->crypt_level == CRYPT_LEVEL_FIPS)
|
||||
{
|
||||
LLOGLN(10, ("xrdp_sec_send: fips"));
|
||||
out_uint32_le(s, SEC_ENCRYPT);
|
||||
datalen = (int)((s->end - s->p) - 12);
|
||||
out_uint16_le(s, 16); /* crypto header size */
|
||||
out_uint8(s, 1); /* fips version */
|
||||
pad = (8 - (datalen % 8)) & 7;
|
||||
g_memset(s->end, 0, pad);
|
||||
s->end += pad;
|
||||
out_uint8(s, pad); /* fips pad */
|
||||
xrdp_sec_fips_sign(self, s->p, 8, s->p + 8, datalen);
|
||||
xrdp_sec_fips_encrypt(self, s->p + 8, datalen + pad);
|
||||
}
|
||||
else if (self->crypt_level > CRYPT_LEVEL_LOW)
|
||||
{
|
||||
out_uint32_le(s, SEC_ENCRYPT);
|
||||
datalen = (int)((s->end - s->p) - 8);
|
||||
xrdp_sec_sign(self, s->p, 8, s->p + 8, datalen);
|
||||
xrdp_sec_encrypt(self, s->p + 8, datalen);
|
||||
}
|
||||
else
|
||||
{
|
||||
out_uint32_le(s, 0);
|
||||
}
|
||||
}
|
||||
|
||||
if (xrdp_mcs_send(self->mcs_layer, s, chan) != 0)
|
||||
@ -2123,7 +2130,7 @@ xrdp_sec_init_rdp_security(struct xrdp_sec *self)
|
||||
else
|
||||
{
|
||||
self->encrypt_rc4_info = ssl_rc4_info_create();
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -2151,7 +2158,7 @@ xrdp_sec_incoming(struct xrdp_sec *self)
|
||||
}
|
||||
|
||||
/* initialize selected security layer */
|
||||
if (iso->requestedProtocol > PROTOCOL_RDP)
|
||||
if (iso->selectedProtocol > PROTOCOL_RDP)
|
||||
{
|
||||
/* init tls security */
|
||||
DEBUG((" in xrdp_sec_incoming: init tls security"));
|
||||
|
@ -174,6 +174,7 @@ static int data_get(struct userdata *u, pa_memchunk *chunk) {
|
||||
|
||||
int fd;
|
||||
int bytes;
|
||||
int read_bytes;
|
||||
struct sockaddr_un s;
|
||||
char *data;
|
||||
char buf[11];
|
||||
@ -216,7 +217,12 @@ static int data_get(struct userdata *u, pa_memchunk *chunk) {
|
||||
buf[9] = 0;
|
||||
buf[10] = 0;
|
||||
|
||||
lsend(u->fd, buf, 11);
|
||||
if (lsend(u->fd, buf, 11) != 11) {
|
||||
close(u->fd);
|
||||
u->fd = 0;
|
||||
pa_memblock_release(chunk->memblock);
|
||||
return -1;
|
||||
}
|
||||
u->want_src_data = 1;
|
||||
pa_log_debug("###### started recording");
|
||||
}
|
||||
@ -234,10 +240,22 @@ static int data_get(struct userdata *u, pa_memchunk *chunk) {
|
||||
buf[9] = (unsigned char) chunk->length;
|
||||
buf[10] = (unsigned char) ((chunk->length >> 8) & 0xff);
|
||||
|
||||
lsend(u->fd, buf, 11);
|
||||
if (lsend(u->fd, buf, 11) != 11) {
|
||||
close(u->fd);
|
||||
u->fd = 0;
|
||||
pa_memblock_release(chunk->memblock);
|
||||
u->want_src_data = 0;
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* read length of data available */
|
||||
lrecv(u->fd, (char *) ubuf, 2);
|
||||
if (lrecv(u->fd, (char *) ubuf, 2) != 2) {
|
||||
close(u->fd);
|
||||
u->fd = 0;
|
||||
pa_memblock_release(chunk->memblock);
|
||||
u->want_src_data = 0;
|
||||
return -1;
|
||||
}
|
||||
bytes = ((ubuf[1] << 8) & 0xff00) | (ubuf[0] & 0xff);
|
||||
|
||||
if (bytes == 0) {
|
||||
@ -246,15 +264,22 @@ static int data_get(struct userdata *u, pa_memchunk *chunk) {
|
||||
}
|
||||
|
||||
/* get data */
|
||||
bytes = lrecv(u->fd, data, bytes);
|
||||
|
||||
read_bytes = lrecv(u->fd, data, bytes);
|
||||
if (read_bytes != bytes) {
|
||||
close(u->fd);
|
||||
u->fd = 0;
|
||||
pa_memblock_release(chunk->memblock);
|
||||
u->want_src_data = 0;
|
||||
return -1;
|
||||
}
|
||||
pa_memblock_release(chunk->memblock);
|
||||
|
||||
return bytes;
|
||||
return read_bytes;
|
||||
}
|
||||
|
||||
static void thread_func(void *userdata) {
|
||||
struct userdata *u = userdata;
|
||||
int bytes;
|
||||
|
||||
pa_assert(u);
|
||||
pa_thread_mq_install(&u->thread_mq);
|
||||
@ -271,10 +296,15 @@ static void thread_func(void *userdata) {
|
||||
now = pa_rtclock_now();
|
||||
|
||||
if ((chunk.length = pa_usec_to_bytes(now - u->timestamp, &u->source->sample_spec)) > 0) {
|
||||
chunk.memblock = pa_memblock_new(u->core->mempool, (size_t) -1); /* or chunk.length? */
|
||||
chunk.length *= 4;
|
||||
chunk.memblock = pa_memblock_new(u->core->mempool, chunk.length);
|
||||
chunk.index = 0;
|
||||
data_get(u, &chunk);
|
||||
pa_source_post(u->source, &chunk);
|
||||
bytes = data_get(u, &chunk);
|
||||
if (bytes > 0)
|
||||
{
|
||||
chunk.length = bytes;
|
||||
pa_source_post(u->source, &chunk);
|
||||
}
|
||||
pa_memblock_unref(chunk.memblock);
|
||||
u->timestamp = now;
|
||||
}
|
||||
@ -298,7 +328,10 @@ static void thread_func(void *userdata) {
|
||||
buf[9] = 0;
|
||||
buf[10] = 0;
|
||||
|
||||
lsend(u->fd, buf, 11);
|
||||
if (lsend(u->fd, buf, 11) != 11) {
|
||||
close(u->fd);
|
||||
u->fd = 0;
|
||||
}
|
||||
u->want_src_data = 0;
|
||||
pa_log_debug("###### stopped recording");
|
||||
}
|
||||
@ -338,7 +371,7 @@ int pa__init(pa_module *m) {
|
||||
goto fail;
|
||||
}
|
||||
|
||||
#if 0
|
||||
#if 1
|
||||
ss = m->core->default_sample_spec;
|
||||
#else
|
||||
ss.format = PA_SAMPLE_S16LE;
|
||||
|
@ -140,8 +140,8 @@ static struct xr_wave_format_ex g_pcm_inp_44100 =
|
||||
#define SND_NUM_INP_FORMATS 2
|
||||
static struct xr_wave_format_ex *g_wave_inp_formats[SND_NUM_INP_FORMATS] =
|
||||
{
|
||||
&g_pcm_inp_22050,
|
||||
&g_pcm_inp_44100
|
||||
&g_pcm_inp_44100,
|
||||
&g_pcm_inp_22050
|
||||
};
|
||||
|
||||
static int g_client_input_format_index = 0;
|
||||
@ -960,7 +960,7 @@ sound_process_input_format(int aindex, int wFormatTag, int nChannels,
|
||||
LOG(10, (" wBitsPerSample %d", wBitsPerSample));
|
||||
LOG(10, (" cbSize %d", cbSize));
|
||||
|
||||
#if 0
|
||||
#if 1
|
||||
/* select CD quality audio */
|
||||
if (wFormatTag == g_pcm_inp_44100.wFormatTag &&
|
||||
nChannels == g_pcm_inp_44100.nChannels &&
|
||||
@ -1047,7 +1047,9 @@ sound_input_start_recording(void)
|
||||
|
||||
/* if there is any data in FIFO, discard it */
|
||||
while ((s = (struct stream *) fifo_remove(&g_in_fifo)) != NULL)
|
||||
{
|
||||
xstream_free(s);
|
||||
}
|
||||
g_bytes_in_fifo = 0;
|
||||
|
||||
xstream_new(s, 1024);
|
||||
@ -1110,14 +1112,15 @@ sound_process_input_data(struct stream *s, int bytes)
|
||||
{
|
||||
struct stream *ls;
|
||||
|
||||
LOG(0, ("sound_process_input_data: bytes %d g_bytes_in_fifo %d",
|
||||
LOG(10, ("sound_process_input_data: bytes %d g_bytes_in_fifo %d",
|
||||
bytes, g_bytes_in_fifo));
|
||||
|
||||
#if 0 /* no need to cap anymore */
|
||||
/* cap data in fifo */
|
||||
if (g_bytes_in_fifo > 8 * 1024)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
xstream_new(ls, bytes);
|
||||
g_memcpy(ls->data, s->p, bytes);
|
||||
ls->p += bytes;
|
||||
|
@ -68,7 +68,7 @@ static int g_x = 0;
|
||||
static int g_y = 0;
|
||||
static int g_timer_schedualed = 0;
|
||||
static int g_delay_motion = 1; /* turn on or off */
|
||||
static int g_use_evdev = 1;
|
||||
static int g_use_evdev = 0;
|
||||
|
||||
/* Copied from Xvnc/lib/font/util/utilbitmap.c */
|
||||
static unsigned char g_reverse_byte[0x100] =
|
||||
@ -306,7 +306,7 @@ rdpLoadLayout(struct xrdp_client_info *client_info)
|
||||
set.rules = "base";
|
||||
}
|
||||
|
||||
set.model = "pc104";
|
||||
set.model = "pc105";
|
||||
set.layout = "us";
|
||||
set.variant = "";
|
||||
set.options = "";
|
||||
@ -360,7 +360,8 @@ rdpLoadLayout(struct xrdp_client_info *client_info)
|
||||
NULL, serverClient);
|
||||
}
|
||||
}
|
||||
} else
|
||||
}
|
||||
else
|
||||
{
|
||||
/* sometimes, variant doesn't support all layouts */
|
||||
set.variant = "";
|
||||
@ -394,7 +395,7 @@ rdpKeybdProc(DeviceIntPtr pDevice, int onoff)
|
||||
{
|
||||
set.rules = "base";
|
||||
}
|
||||
set.model = "pc104";
|
||||
set.model = "pc105";
|
||||
set.layout = "us";
|
||||
set.variant = "";
|
||||
set.options = "";
|
||||
|
@ -81,6 +81,7 @@ extern int g_tab_down; /* in rdpmain.c */
|
||||
#define XSCAN_Menu 117 /* 135 */
|
||||
#define XSCAN_LMeta 156
|
||||
#define XSCAN_RMeta 156
|
||||
#define XSCAN_211 211 /* "/ ?" on br keybaord, "\ _" on jp keyboard */
|
||||
|
||||
/******************************************************************************/
|
||||
void
|
||||
@ -278,7 +279,7 @@ KbdAddEvent_base(int down, int param1, int param2, int param3, int param4)
|
||||
break;
|
||||
|
||||
case RDPSCAN_115:
|
||||
rdpEnqueueKey(type, XSCAN_97); /* "/ ?" on br keybaord */
|
||||
rdpEnqueueKey(type, XSCAN_211); /* "/ ?" on br keybaord, "\ _" on jp keyboard */
|
||||
break;
|
||||
|
||||
case RDPSCAN_126:
|
||||
|
@ -1,7 +0,0 @@
|
||||
EXTRA_DIST = bootstrap readme.txt
|
||||
|
||||
SUBDIRS = \
|
||||
module \
|
||||
xrdpdev \
|
||||
xrdpkeyb \
|
||||
xrdpmouse
|
@ -1,36 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
which autoconf
|
||||
if ! test $? -eq 0
|
||||
then
|
||||
echo "error, install autoconf"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
which automake
|
||||
if ! test $? -eq 0
|
||||
then
|
||||
echo "error, install automake"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
which libtool
|
||||
if ! test $? -eq 0
|
||||
then
|
||||
echo "error, install libtool"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
which pkg-config
|
||||
if ! test $? -eq 0
|
||||
then
|
||||
echo "error, install pkg-config"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
touch configure.ac
|
||||
touch NEWS
|
||||
touch AUTHORS
|
||||
touch README
|
||||
touch ChangeLog
|
||||
autoreconf -fvi
|
@ -1,35 +0,0 @@
|
||||
# Process this file with autoconf to produce a configure script
|
||||
|
||||
AC_PREREQ(2.59)
|
||||
AC_INIT([xrdpmod], [0.1.0], [xrdp-devel@lists.sourceforge.net])
|
||||
AC_CONFIG_HEADERS(config_ac.h:config_ac-h.in)
|
||||
AM_INIT_AUTOMAKE([1.6 foreign])
|
||||
AC_PROG_CC
|
||||
AC_C_CONST
|
||||
AC_PROG_LIBTOOL
|
||||
|
||||
AM_CONDITIONAL(GOT_PREFIX, test "x${prefix}" != "xNONE"])
|
||||
|
||||
AC_CHECK_HEADER([xorg/xorg-server.h], [],
|
||||
[AC_MSG_ERROR([please install xserver-xorg-dev or xorg-x11-server-sdk])])
|
||||
|
||||
PKG_CHECK_MODULES([XORG_SERVER], [xorg-server >= 0])
|
||||
AC_SUBST([XORG_SERVER_CFLAGS])
|
||||
AC_SUBST([XORG_SERVER_LIBS])
|
||||
|
||||
moduledir=`pkg-config xorg-server --variable=moduledir`
|
||||
AC_SUBST([moduledir])
|
||||
|
||||
if test "x${prefix}" = "xNONE" ; then
|
||||
sysconfdir="/etc";
|
||||
fi
|
||||
|
||||
AC_CONFIG_FILES([Makefile
|
||||
module/Makefile
|
||||
xrdpdev/Makefile
|
||||
xrdpkeyb/Makefile
|
||||
xrdpmouse/Makefile
|
||||
])
|
||||
|
||||
AC_OUTPUT
|
||||
|
@ -1,22 +0,0 @@
|
||||
EXTRA_DIST =
|
||||
|
||||
AM_CFLAGS = \
|
||||
$(XORG_SERVER_CFLAGS) \
|
||||
-I../../../common
|
||||
|
||||
libxorgxrdp_la_LTLIBRARIES = libxorgxrdp.la
|
||||
|
||||
libxorgxrdp_la_LDFLAGS = -module -avoid-version
|
||||
|
||||
libxorgxrdp_ladir = $(moduledir)
|
||||
|
||||
libxorgxrdp_la_SOURCES = rdpDraw.c rdpPri.c rdpGC.c rdpFillSpans.c \
|
||||
rdpSetSpans.c rdpPutImage.c rdpCopyArea.c rdpCopyPlane.c rdpPolyPoint.c \
|
||||
rdpPolylines.c rdpPolySegment.c rdpPolyRectangle.c rdpPolyArc.c \
|
||||
rdpFillPolygon.c rdpPolyFillRect.c rdpPolyFillArc.c rdpPolyText8.c \
|
||||
rdpPolyText16.c rdpImageText8.c rdpImageText16.c rdpImageGlyphBlt.c \
|
||||
rdpPolyGlyphBlt.c rdpPushPixels.c rdpCursor.c rdpMain.c rdpRandR.c \
|
||||
rdpMisc.c rdpReg.c rdpComposite.c rdpGlyphs.c rdpPixmap.c rdpInput.c \
|
||||
rdpClientCon.c rdpCapture.c rdpTrapezoids.c rdpXv.c rdpSimd.c
|
||||
|
||||
libxorgxrdp_la_LIBADD =
|
@ -1,41 +0,0 @@
|
||||
|
||||
SECTION .text
|
||||
|
||||
%macro PROC 1
|
||||
align 16
|
||||
global %1
|
||||
%1:
|
||||
%endmacro
|
||||
|
||||
;The first six integer or pointer arguments are passed in registers
|
||||
;RDI, RSI, RDX, RCX, R8, and R9
|
||||
|
||||
;int
|
||||
;cpuid_amd64(int eax_in, int ecx_in, int *eax, int *ebx, int *ecx, int *edx)
|
||||
|
||||
PROC cpuid_amd64
|
||||
; save registers
|
||||
push rbx
|
||||
|
||||
push rdx
|
||||
push rcx
|
||||
push r8
|
||||
push r9
|
||||
|
||||
mov rax, rdi
|
||||
mov rcx, rsi
|
||||
cpuid
|
||||
pop rdi
|
||||
mov [rdi], edx
|
||||
pop rdi
|
||||
mov [rdi], ecx
|
||||
pop rdi
|
||||
mov [rdi], ebx
|
||||
pop rdi
|
||||
mov [rdi], eax
|
||||
mov eax, 0
|
||||
; restore registers
|
||||
pop rbx
|
||||
ret;
|
||||
align 16
|
||||
|
@ -1,39 +0,0 @@
|
||||
/*
|
||||
Copyright 2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
amd64 asm functions
|
||||
|
||||
*/
|
||||
|
||||
#ifndef __FUNCS_AMD64_H
|
||||
#define __FUNCS_AMD64_H
|
||||
|
||||
int
|
||||
cpuid_amd64(int eax_in, int ecx_in, int *eax, int *ebx, int *ecx, int *edx);
|
||||
int
|
||||
yv12_to_rgb32_amd64_sse2(unsigned char *yuvs, int width, int height, int *rgbs);
|
||||
int
|
||||
i420_to_rgb32_amd64_sse2(unsigned char *yuvs, int width, int height, int *rgbs);
|
||||
int
|
||||
yuy2_to_rgb32_amd64_sse2(unsigned char *yuvs, int width, int height, int *rgbs);
|
||||
int
|
||||
uyvy_to_rgb32_amd64_sse2(unsigned char *yuvs, int width, int height, int *rgbs);
|
||||
|
||||
#endif
|
||||
|
@ -1,248 +0,0 @@
|
||||
;
|
||||
;Copyright 2014 Jay Sorg
|
||||
;
|
||||
;Permission to use, copy, modify, distribute, and sell this software and its
|
||||
;documentation for any purpose is hereby granted without fee, provided that
|
||||
;the above copyright notice appear in all copies and that both that
|
||||
;copyright notice and this permission notice appear in supporting
|
||||
;documentation.
|
||||
;
|
||||
;The above copyright notice and this permission notice shall be included in
|
||||
;all copies or substantial portions of the Software.
|
||||
;
|
||||
;THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
;IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
;FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
;OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
;AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
;CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
;
|
||||
;I420 to RGB32
|
||||
;amd64 SSE2 32 bit
|
||||
;
|
||||
; RGB to YUV
|
||||
; 0.299 0.587 0.114
|
||||
; -0.14713 -0.28886 0.436
|
||||
; 0.615 -0.51499 -0.10001
|
||||
; YUV to RGB
|
||||
; 1 0 1.13983
|
||||
; 1 -0.39465 -0.58060
|
||||
; 1 2.03211 0
|
||||
; shift left 12
|
||||
; 4096 0 4669
|
||||
; 4096 -1616 -2378
|
||||
; 4096 9324 0
|
||||
|
||||
SECTION .data
|
||||
align 16
|
||||
c128 times 8 dw 128
|
||||
c4669 times 8 dw 4669
|
||||
c1616 times 8 dw 1616
|
||||
c2378 times 8 dw 2378
|
||||
c9324 times 8 dw 9324
|
||||
|
||||
SECTION .text
|
||||
|
||||
%macro PROC 1
|
||||
align 16
|
||||
global %1
|
||||
%1:
|
||||
%endmacro
|
||||
|
||||
do8_uv:
|
||||
|
||||
; v
|
||||
movd xmm1, [rbx] ; 4 at a time
|
||||
lea rbx, [rbx + 4]
|
||||
punpcklbw xmm1, xmm1
|
||||
pxor xmm6, xmm6
|
||||
punpcklbw xmm1, xmm6
|
||||
movdqa xmm7, [rel c128]
|
||||
psubw xmm1, xmm7
|
||||
psllw xmm1, 4
|
||||
|
||||
; v
|
||||
movd xmm2, [rdx] ; 4 at a time
|
||||
lea rdx, [rdx + 4]
|
||||
punpcklbw xmm2, xmm2
|
||||
punpcklbw xmm2, xmm6
|
||||
psubw xmm2, xmm7
|
||||
psllw xmm2, 4
|
||||
|
||||
do8:
|
||||
|
||||
; y
|
||||
movq xmm0, [rsi] ; 8 at a time
|
||||
lea rsi, [rsi + 8]
|
||||
pxor xmm6, xmm6
|
||||
punpcklbw xmm0, xmm6
|
||||
|
||||
; r = y + hiword(4669 * (v << 4))
|
||||
movdqa xmm4, [rel c4669]
|
||||
pmulhw xmm4, xmm1
|
||||
movdqa xmm3, xmm0
|
||||
paddw xmm3, xmm4
|
||||
|
||||
; g = y - hiword(1616 * (u << 4)) - hiword(2378 * (v << 4))
|
||||
movdqa xmm5, [rel c1616]
|
||||
pmulhw xmm5, xmm2
|
||||
movdqa xmm6, [rel c2378]
|
||||
pmulhw xmm6, xmm1
|
||||
movdqa xmm4, xmm0
|
||||
psubw xmm4, xmm5
|
||||
psubw xmm4, xmm6
|
||||
|
||||
; b = y + hiword(9324 * (u << 4))
|
||||
movdqa xmm6, [rel c9324]
|
||||
pmulhw xmm6, xmm2
|
||||
movdqa xmm5, xmm0
|
||||
paddw xmm5, xmm6
|
||||
|
||||
packuswb xmm3, xmm3 ; b
|
||||
packuswb xmm4, xmm4 ; g
|
||||
punpcklbw xmm3, xmm4 ; gb
|
||||
|
||||
pxor xmm4, xmm4 ; a
|
||||
packuswb xmm5, xmm5 ; r
|
||||
punpcklbw xmm5, xmm4 ; ar
|
||||
|
||||
movdqa xmm4, xmm3
|
||||
punpcklwd xmm3, xmm5 ; argb
|
||||
movdqa [rdi], xmm3
|
||||
lea rdi, [rdi + 16]
|
||||
punpckhwd xmm4, xmm5 ; argb
|
||||
movdqa [rdi], xmm4
|
||||
lea rdi, [rdi + 16]
|
||||
|
||||
ret;
|
||||
|
||||
;The first six integer or pointer arguments are passed in registers
|
||||
; RDI, RSI, RDX, RCX, R8, and R9
|
||||
|
||||
;int
|
||||
;i420_to_rgb32_amd64_sse2(unsigned char *yuvs, int width, int height, int *rgbs)
|
||||
|
||||
PROC i420_to_rgb32_amd64_sse2
|
||||
push rbx
|
||||
push rsi
|
||||
push rdi
|
||||
push rbp
|
||||
|
||||
push rdi
|
||||
push rdx
|
||||
mov rdi, rcx ; rgbs
|
||||
|
||||
mov rcx, rsi ; width
|
||||
mov rdx, rcx
|
||||
pop rbp ; height
|
||||
mov rax, rbp
|
||||
shr rbp, 1
|
||||
imul rax, rcx ; rax = width * height
|
||||
|
||||
pop rsi ; y
|
||||
|
||||
mov rbx, rsi ; u = y + width * height
|
||||
add rbx, rax
|
||||
|
||||
; local vars
|
||||
; char* yptr1
|
||||
; char* yptr2
|
||||
; char* uptr
|
||||
; char* vptr
|
||||
; int* rgbs1
|
||||
; int* rgbs2
|
||||
; int width
|
||||
sub rsp, 56 ; local vars, 56 bytes
|
||||
mov [rsp + 0], rsi ; save y1
|
||||
add rsi, rdx
|
||||
mov [rsp + 8], rsi ; save y2
|
||||
mov [rsp + 16], rbx ; save u
|
||||
shr rax, 2
|
||||
add rbx, rax ; v = u + (width * height / 4)
|
||||
mov [rsp + 24], rbx ; save v
|
||||
|
||||
mov [rsp + 32], rdi ; save rgbs1
|
||||
mov rax, rdx
|
||||
shl rax, 2
|
||||
add rdi, rax
|
||||
mov [rsp + 40], rdi ; save rgbs2
|
||||
|
||||
loop_y:
|
||||
|
||||
mov rcx, rdx ; width
|
||||
shr rcx, 3
|
||||
|
||||
; save rdx
|
||||
mov [rsp + 48], rdx
|
||||
|
||||
;prefetchnta 4096[rsp + 0] ; y
|
||||
;prefetchnta 1024[rsp + 16] ; u
|
||||
;prefetchnta 1024[rsp + 24] ; v
|
||||
|
||||
loop_x:
|
||||
|
||||
mov rsi, [rsp + 0] ; y1
|
||||
mov rbx, [rsp + 16] ; u
|
||||
mov rdx, [rsp + 24] ; v
|
||||
mov rdi, [rsp + 32] ; rgbs1
|
||||
|
||||
; y1
|
||||
call do8_uv
|
||||
|
||||
mov [rsp + 0], rsi ; y1
|
||||
mov [rsp + 32], rdi ; rgbs1
|
||||
|
||||
mov rsi, [rsp + 8] ; y2
|
||||
mov rdi, [rsp + 40] ; rgbs2
|
||||
|
||||
; y2
|
||||
call do8
|
||||
|
||||
mov [rsp + 8], rsi ; y2
|
||||
mov [rsp + 16], rbx ; u
|
||||
mov [rsp + 24], rdx ; v
|
||||
mov [rsp + 40], rdi ; rgbs2
|
||||
|
||||
dec rcx ; width
|
||||
jnz loop_x
|
||||
|
||||
; restore rdx
|
||||
mov rdx, [rsp + 48]
|
||||
|
||||
; update y1 and 2
|
||||
mov rax, [rsp + 0]
|
||||
mov rbx, rdx
|
||||
add rax, rbx
|
||||
mov [rsp + 0], rax
|
||||
|
||||
mov rax, [rsp + 8]
|
||||
add rax, rbx
|
||||
mov [rsp + 8], rax
|
||||
|
||||
; update rgb1 and 2
|
||||
mov rax, [rsp + 32]
|
||||
mov rbx, rdx
|
||||
shl rbx, 2
|
||||
add rax, rbx
|
||||
mov [rsp + 32], rax
|
||||
|
||||
mov rax, [rsp + 40]
|
||||
add rax, rbx
|
||||
mov [rsp + 40], rax
|
||||
|
||||
mov rcx, rbp
|
||||
dec rcx ; height
|
||||
mov rbp, rcx
|
||||
jnz loop_y
|
||||
|
||||
add rsp, 56
|
||||
|
||||
mov rax, 0
|
||||
pop rbp
|
||||
pop rdi
|
||||
pop rsi
|
||||
pop rbx
|
||||
ret
|
||||
align 16
|
||||
|
||||
|
@ -1,17 +0,0 @@
|
||||
|
||||
%macro PROC 1
|
||||
align 16
|
||||
global %1
|
||||
%1:
|
||||
%endmacro
|
||||
|
||||
;int
|
||||
;uyvy_to_rgb32_amd64_sse2(unsigned char *yuvs, int width, int height, int *rgbs)
|
||||
|
||||
PROC uyvy_to_rgb32_amd64_sse2
|
||||
push rbx
|
||||
mov rax, 0
|
||||
pop rbx
|
||||
ret
|
||||
align 16
|
||||
|
@ -1,17 +0,0 @@
|
||||
|
||||
%macro PROC 1
|
||||
align 16
|
||||
global %1
|
||||
%1:
|
||||
%endmacro
|
||||
|
||||
;int
|
||||
;yuy2_to_rgb32_amd64_sse2(unsigned char *yuvs, int width, int height, int *rgbs)
|
||||
|
||||
PROC yuy2_to_rgb32_amd64_sse2
|
||||
push rbx
|
||||
mov rax, 0
|
||||
pop rbx
|
||||
ret
|
||||
align 16
|
||||
|
@ -1,248 +0,0 @@
|
||||
;
|
||||
;Copyright 2014 Jay Sorg
|
||||
;
|
||||
;Permission to use, copy, modify, distribute, and sell this software and its
|
||||
;documentation for any purpose is hereby granted without fee, provided that
|
||||
;the above copyright notice appear in all copies and that both that
|
||||
;copyright notice and this permission notice appear in supporting
|
||||
;documentation.
|
||||
;
|
||||
;The above copyright notice and this permission notice shall be included in
|
||||
;all copies or substantial portions of the Software.
|
||||
;
|
||||
;THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
;IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
;FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
;OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
;AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
;CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
;
|
||||
;YV12 to RGB32
|
||||
;amd64 SSE2 32 bit
|
||||
;
|
||||
; RGB to YUV
|
||||
; 0.299 0.587 0.114
|
||||
; -0.14713 -0.28886 0.436
|
||||
; 0.615 -0.51499 -0.10001
|
||||
; YUV to RGB
|
||||
; 1 0 1.13983
|
||||
; 1 -0.39465 -0.58060
|
||||
; 1 2.03211 0
|
||||
; shift left 12
|
||||
; 4096 0 4669
|
||||
; 4096 -1616 -2378
|
||||
; 4096 9324 0
|
||||
|
||||
SECTION .data
|
||||
align 16
|
||||
c128 times 8 dw 128
|
||||
c4669 times 8 dw 4669
|
||||
c1616 times 8 dw 1616
|
||||
c2378 times 8 dw 2378
|
||||
c9324 times 8 dw 9324
|
||||
|
||||
SECTION .text
|
||||
|
||||
%macro PROC 1
|
||||
align 16
|
||||
global %1
|
||||
%1:
|
||||
%endmacro
|
||||
|
||||
do8_uv:
|
||||
|
||||
; u
|
||||
movd xmm1, [rbx] ; 4 at a time
|
||||
lea rbx, [rbx + 4]
|
||||
punpcklbw xmm1, xmm1
|
||||
pxor xmm6, xmm6
|
||||
punpcklbw xmm1, xmm6
|
||||
movdqa xmm7, [rel c128]
|
||||
psubw xmm1, xmm7
|
||||
psllw xmm1, 4
|
||||
|
||||
; v
|
||||
movd xmm2, [rdx] ; 4 at a time
|
||||
lea rdx, [rdx + 4]
|
||||
punpcklbw xmm2, xmm2
|
||||
punpcklbw xmm2, xmm6
|
||||
psubw xmm2, xmm7
|
||||
psllw xmm2, 4
|
||||
|
||||
do8:
|
||||
|
||||
; y
|
||||
movq xmm0, [rsi] ; 8 at a time
|
||||
lea rsi, [rsi + 8]
|
||||
pxor xmm6, xmm6
|
||||
punpcklbw xmm0, xmm6
|
||||
|
||||
; r = y + hiword(4669 * (v << 4))
|
||||
movdqa xmm4, [rel c4669]
|
||||
pmulhw xmm4, xmm2
|
||||
movdqa xmm3, xmm0
|
||||
paddw xmm3, xmm4
|
||||
|
||||
; g = y - hiword(1616 * (u << 4)) - hiword(2378 * (v << 4))
|
||||
movdqa xmm5, [rel c1616]
|
||||
pmulhw xmm5, xmm1
|
||||
movdqa xmm6, [rel c2378]
|
||||
pmulhw xmm6, xmm2
|
||||
movdqa xmm4, xmm0
|
||||
psubw xmm4, xmm5
|
||||
psubw xmm4, xmm6
|
||||
|
||||
; b = y + hiword(9324 * (u << 4))
|
||||
movdqa xmm6, [rel c9324]
|
||||
pmulhw xmm6, xmm1
|
||||
movdqa xmm5, xmm0
|
||||
paddw xmm5, xmm6
|
||||
|
||||
packuswb xmm3, xmm3 ; b
|
||||
packuswb xmm4, xmm4 ; g
|
||||
punpcklbw xmm3, xmm4 ; gb
|
||||
|
||||
pxor xmm4, xmm4 ; a
|
||||
packuswb xmm5, xmm5 ; r
|
||||
punpcklbw xmm5, xmm4 ; ar
|
||||
|
||||
movdqa xmm4, xmm3
|
||||
punpcklwd xmm3, xmm5 ; argb
|
||||
movdqa [rdi], xmm3
|
||||
lea rdi, [rdi + 16]
|
||||
punpckhwd xmm4, xmm5 ; argb
|
||||
movdqa [rdi], xmm4
|
||||
lea rdi, [rdi + 16]
|
||||
|
||||
ret;
|
||||
|
||||
;The first six integer or pointer arguments are passed in registers
|
||||
; RDI, RSI, RDX, RCX, R8, and R9
|
||||
|
||||
;int
|
||||
;yv12_to_rgb32_amd64_sse2(unsigned char *yuvs, int width, int height, int *rgbs)
|
||||
|
||||
PROC yv12_to_rgb32_amd64_sse2
|
||||
push rbx
|
||||
push rsi
|
||||
push rdi
|
||||
push rbp
|
||||
|
||||
push rdi
|
||||
push rdx
|
||||
mov rdi, rcx ; rgbs
|
||||
|
||||
mov rcx, rsi ; width
|
||||
mov rdx, rcx
|
||||
pop rbp ; height
|
||||
mov rax, rbp
|
||||
shr rbp, 1
|
||||
imul rax, rcx ; rax = width * height
|
||||
|
||||
pop rsi ; y
|
||||
|
||||
mov rbx, rsi ; u = y + width * height
|
||||
add rbx, rax
|
||||
|
||||
; local vars
|
||||
; char* yptr1
|
||||
; char* yptr2
|
||||
; char* uptr
|
||||
; char* vptr
|
||||
; int* rgbs1
|
||||
; int* rgbs2
|
||||
; int width
|
||||
sub rsp, 56 ; local vars, 56 bytes
|
||||
mov [rsp + 0], rsi ; save y1
|
||||
add rsi, rdx
|
||||
mov [rsp + 8], rsi ; save y2
|
||||
mov [rsp + 16], rbx ; save u
|
||||
shr rax, 2
|
||||
add rbx, rax ; v = u + (width * height / 4)
|
||||
mov [rsp + 24], rbx ; save v
|
||||
|
||||
mov [rsp + 32], rdi ; save rgbs1
|
||||
mov rax, rdx
|
||||
shl rax, 2
|
||||
add rdi, rax
|
||||
mov [rsp + 40], rdi ; save rgbs2
|
||||
|
||||
loop_y:
|
||||
|
||||
mov rcx, rdx ; width
|
||||
shr rcx, 3
|
||||
|
||||
; save rdx
|
||||
mov [rsp + 48], rdx
|
||||
|
||||
;prefetchnta 4096[rsp + 0] ; y
|
||||
;prefetchnta 1024[rsp + 16] ; u
|
||||
;prefetchnta 1024[rsp + 24] ; v
|
||||
|
||||
loop_x:
|
||||
|
||||
mov rsi, [rsp + 0] ; y1
|
||||
mov rbx, [rsp + 16] ; u
|
||||
mov rdx, [rsp + 24] ; v
|
||||
mov rdi, [rsp + 32] ; rgbs1
|
||||
|
||||
; y1
|
||||
call do8_uv
|
||||
|
||||
mov [rsp + 0], rsi ; y1
|
||||
mov [rsp + 32], rdi ; rgbs1
|
||||
|
||||
mov rsi, [rsp + 8] ; y2
|
||||
mov rdi, [rsp + 40] ; rgbs2
|
||||
|
||||
; y2
|
||||
call do8
|
||||
|
||||
mov [rsp + 8], rsi ; y2
|
||||
mov [rsp + 16], rbx ; u
|
||||
mov [rsp + 24], rdx ; v
|
||||
mov [rsp + 40], rdi ; rgbs2
|
||||
|
||||
dec rcx ; width
|
||||
jnz loop_x
|
||||
|
||||
; restore rdx
|
||||
mov rdx, [rsp + 48]
|
||||
|
||||
; update y1 and 2
|
||||
mov rax, [rsp + 0]
|
||||
mov rbx, rdx
|
||||
add rax, rbx
|
||||
mov [rsp + 0], rax
|
||||
|
||||
mov rax, [rsp + 8]
|
||||
add rax, rbx
|
||||
mov [rsp + 8], rax
|
||||
|
||||
; update rgb1 and 2
|
||||
mov rax, [rsp + 32]
|
||||
mov rbx, rdx
|
||||
shl rbx, 2
|
||||
add rax, rbx
|
||||
mov [rsp + 32], rax
|
||||
|
||||
mov rax, [rsp + 40]
|
||||
add rax, rbx
|
||||
mov [rsp + 40], rax
|
||||
|
||||
mov rcx, rbp
|
||||
dec rcx ; height
|
||||
mov rbp, rcx
|
||||
jnz loop_y
|
||||
|
||||
add rsp, 56
|
||||
|
||||
mov rax, 0
|
||||
pop rbp
|
||||
pop rdi
|
||||
pop rsi
|
||||
pop rbx
|
||||
ret
|
||||
align 16
|
||||
|
||||
|
@ -1,372 +0,0 @@
|
||||
/*
|
||||
Copyright 2005-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef _RDP_H
|
||||
#define _RDP_H
|
||||
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
#include <xf86.h>
|
||||
|
||||
#include <scrnintstr.h>
|
||||
#include <gcstruct.h>
|
||||
#include <mipointer.h>
|
||||
#include <randrstr.h>
|
||||
|
||||
#include "rdpPri.h"
|
||||
|
||||
#define XRDP_MODULE_NAME "XRDPMOD"
|
||||
#define XRDP_DRIVER_NAME "XRDPDEV"
|
||||
#define XRDP_MOUSE_NAME "XRDPMOUSE"
|
||||
#define XRDP_KEYB_NAME "XRDPKEYB"
|
||||
#define XRDP_VERSION 1000
|
||||
|
||||
#define PACKAGE_VERSION_MAJOR 1
|
||||
#define PACKAGE_VERSION_MINOR 0
|
||||
#define PACKAGE_VERSION_PATCHLEVEL 0
|
||||
|
||||
#define COLOR8(r, g, b) \
|
||||
((((r) >> 5) << 0) | (((g) >> 5) << 3) | (((b) >> 6) << 6))
|
||||
#define COLOR15(r, g, b) \
|
||||
((((r) >> 3) << 10) | (((g) >> 3) << 5) | (((b) >> 3) << 0))
|
||||
#define COLOR16(r, g, b) \
|
||||
((((r) >> 3) << 11) | (((g) >> 2) << 5) | (((b) >> 3) << 0))
|
||||
#define COLOR24(r, g, b) \
|
||||
((((r) >> 0) << 0) | (((g) >> 0) << 8) | (((b) >> 0) << 16))
|
||||
#define SPLITCOLOR32(r, g, b, c) \
|
||||
do { \
|
||||
r = ((c) >> 16) & 0xff; \
|
||||
g = ((c) >> 8) & 0xff; \
|
||||
b = (c) & 0xff; \
|
||||
} while (0)
|
||||
|
||||
/* PIXMAN_a8b8g8r8 */
|
||||
#define XRDP_a8b8g8r8 \
|
||||
((32 << 24) | (3 << 16) | (8 << 12) | (8 << 8) | (8 << 4) | 8)
|
||||
/* PIXMAN_a8r8g8b8 */
|
||||
#define XRDP_a8r8g8b8 \
|
||||
((32 << 24) | (2 << 16) | (8 << 12) | (8 << 8) | (8 << 4) | 8)
|
||||
/* PIXMAN_r5g6b5 */
|
||||
#define XRDP_r5g6b5 \
|
||||
((16 << 24) | (2 << 16) | (0 << 12) | (5 << 8) | (6 << 4) | 5)
|
||||
/* PIXMAN_a1r5g5b5 */
|
||||
#define XRDP_a1r5g5b5 \
|
||||
((16 << 24) | (2 << 16) | (1 << 12) | (5 << 8) | (5 << 4) | 5)
|
||||
/* PIXMAN_r3g3b2 */
|
||||
#define XRDP_r3g3b2 \
|
||||
((8 << 24) | (2 << 16) | (0 << 12) | (3 << 8) | (3 << 4) | 2)
|
||||
|
||||
#define PixelDPI 100
|
||||
#define PixelToMM(_size) (((_size) * 254 + (PixelDPI) * 5) / ((PixelDPI) * 10))
|
||||
|
||||
#define RDPMIN(_val1, _val2) ((_val1) < (_val2) ? (_val1) : (_val2))
|
||||
#define RDPMAX(_val1, _val2) ((_val1) < (_val2) ? (_val2) : (_val1))
|
||||
#define RDPCLAMP(_val, _lo, _hi) \
|
||||
(_val) < (_lo) ? (_lo) : (_val) > (_hi) ? (_hi) : (_val)
|
||||
#define RDPALIGN(_val, _al) ((((long)(_val)) + ((_al) - 1)) & ~((_al) - 1))
|
||||
|
||||
#define XRDP_CD_NODRAW 0
|
||||
#define XRDP_CD_NOCLIP 1
|
||||
#define XRDP_CD_CLIP 2
|
||||
|
||||
#if 0
|
||||
#define RegionCopy DONOTUSE
|
||||
#define RegionTranslate DONOTUSE
|
||||
#define RegionNotEmpty DONOTUSE
|
||||
#define RegionIntersect DONOTUSE
|
||||
#define RegionContainsRect DONOTUSE
|
||||
#define RegionInit DONOTUSE
|
||||
#define RegionUninit DONOTUSE
|
||||
#define RegionFromRects DONOTUSE
|
||||
#define RegionDestroy DONOTUSE
|
||||
#define RegionCreate DONOTUSE
|
||||
#define RegionUnion DONOTUSE
|
||||
#define RegionSubtract DONOTUSE
|
||||
#define RegionInverse DONOTUSE
|
||||
#define RegionExtents DONOTUSE
|
||||
#define RegionReset DONOTUSE
|
||||
#define RegionBreak DONOTUSE
|
||||
#define RegionUnionRect DONOTUSE
|
||||
#endif
|
||||
|
||||
struct image_data
|
||||
{
|
||||
int width;
|
||||
int height;
|
||||
int bpp;
|
||||
int Bpp;
|
||||
int lineBytes;
|
||||
char *pixels;
|
||||
char *shmem_pixels;
|
||||
int shmem_id;
|
||||
int shmem_offset;
|
||||
int shmem_lineBytes;
|
||||
};
|
||||
|
||||
/* defined in rdpClientCon.h */
|
||||
typedef struct _rdpClientCon rdpClientCon;
|
||||
|
||||
struct _rdpPointer
|
||||
{
|
||||
int cursor_x;
|
||||
int cursor_y;
|
||||
int old_button_mask;
|
||||
int button_mask;
|
||||
DeviceIntPtr device;
|
||||
};
|
||||
typedef struct _rdpPointer rdpPointer;
|
||||
|
||||
struct _rdpKeyboard
|
||||
{
|
||||
int pause_spe;
|
||||
int ctrl_down;
|
||||
int alt_down;
|
||||
int shift_down;
|
||||
int tab_down;
|
||||
/* this is toggled every time num lock key is released, not like the
|
||||
above *_down vars */
|
||||
int scroll_lock_down;
|
||||
DeviceIntPtr device;
|
||||
};
|
||||
typedef struct _rdpKeyboard rdpKeyboard;
|
||||
|
||||
|
||||
struct _rdpPixmapRec
|
||||
{
|
||||
int status;
|
||||
int rdpindex;
|
||||
int con_number;
|
||||
int is_dirty;
|
||||
int is_scratch;
|
||||
int is_alpha_dirty_not;
|
||||
/* number of times used in a remote operation
|
||||
if this gets above XRDP_USE_COUNT_THRESHOLD
|
||||
then we force remote the pixmap */
|
||||
int use_count;
|
||||
int kind_width;
|
||||
struct rdp_draw_item *draw_item_head;
|
||||
struct rdp_draw_item *draw_item_tail;
|
||||
};
|
||||
typedef struct _rdpPixmapRec rdpPixmapRec;
|
||||
typedef struct _rdpPixmapRec * rdpPixmapPtr;
|
||||
#define GETPIXPRIV(_dev, _pPixmap) (rdpPixmapPtr) \
|
||||
rdpGetPixmapPrivate(&((_pPixmap)->devPrivates), (_dev)->privateKeyRecPixmap)
|
||||
|
||||
struct _rdpCounts
|
||||
{
|
||||
CARD32 rdpFillSpansCallCount; /* 1 */
|
||||
CARD32 rdpSetSpansCallCount;
|
||||
CARD32 rdpPutImageCallCount;
|
||||
CARD32 rdpCopyAreaCallCount;
|
||||
CARD32 rdpCopyPlaneCallCount;
|
||||
CARD32 rdpPolyPointCallCount;
|
||||
CARD32 rdpPolylinesCallCount;
|
||||
CARD32 rdpPolySegmentCallCount;
|
||||
CARD32 rdpPolyRectangleCallCount;
|
||||
CARD32 rdpPolyArcCallCount; /* 10 */
|
||||
CARD32 rdpFillPolygonCallCount;
|
||||
CARD32 rdpPolyFillRectCallCount;
|
||||
CARD32 rdpPolyFillArcCallCount;
|
||||
CARD32 rdpPolyText8CallCount;
|
||||
CARD32 rdpPolyText16CallCount;
|
||||
CARD32 rdpImageText8CallCount;
|
||||
CARD32 rdpImageText16CallCount;
|
||||
CARD32 rdpImageGlyphBltCallCount;
|
||||
CARD32 rdpPolyGlyphBltCallCount;
|
||||
CARD32 rdpPushPixelsCallCount; /* 20 */
|
||||
CARD32 rdpCompositeCallCount;
|
||||
CARD32 rdpCopyWindowCallCount; /* 22 */
|
||||
CARD32 rdpTrapezoidsCallCount;
|
||||
CARD32 callCount[64 - 23];
|
||||
};
|
||||
|
||||
typedef int (*yuv_to_rgb32_proc)(unsigned char *yuvs, int width, int height, int *rgbs);
|
||||
|
||||
typedef int (*copy_box_proc)(char *s8, int src_stride,
|
||||
char *d8, int dst_stride,
|
||||
int width, int height);
|
||||
|
||||
/* move this to common header */
|
||||
struct _rdpRec
|
||||
{
|
||||
int width;
|
||||
int height;
|
||||
int depth;
|
||||
int paddedWidthInBytes;
|
||||
int sizeInBytes;
|
||||
int num_modes;
|
||||
int bitsPerPixel;
|
||||
int Bpp;
|
||||
int Bpp_mask;
|
||||
char *pfbMemory_alloc;
|
||||
char *pfbMemory;
|
||||
ScreenPtr pScreen;
|
||||
rdpDevPrivateKey privateKeyRecGC;
|
||||
rdpDevPrivateKey privateKeyRecPixmap;
|
||||
|
||||
CopyWindowProcPtr CopyWindow;
|
||||
CreateGCProcPtr CreateGC;
|
||||
CreatePixmapProcPtr CreatePixmap;
|
||||
DestroyPixmapProcPtr DestroyPixmap;
|
||||
ModifyPixmapHeaderProcPtr ModifyPixmapHeader;
|
||||
CloseScreenProcPtr CloseScreen;
|
||||
CompositeProcPtr Composite;
|
||||
GlyphsProcPtr Glyphs;
|
||||
TrapezoidsProcPtr Trapezoids;
|
||||
|
||||
/* keyboard and mouse */
|
||||
miPointerScreenFuncPtr pCursorFuncs;
|
||||
/* mouse */
|
||||
rdpPointer pointer;
|
||||
/* keyboard */
|
||||
rdpKeyboard keyboard;
|
||||
|
||||
/* RandR */
|
||||
RRSetConfigProcPtr rrSetConfig;
|
||||
RRGetInfoProcPtr rrGetInfo;
|
||||
RRScreenSetSizeProcPtr rrScreenSetSize;
|
||||
RRCrtcSetProcPtr rrCrtcSet;
|
||||
RRCrtcSetGammaProcPtr rrCrtcSetGamma;
|
||||
RRCrtcGetGammaProcPtr rrCrtcGetGamma;
|
||||
RROutputSetPropertyProcPtr rrOutputSetProperty;
|
||||
RROutputValidateModeProcPtr rrOutputValidateMode;
|
||||
RRModeDestroyProcPtr rrModeDestroy;
|
||||
RROutputGetPropertyProcPtr rrOutputGetProperty;
|
||||
RRGetPanningProcPtr rrGetPanning;
|
||||
RRSetPanningProcPtr rrSetPanning;
|
||||
|
||||
int listen_sck;
|
||||
char uds_data[256];
|
||||
rdpClientCon *clientConHead;
|
||||
rdpClientCon *clientConTail;
|
||||
|
||||
rdpPixmapRec screenPriv;
|
||||
int sendUpdateScheduled; /* boolean */
|
||||
OsTimerPtr sendUpdateTimer;
|
||||
|
||||
int do_dirty_os; /* boolean */
|
||||
int do_dirty_ons; /* boolean */
|
||||
int disconnect_scheduled; /* boolean */
|
||||
int do_kill_disconnected; /* boolean */
|
||||
|
||||
OsTimerPtr disconnectTimer;
|
||||
int disconnectScheduled; /* boolean */
|
||||
int disconnect_timeout_s;
|
||||
int disconnect_time_ms;
|
||||
|
||||
int conNumber;
|
||||
|
||||
struct _rdpCounts counts;
|
||||
|
||||
yuv_to_rgb32_proc i420_to_rgb32;
|
||||
yuv_to_rgb32_proc yv12_to_rgb32;
|
||||
yuv_to_rgb32_proc yuy2_to_rgb32;
|
||||
yuv_to_rgb32_proc uyvy_to_rgb32;
|
||||
char *xv_data;
|
||||
int xv_data_bytes;
|
||||
int xv_timer_schedualed;
|
||||
OsTimerPtr xv_timer;
|
||||
|
||||
copy_box_proc a8r8g8b8_to_a8b8g8r8_box;
|
||||
|
||||
};
|
||||
typedef struct _rdpRec rdpRec;
|
||||
typedef struct _rdpRec * rdpPtr;
|
||||
#define XRDPPTR(_p) ((rdpPtr)((_p)->driverPrivate))
|
||||
|
||||
struct _rdpGCRec
|
||||
{
|
||||
GCFuncs *funcs;
|
||||
GCOps *ops;
|
||||
};
|
||||
typedef struct _rdpGCRec rdpGCRec;
|
||||
typedef struct _rdpGCRec * rdpGCPtr;
|
||||
|
||||
#define RDI_FILL 1
|
||||
#define RDI_IMGLL 2 /* lossless */
|
||||
#define RDI_IMGLY 3 /* lossy */
|
||||
#define RDI_LINE 4
|
||||
#define RDI_SCRBLT 5
|
||||
#define RDI_TEXT 6
|
||||
|
||||
struct urdp_draw_item_fill
|
||||
{
|
||||
int opcode;
|
||||
int fg_color;
|
||||
int bg_color;
|
||||
int pad0;
|
||||
};
|
||||
|
||||
struct urdp_draw_item_img
|
||||
{
|
||||
int opcode;
|
||||
int pad0;
|
||||
};
|
||||
|
||||
struct urdp_draw_item_line
|
||||
{
|
||||
int opcode;
|
||||
int fg_color;
|
||||
int bg_color;
|
||||
int width;
|
||||
xSegment* segs;
|
||||
int nseg;
|
||||
int flags;
|
||||
};
|
||||
|
||||
struct urdp_draw_item_scrblt
|
||||
{
|
||||
int srcx;
|
||||
int srcy;
|
||||
int dstx;
|
||||
int dsty;
|
||||
int cx;
|
||||
int cy;
|
||||
};
|
||||
|
||||
struct urdp_draw_item_text
|
||||
{
|
||||
int opcode;
|
||||
int fg_color;
|
||||
struct rdp_text* rtext; /* in rdpglyph.h */
|
||||
};
|
||||
|
||||
union urdp_draw_item
|
||||
{
|
||||
struct urdp_draw_item_fill fill;
|
||||
struct urdp_draw_item_img img;
|
||||
struct urdp_draw_item_line line;
|
||||
struct urdp_draw_item_scrblt scrblt;
|
||||
struct urdp_draw_item_text text;
|
||||
};
|
||||
|
||||
struct rdp_draw_item
|
||||
{
|
||||
int type; /* RDI_FILL, RDI_IMGLL, ... */
|
||||
int flags;
|
||||
struct rdp_draw_item* prev;
|
||||
struct rdp_draw_item* next;
|
||||
RegionPtr reg;
|
||||
union urdp_draw_item u;
|
||||
};
|
||||
|
||||
#define XRDP_USE_COUNT_THRESHOLD 1
|
||||
#endif
|
@ -1,788 +0,0 @@
|
||||
/**
|
||||
* xrdp: A Remote Desktop Protocol server.
|
||||
*
|
||||
* Copyright (C) Laxmikant Rashinkar 2014
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* Routines to copy regions from framebuffer to shared memory
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
/* this should be before all X11 .h files */
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
|
||||
/* all driver need this */
|
||||
#include <xf86.h>
|
||||
#include <xf86_OSproc.h>
|
||||
|
||||
#include "rdp.h"
|
||||
#include "rdpDraw.h"
|
||||
#include "rdpClientCon.h"
|
||||
#include "rdpReg.h"
|
||||
#include "rdpMisc.h"
|
||||
#include "rdpCapture.h"
|
||||
|
||||
#define LOG_LEVEL 1
|
||||
#define LLOGLN(_level, _args) \
|
||||
do { if (_level < LOG_LEVEL) { ErrorF _args ; ErrorF("\n"); } } while (0)
|
||||
|
||||
#define RDP_MAX_TILES 1024
|
||||
|
||||
/******************************************************************************/
|
||||
static int
|
||||
rdpLimitRects(RegionPtr reg, int max_rects, BoxPtr *rects)
|
||||
{
|
||||
int nrects;
|
||||
|
||||
nrects = REGION_NUM_RECTS(reg);
|
||||
if (nrects > max_rects)
|
||||
{
|
||||
nrects = 1;
|
||||
*rects = rdpRegionExtents(reg);
|
||||
}
|
||||
else
|
||||
{
|
||||
*rects = REGION_RECTS(reg);
|
||||
}
|
||||
return nrects;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
/* copy rects with no error checking */
|
||||
static int
|
||||
rdpCopyBox_a8r8g8b8_to_a8r8g8b8(rdpClientCon *clientCon,
|
||||
void *src, int src_stride, int srcx, int srcy,
|
||||
void *dst, int dst_stride, int dstx, int dsty,
|
||||
BoxPtr rects, int num_rects)
|
||||
{
|
||||
char *s8;
|
||||
char *d8;
|
||||
int index;
|
||||
int jndex;
|
||||
int bytes;
|
||||
int height;
|
||||
BoxPtr box;
|
||||
|
||||
for (index = 0; index < num_rects; index++)
|
||||
{
|
||||
box = rects + index;
|
||||
s8 = ((char *) src) + (box->y1 - srcy) * src_stride;
|
||||
s8 += (box->x1 - srcx) * 4;
|
||||
d8 = ((char *) dst) + (box->y1 - dsty) * dst_stride;
|
||||
d8 += (box->x1 - dstx) * 4;
|
||||
bytes = box->x2 - box->x1;
|
||||
bytes *= 4;
|
||||
height = box->y2 - box->y1;
|
||||
for (jndex = 0; jndex < height; jndex++)
|
||||
{
|
||||
g_memcpy(d8, s8, bytes);
|
||||
d8 += dst_stride;
|
||||
s8 += src_stride;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
static int
|
||||
rdpFillBox_yuvalp(int ax, int ay,
|
||||
void *dst, int dst_stride)
|
||||
{
|
||||
dst = ((char *) dst) + (ay << 8) * (dst_stride >> 8) + (ax << 8);
|
||||
g_memset(dst, 0, 64 * 64 * 4);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
/* copy rects with no error checking
|
||||
* convert ARGB32 to 64x64 linear planar YUVA */
|
||||
/* http://msdn.microsoft.com/en-us/library/ff635643.aspx
|
||||
* 0.299 -0.168935 0.499813
|
||||
* 0.587 -0.331665 -0.418531
|
||||
* 0.114 0.50059 -0.081282
|
||||
y = r * 0.299000 + g * 0.587000 + b * 0.114000;
|
||||
u = r * -0.168935 + g * -0.331665 + b * 0.500590;
|
||||
v = r * 0.499813 + g * -0.418531 + b * -0.081282; */
|
||||
/* 19595 38470 7471
|
||||
-11071 -21736 32807
|
||||
32756 -27429 -5327 */
|
||||
static int
|
||||
rdpCopyBox_a8r8g8b8_to_yuvalp(int ax, int ay,
|
||||
void *src, int src_stride,
|
||||
void *dst, int dst_stride,
|
||||
BoxPtr rects, int num_rects)
|
||||
{
|
||||
char *s8;
|
||||
char *d8;
|
||||
char *yptr;
|
||||
char *uptr;
|
||||
char *vptr;
|
||||
char *aptr;
|
||||
int *s32;
|
||||
int index;
|
||||
int jndex;
|
||||
int kndex;
|
||||
int width;
|
||||
int height;
|
||||
int pixel;
|
||||
int a;
|
||||
int r;
|
||||
int g;
|
||||
int b;
|
||||
int y;
|
||||
int u;
|
||||
int v;
|
||||
BoxPtr box;
|
||||
|
||||
dst = ((char *) dst) + (ay << 8) * (dst_stride >> 8) + (ax << 8);
|
||||
for (index = 0; index < num_rects; index++)
|
||||
{
|
||||
box = rects + index;
|
||||
s8 = ((char *) src) + box->y1 * src_stride;
|
||||
s8 += box->x1 * 4;
|
||||
d8 = ((char *) dst) + (box->y1 - ay) * 64;
|
||||
d8 += box->x1 - ax;
|
||||
width = box->x2 - box->x1;
|
||||
height = box->y2 - box->y1;
|
||||
for (jndex = 0; jndex < height; jndex++)
|
||||
{
|
||||
s32 = (int *) s8;
|
||||
yptr = d8;
|
||||
uptr = yptr + 64 * 64;
|
||||
vptr = uptr + 64 * 64;
|
||||
aptr = vptr + 64 * 64;
|
||||
kndex = 0;
|
||||
while (kndex < width)
|
||||
{
|
||||
pixel = *(s32++);
|
||||
a = (pixel >> 24) & 0xff;
|
||||
r = (pixel >> 16) & 0xff;
|
||||
g = (pixel >> 8) & 0xff;
|
||||
b = (pixel >> 0) & 0xff;
|
||||
y = (r * 19595 + g * 38470 + b * 7471) >> 16;
|
||||
u = (r * -11071 + g * -21736 + b * 32807) >> 16;
|
||||
v = (r * 32756 + g * -27429 + b * -5327) >> 16;
|
||||
u = u + 128;
|
||||
v = v + 128;
|
||||
y = max(y, 0);
|
||||
u = max(u, 0);
|
||||
v = max(v, 0);
|
||||
y = min(y, 255);
|
||||
u = min(u, 255);
|
||||
v = min(v, 255);
|
||||
*(yptr++) = y;
|
||||
*(uptr++) = u;
|
||||
*(vptr++) = v;
|
||||
*(aptr++) = a;
|
||||
kndex++;
|
||||
}
|
||||
d8 += 64;
|
||||
s8 += src_stride;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
int
|
||||
a8r8g8b8_to_a8b8g8r8_box(char *s8, int src_stride,
|
||||
char *d8, int dst_stride,
|
||||
int width, int height)
|
||||
{
|
||||
int index;
|
||||
int jndex;
|
||||
int red;
|
||||
int green;
|
||||
int blue;
|
||||
unsigned int *s32;
|
||||
unsigned int *d32;
|
||||
|
||||
for (index = 0; index < height; index++)
|
||||
{
|
||||
s32 = (unsigned int *) s8;
|
||||
d32 = (unsigned int *) d8;
|
||||
for (jndex = 0; jndex < width; jndex++)
|
||||
{
|
||||
SPLITCOLOR32(red, green, blue, *s32);
|
||||
*d32 = COLOR24(red, green, blue);
|
||||
s32++;
|
||||
d32++;
|
||||
}
|
||||
d8 += dst_stride;
|
||||
s8 += src_stride;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
/* copy rects with no error checking */
|
||||
static int
|
||||
rdpCopyBox_a8r8g8b8_to_a8b8g8r8(rdpClientCon *clientCon,
|
||||
void *src, int src_stride, int srcx, int srcy,
|
||||
void *dst, int dst_stride, int dstx, int dsty,
|
||||
BoxPtr rects, int num_rects)
|
||||
{
|
||||
char *s8;
|
||||
char *d8;
|
||||
int index;
|
||||
int bytes;
|
||||
int width;
|
||||
int height;
|
||||
BoxPtr box;
|
||||
copy_box_proc copy_box;
|
||||
|
||||
copy_box = clientCon->dev->a8r8g8b8_to_a8b8g8r8_box;
|
||||
for (index = 0; index < num_rects; index++)
|
||||
{
|
||||
box = rects + index;
|
||||
s8 = ((char *) src) + (box->y1 - srcy) * src_stride;
|
||||
s8 += (box->x1 - srcx) * 4;
|
||||
d8 = ((char *) dst) + (box->y1 - dsty) * dst_stride;
|
||||
d8 += (box->x1 - dstx) * 4;
|
||||
bytes = box->x2 - box->x1;
|
||||
bytes *= 4;
|
||||
width = box->x2 - box->x1;
|
||||
height = box->y2 - box->y1;
|
||||
copy_box(s8, src_stride, d8, dst_stride, width, height);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
static Bool
|
||||
rdpCapture0(rdpClientCon *clientCon,
|
||||
RegionPtr in_reg, BoxPtr *out_rects, int *num_out_rects,
|
||||
void *src, int src_width, int src_height,
|
||||
int src_stride, int src_format,
|
||||
void *dst, int dst_width, int dst_height,
|
||||
int dst_stride, int dst_format, int max_rects)
|
||||
{
|
||||
BoxPtr psrc_rects;
|
||||
BoxRec rect;
|
||||
RegionRec reg;
|
||||
char *src_rect;
|
||||
char *dst_rect;
|
||||
int num_rects;
|
||||
int src_bytespp;
|
||||
int dst_bytespp;
|
||||
int width;
|
||||
int height;
|
||||
int src_offset;
|
||||
int dst_offset;
|
||||
int i;
|
||||
int j;
|
||||
int k;
|
||||
int red;
|
||||
int green;
|
||||
int blue;
|
||||
Bool rv;
|
||||
unsigned int *s32;
|
||||
unsigned short *d16;
|
||||
unsigned char *d8;
|
||||
|
||||
LLOGLN(10, ("rdpCapture0:"));
|
||||
|
||||
rv = TRUE;
|
||||
|
||||
rect.x1 = 0;
|
||||
rect.y1 = 0;
|
||||
rect.x2 = RDPMIN(dst_width, src_width);
|
||||
rect.y2 = RDPMIN(dst_height, src_height);
|
||||
rdpRegionInit(®, &rect, 0);
|
||||
rdpRegionIntersect(®, in_reg, ®);
|
||||
|
||||
psrc_rects = 0;
|
||||
num_rects = rdpLimitRects(®, max_rects, &psrc_rects);
|
||||
if (num_rects < 1)
|
||||
{
|
||||
rdpRegionUninit(®);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
*num_out_rects = num_rects;
|
||||
|
||||
*out_rects = (BoxPtr) g_malloc(sizeof(BoxRec) * num_rects, 0);
|
||||
for (i = 0; i < num_rects; i++)
|
||||
{
|
||||
rect = psrc_rects[i];
|
||||
(*out_rects)[i] = rect;
|
||||
}
|
||||
|
||||
if ((src_format == XRDP_a8r8g8b8) && (dst_format == XRDP_a8r8g8b8))
|
||||
{
|
||||
rdpCopyBox_a8r8g8b8_to_a8r8g8b8(clientCon,
|
||||
src, src_stride, 0, 0,
|
||||
dst, dst_stride, 0, 0,
|
||||
psrc_rects, num_rects);
|
||||
}
|
||||
else if ((src_format == XRDP_a8r8g8b8) && (dst_format == XRDP_a8b8g8r8))
|
||||
{
|
||||
rdpCopyBox_a8r8g8b8_to_a8b8g8r8(clientCon,
|
||||
src, src_stride, 0, 0,
|
||||
dst, dst_stride, 0, 0,
|
||||
psrc_rects, num_rects);
|
||||
}
|
||||
else if ((src_format == XRDP_a8r8g8b8) && (dst_format == XRDP_r5g6b5))
|
||||
{
|
||||
src_bytespp = 4;
|
||||
dst_bytespp = 2;
|
||||
|
||||
for (i = 0; i < num_rects; i++)
|
||||
{
|
||||
/* get rect to copy */
|
||||
rect = (*out_rects)[i];
|
||||
|
||||
/* get rect dimensions */
|
||||
width = rect.x2 - rect.x1;
|
||||
height = rect.y2 - rect.y1;
|
||||
|
||||
/* point to start of each rect in respective memory */
|
||||
src_offset = rect.y1 * src_stride + rect.x1 * src_bytespp;
|
||||
dst_offset = rect.y1 * dst_stride + rect.x1 * dst_bytespp;
|
||||
src_rect = src + src_offset;
|
||||
dst_rect = dst + dst_offset;
|
||||
|
||||
/* copy one line at a time */
|
||||
for (j = 0; j < height; j++)
|
||||
{
|
||||
s32 = (unsigned int *) src_rect;
|
||||
d16 = (unsigned short *) dst_rect;
|
||||
for (k = 0; k < width; k++)
|
||||
{
|
||||
SPLITCOLOR32(red, green, blue, *s32);
|
||||
*d16 = COLOR16(red, green, blue);
|
||||
s32++;
|
||||
d16++;
|
||||
}
|
||||
src_rect += src_stride;
|
||||
dst_rect += dst_stride;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if ((src_format == XRDP_a8r8g8b8) && (dst_format == XRDP_a1r5g5b5))
|
||||
{
|
||||
src_bytespp = 4;
|
||||
dst_bytespp = 2;
|
||||
|
||||
for (i = 0; i < num_rects; i++)
|
||||
{
|
||||
/* get rect to copy */
|
||||
rect = (*out_rects)[i];
|
||||
|
||||
/* get rect dimensions */
|
||||
width = rect.x2 - rect.x1;
|
||||
height = rect.y2 - rect.y1;
|
||||
|
||||
/* point to start of each rect in respective memory */
|
||||
src_offset = rect.y1 * src_stride + rect.x1 * src_bytespp;
|
||||
dst_offset = rect.y1 * dst_stride + rect.x1 * dst_bytespp;
|
||||
src_rect = src + src_offset;
|
||||
dst_rect = dst + dst_offset;
|
||||
|
||||
/* copy one line at a time */
|
||||
for (j = 0; j < height; j++)
|
||||
{
|
||||
s32 = (unsigned int *) src_rect;
|
||||
d16 = (unsigned short *) dst_rect;
|
||||
for (k = 0; k < width; k++)
|
||||
{
|
||||
SPLITCOLOR32(red, green, blue, *s32);
|
||||
*d16 = COLOR15(red, green, blue);
|
||||
s32++;
|
||||
d16++;
|
||||
}
|
||||
src_rect += src_stride;
|
||||
dst_rect += dst_stride;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if ((src_format == XRDP_a8r8g8b8) && (dst_format == XRDP_r3g3b2))
|
||||
{
|
||||
src_bytespp = 4;
|
||||
dst_bytespp = 1;
|
||||
|
||||
for (i = 0; i < num_rects; i++)
|
||||
{
|
||||
/* get rect to copy */
|
||||
rect = (*out_rects)[i];
|
||||
|
||||
/* get rect dimensions */
|
||||
width = rect.x2 - rect.x1;
|
||||
height = rect.y2 - rect.y1;
|
||||
|
||||
/* point to start of each rect in respective memory */
|
||||
src_offset = rect.y1 * src_stride + rect.x1 * src_bytespp;
|
||||
dst_offset = rect.y1 * dst_stride + rect.x1 * dst_bytespp;
|
||||
src_rect = src + src_offset;
|
||||
dst_rect = dst + dst_offset;
|
||||
|
||||
/* copy one line at a time */
|
||||
for (j = 0; j < height; j++)
|
||||
{
|
||||
s32 = (unsigned int *) src_rect;
|
||||
d8 = (unsigned char *) dst_rect;
|
||||
for (k = 0; k < width; k++)
|
||||
{
|
||||
SPLITCOLOR32(red, green, blue, *s32);
|
||||
*d8 = COLOR8(red, green, blue);
|
||||
s32++;
|
||||
d8++;
|
||||
}
|
||||
src_rect += src_stride;
|
||||
dst_rect += dst_stride;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LLOGLN(0, ("rdpCapture0: unimp color conversion"));
|
||||
}
|
||||
rdpRegionUninit(®);
|
||||
return rv;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
/* make out_rects always multiple of 16 width and height */
|
||||
static Bool
|
||||
rdpCapture1(rdpClientCon *clientCon,
|
||||
RegionPtr in_reg, BoxPtr *out_rects, int *num_out_rects,
|
||||
void *src, int src_width, int src_height,
|
||||
int src_stride, int src_format,
|
||||
void *dst, int dst_width, int dst_height,
|
||||
int dst_stride, int dst_format, int max_rects)
|
||||
{
|
||||
BoxPtr psrc_rects;
|
||||
BoxRec rect;
|
||||
RegionRec reg;
|
||||
char *src_rect;
|
||||
char *dst_rect;
|
||||
int num_regions;
|
||||
int src_bytespp;
|
||||
int dst_bytespp;
|
||||
int width;
|
||||
int height;
|
||||
int min_width;
|
||||
int min_height;
|
||||
int src_offset;
|
||||
int dst_offset;
|
||||
int index;
|
||||
int jndex;
|
||||
int kndex;
|
||||
int red;
|
||||
int green;
|
||||
int blue;
|
||||
int ex;
|
||||
int ey;
|
||||
Bool rv;
|
||||
unsigned int *s32;
|
||||
unsigned int *d32;
|
||||
|
||||
LLOGLN(10, ("rdpCapture1:"));
|
||||
|
||||
rv = TRUE;
|
||||
|
||||
min_width = RDPMIN(dst_width, src_width);
|
||||
min_height = RDPMIN(dst_height, src_height);
|
||||
|
||||
rect.x1 = 0;
|
||||
rect.y1 = 0;
|
||||
rect.x2 = min_width;
|
||||
rect.y2 = min_height;
|
||||
rdpRegionInit(®, &rect, 0);
|
||||
rdpRegionIntersect(®, in_reg, ®);
|
||||
|
||||
num_regions = REGION_NUM_RECTS(®);
|
||||
|
||||
if (num_regions > max_rects)
|
||||
{
|
||||
num_regions = 1;
|
||||
psrc_rects = rdpRegionExtents(®);
|
||||
}
|
||||
else
|
||||
{
|
||||
psrc_rects = REGION_RECTS(®);
|
||||
}
|
||||
|
||||
if (num_regions < 1)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
*num_out_rects = num_regions;
|
||||
|
||||
*out_rects = (BoxPtr) g_malloc(sizeof(BoxRec) * num_regions * 4, 0);
|
||||
index = 0;
|
||||
while (index < num_regions)
|
||||
{
|
||||
rect = psrc_rects[index];
|
||||
width = rect.x2 - rect.x1;
|
||||
height = rect.y2 - rect.y1;
|
||||
ex = ((width + 15) & ~15) - width;
|
||||
if (ex != 0)
|
||||
{
|
||||
rect.x2 += ex;
|
||||
if (rect.x2 > min_width)
|
||||
{
|
||||
rect.x1 -= rect.x2 - min_width;
|
||||
rect.x2 = min_width;
|
||||
}
|
||||
if (rect.x1 < 0)
|
||||
{
|
||||
rect.x1 += 16;
|
||||
}
|
||||
}
|
||||
ey = ((height + 15) & ~15) - height;
|
||||
if (ey != 0)
|
||||
{
|
||||
rect.y2 += ey;
|
||||
if (rect.y2 > min_height)
|
||||
{
|
||||
rect.y1 -= rect.y2 - min_height;
|
||||
rect.y2 = min_height;
|
||||
}
|
||||
if (rect.y1 < 0)
|
||||
{
|
||||
rect.y1 += 16;
|
||||
}
|
||||
}
|
||||
#if 0
|
||||
if (rect.x1 < 0)
|
||||
{
|
||||
LLOGLN(0, ("rdpCapture1: error"));
|
||||
}
|
||||
if (rect.y1 < 0)
|
||||
{
|
||||
LLOGLN(0, ("rdpCapture1: error"));
|
||||
}
|
||||
if (rect.x2 > min_width)
|
||||
{
|
||||
LLOGLN(0, ("rdpCapture1: error"));
|
||||
}
|
||||
if (rect.y2 > min_height)
|
||||
{
|
||||
LLOGLN(0, ("rdpCapture1: error"));
|
||||
}
|
||||
if ((rect.x2 - rect.x1) % 16 != 0)
|
||||
{
|
||||
LLOGLN(0, ("rdpCapture1: error"));
|
||||
}
|
||||
if ((rect.y2 - rect.y1) % 16 != 0)
|
||||
{
|
||||
LLOGLN(0, ("rdpCapture1: error"));
|
||||
}
|
||||
#endif
|
||||
(*out_rects)[index] = rect;
|
||||
index++;
|
||||
}
|
||||
|
||||
if ((src_format == XRDP_a8r8g8b8) && (dst_format == XRDP_a8b8g8r8))
|
||||
{
|
||||
src_bytespp = 4;
|
||||
dst_bytespp = 4;
|
||||
|
||||
for (index = 0; index < num_regions; index++)
|
||||
{
|
||||
/* get rect to copy */
|
||||
rect = (*out_rects)[index];
|
||||
|
||||
/* get rect dimensions */
|
||||
width = rect.x2 - rect.x1;
|
||||
height = rect.y2 - rect.y1;
|
||||
|
||||
/* point to start of each rect in respective memory */
|
||||
src_offset = rect.y1 * src_stride + rect.x1 * src_bytespp;
|
||||
dst_offset = rect.y1 * dst_stride + rect.x1 * dst_bytespp;
|
||||
src_rect = src + src_offset;
|
||||
dst_rect = dst + dst_offset;
|
||||
|
||||
/* copy one line at a time */
|
||||
for (jndex = 0; jndex < height; jndex++)
|
||||
{
|
||||
s32 = (unsigned int *) src_rect;
|
||||
d32 = (unsigned int *) dst_rect;
|
||||
for (kndex = 0; kndex < width; kndex++)
|
||||
{
|
||||
SPLITCOLOR32(red, green, blue, *s32);
|
||||
*d32 = COLOR24(red, green, blue);
|
||||
s32++;
|
||||
d32++;
|
||||
}
|
||||
src_rect += src_stride;
|
||||
dst_rect += dst_stride;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LLOGLN(0, ("rdpCapture1: unimp color conversion"));
|
||||
}
|
||||
rdpRegionUninit(®);
|
||||
return rv;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
static Bool
|
||||
rdpCapture2(rdpClientCon *clientCon,
|
||||
RegionPtr in_reg, BoxPtr *out_rects, int *num_out_rects,
|
||||
void *src, int src_width, int src_height,
|
||||
int src_stride, int src_format,
|
||||
void *dst, int dst_width, int dst_height,
|
||||
int dst_stride, int dst_format, int max_rects)
|
||||
{
|
||||
int x;
|
||||
int y;
|
||||
int out_rect_index;
|
||||
int num_rects;
|
||||
int rcode;
|
||||
BoxRec rect;
|
||||
BoxRec extents_rect;
|
||||
BoxPtr rects;
|
||||
RegionRec tile_reg;
|
||||
RegionRec lin_reg;
|
||||
RegionRec temp_reg;
|
||||
RegionPtr pin_reg;
|
||||
|
||||
LLOGLN(10, ("rdpCapture2:"));
|
||||
|
||||
*out_rects = (BoxPtr) g_malloc(sizeof(BoxRec) * RDP_MAX_TILES, 0);
|
||||
if (*out_rects == NULL)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
out_rect_index = 0;
|
||||
|
||||
/* clip for smaller of 2 */
|
||||
rect.x1 = 0;
|
||||
rect.y1 = 0;
|
||||
rect.x2 = min(dst_width, src_width);
|
||||
rect.y2 = min(dst_height, src_height);
|
||||
rdpRegionInit(&temp_reg, &rect, 0);
|
||||
rdpRegionIntersect(&temp_reg, in_reg, &temp_reg);
|
||||
|
||||
/* limit the numer of rects */
|
||||
num_rects = REGION_NUM_RECTS(&temp_reg);
|
||||
if (num_rects > max_rects)
|
||||
{
|
||||
LLOGLN(10, ("rdpCapture2: too many rects"));
|
||||
rdpRegionInit(&lin_reg, rdpRegionExtents(&temp_reg), 0);
|
||||
pin_reg = &lin_reg;
|
||||
}
|
||||
else
|
||||
{
|
||||
LLOGLN(10, ("rdpCapture2: not too many rects"));
|
||||
rdpRegionInit(&lin_reg, NullBox, 0);
|
||||
pin_reg = &temp_reg;
|
||||
}
|
||||
extents_rect = *rdpRegionExtents(pin_reg);
|
||||
y = extents_rect.y1 & ~63;
|
||||
while (y < extents_rect.y2)
|
||||
{
|
||||
x = extents_rect.x1 & ~63;
|
||||
while (x < extents_rect.x2)
|
||||
{
|
||||
rect.x1 = x;
|
||||
rect.y1 = y;
|
||||
rect.x2 = rect.x1 + 64;
|
||||
rect.y2 = rect.y1 + 64;
|
||||
rcode = rdpRegionContainsRect(pin_reg, &rect);
|
||||
LLOGLN(10, ("rdpCapture2: rcode %d", rcode));
|
||||
|
||||
if (rcode != rgnOUT)
|
||||
{
|
||||
if (rcode == rgnPART)
|
||||
{
|
||||
LLOGLN(10, ("rdpCapture2: rgnPART"));
|
||||
rdpFillBox_yuvalp(x, y, dst, dst_stride);
|
||||
rdpRegionInit(&tile_reg, &rect, 0);
|
||||
rdpRegionIntersect(&tile_reg, pin_reg, &tile_reg);
|
||||
rects = REGION_RECTS(&tile_reg);
|
||||
num_rects = REGION_NUM_RECTS(&tile_reg);
|
||||
rdpCopyBox_a8r8g8b8_to_yuvalp(x, y,
|
||||
src, src_stride,
|
||||
dst, dst_stride,
|
||||
rects, num_rects);
|
||||
rdpRegionUninit(&tile_reg);
|
||||
}
|
||||
else /* rgnIN */
|
||||
{
|
||||
LLOGLN(10, ("rdpCapture2: rgnIN"));
|
||||
rdpCopyBox_a8r8g8b8_to_yuvalp(x, y,
|
||||
src, src_stride,
|
||||
dst, dst_stride,
|
||||
&rect, 1);
|
||||
}
|
||||
(*out_rects)[out_rect_index] = rect;
|
||||
out_rect_index++;
|
||||
if (out_rect_index >= RDP_MAX_TILES)
|
||||
{
|
||||
g_free(*out_rects);
|
||||
*out_rects = NULL;
|
||||
rdpRegionUninit(&temp_reg);
|
||||
rdpRegionUninit(&lin_reg);
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
x += 64;
|
||||
}
|
||||
y += 64;
|
||||
}
|
||||
*num_out_rects = out_rect_index;
|
||||
rdpRegionUninit(&temp_reg);
|
||||
rdpRegionUninit(&lin_reg);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Copy an array of rectangles from one memory area to another
|
||||
*****************************************************************************/
|
||||
Bool
|
||||
rdpCapture(rdpClientCon *clientCon,
|
||||
RegionPtr in_reg, BoxPtr *out_rects, int *num_out_rects,
|
||||
void *src, int src_width, int src_height,
|
||||
int src_stride, int src_format,
|
||||
void *dst, int dst_width, int dst_height,
|
||||
int dst_stride, int dst_format, int mode)
|
||||
{
|
||||
LLOGLN(10, ("rdpCapture:"));
|
||||
LLOGLN(10, ("rdpCapture: src %p dst %p", src, dst));
|
||||
switch (mode)
|
||||
{
|
||||
case 0:
|
||||
return rdpCapture0(clientCon, in_reg, out_rects, num_out_rects,
|
||||
src, src_width, src_height,
|
||||
src_stride, src_format,
|
||||
dst, dst_width, dst_height,
|
||||
dst_stride, dst_format, 15);
|
||||
case 1:
|
||||
return rdpCapture1(clientCon, in_reg, out_rects, num_out_rects,
|
||||
src, src_width, src_height,
|
||||
src_stride, src_format,
|
||||
dst, dst_width, dst_height,
|
||||
dst_stride, dst_format, 15);
|
||||
case 2:
|
||||
return rdpCapture2(clientCon, in_reg, out_rects, num_out_rects,
|
||||
src, src_width, src_height,
|
||||
src_stride, src_format,
|
||||
dst, dst_width, dst_height,
|
||||
dst_stride, dst_format, 15);
|
||||
default:
|
||||
LLOGLN(0, ("rdpCapture: unimp mode"));
|
||||
break;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
@ -1,41 +0,0 @@
|
||||
/**
|
||||
* xrdp: A Remote Desktop Protocol server.
|
||||
*
|
||||
* Copyright (C) Laxmikant Rashinkar 2014
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* Routines to copy regions from framebuffer to shared memory
|
||||
*/
|
||||
|
||||
#ifndef __RDPCAPTURE_H
|
||||
#define __RDPCAPTURE_H
|
||||
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
#include <xf86.h>
|
||||
|
||||
extern _X_EXPORT Bool
|
||||
rdpCapture(rdpClientCon *clientCon,
|
||||
RegionPtr in_reg, BoxPtr *out_rects, int *num_out_rects,
|
||||
void *src, int src_width, int src_height,
|
||||
int src_stride, int src_format,
|
||||
void *dst, int dst_width, int dst_height,
|
||||
int dst_stride, int dst_format, int mode);
|
||||
|
||||
extern _X_EXPORT int
|
||||
a8r8g8b8_to_a8b8g8r8_box(char *s8, int src_stride,
|
||||
char *d8, int dst_stride,
|
||||
int width, int height);
|
||||
|
||||
#endif
|
File diff suppressed because it is too large
Load Diff
@ -1,168 +0,0 @@
|
||||
/*
|
||||
Copyright 2005-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
Client connection to xrdp
|
||||
|
||||
*/
|
||||
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
#include <xf86.h>
|
||||
|
||||
/* in xrdp/common */
|
||||
#include "xrdp_client_info.h"
|
||||
#include "xrdp_constants.h"
|
||||
|
||||
#ifndef _RDPCLIENTCON_H
|
||||
#define _RDPCLIENTCON_H
|
||||
|
||||
/* used in rdpGlyphs.c */
|
||||
struct font_cache
|
||||
{
|
||||
int offset;
|
||||
int baseline;
|
||||
int width;
|
||||
int height;
|
||||
int crc;
|
||||
int stamp;
|
||||
};
|
||||
|
||||
struct rdpup_os_bitmap
|
||||
{
|
||||
int used;
|
||||
PixmapPtr pixmap;
|
||||
rdpPixmapPtr priv;
|
||||
int stamp;
|
||||
};
|
||||
|
||||
/* one of these for each client */
|
||||
struct _rdpClientCon
|
||||
{
|
||||
rdpPtr dev;
|
||||
|
||||
int sck;
|
||||
int sckControlListener;
|
||||
int sckControl;
|
||||
struct stream *out_s;
|
||||
struct stream *in_s;
|
||||
|
||||
int rectIdAck;
|
||||
int rectId;
|
||||
int connected; /* boolean */
|
||||
int begin; /* boolean */
|
||||
int count;
|
||||
int sckClosed; /* boolean */
|
||||
struct rdpup_os_bitmap *osBitmaps;
|
||||
int maxOsBitmaps;
|
||||
int osBitmapStamp;
|
||||
int osBitmapAllocSize;
|
||||
int osBitmapNumUsed;
|
||||
int doComposite;
|
||||
int doGlyphCache;
|
||||
int canDoPixToPix;
|
||||
int doMultimon;
|
||||
|
||||
int rdp_bpp; /* client depth */
|
||||
int rdp_Bpp;
|
||||
int rdp_Bpp_mask;
|
||||
int rdp_width;
|
||||
int rdp_height;
|
||||
int rdp_format; /* XRDP_a8r8g8b8, XRDP_r5g6b5, ... */
|
||||
int cap_width;
|
||||
int cap_height;
|
||||
|
||||
int rdpIndex; /* current os target */
|
||||
|
||||
int conNumber;
|
||||
|
||||
/* rdpGlyphs.c */
|
||||
struct font_cache font_cache[12][256];
|
||||
int font_stamp;
|
||||
|
||||
struct xrdp_client_info client_info;
|
||||
|
||||
char *shmemptr;
|
||||
int shmemid;
|
||||
int shmem_lineBytes;
|
||||
RegionPtr shmRegion;
|
||||
int rect_id;
|
||||
int rect_id_ack;
|
||||
|
||||
OsTimerPtr updateTimer;
|
||||
int updateSchedualed; /* boolean */
|
||||
|
||||
RegionPtr dirtyRegion;
|
||||
|
||||
struct _rdpClientCon *next;
|
||||
};
|
||||
|
||||
extern _X_EXPORT int
|
||||
rdpClientConBeginUpdate(rdpPtr dev, rdpClientCon *clientCon);
|
||||
extern _X_EXPORT int
|
||||
rdpClientConEndUpdate(rdpPtr dev, rdpClientCon *clientCon);
|
||||
extern _X_EXPORT int
|
||||
rdpClientConSetFgcolor(rdpPtr dev, rdpClientCon *clientCon, int fgcolor);
|
||||
extern _X_EXPORT void
|
||||
rdpClientConSendArea(rdpPtr dev, rdpClientCon *clientCon,
|
||||
struct image_data *id, int x, int y, int w, int h);
|
||||
extern _X_EXPORT int
|
||||
rdpClientConFillRect(rdpPtr dev, rdpClientCon *clientCon,
|
||||
short x, short y, int cx, int cy);
|
||||
extern _X_EXPORT int
|
||||
rdpClientConCheck(ScreenPtr pScreen);
|
||||
extern _X_EXPORT int
|
||||
rdpClientConInit(rdpPtr dev);
|
||||
extern _X_EXPORT int
|
||||
rdpClientConDeinit(rdpPtr dev);
|
||||
|
||||
extern _X_EXPORT int
|
||||
rdpClientConDeleteOsSurface(rdpPtr dev, rdpClientCon *clientCon, int rdpindex);
|
||||
|
||||
extern _X_EXPORT int
|
||||
rdpClientConRemoveOsBitmap(rdpPtr dev, rdpClientCon *clientCon, int rdpindex);
|
||||
|
||||
extern _X_EXPORT void
|
||||
rdpClientConScheduleDeferredUpdate(rdpPtr dev);
|
||||
extern _X_EXPORT int
|
||||
rdpClientConCheckDirtyScreen(rdpPtr dev, rdpClientCon *clientCon);
|
||||
extern _X_EXPORT int
|
||||
rdpClientConAddDirtyScreenReg(rdpPtr dev, rdpClientCon *clientCon,
|
||||
RegionPtr reg);
|
||||
extern _X_EXPORT int
|
||||
rdpClientConAddDirtyScreenBox(rdpPtr dev, rdpClientCon *clientCon,
|
||||
BoxPtr box);
|
||||
extern _X_EXPORT int
|
||||
rdpClientConAddDirtyScreen(rdpPtr dev, rdpClientCon *clientCon,
|
||||
int x, int y, int cx, int cy);
|
||||
extern _X_EXPORT void
|
||||
rdpClientConGetScreenImageRect(rdpPtr dev, rdpClientCon *clientCon,
|
||||
struct image_data *id);
|
||||
extern _X_EXPORT int
|
||||
rdpClientConAddAllReg(rdpPtr dev, RegionPtr reg, DrawablePtr pDrawable);
|
||||
extern _X_EXPORT int
|
||||
rdpClientConAddAllBox(rdpPtr dev, BoxPtr box, DrawablePtr pDrawable);
|
||||
extern _X_EXPORT int
|
||||
rdpClientConSetCursor(rdpPtr dev, rdpClientCon *clientCon,
|
||||
short x, short y, char *cur_data, char *cur_mask);
|
||||
extern _X_EXPORT int
|
||||
rdpClientConSetCursorEx(rdpPtr dev, rdpClientCon *clientCon,
|
||||
short x, short y, char *cur_data,
|
||||
char *cur_mask, int bpp);
|
||||
|
||||
#endif
|
@ -1,94 +0,0 @@
|
||||
/*
|
||||
Copyright 2005-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
composite(alpha blending) calls
|
||||
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
/* this should be before all X11 .h files */
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
|
||||
/* all driver need this */
|
||||
#include <xf86.h>
|
||||
#include <xf86_OSproc.h>
|
||||
|
||||
#include "mipict.h"
|
||||
#include <picture.h>
|
||||
|
||||
#include "rdp.h"
|
||||
#include "rdpDraw.h"
|
||||
#include "rdpClientCon.h"
|
||||
#include "rdpReg.h"
|
||||
#include "rdpComposite.h"
|
||||
|
||||
/******************************************************************************/
|
||||
#define LOG_LEVEL 1
|
||||
#define LLOGLN(_level, _args) \
|
||||
do { if (_level < LOG_LEVEL) { ErrorF _args ; ErrorF("\n"); } } while (0)
|
||||
|
||||
/******************************************************************************/
|
||||
static void
|
||||
rdpCompositeOrg(PictureScreenPtr ps, rdpPtr dev,
|
||||
CARD8 op, PicturePtr pSrc, PicturePtr pMask, PicturePtr pDst,
|
||||
INT16 xSrc, INT16 ySrc, INT16 xMask, INT16 yMask,
|
||||
INT16 xDst, INT16 yDst, CARD16 width, CARD16 height)
|
||||
{
|
||||
ps->Composite = dev->Composite;
|
||||
ps->Composite(op, pSrc, pMask, pDst, xSrc, ySrc, xMask, yMask,
|
||||
xDst, yDst, width, height);
|
||||
ps->Composite = rdpComposite;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
void
|
||||
rdpComposite(CARD8 op, PicturePtr pSrc, PicturePtr pMask, PicturePtr pDst,
|
||||
INT16 xSrc, INT16 ySrc, INT16 xMask, INT16 yMask, INT16 xDst,
|
||||
INT16 yDst, CARD16 width, CARD16 height)
|
||||
{
|
||||
ScreenPtr pScreen;
|
||||
rdpPtr dev;
|
||||
PictureScreenPtr ps;
|
||||
BoxRec box;
|
||||
RegionRec reg;
|
||||
|
||||
LLOGLN(10, ("rdpComposite:"));
|
||||
pScreen = pDst->pDrawable->pScreen;
|
||||
dev = rdpGetDevFromScreen(pScreen);
|
||||
dev->counts.rdpCompositeCallCount++;
|
||||
box.x1 = xDst + pDst->pDrawable->x;
|
||||
box.y1 = yDst + pDst->pDrawable->y;
|
||||
box.x2 = box.x1 + width;
|
||||
box.y2 = box.y1 + height;
|
||||
rdpRegionInit(®, &box, 0);
|
||||
if (pDst->pCompositeClip != NULL)
|
||||
{
|
||||
rdpRegionIntersect(®, pDst->pCompositeClip, ®);
|
||||
}
|
||||
ps = GetPictureScreen(pScreen);
|
||||
/* do original call */
|
||||
rdpCompositeOrg(ps, dev, op, pSrc, pMask, pDst, xSrc, ySrc,
|
||||
xMask, yMask, xDst, yDst, width, height);
|
||||
rdpClientConAddAllReg(dev, ®, pDst->pDrawable);
|
||||
rdpRegionUninit(®);
|
||||
}
|
@ -1,36 +0,0 @@
|
||||
/*
|
||||
Copyright 2005-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
composite(alpha blending) calls
|
||||
|
||||
*/
|
||||
|
||||
#ifndef _RDPCOMPOSITE_H
|
||||
#define _RDPCOMPOSITE_H
|
||||
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
#include <xf86.h>
|
||||
|
||||
extern _X_EXPORT void
|
||||
rdpComposite(CARD8 op, PicturePtr pSrc, PicturePtr pMask, PicturePtr pDst,
|
||||
INT16 xSrc, INT16 ySrc, INT16 xMask, INT16 yMask, INT16 xDst,
|
||||
INT16 yDst, CARD16 width, CARD16 height);
|
||||
|
||||
#endif
|
@ -1,94 +0,0 @@
|
||||
/*
|
||||
Copyright 2005-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
/* this should be before all X11 .h files */
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
|
||||
/* all driver need this */
|
||||
#include <xf86.h>
|
||||
#include <xf86_OSproc.h>
|
||||
|
||||
#include "rdp.h"
|
||||
#include "rdpDraw.h"
|
||||
#include "rdpClientCon.h"
|
||||
#include "rdpReg.h"
|
||||
#include "rdpCopyArea.h"
|
||||
|
||||
#define LOG_LEVEL 1
|
||||
#define LLOGLN(_level, _args) \
|
||||
do { if (_level < LOG_LEVEL) { ErrorF _args ; ErrorF("\n"); } } while (0)
|
||||
|
||||
/******************************************************************************/
|
||||
static RegionPtr
|
||||
rdpCopyAreaOrg(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC,
|
||||
int srcx, int srcy, int w, int h, int dstx, int dsty)
|
||||
{
|
||||
GC_OP_VARS;
|
||||
RegionPtr rv;
|
||||
|
||||
GC_OP_PROLOGUE(pGC);
|
||||
rv = pGC->ops->CopyArea(pSrc, pDst, pGC, srcx, srcy, w, h, dstx, dsty);
|
||||
GC_OP_EPILOGUE(pGC);
|
||||
return rv;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
RegionPtr
|
||||
rdpCopyArea(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC,
|
||||
int srcx, int srcy, int w, int h, int dstx, int dsty)
|
||||
{
|
||||
rdpPtr dev;
|
||||
RegionPtr rv;
|
||||
RegionRec clip_reg;
|
||||
RegionRec reg;
|
||||
int cd;
|
||||
BoxRec box;
|
||||
|
||||
LLOGLN(10, ("rdpCopyArea:"));
|
||||
dev = rdpGetDevFromScreen(pGC->pScreen);
|
||||
dev->counts.rdpCopyAreaCallCount++;
|
||||
box.x1 = dstx + pDst->x;
|
||||
box.y1 = dsty + pDst->y;
|
||||
box.x2 = box.x1 + w;
|
||||
box.y2 = box.y1 + h;
|
||||
rdpRegionInit(®, &box, 0);
|
||||
rdpRegionInit(&clip_reg, NullBox, 0);
|
||||
cd = rdpDrawGetClip(dev, &clip_reg, pDst, pGC);
|
||||
LLOGLN(10, ("rdpCopyArea: cd %d", cd));
|
||||
if (cd == XRDP_CD_CLIP)
|
||||
{
|
||||
rdpRegionIntersect(®, &clip_reg, ®);
|
||||
}
|
||||
/* do original call */
|
||||
rv = rdpCopyAreaOrg(pSrc, pDst, pGC, srcx, srcy, w, h, dstx, dsty);
|
||||
if (cd != XRDP_CD_NODRAW)
|
||||
{
|
||||
rdpClientConAddAllReg(dev, ®, pDst);
|
||||
}
|
||||
rdpRegionUninit(&clip_reg);
|
||||
rdpRegionUninit(®);
|
||||
return rv;
|
||||
}
|
@ -1,33 +0,0 @@
|
||||
/*
|
||||
Copyright 2005-2013 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef __RDPCOPYAREA_H
|
||||
#define __RDPCOPYAREA_H
|
||||
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
#include <xf86.h>
|
||||
|
||||
RegionPtr
|
||||
rdpCopyArea(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC,
|
||||
int srcx, int srcy, int w, int h, int dstx, int dsty);
|
||||
|
||||
#endif
|
@ -1,98 +0,0 @@
|
||||
/*
|
||||
Copyright 2005-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
/* this should be before all X11 .h files */
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
|
||||
/* all driver need this */
|
||||
#include <xf86.h>
|
||||
#include <xf86_OSproc.h>
|
||||
|
||||
#include "rdp.h"
|
||||
#include "rdpDraw.h"
|
||||
#include "rdpClientCon.h"
|
||||
#include "rdpReg.h"
|
||||
#include "rdpCopyPlane.h"
|
||||
|
||||
#define LOG_LEVEL 1
|
||||
#define LLOGLN(_level, _args) \
|
||||
do { if (_level < LOG_LEVEL) { ErrorF _args ; ErrorF("\n"); } } while (0)
|
||||
|
||||
/******************************************************************************/
|
||||
static RegionPtr
|
||||
rdpCopyPlaneOrg(DrawablePtr pSrc, DrawablePtr pDst,
|
||||
GCPtr pGC, int srcx, int srcy, int w, int h,
|
||||
int dstx, int dsty, unsigned long bitPlane)
|
||||
{
|
||||
GC_OP_VARS;
|
||||
RegionPtr rv;
|
||||
|
||||
GC_OP_PROLOGUE(pGC);
|
||||
rv = pGC->ops->CopyPlane(pSrc, pDst, pGC, srcx, srcy,
|
||||
w, h, dstx, dsty, bitPlane);
|
||||
GC_OP_EPILOGUE(pGC);
|
||||
return rv;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
RegionPtr
|
||||
rdpCopyPlane(DrawablePtr pSrc, DrawablePtr pDst,
|
||||
GCPtr pGC, int srcx, int srcy, int w, int h,
|
||||
int dstx, int dsty, unsigned long bitPlane)
|
||||
{
|
||||
RegionPtr rv;
|
||||
rdpPtr dev;
|
||||
RegionRec clip_reg;
|
||||
RegionRec reg;
|
||||
int cd;
|
||||
BoxRec box;
|
||||
|
||||
LLOGLN(10, ("rdpCopyPlane:"));
|
||||
dev = rdpGetDevFromScreen(pGC->pScreen);
|
||||
dev->counts.rdpCopyPlaneCallCount++;
|
||||
box.x1 = pDst->x + dstx;
|
||||
box.y1 = pDst->y + dsty;
|
||||
box.x2 = box.x1 + w;
|
||||
box.y2 = box.x1 + h;
|
||||
rdpRegionInit(®, &box, 0);
|
||||
rdpRegionInit(&clip_reg, NullBox, 0);
|
||||
cd = rdpDrawGetClip(dev, &clip_reg, pDst, pGC);
|
||||
LLOGLN(10, ("rdpCopyPlane: cd %d", cd));
|
||||
if (cd == XRDP_CD_CLIP)
|
||||
{
|
||||
rdpRegionIntersect(®, &clip_reg, ®);
|
||||
}
|
||||
/* do original call */
|
||||
rv = rdpCopyPlaneOrg(pSrc, pDst, pGC, srcx, srcy, w, h,
|
||||
dstx, dsty, bitPlane);
|
||||
if (cd != XRDP_CD_NODRAW)
|
||||
{
|
||||
rdpClientConAddAllReg(dev, ®, pDst);
|
||||
}
|
||||
rdpRegionUninit(&clip_reg);
|
||||
rdpRegionUninit(®);
|
||||
return rv;
|
||||
}
|
@ -1,34 +0,0 @@
|
||||
/*
|
||||
Copyright 2005-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef __RDPCOPYPLANE_H
|
||||
#define __RDPCOPYPLANE_H
|
||||
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
#include <xf86.h>
|
||||
|
||||
RegionPtr
|
||||
rdpCopyPlane(DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable,
|
||||
GCPtr pGC, int srcx, int srcy, int width, int height,
|
||||
int dstx, int dsty, unsigned long bitPlane);
|
||||
|
||||
#endif
|
@ -1,358 +0,0 @@
|
||||
/*
|
||||
Copyright 2005-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
cursor
|
||||
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
/* this should be before all X11 .h files */
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
|
||||
/* all driver need this */
|
||||
#include <xf86.h>
|
||||
#include <xf86_OSproc.h>
|
||||
|
||||
#include <mipointer.h>
|
||||
#include <fb.h>
|
||||
#include <micmap.h>
|
||||
#include <mi.h>
|
||||
#include <cursor.h>
|
||||
#include <cursorstr.h>
|
||||
|
||||
#include <X11/Xarch.h>
|
||||
|
||||
#include "rdp.h"
|
||||
#include "rdpMain.h"
|
||||
#include "rdpDraw.h"
|
||||
#include "rdpClientCon.h"
|
||||
#include "rdpCursor.h"
|
||||
|
||||
#ifndef X_BYTE_ORDER
|
||||
#warning X_BYTE_ORDER not defined
|
||||
#endif
|
||||
|
||||
#if (X_BYTE_ORDER == X_LITTLE_ENDIAN)
|
||||
/* Copied from Xvnc/lib/font/util/utilbitmap.c */
|
||||
static unsigned char g_reverse_byte[0x100] =
|
||||
{
|
||||
0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0,
|
||||
0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0,
|
||||
0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8,
|
||||
0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8,
|
||||
0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4,
|
||||
0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4,
|
||||
0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec,
|
||||
0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc,
|
||||
0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2,
|
||||
0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2,
|
||||
0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea,
|
||||
0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa,
|
||||
0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6,
|
||||
0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6,
|
||||
0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee,
|
||||
0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe,
|
||||
0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1,
|
||||
0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1,
|
||||
0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9,
|
||||
0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9,
|
||||
0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5,
|
||||
0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5,
|
||||
0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed,
|
||||
0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd,
|
||||
0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3,
|
||||
0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3,
|
||||
0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb,
|
||||
0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb,
|
||||
0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7,
|
||||
0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7,
|
||||
0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef,
|
||||
0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff
|
||||
};
|
||||
#endif
|
||||
|
||||
/******************************************************************************/
|
||||
#define LOG_LEVEL 1
|
||||
#define LLOGLN(_level, _args) \
|
||||
do { if (_level < LOG_LEVEL) { ErrorF _args ; ErrorF("\n"); } } while (0)
|
||||
|
||||
/******************************************************************************/
|
||||
Bool
|
||||
rdpSpriteRealizeCursor(DeviceIntPtr pDev, ScreenPtr pScr, CursorPtr pCurs)
|
||||
{
|
||||
LLOGLN(10, ("rdpSpriteRealizeCursor:"));
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
Bool
|
||||
rdpSpriteUnrealizeCursor(DeviceIntPtr pDev, ScreenPtr pScr, CursorPtr pCurs)
|
||||
{
|
||||
LLOGLN(10, ("rdpSpriteUnrealizeCursor:"));
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
static int
|
||||
get_pixel_safe(char *data, int x, int y, int width, int height, int bpp)
|
||||
{
|
||||
int start;
|
||||
int shift;
|
||||
int c;
|
||||
unsigned int *src32;
|
||||
|
||||
if (x < 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (y < 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (x >= width)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (y >= height)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (bpp == 1)
|
||||
{
|
||||
width = (width + 7) / 8;
|
||||
start = (y * width) + x / 8;
|
||||
shift = x % 8;
|
||||
c = (unsigned char)(data[start]);
|
||||
#if (X_BYTE_ORDER == X_LITTLE_ENDIAN)
|
||||
return (g_reverse_byte[c] & (0x80 >> shift)) != 0;
|
||||
#else
|
||||
return (c & (0x80 >> shift)) != 0;
|
||||
#endif
|
||||
}
|
||||
else if (bpp == 32)
|
||||
{
|
||||
src32 = (unsigned int*)data;
|
||||
return src32[y * width + x];
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
static void
|
||||
set_pixel_safe(char *data, int x, int y, int width, int height, int bpp,
|
||||
int pixel)
|
||||
{
|
||||
int start;
|
||||
int shift;
|
||||
unsigned int *dst32;
|
||||
|
||||
if (x < 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (y < 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (x >= width)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (y >= height)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (bpp == 1)
|
||||
{
|
||||
width = (width + 7) / 8;
|
||||
start = (y * width) + x / 8;
|
||||
shift = x % 8;
|
||||
|
||||
if (pixel & 1)
|
||||
{
|
||||
data[start] = data[start] | (0x80 >> shift);
|
||||
}
|
||||
else
|
||||
{
|
||||
data[start] = data[start] & ~(0x80 >> shift);
|
||||
}
|
||||
}
|
||||
else if (bpp == 24)
|
||||
{
|
||||
*(data + (3 * (y * width + x)) + 0) = pixel >> 0;
|
||||
*(data + (3 * (y * width + x)) + 1) = pixel >> 8;
|
||||
*(data + (3 * (y * width + x)) + 2) = pixel >> 16;
|
||||
}
|
||||
else if (bpp == 32)
|
||||
{
|
||||
dst32 = (unsigned int*)data;
|
||||
dst32[y * width + x] = pixel;
|
||||
}
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
void
|
||||
rdpSpriteSetCursorCon(rdpClientCon *clientCon,
|
||||
DeviceIntPtr pDev, ScreenPtr pScr, CursorPtr pCurs,
|
||||
int x, int y)
|
||||
{
|
||||
char cur_data[32 * (32 * 4)];
|
||||
char cur_mask[32 * (32 / 8)];
|
||||
char *mask;
|
||||
char *data;
|
||||
int i;
|
||||
int j;
|
||||
int w;
|
||||
int h;
|
||||
int p;
|
||||
int xhot;
|
||||
int yhot;
|
||||
int paddedRowBytes;
|
||||
int fgcolor;
|
||||
int bgcolor;
|
||||
int bpp;
|
||||
|
||||
LLOGLN(10, ("rdpSpriteSetCursorCon:"));
|
||||
|
||||
w = pCurs->bits->width;
|
||||
h = pCurs->bits->height;
|
||||
if ((pCurs->bits->argb != 0) &&
|
||||
(clientCon->client_info.pointer_flags & 1))
|
||||
{
|
||||
bpp = 32;
|
||||
paddedRowBytes = PixmapBytePad(w, 32);
|
||||
xhot = pCurs->bits->xhot;
|
||||
yhot = pCurs->bits->yhot;
|
||||
data = (char *)(pCurs->bits->argb);
|
||||
memset(cur_data, 0, sizeof(cur_data));
|
||||
memset(cur_mask, 0, sizeof(cur_mask));
|
||||
|
||||
for (j = 0; j < 32; j++)
|
||||
{
|
||||
for (i = 0; i < 32; i++)
|
||||
{
|
||||
p = get_pixel_safe(data, i, j, paddedRowBytes / 4, h, 32);
|
||||
set_pixel_safe(cur_data, i, 31 - j, 32, 32, 32, p);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
bpp = 0;
|
||||
paddedRowBytes = PixmapBytePad(w, 1);
|
||||
xhot = pCurs->bits->xhot;
|
||||
yhot = pCurs->bits->yhot;
|
||||
data = (char *)(pCurs->bits->source);
|
||||
mask = (char *)(pCurs->bits->mask);
|
||||
fgcolor = (((pCurs->foreRed >> 8) & 0xff) << 16) |
|
||||
(((pCurs->foreGreen >> 8) & 0xff) << 8) |
|
||||
((pCurs->foreBlue >> 8) & 0xff);
|
||||
bgcolor = (((pCurs->backRed >> 8) & 0xff) << 16) |
|
||||
(((pCurs->backGreen >> 8) & 0xff) << 8) |
|
||||
((pCurs->backBlue >> 8) & 0xff);
|
||||
memset(cur_data, 0, sizeof(cur_data));
|
||||
memset(cur_mask, 0, sizeof(cur_mask));
|
||||
|
||||
for (j = 0; j < 32; j++)
|
||||
{
|
||||
for (i = 0; i < 32; i++)
|
||||
{
|
||||
p = get_pixel_safe(mask, i, j, paddedRowBytes * 8, h, 1);
|
||||
set_pixel_safe(cur_mask, i, 31 - j, 32, 32, 1, !p);
|
||||
|
||||
if (p != 0)
|
||||
{
|
||||
p = get_pixel_safe(data, i, j, paddedRowBytes * 8, h, 1);
|
||||
p = p ? fgcolor : bgcolor;
|
||||
set_pixel_safe(cur_data, i, 31 - j, 32, 32, 24, p);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
rdpClientConBeginUpdate(clientCon->dev, clientCon);
|
||||
rdpClientConSetCursorEx(clientCon->dev, clientCon, xhot, yhot,
|
||||
cur_data, cur_mask, bpp);
|
||||
rdpClientConEndUpdate(clientCon->dev, clientCon);
|
||||
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
void
|
||||
rdpSpriteSetCursor(DeviceIntPtr pDev, ScreenPtr pScr, CursorPtr pCurs,
|
||||
int x, int y)
|
||||
{
|
||||
rdpPtr dev;
|
||||
rdpClientCon *clientCon;
|
||||
|
||||
LLOGLN(10, ("rdpSpriteSetCursor:"));
|
||||
if (pCurs == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (pCurs->bits == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
dev = rdpGetDevFromScreen(pScr);
|
||||
clientCon = dev->clientConHead;
|
||||
while (clientCon != NULL)
|
||||
{
|
||||
rdpSpriteSetCursorCon(clientCon, pDev, pScr, pCurs, x, y);
|
||||
clientCon = clientCon->next;
|
||||
}
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
void
|
||||
rdpSpriteMoveCursor(DeviceIntPtr pDev, ScreenPtr pScr, int x, int y)
|
||||
{
|
||||
LLOGLN(10, ("rdpSpriteMoveCursor:"));
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
Bool
|
||||
rdpSpriteDeviceCursorInitialize(DeviceIntPtr pDev, ScreenPtr pScr)
|
||||
{
|
||||
LLOGLN(10, ("rdpSpriteDeviceCursorInitialize:"));
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
void
|
||||
rdpSpriteDeviceCursorCleanup(DeviceIntPtr pDev, ScreenPtr pScr)
|
||||
{
|
||||
LLOGLN(10, ("rdpSpriteDeviceCursorCleanup:"));
|
||||
xorgxrdpDownDown(pScr);
|
||||
}
|
@ -1,45 +0,0 @@
|
||||
/*
|
||||
Copyright 2005-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
misc draw calls
|
||||
|
||||
*/
|
||||
|
||||
#ifndef __RDPCURSOR_H
|
||||
#define __RDPCURSOR_H
|
||||
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
#include <xf86.h>
|
||||
|
||||
extern _X_EXPORT Bool
|
||||
rdpSpriteRealizeCursor(DeviceIntPtr pDev, ScreenPtr pScr, CursorPtr pCurs);
|
||||
extern _X_EXPORT Bool
|
||||
rdpSpriteUnrealizeCursor(DeviceIntPtr pDev, ScreenPtr pScr, CursorPtr pCurs);
|
||||
extern _X_EXPORT void
|
||||
rdpSpriteSetCursor(DeviceIntPtr pDev, ScreenPtr pScr, CursorPtr pCurs,
|
||||
int x, int y);
|
||||
extern _X_EXPORT void
|
||||
rdpSpriteMoveCursor(DeviceIntPtr pDev, ScreenPtr pScr, int x, int y);
|
||||
extern _X_EXPORT Bool
|
||||
rdpSpriteDeviceCursorInitialize(DeviceIntPtr pDev, ScreenPtr pScr);
|
||||
extern _X_EXPORT void
|
||||
rdpSpriteDeviceCursorCleanup(DeviceIntPtr pDev, ScreenPtr pScr);
|
||||
|
||||
#endif
|
@ -1,411 +0,0 @@
|
||||
/*
|
||||
Copyright 2005-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
misc draw calls
|
||||
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
/* this should be before all X11 .h files */
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
|
||||
/* all driver need this */
|
||||
#include <xf86.h>
|
||||
#include <xf86_OSproc.h>
|
||||
|
||||
#include <mipointer.h>
|
||||
#include <fb.h>
|
||||
#include <micmap.h>
|
||||
#include <mi.h>
|
||||
#include <dixfontstr.h>
|
||||
|
||||
#include "rdp.h"
|
||||
#include "rdpDraw.h"
|
||||
#include "rdpClientCon.h"
|
||||
#include "rdpMisc.h"
|
||||
#include "rdpGlyphs.h"
|
||||
#include "rdpReg.h"
|
||||
|
||||
#define LOG_LEVEL 1
|
||||
#define LLOGLN(_level, _args) \
|
||||
do { if (_level < LOG_LEVEL) { ErrorF _args ; ErrorF("\n"); } } while (0)
|
||||
|
||||
/******************************************************************************/
|
||||
/* return 0, draw nothing */
|
||||
/* return 1, draw with no clip */
|
||||
/* return 2, draw using clip */
|
||||
int
|
||||
rdpDrawGetClip(rdpPtr dev, RegionPtr pRegion, DrawablePtr pDrawable, GCPtr pGC)
|
||||
{
|
||||
WindowPtr pWindow;
|
||||
RegionPtr temp;
|
||||
BoxRec box;
|
||||
int rv;
|
||||
|
||||
rv = 0;
|
||||
|
||||
if (pDrawable->type == DRAWABLE_PIXMAP)
|
||||
{
|
||||
switch (pGC->clientClipType)
|
||||
{
|
||||
case CT_NONE:
|
||||
rv = 1;
|
||||
break;
|
||||
case CT_REGION:
|
||||
rv = 2;
|
||||
rdpRegionCopy(pRegion, pGC->clientClip);
|
||||
break;
|
||||
default:
|
||||
LLOGLN(0, ("rdpDrawGetClip: unimp clip type %d",
|
||||
pGC->clientClipType));
|
||||
break;
|
||||
}
|
||||
|
||||
if (rv == 2) /* check if the clip is the entire pixmap */
|
||||
{
|
||||
box.x1 = 0;
|
||||
box.y1 = 0;
|
||||
box.x2 = pDrawable->width;
|
||||
box.y2 = pDrawable->height;
|
||||
|
||||
if (rdpRegionContainsRect(pRegion, &box) == rgnIN)
|
||||
{
|
||||
rv = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (pDrawable->type == DRAWABLE_WINDOW)
|
||||
{
|
||||
pWindow = (WindowPtr)pDrawable;
|
||||
|
||||
if (pWindow->viewable)
|
||||
{
|
||||
if (pGC->subWindowMode == IncludeInferiors)
|
||||
{
|
||||
temp = &pWindow->borderClip;
|
||||
}
|
||||
else
|
||||
{
|
||||
temp = &pWindow->clipList;
|
||||
}
|
||||
|
||||
if (rdpRegionNotEmpty(temp))
|
||||
{
|
||||
switch (pGC->clientClipType)
|
||||
{
|
||||
case CT_NONE:
|
||||
rv = 2;
|
||||
rdpRegionCopy(pRegion, temp);
|
||||
break;
|
||||
case CT_REGION:
|
||||
rv = 2;
|
||||
rdpRegionCopy(pRegion, pGC->clientClip);
|
||||
rdpRegionTranslate(pRegion,
|
||||
pDrawable->x + pGC->clipOrg.x,
|
||||
pDrawable->y + pGC->clipOrg.y);
|
||||
rdpRegionIntersect(pRegion, pRegion, temp);
|
||||
break;
|
||||
default:
|
||||
LLOGLN(0, ("rdpDrawGetClip: unimp clip type %d",
|
||||
pGC->clientClipType));
|
||||
break;
|
||||
}
|
||||
|
||||
if (rv == 2) /* check if the clip is the entire screen */
|
||||
{
|
||||
box.x1 = 0;
|
||||
box.y1 = 0;
|
||||
box.x2 = dev->width;
|
||||
box.y2 = dev->height;
|
||||
|
||||
if (rdpRegionContainsRect(pRegion, &box) == rgnIN)
|
||||
{
|
||||
rv = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
void
|
||||
GetTextBoundingBox(DrawablePtr pDrawable, FontPtr font, int x, int y,
|
||||
int n, BoxPtr pbox)
|
||||
{
|
||||
int maxAscent;
|
||||
int maxDescent;
|
||||
int maxCharWidth;
|
||||
|
||||
if (FONTASCENT(font) > FONTMAXBOUNDS(font, ascent))
|
||||
{
|
||||
maxAscent = FONTASCENT(font);
|
||||
}
|
||||
else
|
||||
{
|
||||
maxAscent = FONTMAXBOUNDS(font, ascent);
|
||||
}
|
||||
|
||||
if (FONTDESCENT(font) > FONTMAXBOUNDS(font, descent))
|
||||
{
|
||||
maxDescent = FONTDESCENT(font);
|
||||
}
|
||||
else
|
||||
{
|
||||
maxDescent = FONTMAXBOUNDS(font, descent);
|
||||
}
|
||||
|
||||
if (FONTMAXBOUNDS(font, rightSideBearing) >
|
||||
FONTMAXBOUNDS(font, characterWidth))
|
||||
{
|
||||
maxCharWidth = FONTMAXBOUNDS(font, rightSideBearing);
|
||||
}
|
||||
else
|
||||
{
|
||||
maxCharWidth = FONTMAXBOUNDS(font, characterWidth);
|
||||
}
|
||||
|
||||
pbox->x1 = pDrawable->x + x;
|
||||
pbox->y1 = pDrawable->y + y - maxAscent;
|
||||
pbox->x2 = pbox->x1 + maxCharWidth * n;
|
||||
pbox->y2 = pbox->y1 + maxAscent + maxDescent;
|
||||
|
||||
if (FONTMINBOUNDS(font, leftSideBearing) < 0)
|
||||
{
|
||||
pbox->x1 += FONTMINBOUNDS(font, leftSideBearing);
|
||||
}
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
int
|
||||
rdpDrawItemAdd(rdpPtr dev, rdpPixmapRec *priv, struct rdp_draw_item *di)
|
||||
{
|
||||
priv->is_alpha_dirty_not = FALSE;
|
||||
|
||||
if (priv->draw_item_tail == NULL)
|
||||
{
|
||||
priv->draw_item_tail = di;
|
||||
priv->draw_item_head = di;
|
||||
}
|
||||
else
|
||||
{
|
||||
di->prev = priv->draw_item_tail;
|
||||
priv->draw_item_tail->next = di;
|
||||
priv->draw_item_tail = di;
|
||||
}
|
||||
|
||||
if (priv == &(dev->screenPriv))
|
||||
{
|
||||
rdpClientConScheduleDeferredUpdate(dev);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
int
|
||||
rdpDrawItemRemove(rdpPtr dev, rdpPixmapRec *priv, struct rdp_draw_item *di)
|
||||
{
|
||||
if (di->prev != NULL)
|
||||
{
|
||||
di->prev->next = di->next;
|
||||
}
|
||||
|
||||
if (di->next != NULL)
|
||||
{
|
||||
di->next->prev = di->prev;
|
||||
}
|
||||
|
||||
if (priv->draw_item_head == di)
|
||||
{
|
||||
priv->draw_item_head = di->next;
|
||||
}
|
||||
|
||||
if (priv->draw_item_tail == di)
|
||||
{
|
||||
priv->draw_item_tail = di->prev;
|
||||
}
|
||||
|
||||
if (di->type == RDI_LINE)
|
||||
{
|
||||
if (di->u.line.segs != NULL)
|
||||
{
|
||||
g_free(di->u.line.segs);
|
||||
}
|
||||
}
|
||||
|
||||
if (di->type == RDI_TEXT)
|
||||
{
|
||||
rdpGlyphDeleteRdpText(di->u.text.rtext);
|
||||
}
|
||||
|
||||
rdpRegionDestroy(di->reg);
|
||||
g_free(di);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
int
|
||||
rdpDrawItemRemoveAll(rdpPtr dev, rdpPixmapRec *priv)
|
||||
{
|
||||
struct rdp_draw_item *di;
|
||||
|
||||
di = priv->draw_item_head;
|
||||
|
||||
while (di != NULL)
|
||||
{
|
||||
rdpDrawItemRemove(dev, priv, di);
|
||||
di = priv->draw_item_head;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
void
|
||||
rdpCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr pOldRegion)
|
||||
{
|
||||
ScreenPtr pScreen;
|
||||
rdpPtr dev;
|
||||
RegionRec reg;
|
||||
RegionRec clip;
|
||||
int dx;
|
||||
int dy;
|
||||
int num_clip_rects;
|
||||
int num_reg_rects;
|
||||
BoxPtr box;
|
||||
BoxRec box1;
|
||||
|
||||
LLOGLN(10, ("rdpCopyWindow:"));
|
||||
pScreen = pWin->drawable.pScreen;
|
||||
dev = rdpGetDevFromScreen(pScreen);
|
||||
dev->counts.rdpCopyWindowCallCount++;
|
||||
|
||||
rdpRegionInit(®, NullBox, 0);
|
||||
rdpRegionCopy(®, pOldRegion);
|
||||
rdpRegionInit(&clip, NullBox, 0);
|
||||
rdpRegionCopy(&clip, &pWin->borderClip);
|
||||
dx = pWin->drawable.x - ptOldOrg.x;
|
||||
dy = pWin->drawable.y - ptOldOrg.y;
|
||||
|
||||
dev->pScreen->CopyWindow = dev->CopyWindow;
|
||||
dev->pScreen->CopyWindow(pWin, ptOldOrg, pOldRegion);
|
||||
dev->pScreen->CopyWindow = rdpCopyWindow;
|
||||
|
||||
num_clip_rects = REGION_NUM_RECTS(&clip);
|
||||
num_reg_rects = REGION_NUM_RECTS(®);
|
||||
|
||||
if ((num_clip_rects == 0) || (num_reg_rects == 0))
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((num_clip_rects > 16) || (num_reg_rects > 16))
|
||||
{
|
||||
LLOGLN(10, ("rdpCopyWindow: big list"));
|
||||
box = rdpRegionExtents(®);
|
||||
box1 = *box;
|
||||
box1.x1 += dx;
|
||||
box1.y1 += dy;
|
||||
box1.x2 += dx;
|
||||
box1.y2 += dy;
|
||||
rdpClientConAddAllBox(dev, &box1, &(pWin->drawable));
|
||||
}
|
||||
else
|
||||
{
|
||||
rdpRegionTranslate(®, dx, dy);
|
||||
rdpRegionIntersect(®, ®, &clip);
|
||||
rdpClientConAddAllReg(dev, ®, &(pWin->drawable));
|
||||
}
|
||||
}
|
||||
rdpRegionUninit(®);
|
||||
rdpRegionUninit(&clip);
|
||||
}
|
||||
|
||||
#if XRDP_CLOSESCR == 1 /* before v1.13 */
|
||||
|
||||
/*****************************************************************************/
|
||||
Bool
|
||||
rdpCloseScreen(int index, ScreenPtr pScreen)
|
||||
{
|
||||
rdpPtr dev;
|
||||
Bool rv;
|
||||
|
||||
LLOGLN(0, ("rdpCloseScreen:"));
|
||||
dev = rdpGetDevFromScreen(pScreen);
|
||||
dev->pScreen->CloseScreen = dev->CloseScreen;
|
||||
rv = dev->pScreen->CloseScreen(index, pScreen);
|
||||
dev->pScreen->CloseScreen = rdpCloseScreen;
|
||||
return rv;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
/*****************************************************************************/
|
||||
Bool
|
||||
rdpCloseScreen(ScreenPtr pScreen)
|
||||
{
|
||||
rdpPtr dev;
|
||||
Bool rv;
|
||||
|
||||
LLOGLN(0, ("rdpCloseScreen:"));
|
||||
dev = rdpGetDevFromScreen(pScreen);
|
||||
dev->pScreen->CloseScreen = dev->CloseScreen;
|
||||
rv = dev->pScreen->CloseScreen(pScreen);
|
||||
dev->pScreen->CloseScreen = rdpCloseScreen;
|
||||
return rv;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/******************************************************************************/
|
||||
WindowPtr
|
||||
rdpGetRootWindowPtr(ScreenPtr pScreen)
|
||||
{
|
||||
#if XORG_VERSION_CURRENT < XORG_VERSION_NUMERIC(1, 9, 0, 0, 0)
|
||||
return WindowTable[pScreen->myNum]; /* in globals.c */
|
||||
#else
|
||||
return pScreen->root;
|
||||
#endif
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
rdpPtr
|
||||
rdpGetDevFromScreen(ScreenPtr pScreen)
|
||||
{
|
||||
ScrnInfoPtr pScrn;
|
||||
rdpPtr dev;
|
||||
|
||||
if (pScreen == NULL)
|
||||
{
|
||||
pScrn = xf86Screens[0];
|
||||
}
|
||||
else
|
||||
{
|
||||
pScrn = xf86Screens[pScreen->myNum];
|
||||
}
|
||||
dev = XRDPPTR(pScrn);
|
||||
return dev;
|
||||
}
|
@ -1,93 +0,0 @@
|
||||
/*
|
||||
Copyright 2005-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
misc draw calls
|
||||
|
||||
*/
|
||||
|
||||
#ifndef __RDPDRAW_H
|
||||
#define __RDPDRAW_H
|
||||
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
#include <xf86.h>
|
||||
|
||||
#if XORG_VERSION_CURRENT < XORG_VERSION_NUMERIC(1, 13, 0, 0, 0)
|
||||
/* 1.1, 1.2, 1.3, 1.4 1.5, 1.6, 1.7, 1.8, 1.9, 1.10, 1.11, 1.12 */
|
||||
#define XRDP_CLOSESCR 1
|
||||
#else
|
||||
/* 1.13 */
|
||||
#define XRDP_CLOSESCR 2
|
||||
#endif
|
||||
|
||||
/* true if drawable is window or pixmap is screen */
|
||||
#define XRDP_DRAWABLE_IS_VISIBLE(_dev, _drw) \
|
||||
(((_drw)->type == DRAWABLE_WINDOW && ((WindowPtr)(_drw))->viewable) || \
|
||||
((_drw)->type == DRAWABLE_PIXMAP && \
|
||||
((PixmapPtr)(_drw))->devPrivate.ptr == (_dev)->pfbMemory))
|
||||
|
||||
/******************************************************************************/
|
||||
#define GC_OP_VARS rdpPtr dev; rdpGCPtr priv; GCFuncs *oldFuncs
|
||||
|
||||
/******************************************************************************/
|
||||
#define GC_OP_PROLOGUE(_pGC) \
|
||||
do { \
|
||||
dev = rdpGetDevFromScreen((_pGC)->pScreen); \
|
||||
priv = (rdpGCPtr)rdpGetGCPrivate(_pGC, dev->privateKeyRecGC); \
|
||||
oldFuncs = (_pGC)->funcs; \
|
||||
(_pGC)->funcs = priv->funcs; \
|
||||
(_pGC)->ops = priv->ops; \
|
||||
} while (0)
|
||||
|
||||
/******************************************************************************/
|
||||
#define GC_OP_EPILOGUE(_pGC) \
|
||||
do { \
|
||||
priv->ops = (_pGC)->ops; \
|
||||
(_pGC)->funcs = oldFuncs; \
|
||||
(_pGC)->ops = &g_rdpGCOps; \
|
||||
} while (0)
|
||||
|
||||
extern GCOps g_rdpGCOps; /* in rdpGC.c */
|
||||
|
||||
extern _X_EXPORT int
|
||||
rdpDrawGetClip(rdpPtr dev, RegionPtr pRegion, DrawablePtr pDrawable, GCPtr pGC);
|
||||
extern _X_EXPORT void
|
||||
GetTextBoundingBox(DrawablePtr pDrawable, FontPtr font, int x, int y,
|
||||
int n, BoxPtr pbox);
|
||||
extern _X_EXPORT int
|
||||
rdpDrawItemAdd(rdpPtr dev, rdpPixmapRec *priv, struct rdp_draw_item *di);
|
||||
extern _X_EXPORT int
|
||||
rdpDrawItemRemove(rdpPtr dev, rdpPixmapRec *priv, struct rdp_draw_item *di);
|
||||
extern _X_EXPORT int
|
||||
rdpDrawItemRemoveAll(rdpPtr dev, rdpPixmapRec *priv);
|
||||
extern _X_EXPORT void
|
||||
rdpCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr pOldRegion);
|
||||
#if XRDP_CLOSESCR == 1
|
||||
extern _X_EXPORT Bool
|
||||
rdpCloseScreen(int index, ScreenPtr pScreen);
|
||||
#else
|
||||
extern _X_EXPORT Bool
|
||||
rdpCloseScreen(ScreenPtr pScreen);
|
||||
#endif
|
||||
extern _X_EXPORT WindowPtr
|
||||
rdpGetRootWindowPtr(ScreenPtr pScreen);
|
||||
extern _X_EXPORT rdpPtr
|
||||
rdpGetDevFromScreen(ScreenPtr pScreen);
|
||||
|
||||
#endif
|
@ -1,119 +0,0 @@
|
||||
/*
|
||||
Copyright 2005-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
/* this should be before all X11 .h files */
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
|
||||
/* all driver need this */
|
||||
#include <xf86.h>
|
||||
#include <xf86_OSproc.h>
|
||||
|
||||
#include "rdp.h"
|
||||
#include "rdpDraw.h"
|
||||
#include "rdpClientCon.h"
|
||||
#include "rdpReg.h"
|
||||
#include "rdpFillPolygon.h"
|
||||
|
||||
#define LOG_LEVEL 1
|
||||
#define LLOGLN(_level, _args) \
|
||||
do { if (_level < LOG_LEVEL) { ErrorF _args ; ErrorF("\n"); } } while (0)
|
||||
|
||||
/******************************************************************************/
|
||||
void
|
||||
rdpFillPolygonOrg(DrawablePtr pDrawable, GCPtr pGC,
|
||||
int shape, int mode, int count,
|
||||
DDXPointPtr pPts)
|
||||
{
|
||||
GC_OP_VARS;
|
||||
|
||||
GC_OP_PROLOGUE(pGC);
|
||||
pGC->ops->FillPolygon(pDrawable, pGC, shape, mode, count, pPts);
|
||||
GC_OP_EPILOGUE(pGC);
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
void
|
||||
rdpFillPolygon(DrawablePtr pDrawable, GCPtr pGC,
|
||||
int shape, int mode, int count,
|
||||
DDXPointPtr pPts)
|
||||
{
|
||||
rdpPtr dev;
|
||||
RegionRec clip_reg;
|
||||
RegionRec reg;
|
||||
int cd;
|
||||
int maxx;
|
||||
int maxy;
|
||||
int minx;
|
||||
int miny;
|
||||
int index;
|
||||
int x;
|
||||
int y;
|
||||
BoxRec box;
|
||||
|
||||
LLOGLN(10, ("rdpFillPolygon:"));
|
||||
dev = rdpGetDevFromScreen(pGC->pScreen);
|
||||
dev->counts.rdpFillPolygonCallCount++;
|
||||
box.x1 = 0;
|
||||
box.y1 = 0;
|
||||
box.x2 = 0;
|
||||
box.y2 = 0;
|
||||
if (count > 0)
|
||||
{
|
||||
maxx = pPts[0].x;
|
||||
maxy = pPts[0].y;
|
||||
minx = maxx;
|
||||
miny = maxy;
|
||||
for (index = 1; index < count; index++)
|
||||
{
|
||||
x = pPts[index].x;
|
||||
y = pPts[index].y;
|
||||
maxx = RDPMAX(x, maxx);
|
||||
minx = RDPMIN(x, minx);
|
||||
maxy = RDPMAX(y, maxy);
|
||||
miny = RDPMIN(y, miny);
|
||||
}
|
||||
box.x1 = pDrawable->x + minx;
|
||||
box.y1 = pDrawable->y + miny;
|
||||
box.x2 = pDrawable->x + maxx + 1;
|
||||
box.y2 = pDrawable->y + maxy + 1;
|
||||
}
|
||||
rdpRegionInit(®, &box, 0);
|
||||
rdpRegionInit(&clip_reg, NullBox, 0);
|
||||
cd = rdpDrawGetClip(dev, &clip_reg, pDrawable, pGC);
|
||||
LLOGLN(10, ("rdpFillPolygon: cd %d", cd));
|
||||
if (cd == XRDP_CD_CLIP)
|
||||
{
|
||||
rdpRegionIntersect(®, &clip_reg, ®);
|
||||
}
|
||||
/* do original call */
|
||||
rdpFillPolygonOrg(pDrawable, pGC, shape, mode, count, pPts);
|
||||
if (cd != XRDP_CD_NODRAW)
|
||||
{
|
||||
rdpClientConAddAllReg(dev, ®, pDrawable);
|
||||
}
|
||||
rdpRegionUninit(&clip_reg);
|
||||
rdpRegionUninit(®);
|
||||
}
|
@ -1,34 +0,0 @@
|
||||
/*
|
||||
Copyright 2005-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef __RDPFILLPOLYGON_H
|
||||
#define __RDPFILLPOLYGON_H
|
||||
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
#include <xf86.h>
|
||||
|
||||
extern _X_EXPORT void
|
||||
rdpFillPolygon(DrawablePtr pDrawable, GCPtr pGC,
|
||||
int shape, int mode, int count,
|
||||
DDXPointPtr pPts);
|
||||
|
||||
#endif
|
@ -1,62 +0,0 @@
|
||||
/*
|
||||
Copyright 2005-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
/* this should be before all X11 .h files */
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
|
||||
/* all driver need this */
|
||||
#include <xf86.h>
|
||||
#include <xf86_OSproc.h>
|
||||
|
||||
#include "rdp.h"
|
||||
#include "rdpDraw.h"
|
||||
#include "rdpFillSpans.h"
|
||||
|
||||
#define LOG_LEVEL 1
|
||||
#define LLOGLN(_level, _args) \
|
||||
do { if (_level < LOG_LEVEL) { ErrorF _args ; ErrorF("\n"); } } while (0)
|
||||
|
||||
/******************************************************************************/
|
||||
static void
|
||||
rdpFillSpansOrg(DrawablePtr pDrawable, GCPtr pGC, int nInit,
|
||||
DDXPointPtr pptInit, int *pwidthInit, int fSorted)
|
||||
{
|
||||
GC_OP_VARS;
|
||||
|
||||
GC_OP_PROLOGUE(pGC);
|
||||
pGC->ops->FillSpans(pDrawable, pGC, nInit, pptInit, pwidthInit, fSorted);
|
||||
GC_OP_EPILOGUE(pGC);
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
void
|
||||
rdpFillSpans(DrawablePtr pDrawable, GCPtr pGC, int nInit,
|
||||
DDXPointPtr pptInit, int *pwidthInit, int fSorted)
|
||||
{
|
||||
LLOGLN(0, ("rdpFillSpans:"));
|
||||
/* do original call */
|
||||
rdpFillSpansOrg(pDrawable, pGC, nInit, pptInit, pwidthInit, fSorted);
|
||||
}
|
@ -1,33 +0,0 @@
|
||||
/*
|
||||
Copyright 2005-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef __RDPFILLSPANS_H
|
||||
#define __RDPFILLSPANS_H
|
||||
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
#include <xf86.h>
|
||||
|
||||
void
|
||||
rdpFillSpans(DrawablePtr pDrawable, GCPtr pGC, int nInit,
|
||||
DDXPointPtr pptInit, int* pwidthInit, int fSorted);
|
||||
|
||||
#endif
|
@ -1,235 +0,0 @@
|
||||
/*
|
||||
Copyright 2005-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
GC related calls
|
||||
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
/* this should be before all X11 .h files */
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
|
||||
/* all driver need this */
|
||||
#include <xf86.h>
|
||||
#include <xf86_OSproc.h>
|
||||
|
||||
#include <mipointer.h>
|
||||
#include <fb.h>
|
||||
#include <micmap.h>
|
||||
#include <mi.h>
|
||||
|
||||
#include "rdp.h"
|
||||
#include "rdpFillSpans.h"
|
||||
#include "rdpSetSpans.h"
|
||||
#include "rdpPutImage.h"
|
||||
#include "rdpCopyArea.h"
|
||||
#include "rdpCopyPlane.h"
|
||||
#include "rdpPolyPoint.h"
|
||||
#include "rdpPolylines.h"
|
||||
#include "rdpPolySegment.h"
|
||||
#include "rdpPolyRectangle.h"
|
||||
#include "rdpPolyArc.h"
|
||||
#include "rdpFillPolygon.h"
|
||||
#include "rdpPolyFillRect.h"
|
||||
#include "rdpPolyFillArc.h"
|
||||
#include "rdpPolyText8.h"
|
||||
#include "rdpPolyText16.h"
|
||||
#include "rdpImageText8.h"
|
||||
#include "rdpImageText16.h"
|
||||
#include "rdpImageGlyphBlt.h"
|
||||
#include "rdpPolyGlyphBlt.h"
|
||||
#include "rdpPushPixels.h"
|
||||
#include "rdpDraw.h"
|
||||
#include "rdpGC.h"
|
||||
|
||||
/******************************************************************************/
|
||||
#define LOG_LEVEL 1
|
||||
#define LLOGLN(_level, _args) \
|
||||
do { if (_level < LOG_LEVEL) { ErrorF _args ; ErrorF("\n"); } } while (0)
|
||||
|
||||
/******************************************************************************/
|
||||
#define GC_FUNC_VARS rdpPtr dev; rdpGCPtr priv;
|
||||
|
||||
/******************************************************************************/
|
||||
#define GC_FUNC_PROLOGUE(_pGC) \
|
||||
do { \
|
||||
dev = rdpGetDevFromScreen((_pGC)->pScreen); \
|
||||
priv = (rdpGCPtr)rdpGetGCPrivate(_pGC, dev->privateKeyRecGC); \
|
||||
(_pGC)->funcs = priv->funcs; \
|
||||
if (priv->ops != 0) \
|
||||
{ \
|
||||
(_pGC)->ops = priv->ops; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
/******************************************************************************/
|
||||
#define GC_FUNC_EPILOGUE(_pGC) \
|
||||
do { \
|
||||
priv->funcs = (_pGC)->funcs; \
|
||||
(_pGC)->funcs = &g_rdpGCFuncs; \
|
||||
if (priv->ops != 0) \
|
||||
{ \
|
||||
priv->ops = (_pGC)->ops; \
|
||||
(_pGC)->ops = &g_rdpGCOps; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
static void
|
||||
rdpValidateGC(GCPtr pGC, unsigned long changes, DrawablePtr d);
|
||||
static void
|
||||
rdpChangeGC(GCPtr pGC, unsigned long mask);
|
||||
static void
|
||||
rdpCopyGC(GCPtr src, unsigned long mask, GCPtr dst);
|
||||
static void
|
||||
rdpDestroyGC(GCPtr pGC);
|
||||
static void
|
||||
rdpChangeClip(GCPtr pGC, int type, pointer pValue, int nrects);
|
||||
static void
|
||||
rdpDestroyClip(GCPtr pGC);
|
||||
static void
|
||||
rdpCopyClip(GCPtr dst, GCPtr src);
|
||||
|
||||
GCFuncs g_rdpGCFuncs =
|
||||
{
|
||||
rdpValidateGC, rdpChangeGC, rdpCopyGC, rdpDestroyGC, rdpChangeClip,
|
||||
rdpDestroyClip, rdpCopyClip
|
||||
};
|
||||
|
||||
GCOps g_rdpGCOps =
|
||||
{
|
||||
rdpFillSpans, rdpSetSpans, rdpPutImage, rdpCopyArea, rdpCopyPlane,
|
||||
rdpPolyPoint, rdpPolylines, rdpPolySegment, rdpPolyRectangle,
|
||||
rdpPolyArc, rdpFillPolygon, rdpPolyFillRect, rdpPolyFillArc,
|
||||
rdpPolyText8, rdpPolyText16, rdpImageText8, rdpImageText16,
|
||||
rdpImageGlyphBlt, rdpPolyGlyphBlt, rdpPushPixels
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
static void
|
||||
rdpValidateGC(GCPtr pGC, unsigned long changes, DrawablePtr d)
|
||||
{
|
||||
GC_FUNC_VARS;
|
||||
|
||||
LLOGLN(10, ("rdpValidateGC:"));
|
||||
GC_FUNC_PROLOGUE(pGC);
|
||||
pGC->funcs->ValidateGC(pGC, changes, d);
|
||||
priv->ops = pGC->ops;
|
||||
GC_FUNC_EPILOGUE(pGC);
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
static void
|
||||
rdpChangeGC(GCPtr pGC, unsigned long mask)
|
||||
{
|
||||
GC_FUNC_VARS;
|
||||
|
||||
LLOGLN(10, ("rdpChangeGC:"));
|
||||
GC_FUNC_PROLOGUE(pGC);
|
||||
pGC->funcs->ChangeGC(pGC, mask);
|
||||
GC_FUNC_EPILOGUE(pGC);
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
static void
|
||||
rdpCopyGC(GCPtr src, unsigned long mask, GCPtr dst)
|
||||
{
|
||||
GC_FUNC_VARS;
|
||||
|
||||
LLOGLN(10, ("rdpCopyGC:"));
|
||||
GC_FUNC_PROLOGUE(dst);
|
||||
dst->funcs->CopyGC(src, mask, dst);
|
||||
GC_FUNC_EPILOGUE(dst);
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
static void
|
||||
rdpDestroyGC(GCPtr pGC)
|
||||
{
|
||||
GC_FUNC_VARS;
|
||||
|
||||
LLOGLN(10, ("rdpDestroyGC:"));
|
||||
GC_FUNC_PROLOGUE(pGC);
|
||||
pGC->funcs->DestroyGC(pGC);
|
||||
GC_FUNC_EPILOGUE(pGC);
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
static void
|
||||
rdpChangeClip(GCPtr pGC, int type, pointer pValue, int nrects)
|
||||
{
|
||||
GC_FUNC_VARS;
|
||||
|
||||
LLOGLN(10, ("rdpChangeClip:"));
|
||||
GC_FUNC_PROLOGUE(pGC);
|
||||
pGC->funcs->ChangeClip(pGC, type, pValue, nrects);
|
||||
GC_FUNC_EPILOGUE(pGC);
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
static void
|
||||
rdpDestroyClip(GCPtr pGC)
|
||||
{
|
||||
GC_FUNC_VARS;
|
||||
|
||||
LLOGLN(10, ("rdpDestroyClip:"));
|
||||
GC_FUNC_PROLOGUE(pGC);
|
||||
pGC->funcs->DestroyClip(pGC);
|
||||
GC_FUNC_EPILOGUE(pGC);
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
static void
|
||||
rdpCopyClip(GCPtr dst, GCPtr src)
|
||||
{
|
||||
GC_FUNC_VARS;
|
||||
|
||||
LLOGLN(10, ("rdpCopyClip:"));
|
||||
GC_FUNC_PROLOGUE(dst);
|
||||
dst->funcs->CopyClip(dst, src);
|
||||
GC_FUNC_EPILOGUE(dst);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
Bool
|
||||
rdpCreateGC(GCPtr pGC)
|
||||
{
|
||||
Bool rv;
|
||||
rdpPtr dev;
|
||||
ScreenPtr pScreen;
|
||||
rdpGCPtr priv;
|
||||
|
||||
LLOGLN(10, ("rdpCreateGC:"));
|
||||
pScreen = pGC->pScreen;
|
||||
dev = rdpGetDevFromScreen(pScreen);
|
||||
priv = (rdpGCPtr)rdpGetGCPrivate(pGC, dev->privateKeyRecGC);
|
||||
pScreen->CreateGC = dev->CreateGC;
|
||||
rv = pScreen->CreateGC(pGC);
|
||||
if (rv)
|
||||
{
|
||||
priv->funcs = pGC->funcs;
|
||||
priv->ops = 0;
|
||||
pGC->funcs = &g_rdpGCFuncs;
|
||||
}
|
||||
pScreen->CreateGC = rdpCreateGC;
|
||||
return rv;
|
||||
}
|
@ -1,34 +0,0 @@
|
||||
/*
|
||||
Copyright 2005-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
GC related calls
|
||||
|
||||
*/
|
||||
|
||||
#ifndef _RDPGC_H
|
||||
#define _RDPGC_H
|
||||
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
#include <xf86.h>
|
||||
|
||||
extern _X_EXPORT Bool
|
||||
rdpCreateGC(GCPtr pGC);
|
||||
|
||||
#endif
|
@ -1,105 +0,0 @@
|
||||
/*
|
||||
Copyright 2012-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
gylph(font) calls
|
||||
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
/* this should be before all X11 .h files */
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
|
||||
/* all driver need this */
|
||||
#include <xf86.h>
|
||||
#include <xf86_OSproc.h>
|
||||
|
||||
#include <picture.h>
|
||||
#include <glyphstr.h>
|
||||
|
||||
#include "rdp.h"
|
||||
#include "rdpGlyphs.h"
|
||||
#include "rdpDraw.h"
|
||||
#include "rdpMisc.h"
|
||||
#include "rdpReg.h"
|
||||
|
||||
/******************************************************************************/
|
||||
#define LOG_LEVEL 1
|
||||
#define LLOGLN(_level, _args) \
|
||||
do { if (_level < LOG_LEVEL) { ErrorF _args ; ErrorF("\n"); } } while (0)
|
||||
|
||||
/******************************************************************************/
|
||||
int
|
||||
rdpGlyphDeleteRdpText(struct rdp_text *rtext)
|
||||
{
|
||||
int index;
|
||||
|
||||
if (rtext == NULL)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
for (index = 0; index < rtext->num_chars; index++)
|
||||
{
|
||||
if (rtext->chars[index] != NULL)
|
||||
{
|
||||
g_free(rtext->chars[index]->data);
|
||||
g_free(rtext->chars[index]);
|
||||
}
|
||||
}
|
||||
rdpRegionDestroy(rtext->reg);
|
||||
rdpGlyphDeleteRdpText(rtext->next);
|
||||
g_free(rtext);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
static void
|
||||
rdpGlyphsOrg(PictureScreenPtr ps, rdpPtr dev,
|
||||
CARD8 op, PicturePtr pSrc, PicturePtr pDst,
|
||||
PictFormatPtr maskFormat,
|
||||
INT16 xSrc, INT16 ySrc, int nlists, GlyphListPtr lists,
|
||||
GlyphPtr *glyphs)
|
||||
{
|
||||
ps->Glyphs = dev->Glyphs;
|
||||
ps->Glyphs(op, pSrc, pDst, maskFormat, xSrc, ySrc,
|
||||
nlists, lists, glyphs);
|
||||
ps->Glyphs = rdpGlyphs;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
void
|
||||
rdpGlyphs(CARD8 op, PicturePtr pSrc, PicturePtr pDst,
|
||||
PictFormatPtr maskFormat,
|
||||
INT16 xSrc, INT16 ySrc, int nlists, GlyphListPtr lists,
|
||||
GlyphPtr *glyphs)
|
||||
{
|
||||
ScreenPtr pScreen;
|
||||
rdpPtr dev;
|
||||
PictureScreenPtr ps;
|
||||
|
||||
LLOGLN(10, ("rdpGlyphs:"));
|
||||
pScreen = pDst->pDrawable->pScreen;
|
||||
dev = rdpGetDevFromScreen(pScreen);
|
||||
ps = GetPictureScreen(pScreen);
|
||||
rdpGlyphsOrg(ps, dev, op, pSrc, pDst, maskFormat, xSrc, ySrc,
|
||||
nlists, lists, glyphs);
|
||||
}
|
@ -1,66 +0,0 @@
|
||||
/*
|
||||
Copyright 2012-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
gylph(font) calls
|
||||
|
||||
*/
|
||||
|
||||
#ifndef _RDPGLYPHS_H
|
||||
#define _RDPGLYPHS_H
|
||||
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
#include <xf86.h>
|
||||
|
||||
struct rdp_font_char
|
||||
{
|
||||
int offset; /* x */
|
||||
int baseline; /* y */
|
||||
int width; /* cx */
|
||||
int height; /* cy */
|
||||
int incby;
|
||||
int bpp;
|
||||
char *data;
|
||||
int data_bytes;
|
||||
};
|
||||
|
||||
struct rdp_text
|
||||
{
|
||||
RegionPtr reg;
|
||||
int font;
|
||||
int x;
|
||||
int y;
|
||||
int flags;
|
||||
int mixmode;
|
||||
char data[256];
|
||||
int data_bytes;
|
||||
struct rdp_font_char* chars[256];
|
||||
int num_chars;
|
||||
struct rdp_text* next;
|
||||
};
|
||||
|
||||
extern _X_EXPORT int
|
||||
rdpGlyphDeleteRdpText(struct rdp_text* rtext);
|
||||
extern _X_EXPORT void
|
||||
rdpGlyphs(CARD8 op, PicturePtr pSrc, PicturePtr pDst,
|
||||
PictFormatPtr maskFormat,
|
||||
INT16 xSrc, INT16 ySrc, int nlists, GlyphListPtr lists,
|
||||
GlyphPtr *glyphs);
|
||||
|
||||
#endif
|
@ -1,89 +0,0 @@
|
||||
/*
|
||||
Copyright 2005-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
/* this should be before all X11 .h files */
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
|
||||
/* all driver need this */
|
||||
#include <xf86.h>
|
||||
#include <xf86_OSproc.h>
|
||||
|
||||
#include "rdp.h"
|
||||
#include "rdpDraw.h"
|
||||
#include "rdpClientCon.h"
|
||||
#include "rdpReg.h"
|
||||
#include "rdpImageGlyphBlt.h"
|
||||
|
||||
#define LOG_LEVEL 1
|
||||
#define LLOGLN(_level, _args) \
|
||||
do { if (_level < LOG_LEVEL) { ErrorF _args ; ErrorF("\n"); } } while (0)
|
||||
|
||||
/******************************************************************************/
|
||||
static void
|
||||
rdpImageGlyphBltOrg(DrawablePtr pDrawable, GCPtr pGC,
|
||||
int x, int y, unsigned int nglyph,
|
||||
CharInfoPtr *ppci, pointer pglyphBase)
|
||||
{
|
||||
GC_OP_VARS;
|
||||
|
||||
GC_OP_PROLOGUE(pGC);
|
||||
pGC->ops->ImageGlyphBlt(pDrawable, pGC, x, y, nglyph, ppci, pglyphBase);
|
||||
GC_OP_EPILOGUE(pGC);
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
void
|
||||
rdpImageGlyphBlt(DrawablePtr pDrawable, GCPtr pGC,
|
||||
int x, int y, unsigned int nglyph,
|
||||
CharInfoPtr *ppci, pointer pglyphBase)
|
||||
{
|
||||
rdpPtr dev;
|
||||
RegionRec clip_reg;
|
||||
RegionRec reg;
|
||||
int cd;
|
||||
BoxRec box;
|
||||
|
||||
LLOGLN(0, ("rdpImageGlyphBlt:"));
|
||||
dev = rdpGetDevFromScreen(pGC->pScreen);
|
||||
dev->counts.rdpImageGlyphBltCallCount++;
|
||||
GetTextBoundingBox(pDrawable, pGC->font, x, y, nglyph, &box);
|
||||
rdpRegionInit(®, &box, 0);
|
||||
rdpRegionInit(&clip_reg, NullBox, 0);
|
||||
cd = rdpDrawGetClip(dev, &clip_reg, pDrawable, pGC);
|
||||
LLOGLN(10, ("rdpImageGlyphBlt: cd %d", cd));
|
||||
if (cd == XRDP_CD_CLIP)
|
||||
{
|
||||
rdpRegionIntersect(®, &clip_reg, ®);
|
||||
}
|
||||
/* do original call */
|
||||
rdpImageGlyphBltOrg(pDrawable, pGC, x, y, nglyph, ppci, pglyphBase);
|
||||
if (cd != XRDP_CD_NODRAW)
|
||||
{
|
||||
rdpClientConAddAllReg(dev, ®, pDrawable);
|
||||
}
|
||||
rdpRegionUninit(&clip_reg);
|
||||
rdpRegionUninit(®);
|
||||
}
|
@ -1,34 +0,0 @@
|
||||
/*
|
||||
Copyright 2005-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef __RDPIMAGEGLYPHBLT_H
|
||||
#define __RDPIMAGEGLYPHBLT_H
|
||||
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
#include <xf86.h>
|
||||
|
||||
extern _X_EXPORT void
|
||||
rdpImageGlyphBlt(DrawablePtr pDrawable, GCPtr pGC,
|
||||
int x, int y, unsigned int nglyph,
|
||||
CharInfoPtr* ppci, pointer pglyphBase);
|
||||
|
||||
#endif
|
@ -1,87 +0,0 @@
|
||||
/*
|
||||
Copyright 2005-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
/* this should be before all X11 .h files */
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
|
||||
/* all driver need this */
|
||||
#include <xf86.h>
|
||||
#include <xf86_OSproc.h>
|
||||
|
||||
#include "rdp.h"
|
||||
#include "rdpDraw.h"
|
||||
#include "rdpClientCon.h"
|
||||
#include "rdpReg.h"
|
||||
#include "rdpImageText16.h"
|
||||
|
||||
#define LOG_LEVEL 1
|
||||
#define LLOGLN(_level, _args) \
|
||||
do { if (_level < LOG_LEVEL) { ErrorF _args ; ErrorF("\n"); } } while (0)
|
||||
|
||||
/******************************************************************************/
|
||||
static void
|
||||
rdpImageText16Org(DrawablePtr pDrawable, GCPtr pGC,
|
||||
int x, int y, int count, unsigned short *chars)
|
||||
{
|
||||
GC_OP_VARS;
|
||||
|
||||
GC_OP_PROLOGUE(pGC);
|
||||
pGC->ops->ImageText16(pDrawable, pGC, x, y, count, chars);
|
||||
GC_OP_EPILOGUE(pGC);
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
void
|
||||
rdpImageText16(DrawablePtr pDrawable, GCPtr pGC,
|
||||
int x, int y, int count, unsigned short *chars)
|
||||
{
|
||||
rdpPtr dev;
|
||||
RegionRec clip_reg;
|
||||
RegionRec reg;
|
||||
int cd;
|
||||
BoxRec box;
|
||||
|
||||
LLOGLN(10, ("rdpImageText16:"));
|
||||
dev = rdpGetDevFromScreen(pGC->pScreen);
|
||||
dev->counts.rdpImageText16CallCount++;
|
||||
GetTextBoundingBox(pDrawable, pGC->font, x, y, count, &box);
|
||||
rdpRegionInit(®, &box, 0);
|
||||
rdpRegionInit(&clip_reg, NullBox, 0);
|
||||
cd = rdpDrawGetClip(dev, &clip_reg, pDrawable, pGC);
|
||||
LLOGLN(10, ("rdpImageText16: cd %d", cd));
|
||||
if (cd == XRDP_CD_CLIP)
|
||||
{
|
||||
rdpRegionIntersect(®, &clip_reg, ®);
|
||||
}
|
||||
/* do original call */
|
||||
rdpImageText16Org(pDrawable, pGC, x, y, count, chars);
|
||||
if (cd != XRDP_CD_NODRAW)
|
||||
{
|
||||
rdpClientConAddAllReg(dev, ®, pDrawable);
|
||||
}
|
||||
rdpRegionUninit(&clip_reg);
|
||||
rdpRegionUninit(®);
|
||||
}
|
@ -1,33 +0,0 @@
|
||||
/*
|
||||
Copyright 2005-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef __RDPIMAGETEXT16_H
|
||||
#define __RDPIMAGETEXT16_H
|
||||
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
#include <xf86.h>
|
||||
|
||||
extern _X_EXPORT void
|
||||
rdpImageText16(DrawablePtr pDrawable, GCPtr pGC,
|
||||
int x, int y, int count, unsigned short* chars);
|
||||
|
||||
#endif
|
@ -1,87 +0,0 @@
|
||||
/*
|
||||
Copyright 2005-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
/* this should be before all X11 .h files */
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
|
||||
/* all driver need this */
|
||||
#include <xf86.h>
|
||||
#include <xf86_OSproc.h>
|
||||
|
||||
#include "rdp.h"
|
||||
#include "rdpDraw.h"
|
||||
#include "rdpClientCon.h"
|
||||
#include "rdpReg.h"
|
||||
#include "rdpImageText8.h"
|
||||
|
||||
#define LOG_LEVEL 1
|
||||
#define LLOGLN(_level, _args) \
|
||||
do { if (_level < LOG_LEVEL) { ErrorF _args ; ErrorF("\n"); } } while (0)
|
||||
|
||||
/******************************************************************************/
|
||||
static void
|
||||
rdpImageText8Org(DrawablePtr pDrawable, GCPtr pGC,
|
||||
int x, int y, int count, char *chars)
|
||||
{
|
||||
GC_OP_VARS;
|
||||
|
||||
GC_OP_PROLOGUE(pGC);
|
||||
pGC->ops->ImageText8(pDrawable, pGC, x, y, count, chars);
|
||||
GC_OP_EPILOGUE(pGC);
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
void
|
||||
rdpImageText8(DrawablePtr pDrawable, GCPtr pGC,
|
||||
int x, int y, int count, char *chars)
|
||||
{
|
||||
rdpPtr dev;
|
||||
RegionRec clip_reg;
|
||||
RegionRec reg;
|
||||
int cd;
|
||||
BoxRec box;
|
||||
|
||||
LLOGLN(10, ("rdpImageText8:"));
|
||||
dev = rdpGetDevFromScreen(pGC->pScreen);
|
||||
dev->counts.rdpImageText8CallCount++;
|
||||
GetTextBoundingBox(pDrawable, pGC->font, x, y, count, &box);
|
||||
rdpRegionInit(®, &box, 0);
|
||||
rdpRegionInit(&clip_reg, NullBox, 0);
|
||||
cd = rdpDrawGetClip(dev, &clip_reg, pDrawable, pGC);
|
||||
LLOGLN(10, ("rdpImageText8: cd %d", cd));
|
||||
if (cd == XRDP_CD_CLIP)
|
||||
{
|
||||
rdpRegionIntersect(®, &clip_reg, ®);
|
||||
}
|
||||
/* do original call */
|
||||
rdpImageText8Org(pDrawable, pGC, x, y, count, chars);
|
||||
if (cd != XRDP_CD_NODRAW)
|
||||
{
|
||||
rdpClientConAddAllReg(dev, ®, pDrawable);
|
||||
}
|
||||
rdpRegionUninit(&clip_reg);
|
||||
rdpRegionUninit(®);
|
||||
}
|
@ -1,33 +0,0 @@
|
||||
/*
|
||||
Copyright 2005-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef __RDPIMAGETEXT8_H
|
||||
#define __RDPIMAGETEXT8_H
|
||||
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
#include <xf86.h>
|
||||
|
||||
extern _X_EXPORT void
|
||||
rdpImageText8(DrawablePtr pDrawable, GCPtr pGC,
|
||||
int x, int y, int count, char* chars);
|
||||
|
||||
#endif
|
@ -1,133 +0,0 @@
|
||||
/*
|
||||
Copyright 2013-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
/* this should be before all X11 .h files */
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
|
||||
/* all driver need this */
|
||||
#include <xf86.h>
|
||||
#include <xf86_OSproc.h>
|
||||
|
||||
#include "rdp.h"
|
||||
#include "rdpDraw.h"
|
||||
#include "rdpInput.h"
|
||||
#include "rdpMisc.h"
|
||||
|
||||
#define LOG_LEVEL 1
|
||||
#define LLOGLN(_level, _args) \
|
||||
do { if (_level < LOG_LEVEL) { ErrorF _args ; ErrorF("\n"); } } while (0)
|
||||
|
||||
#define MAX_INPUT_PROC 4
|
||||
|
||||
struct input_proc_list
|
||||
{
|
||||
int type;
|
||||
rdpInputEventProcPtr proc;
|
||||
};
|
||||
|
||||
static struct input_proc_list g_input_proc[MAX_INPUT_PROC];
|
||||
|
||||
/******************************************************************************/
|
||||
int
|
||||
rdpRegisterInputCallback(int type, rdpInputEventProcPtr proc)
|
||||
{
|
||||
LLOGLN(0, ("rdpRegisterInputCallback: type %d proc %p", type, proc));
|
||||
if (type == 0)
|
||||
{
|
||||
g_input_proc[0].proc = proc;
|
||||
}
|
||||
else if (type == 1)
|
||||
{
|
||||
g_input_proc[1].proc = proc;
|
||||
}
|
||||
else
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
int
|
||||
rdpUnregisterInputCallback(rdpInputEventProcPtr proc)
|
||||
{
|
||||
int index;
|
||||
char text[256];
|
||||
|
||||
LLOGLN(0, ("rdpUnregisterInputCallback: proc %p", proc));
|
||||
for (index = 0; index < MAX_INPUT_PROC; index++)
|
||||
{
|
||||
if (g_input_proc[index].proc == proc)
|
||||
{
|
||||
if (index == 0)
|
||||
{
|
||||
/* hack to cleanup
|
||||
remove when xrdpdevTearDown is working */
|
||||
g_sprintf(text, "/tmp/.xrdp/xrdp_display_%s", display);
|
||||
LLOGLN(0, ("rdpUnregisterInputCallback: deleting file %s", text));
|
||||
unlink(text);
|
||||
}
|
||||
g_input_proc[index].proc = 0;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
int
|
||||
rdpInputKeyboardEvent(rdpPtr dev, int msg,
|
||||
long param1, long param2,
|
||||
long param3, long param4)
|
||||
{
|
||||
if (g_input_proc[0].proc != 0)
|
||||
{
|
||||
return g_input_proc[0].proc(dev, msg, param1, param2, param3, param4);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
int
|
||||
rdpInputMouseEvent(rdpPtr dev, int msg,
|
||||
long param1, long param2,
|
||||
long param3, long param4)
|
||||
{
|
||||
if (g_input_proc[1].proc != 0)
|
||||
{
|
||||
return g_input_proc[1].proc(dev, msg, param1, param2, param3, param4);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
/* called when module loads */
|
||||
int
|
||||
rdpInputInit(void)
|
||||
{
|
||||
g_memset(g_input_proc, 0, sizeof(g_input_proc));
|
||||
return 0;
|
||||
}
|
@ -1,50 +0,0 @@
|
||||
/*
|
||||
Copyright 2013-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
input
|
||||
|
||||
*/
|
||||
|
||||
#ifndef _RDPINPUT_H
|
||||
#define _RDPINPUT_H
|
||||
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
#include <xf86.h>
|
||||
|
||||
typedef int (*rdpInputEventProcPtr)(rdpPtr dev, int msg,
|
||||
long param1, long param2,
|
||||
long param3, long param4);
|
||||
|
||||
extern _X_EXPORT int
|
||||
rdpRegisterInputCallback(int type, rdpInputEventProcPtr proc);
|
||||
extern _X_EXPORT int
|
||||
rdpUnregisterInputCallback(rdpInputEventProcPtr proc);
|
||||
extern _X_EXPORT int
|
||||
rdpInputKeyboardEvent(rdpPtr dev, int msg,
|
||||
long param1, long param2,
|
||||
long param3, long param4);
|
||||
extern _X_EXPORT int
|
||||
rdpInputMouseEvent(rdpPtr dev, int msg,
|
||||
long param1, long param2,
|
||||
long param3, long param4);
|
||||
extern _X_EXPORT int
|
||||
rdpInputInit(void);
|
||||
|
||||
#endif
|
@ -1,111 +0,0 @@
|
||||
/*
|
||||
Copyright 2013-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
rdp module main
|
||||
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
/* this should be before all X11 .h files */
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
|
||||
/* all driver need this */
|
||||
#include <xf86.h>
|
||||
#include <xf86_OSproc.h>
|
||||
|
||||
#include <mipointer.h>
|
||||
#include <fb.h>
|
||||
#include <micmap.h>
|
||||
#include <mi.h>
|
||||
|
||||
#include "rdp.h"
|
||||
#include "rdpInput.h"
|
||||
#include "rdpDraw.h"
|
||||
#include "rdpClientCon.h"
|
||||
#include "rdpMain.h"
|
||||
|
||||
/******************************************************************************/
|
||||
#define LOG_LEVEL 1
|
||||
#define LLOGLN(_level, _args) \
|
||||
do { if (_level < LOG_LEVEL) { ErrorF _args ; ErrorF("\n"); } } while (0)
|
||||
|
||||
static Bool g_initialised = FALSE;
|
||||
|
||||
/*****************************************************************************/
|
||||
static pointer
|
||||
xorgxrdpSetup(pointer Module, pointer Options,
|
||||
int *ErrorMajor, int *ErrorMinor)
|
||||
{
|
||||
LLOGLN(0, ("xorgxrdpSetup:"));
|
||||
if (!g_initialised)
|
||||
{
|
||||
g_initialised = TRUE;
|
||||
}
|
||||
rdpInputInit();
|
||||
rdpPrivateInit();
|
||||
return (pointer) 1;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
static void
|
||||
xorgxrdpTearDown(pointer Module)
|
||||
{
|
||||
LLOGLN(0, ("xorgxrdpTearDown:"));
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
void
|
||||
xorgxrdpDownDown(ScreenPtr pScreen)
|
||||
{
|
||||
LLOGLN(0, ("xorgxrdpDownDown:"));
|
||||
if (g_initialised)
|
||||
{
|
||||
g_initialised = FALSE;
|
||||
LLOGLN(0, ("xorgxrdpDownDown: 1"));
|
||||
rdpClientConDeinit(rdpGetDevFromScreen(pScreen));
|
||||
}
|
||||
}
|
||||
|
||||
static MODULESETUPPROTO(xorgxrdpSetup);
|
||||
static XF86ModuleVersionInfo RDPVersRec =
|
||||
{
|
||||
XRDP_MODULE_NAME,
|
||||
MODULEVENDORSTRING,
|
||||
MODINFOSTRING1,
|
||||
MODINFOSTRING2,
|
||||
XORG_VERSION_CURRENT,
|
||||
PACKAGE_VERSION_MAJOR,
|
||||
PACKAGE_VERSION_MINOR,
|
||||
PACKAGE_VERSION_PATCHLEVEL,
|
||||
ABI_CLASS_VIDEODRV,
|
||||
ABI_VIDEODRV_VERSION,
|
||||
0,
|
||||
{ 0, 0, 0, 0 }
|
||||
};
|
||||
|
||||
_X_EXPORT XF86ModuleData xorgxrdpModuleData =
|
||||
{
|
||||
&RDPVersRec,
|
||||
xorgxrdpSetup,
|
||||
xorgxrdpTearDown
|
||||
};
|
@ -1,34 +0,0 @@
|
||||
/*
|
||||
Copyright 2013-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
rdp module main
|
||||
|
||||
*/
|
||||
|
||||
#ifndef __RDPMAIN_H
|
||||
#define __RDPMAIN_H
|
||||
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
#include <xf86.h>
|
||||
|
||||
extern _X_EXPORT void
|
||||
xorgxrdpDownDown(ScreenPtr pScreen);
|
||||
|
||||
#endif
|
@ -1,446 +0,0 @@
|
||||
/*
|
||||
Copyright 2005-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
the rest
|
||||
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/un.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/stat.h>
|
||||
#include <netinet/in.h>
|
||||
#include <netinet/tcp.h>
|
||||
|
||||
/* this should be before all X11 .h files */
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
|
||||
/* all driver need this */
|
||||
#include <xf86.h>
|
||||
#include <xf86_OSproc.h>
|
||||
|
||||
#include "rdpMisc.h"
|
||||
|
||||
/******************************************************************************/
|
||||
int
|
||||
rdpBitsPerPixel(int depth)
|
||||
{
|
||||
if (depth == 1)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
else if (depth <= 8)
|
||||
{
|
||||
return 8;
|
||||
}
|
||||
else if (depth <= 16)
|
||||
{
|
||||
return 16;
|
||||
}
|
||||
else
|
||||
{
|
||||
return 32;
|
||||
}
|
||||
}
|
||||
|
||||
/* the g_ functions from os_calls.c */
|
||||
|
||||
/*****************************************************************************/
|
||||
/* wait 'millis' milliseconds for the socket to be able to receive */
|
||||
/* returns boolean */
|
||||
int
|
||||
g_sck_can_recv(int sck, int millis)
|
||||
{
|
||||
fd_set rfds;
|
||||
struct timeval time;
|
||||
int rv;
|
||||
|
||||
time.tv_sec = millis / 1000;
|
||||
time.tv_usec = (millis * 1000) % 1000000;
|
||||
FD_ZERO(&rfds);
|
||||
|
||||
if (sck > 0)
|
||||
{
|
||||
FD_SET(((unsigned int)sck), &rfds);
|
||||
rv = select(sck + 1, &rfds, 0, 0, &time);
|
||||
|
||||
if (rv > 0)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
int
|
||||
g_sck_recv(int sck, void *ptr, int len, int flags)
|
||||
{
|
||||
return recv(sck, ptr, len, flags);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
void
|
||||
g_sck_close(int sck)
|
||||
{
|
||||
if (sck == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
shutdown(sck, 2);
|
||||
close(sck);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
int
|
||||
g_sck_last_error_would_block(int sck)
|
||||
{
|
||||
return (errno == EWOULDBLOCK) || (errno == EINPROGRESS);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
void
|
||||
g_sleep(int msecs)
|
||||
{
|
||||
usleep(msecs * 1000);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
int
|
||||
g_sck_send(int sck, void *ptr, int len, int flags)
|
||||
{
|
||||
return send(sck, ptr, len, flags);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
void *
|
||||
g_malloc(int size, int zero)
|
||||
{
|
||||
char *rv;
|
||||
|
||||
rv = (char *)malloc(size);
|
||||
if (zero)
|
||||
{
|
||||
if (rv != 0)
|
||||
{
|
||||
memset(rv, 0, size);
|
||||
}
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
void
|
||||
g_free(void *ptr)
|
||||
{
|
||||
if (ptr != 0)
|
||||
{
|
||||
free(ptr);
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
void
|
||||
g_sprintf(char *dest, char *format, ...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
va_start(ap, format);
|
||||
vsprintf(dest, format, ap);
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
int
|
||||
g_sck_tcp_socket(void)
|
||||
{
|
||||
int rv;
|
||||
int i;
|
||||
|
||||
i = 1;
|
||||
rv = socket(PF_INET, SOCK_STREAM, 0);
|
||||
setsockopt(rv, IPPROTO_TCP, TCP_NODELAY, (void *)&i, sizeof(i));
|
||||
setsockopt(rv, SOL_SOCKET, SO_REUSEADDR, (void *)&i, sizeof(i));
|
||||
return rv;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
int
|
||||
g_sck_local_socket_dgram(void)
|
||||
{
|
||||
return socket(AF_UNIX, SOCK_DGRAM, 0);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
int
|
||||
g_sck_local_socket_stream(void)
|
||||
{
|
||||
return socket(AF_UNIX, SOCK_STREAM, 0);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
void
|
||||
g_memcpy(void *d_ptr, const void *s_ptr, int size)
|
||||
{
|
||||
memcpy(d_ptr, s_ptr, size);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
void
|
||||
g_memset(void *d_ptr, const unsigned char chr, int size)
|
||||
{
|
||||
memset(d_ptr, chr, size);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
int
|
||||
g_sck_tcp_set_no_delay(int sck)
|
||||
{
|
||||
int i;
|
||||
|
||||
i = 1;
|
||||
setsockopt(sck, IPPROTO_TCP, TCP_NODELAY, (void *)&i, sizeof(i));
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
int
|
||||
g_sck_set_non_blocking(int sck)
|
||||
{
|
||||
unsigned long i;
|
||||
|
||||
i = fcntl(sck, F_GETFL);
|
||||
i = i | O_NONBLOCK;
|
||||
fcntl(sck, F_SETFL, i);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
int
|
||||
g_sck_accept(int sck)
|
||||
{
|
||||
struct sockaddr_in s;
|
||||
unsigned int i;
|
||||
|
||||
i = sizeof(struct sockaddr_in);
|
||||
memset(&s, 0, i);
|
||||
return accept(sck, (struct sockaddr *)&s, &i);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
int
|
||||
g_sck_select(int sck1, int sck2, int sck3)
|
||||
{
|
||||
fd_set rfds;
|
||||
struct timeval time;
|
||||
int max;
|
||||
int rv;
|
||||
|
||||
time.tv_sec = 0;
|
||||
time.tv_usec = 0;
|
||||
FD_ZERO(&rfds);
|
||||
|
||||
if (sck1 > 0)
|
||||
{
|
||||
FD_SET(((unsigned int)sck1), &rfds);
|
||||
}
|
||||
|
||||
if (sck2 > 0)
|
||||
{
|
||||
FD_SET(((unsigned int)sck2), &rfds);
|
||||
}
|
||||
|
||||
if (sck3 > 0)
|
||||
{
|
||||
FD_SET(((unsigned int)sck3), &rfds);
|
||||
}
|
||||
|
||||
max = sck1;
|
||||
|
||||
if (sck2 > max)
|
||||
{
|
||||
max = sck2;
|
||||
}
|
||||
|
||||
if (sck3 > max)
|
||||
{
|
||||
max = sck3;
|
||||
}
|
||||
|
||||
rv = select(max + 1, &rfds, 0, 0, &time);
|
||||
|
||||
if (rv > 0)
|
||||
{
|
||||
rv = 0;
|
||||
|
||||
if (FD_ISSET(((unsigned int)sck1), &rfds))
|
||||
{
|
||||
rv = rv | 1;
|
||||
}
|
||||
|
||||
if (FD_ISSET(((unsigned int)sck2), &rfds))
|
||||
{
|
||||
rv = rv | 2;
|
||||
}
|
||||
|
||||
if (FD_ISSET(((unsigned int)sck3), &rfds))
|
||||
{
|
||||
rv = rv | 4;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
rv = 0;
|
||||
}
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
int
|
||||
g_sck_tcp_bind(int sck, char *port)
|
||||
{
|
||||
struct sockaddr_in s;
|
||||
|
||||
memset(&s, 0, sizeof(struct sockaddr_in));
|
||||
s.sin_family = AF_INET;
|
||||
s.sin_port = htons(atoi(port));
|
||||
s.sin_addr.s_addr = INADDR_ANY;
|
||||
return bind(sck, (struct sockaddr *)&s, sizeof(struct sockaddr_in));
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
int
|
||||
g_sck_local_bind(int sck, char *port)
|
||||
{
|
||||
struct sockaddr_un s;
|
||||
|
||||
memset(&s, 0, sizeof(struct sockaddr_un));
|
||||
s.sun_family = AF_UNIX;
|
||||
strcpy(s.sun_path, port);
|
||||
return bind(sck, (struct sockaddr *)&s, sizeof(struct sockaddr_un));
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
int
|
||||
g_sck_listen(int sck)
|
||||
{
|
||||
return listen(sck, 2);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/* returns boolean */
|
||||
int
|
||||
g_create_dir(const char *dirname)
|
||||
{
|
||||
return mkdir(dirname, (mode_t) - 1) == 0;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/* returns boolean, non zero if the directory exists */
|
||||
int
|
||||
g_directory_exist(const char *dirname)
|
||||
{
|
||||
struct stat st;
|
||||
|
||||
if (stat(dirname, &st) == 0)
|
||||
{
|
||||
return S_ISDIR(st.st_mode);
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/* returns error */
|
||||
int
|
||||
g_chmod_hex(const char *filename, int flags)
|
||||
{
|
||||
int fl;
|
||||
|
||||
fl = 0;
|
||||
fl |= (flags & 0x4000) ? S_ISUID : 0;
|
||||
fl |= (flags & 0x2000) ? S_ISGID : 0;
|
||||
fl |= (flags & 0x1000) ? S_ISVTX : 0;
|
||||
fl |= (flags & 0x0400) ? S_IRUSR : 0;
|
||||
fl |= (flags & 0x0200) ? S_IWUSR : 0;
|
||||
fl |= (flags & 0x0100) ? S_IXUSR : 0;
|
||||
fl |= (flags & 0x0040) ? S_IRGRP : 0;
|
||||
fl |= (flags & 0x0020) ? S_IWGRP : 0;
|
||||
fl |= (flags & 0x0010) ? S_IXGRP : 0;
|
||||
fl |= (flags & 0x0004) ? S_IROTH : 0;
|
||||
fl |= (flags & 0x0002) ? S_IWOTH : 0;
|
||||
fl |= (flags & 0x0001) ? S_IXOTH : 0;
|
||||
return chmod(filename, fl);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/* produce a hex dump */
|
||||
void
|
||||
g_hexdump(void *p, long len)
|
||||
{
|
||||
unsigned char *line;
|
||||
int i;
|
||||
int thisline;
|
||||
int offset;
|
||||
|
||||
offset = 0;
|
||||
line = (unsigned char *) p;
|
||||
|
||||
while (offset < (int) len)
|
||||
{
|
||||
ErrorF("%04x ", offset);
|
||||
thisline = len - offset;
|
||||
|
||||
if (thisline > 16)
|
||||
{
|
||||
thisline = 16;
|
||||
}
|
||||
|
||||
for (i = 0; i < thisline; i++)
|
||||
{
|
||||
ErrorF("%02x ", line[i]);
|
||||
}
|
||||
|
||||
for (; i < 16; i++)
|
||||
{
|
||||
ErrorF(" ");
|
||||
}
|
||||
|
||||
for (i = 0; i < thisline; i++)
|
||||
{
|
||||
ErrorF("%c", (line[i] >= 0x20 && line[i] < 0x7f) ? line[i] : '.');
|
||||
}
|
||||
|
||||
ErrorF("\n");
|
||||
offset += thisline;
|
||||
line += thisline;
|
||||
}
|
||||
}
|
@ -1,265 +0,0 @@
|
||||
/*
|
||||
Copyright 2005-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
the rest
|
||||
|
||||
*/
|
||||
|
||||
#ifndef __RDPMISC_H
|
||||
#define __RDPMISC_H
|
||||
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
#include <xf86.h>
|
||||
|
||||
#include <X11/Xos.h>
|
||||
|
||||
extern _X_EXPORT int
|
||||
rdpBitsPerPixel(int depth);
|
||||
extern _X_EXPORT int
|
||||
g_sck_can_recv(int sck, int millis);
|
||||
extern _X_EXPORT int
|
||||
g_sck_recv(int sck, void *ptr, int len, int flags);
|
||||
extern _X_EXPORT void
|
||||
g_sck_close(int sck);
|
||||
extern _X_EXPORT int
|
||||
g_sck_last_error_would_block(int sck);
|
||||
extern _X_EXPORT void
|
||||
g_sleep(int msecs);
|
||||
extern _X_EXPORT int
|
||||
g_sck_send(int sck, void *ptr, int len, int flags);
|
||||
extern _X_EXPORT void *
|
||||
g_malloc(int size, int zero);
|
||||
extern _X_EXPORT void
|
||||
g_free(void *ptr);
|
||||
extern _X_EXPORT void
|
||||
g_sprintf(char *dest, char *format, ...);
|
||||
extern _X_EXPORT int
|
||||
g_sck_tcp_socket(void);
|
||||
extern _X_EXPORT int
|
||||
g_sck_local_socket_dgram(void);
|
||||
extern _X_EXPORT int
|
||||
g_sck_local_socket_stream(void);
|
||||
extern _X_EXPORT void
|
||||
g_memcpy(void *d_ptr, const void *s_ptr, int size);
|
||||
extern _X_EXPORT void
|
||||
g_memset(void *d_ptr, const unsigned char chr, int size);
|
||||
extern _X_EXPORT int
|
||||
g_sck_tcp_set_no_delay(int sck);
|
||||
extern _X_EXPORT int
|
||||
g_sck_set_non_blocking(int sck);
|
||||
extern _X_EXPORT int
|
||||
g_sck_accept(int sck);
|
||||
extern _X_EXPORT int
|
||||
g_sck_select(int sck1, int sck2, int sck3);
|
||||
extern _X_EXPORT int
|
||||
g_sck_tcp_bind(int sck, char *port);
|
||||
extern _X_EXPORT int
|
||||
g_sck_local_bind(int sck, char *port);
|
||||
extern _X_EXPORT int
|
||||
g_sck_listen(int sck);
|
||||
extern _X_EXPORT int
|
||||
g_create_dir(const char *dirname);
|
||||
extern _X_EXPORT int
|
||||
g_directory_exist(const char *dirname);
|
||||
extern _X_EXPORT int
|
||||
g_chmod_hex(const char *filename, int flags);
|
||||
extern _X_EXPORT void
|
||||
g_hexdump(void *p, long len);
|
||||
|
||||
#if defined(X_BYTE_ORDER)
|
||||
# if X_BYTE_ORDER == X_LITTLE_ENDIAN
|
||||
# define L_ENDIAN
|
||||
# else
|
||||
# define B_ENDIAN
|
||||
# endif
|
||||
#else
|
||||
# error Unknown endianness in rdp.h
|
||||
#endif
|
||||
/* check if we need to align data */
|
||||
#if defined(__sparc__) || defined(__alpha__) || defined(__hppa__) || \
|
||||
defined(__AIX__) || defined(__PPC__) || defined(__mips__) || \
|
||||
defined(__ia64__) || defined(__ppc__) || defined(__arm__)
|
||||
#define NEED_ALIGN
|
||||
#endif
|
||||
|
||||
/* parser state */
|
||||
struct stream
|
||||
{
|
||||
char *p;
|
||||
char *end;
|
||||
char *data;
|
||||
int size;
|
||||
/* offsets of various headers */
|
||||
char *iso_hdr;
|
||||
char *mcs_hdr;
|
||||
char *sec_hdr;
|
||||
char *rdp_hdr;
|
||||
char *channel_hdr;
|
||||
char *next_packet;
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
#define s_push_layer(s, h, n) \
|
||||
do { \
|
||||
(s)->h = (s)->p; \
|
||||
(s)->p += (n); \
|
||||
} while (0)
|
||||
|
||||
/******************************************************************************/
|
||||
#define s_pop_layer(s, h) \
|
||||
do { \
|
||||
(s)->p = (s)->h; \
|
||||
} while (0)
|
||||
|
||||
/******************************************************************************/
|
||||
#if defined(B_ENDIAN) || defined(NEED_ALIGN)
|
||||
#define out_uint16_le(s, v) \
|
||||
do { \
|
||||
*((s)->p) = (unsigned char)((v) >> 0); \
|
||||
(s)->p++; \
|
||||
*((s)->p) = (unsigned char)((v) >> 8); \
|
||||
(s)->p++; \
|
||||
} while (0)
|
||||
#else
|
||||
#define out_uint16_le(s, v) \
|
||||
do { \
|
||||
*((unsigned short*)((s)->p)) = (unsigned short)(v); \
|
||||
(s)->p += 2; \
|
||||
} while (0)
|
||||
#endif
|
||||
|
||||
/******************************************************************************/
|
||||
#define init_stream(s, v) \
|
||||
do { \
|
||||
if ((v) > (s)->size) \
|
||||
{ \
|
||||
g_free((s)->data); \
|
||||
(s)->data = (char*)g_malloc((v), 0); \
|
||||
(s)->size = (v); \
|
||||
} \
|
||||
(s)->p = (s)->data; \
|
||||
(s)->end = (s)->data; \
|
||||
(s)->next_packet = 0; \
|
||||
} while (0)
|
||||
|
||||
/******************************************************************************/
|
||||
#define out_uint8p(s, v, n) \
|
||||
do { \
|
||||
g_memcpy((s)->p, (v), (n)); \
|
||||
(s)->p += (n); \
|
||||
} while (0)
|
||||
|
||||
/******************************************************************************/
|
||||
#define out_uint8a(s, v, n) \
|
||||
do { \
|
||||
out_uint8p((s), (v), (n)); \
|
||||
} while (0)
|
||||
|
||||
/******************************************************************************/
|
||||
#define out_uint8(s, v) \
|
||||
do { \
|
||||
*((s)->p) = (unsigned char)((v) >> 0); \
|
||||
(s)->p++; \
|
||||
} while (0)
|
||||
|
||||
/******************************************************************************/
|
||||
#if defined(B_ENDIAN) || defined(NEED_ALIGN)
|
||||
#define out_uint32_le(s, v) \
|
||||
do { \
|
||||
*((s)->p) = (unsigned char)((v) >> 0); \
|
||||
(s)->p++; \
|
||||
*((s)->p) = (unsigned char)((v) >> 8); \
|
||||
(s)->p++; \
|
||||
*((s)->p) = (unsigned char)((v) >> 16); \
|
||||
(s)->p++; \
|
||||
*((s)->p) = (unsigned char)((v) >> 24); \
|
||||
(s)->p++; \
|
||||
} while (0)
|
||||
#else
|
||||
#define out_uint32_le(s, v) \
|
||||
do { \
|
||||
*((unsigned int*)((s)->p)) = (v); \
|
||||
(s)->p += 4; \
|
||||
} while (0)
|
||||
#endif
|
||||
|
||||
/******************************************************************************/
|
||||
#if defined(B_ENDIAN) || defined(NEED_ALIGN)
|
||||
#define in_uint32_le(s, v) \
|
||||
do { \
|
||||
(v) = (unsigned int) \
|
||||
( \
|
||||
(*((unsigned char*)((s)->p + 0)) << 0) | \
|
||||
(*((unsigned char*)((s)->p + 1)) << 8) | \
|
||||
(*((unsigned char*)((s)->p + 2)) << 16) | \
|
||||
(*((unsigned char*)((s)->p + 3)) << 24) \
|
||||
); \
|
||||
(s)->p += 4; \
|
||||
} while (0)
|
||||
#else
|
||||
#define in_uint32_le(s, v) \
|
||||
do { \
|
||||
(v) = *((unsigned int*)((s)->p)); \
|
||||
(s)->p += 4; \
|
||||
} while (0)
|
||||
#endif
|
||||
|
||||
/******************************************************************************/
|
||||
#if defined(B_ENDIAN) || defined(NEED_ALIGN)
|
||||
#define in_uint16_le(s, v) \
|
||||
do { \
|
||||
(v) = (unsigned short) \
|
||||
( \
|
||||
(*((unsigned char*)((s)->p + 0)) << 0) | \
|
||||
(*((unsigned char*)((s)->p + 1)) << 8) \
|
||||
); \
|
||||
(s)->p += 2; \
|
||||
} while (0)
|
||||
#else
|
||||
#define in_uint16_le(s, v) \
|
||||
do { \
|
||||
(v) = *((unsigned short*)((s)->p)); \
|
||||
(s)->p += 2; \
|
||||
} while (0)
|
||||
#endif
|
||||
|
||||
/******************************************************************************/
|
||||
#define s_mark_end(s) \
|
||||
do { \
|
||||
(s)->end = (s)->p; \
|
||||
} while (0)
|
||||
|
||||
/******************************************************************************/
|
||||
#define make_stream(s) \
|
||||
do { \
|
||||
(s) = (struct stream*)g_malloc(sizeof(struct stream), 1); \
|
||||
} while (0)
|
||||
|
||||
/******************************************************************************/
|
||||
#define free_stream(s) \
|
||||
do { \
|
||||
if ((s) != 0) \
|
||||
{ \
|
||||
g_free((s)->data); \
|
||||
} \
|
||||
g_free((s)); \
|
||||
} while (0)
|
||||
|
||||
#endif
|
@ -1,122 +0,0 @@
|
||||
/*
|
||||
Copyright 2005-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
pixmap calls
|
||||
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
/* this should be before all X11 .h files */
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
|
||||
/* all driver need this */
|
||||
#include <xf86.h>
|
||||
#include <xf86_OSproc.h>
|
||||
|
||||
#include "rdp.h"
|
||||
#include "rdpDraw.h"
|
||||
#include "rdpPixmap.h"
|
||||
|
||||
#ifndef XRDP_PIX
|
||||
#warning XRDP_PIX not defined
|
||||
#endif
|
||||
|
||||
/******************************************************************************/
|
||||
#define LOG_LEVEL 1
|
||||
#define LLOGLN(_level, _args) \
|
||||
do { if (_level < LOG_LEVEL) { ErrorF _args ; ErrorF("\n"); } } while (0)
|
||||
|
||||
#if XRDP_PIX == 2
|
||||
|
||||
/*****************************************************************************/
|
||||
PixmapPtr
|
||||
rdpCreatePixmap(ScreenPtr pScreen, int width, int height, int depth,
|
||||
unsigned usage_hint)
|
||||
{
|
||||
rdpPtr dev;
|
||||
PixmapPtr rv;
|
||||
|
||||
LLOGLN(10, ("rdpCreatePixmap: width %d height %d depth %d",
|
||||
width, height, depth));
|
||||
dev = rdpGetDevFromScreen(pScreen);
|
||||
pScreen->CreatePixmap = dev->CreatePixmap;
|
||||
rv = pScreen->CreatePixmap(pScreen, width, height, depth, usage_hint);
|
||||
pScreen->CreatePixmap = rdpCreatePixmap;
|
||||
return rv;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
/*****************************************************************************/
|
||||
PixmapPtr
|
||||
rdpCreatePixmap(ScreenPtr pScreen, int width, int height, int depth)
|
||||
{
|
||||
rdpPtr dev;
|
||||
PixmapPtr rv;
|
||||
|
||||
LLOGLN(10, ("rdpCreatePixmap: width %d height %d depth %d",
|
||||
width, height, depth));
|
||||
dev = rdpGetDevFromScreen(pScreen);
|
||||
pScreen->CreatePixmap = dev->CreatePixmap;
|
||||
rv = pScreen->CreatePixmap(pScreen, width, height, depth);
|
||||
pScreen->CreatePixmap = rdpCreatePixmap;
|
||||
return rv;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/******************************************************************************/
|
||||
Bool
|
||||
rdpDestroyPixmap(PixmapPtr pPixmap)
|
||||
{
|
||||
Bool rv;
|
||||
ScreenPtr pScreen;
|
||||
rdpPtr dev;
|
||||
|
||||
LLOGLN(10, ("rdpDestroyPixmap: refcnt %d", pPixmap->refcnt));
|
||||
pScreen = pPixmap->drawable.pScreen;
|
||||
dev = rdpGetDevFromScreen(pScreen);
|
||||
pScreen->DestroyPixmap = dev->DestroyPixmap;
|
||||
rv = pScreen->DestroyPixmap(pPixmap);
|
||||
pScreen->DestroyPixmap = rdpDestroyPixmap;
|
||||
return rv;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
Bool
|
||||
rdpModifyPixmapHeader(PixmapPtr pPixmap, int width, int height, int depth,
|
||||
int bitsPerPixel, int devKind, pointer pPixData)
|
||||
{
|
||||
Bool rv;
|
||||
ScreenPtr pScreen;
|
||||
rdpPtr dev;
|
||||
|
||||
LLOGLN(10, ("rdpModifyPixmapHeader:"));
|
||||
pScreen = pPixmap->drawable.pScreen;
|
||||
dev = rdpGetDevFromScreen(pScreen);
|
||||
pScreen->ModifyPixmapHeader = dev->ModifyPixmapHeader;
|
||||
rv = pScreen->ModifyPixmapHeader(pPixmap, width, height, depth, bitsPerPixel,
|
||||
devKind, pPixData);
|
||||
pScreen->ModifyPixmapHeader = rdpModifyPixmapHeader;
|
||||
return rv;
|
||||
}
|
@ -1,53 +0,0 @@
|
||||
/*
|
||||
Copyright 2005-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
pixmap calls
|
||||
|
||||
*/
|
||||
|
||||
#ifndef __RDPPIXMAP_H
|
||||
#define __RDPPIXAMP_H
|
||||
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
#include <xf86.h>
|
||||
|
||||
#if XORG_VERSION_CURRENT < XORG_VERSION_NUMERIC(1, 5, 0, 0, 0)
|
||||
/* 1.1, 1.2, 1.3, 1.4 */
|
||||
#define XRDP_PIX 1
|
||||
#else
|
||||
/* 1.5, 1.6, 1.7, 1.8, 1.9, 1.10, 1.11, 1.12 */
|
||||
#define XRDP_PIX 2
|
||||
#endif
|
||||
|
||||
#if XRDP_PIX == 2
|
||||
extern _X_EXPORT PixmapPtr
|
||||
rdpCreatePixmap(ScreenPtr pScreen, int width, int height, int depth,
|
||||
unsigned usage_hint);
|
||||
#else
|
||||
extern _X_EXPORT PixmapPtr
|
||||
rdpCreatePixmap(ScreenPtr pScreen, int width, int height, int depth);
|
||||
#endif
|
||||
extern _X_EXPORT Bool
|
||||
rdpDestroyPixmap(PixmapPtr pPixmap);
|
||||
extern _X_EXPORT Bool
|
||||
rdpModifyPixmapHeader(PixmapPtr pPixmap, int width, int height, int depth,
|
||||
int bitsPerPixel, int devKind, pointer pPixData);
|
||||
|
||||
#endif
|
@ -1,104 +0,0 @@
|
||||
/*
|
||||
Copyright 2005-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
/* this should be before all X11 .h files */
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
|
||||
/* all driver need this */
|
||||
#include <xf86.h>
|
||||
#include <xf86_OSproc.h>
|
||||
|
||||
#include "rdp.h"
|
||||
#include "rdpDraw.h"
|
||||
#include "rdpClientCon.h"
|
||||
#include "rdpReg.h"
|
||||
#include "rdpPolyArc.h"
|
||||
|
||||
#define LOG_LEVEL 1
|
||||
#define LLOGLN(_level, _args) \
|
||||
do { if (_level < LOG_LEVEL) { ErrorF _args ; ErrorF("\n"); } } while (0)
|
||||
|
||||
/******************************************************************************/
|
||||
static void
|
||||
rdpPolyArcOrg(DrawablePtr pDrawable, GCPtr pGC, int narcs, xArc *parcs)
|
||||
{
|
||||
GC_OP_VARS;
|
||||
|
||||
GC_OP_PROLOGUE(pGC);
|
||||
pGC->ops->PolyArc(pDrawable, pGC, narcs, parcs);
|
||||
GC_OP_EPILOGUE(pGC);
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
void
|
||||
rdpPolyArc(DrawablePtr pDrawable, GCPtr pGC, int narcs, xArc *parcs)
|
||||
{
|
||||
rdpPtr dev;
|
||||
BoxRec box;
|
||||
int index;
|
||||
int cd;
|
||||
int lw;
|
||||
int extra;
|
||||
RegionRec clip_reg;
|
||||
RegionRec reg;
|
||||
|
||||
LLOGLN(0, ("rdpPolyArc:"));
|
||||
dev = rdpGetDevFromScreen(pGC->pScreen);
|
||||
dev->counts.rdpPolyArcCallCount++;
|
||||
rdpRegionInit(®, NullBox, 0);
|
||||
if (narcs > 0)
|
||||
{
|
||||
lw = pGC->lineWidth;
|
||||
if (lw == 0)
|
||||
{
|
||||
lw = 1;
|
||||
}
|
||||
extra = lw / 2;
|
||||
for (index = 0; index < narcs; index++)
|
||||
{
|
||||
box.x1 = (parcs[index].x - extra) + pDrawable->x;
|
||||
box.y1 = (parcs[index].y - extra) + pDrawable->y;
|
||||
box.x2 = box.x1 + parcs[index].width + lw;
|
||||
box.y2 = box.y1 + parcs[index].height + lw;
|
||||
rdpRegionUnionRect(®, &box);
|
||||
}
|
||||
}
|
||||
rdpRegionInit(&clip_reg, NullBox, 0);
|
||||
cd = rdpDrawGetClip(dev, &clip_reg, pDrawable, pGC);
|
||||
LLOGLN(10, ("rdpPolyArc: cd %d", cd));
|
||||
if (cd == XRDP_CD_CLIP)
|
||||
{
|
||||
rdpRegionIntersect(®, &clip_reg, ®);
|
||||
}
|
||||
/* do original call */
|
||||
rdpPolyArcOrg(pDrawable, pGC, narcs, parcs);
|
||||
if (cd != XRDP_CD_NODRAW)
|
||||
{
|
||||
rdpClientConAddAllReg(dev, ®, pDrawable);
|
||||
}
|
||||
rdpRegionUninit(&clip_reg);
|
||||
rdpRegionUninit(®);
|
||||
}
|
@ -1,32 +0,0 @@
|
||||
/*
|
||||
Copyright 2005-2013 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef __RDPPOLYARC_H
|
||||
#define __RDPPOLYARC_H
|
||||
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
#include <xf86.h>
|
||||
|
||||
extern _X_EXPORT void
|
||||
rdpPolyArc(DrawablePtr pDrawable, GCPtr pGC, int narcs, xArc* parcs);
|
||||
|
||||
#endif
|
@ -1,104 +0,0 @@
|
||||
/*
|
||||
Copyright 2005-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
/* this should be before all X11 .h files */
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
|
||||
/* all driver need this */
|
||||
#include <xf86.h>
|
||||
#include <xf86_OSproc.h>
|
||||
|
||||
#include "rdp.h"
|
||||
#include "rdpDraw.h"
|
||||
#include "rdpClientCon.h"
|
||||
#include "rdpReg.h"
|
||||
#include "rdpPolyFillArc.h"
|
||||
|
||||
#define LOG_LEVEL 1
|
||||
#define LLOGLN(_level, _args) \
|
||||
do { if (_level < LOG_LEVEL) { ErrorF _args ; ErrorF("\n"); } } while (0)
|
||||
|
||||
/******************************************************************************/
|
||||
static void
|
||||
rdpPolyFillArcOrg(DrawablePtr pDrawable, GCPtr pGC, int narcs, xArc *parcs)
|
||||
{
|
||||
GC_OP_VARS;
|
||||
|
||||
GC_OP_PROLOGUE(pGC);
|
||||
pGC->ops->PolyFillArc(pDrawable, pGC, narcs, parcs);
|
||||
GC_OP_EPILOGUE(pGC);
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
void
|
||||
rdpPolyFillArc(DrawablePtr pDrawable, GCPtr pGC, int narcs, xArc *parcs)
|
||||
{
|
||||
rdpPtr dev;
|
||||
BoxRec box;
|
||||
int index;
|
||||
int cd;
|
||||
int lw;
|
||||
int extra;
|
||||
RegionRec clip_reg;
|
||||
RegionRec reg;
|
||||
|
||||
LLOGLN(10, ("rdpPolyFillArc:"));
|
||||
dev = rdpGetDevFromScreen(pGC->pScreen);
|
||||
dev->counts.rdpPolyFillArcCallCount++;
|
||||
rdpRegionInit(®, NullBox, 0);
|
||||
if (narcs > 0)
|
||||
{
|
||||
lw = pGC->lineWidth;
|
||||
if (lw == 0)
|
||||
{
|
||||
lw = 1;
|
||||
}
|
||||
extra = lw / 2;
|
||||
for (index = 0; index < narcs; index++)
|
||||
{
|
||||
box.x1 = (parcs[index].x - extra) + pDrawable->x;
|
||||
box.y1 = (parcs[index].y - extra) + pDrawable->y;
|
||||
box.x2 = box.x1 + parcs[index].width + lw;
|
||||
box.y2 = box.y1 + parcs[index].height + lw;
|
||||
rdpRegionUnionRect(®, &box);
|
||||
}
|
||||
}
|
||||
rdpRegionInit(&clip_reg, NullBox, 0);
|
||||
cd = rdpDrawGetClip(dev, &clip_reg, pDrawable, pGC);
|
||||
LLOGLN(10, ("rdpPolyFillArc: cd %d", cd));
|
||||
if (cd == XRDP_CD_CLIP)
|
||||
{
|
||||
rdpRegionIntersect(®, &clip_reg, ®);
|
||||
}
|
||||
/* do original call */
|
||||
rdpPolyFillArcOrg(pDrawable, pGC, narcs, parcs);
|
||||
if (cd != XRDP_CD_NODRAW)
|
||||
{
|
||||
rdpClientConAddAllReg(dev, ®, pDrawable);
|
||||
}
|
||||
rdpRegionUninit(&clip_reg);
|
||||
rdpRegionUninit(®);
|
||||
}
|
@ -1,32 +0,0 @@
|
||||
/*
|
||||
Copyright 2005-2013 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef __RDPPOLYFILLARC_H
|
||||
#define __RDPPOLYFILLARC_H
|
||||
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
#include <xf86.h>
|
||||
|
||||
extern _X_EXPORT void
|
||||
rdpPolyFillArc(DrawablePtr pDrawable, GCPtr pGC, int narcs, xArc* parcs);
|
||||
|
||||
#endif
|
@ -1,87 +0,0 @@
|
||||
/*
|
||||
Copyright 2005-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
/* this should be before all X11 .h files */
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
|
||||
/* all driver need this */
|
||||
#include <xf86.h>
|
||||
#include <xf86_OSproc.h>
|
||||
|
||||
#include "rdp.h"
|
||||
#include "rdpDraw.h"
|
||||
#include "rdpClientCon.h"
|
||||
#include "rdpReg.h"
|
||||
#include "rdpPolyFillRect.h"
|
||||
|
||||
#define LOG_LEVEL 1
|
||||
#define LLOGLN(_level, _args) \
|
||||
do { if (_level < LOG_LEVEL) { ErrorF _args ; ErrorF("\n"); } } while (0)
|
||||
|
||||
/******************************************************************************/
|
||||
static void
|
||||
rdpPolyFillRectOrg(DrawablePtr pDrawable, GCPtr pGC, int nrectFill,
|
||||
xRectangle *prectInit)
|
||||
{
|
||||
GC_OP_VARS;
|
||||
|
||||
GC_OP_PROLOGUE(pGC);
|
||||
pGC->ops->PolyFillRect(pDrawable, pGC, nrectFill, prectInit);
|
||||
GC_OP_EPILOGUE(pGC);
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
void
|
||||
rdpPolyFillRect(DrawablePtr pDrawable, GCPtr pGC, int nrectFill,
|
||||
xRectangle *prectInit)
|
||||
{
|
||||
rdpPtr dev;
|
||||
RegionRec clip_reg;
|
||||
RegionPtr reg;
|
||||
int cd;
|
||||
|
||||
LLOGLN(10, ("rdpPolyFillRect:"));
|
||||
dev = rdpGetDevFromScreen(pGC->pScreen);
|
||||
dev->counts.rdpPolyFillRectCallCount++;
|
||||
/* make a copy of rects */
|
||||
reg = rdpRegionFromRects(nrectFill, prectInit, CT_NONE);
|
||||
rdpRegionTranslate(reg, pDrawable->x, pDrawable->y);
|
||||
rdpRegionInit(&clip_reg, NullBox, 0);
|
||||
cd = rdpDrawGetClip(dev, &clip_reg, pDrawable, pGC);
|
||||
LLOGLN(10, ("rdpPolyFillRect: cd %d", cd));
|
||||
if (cd == XRDP_CD_CLIP)
|
||||
{
|
||||
rdpRegionIntersect(reg, &clip_reg, reg);
|
||||
}
|
||||
/* do original call */
|
||||
rdpPolyFillRectOrg(pDrawable, pGC, nrectFill, prectInit);
|
||||
if (cd != XRDP_CD_NODRAW)
|
||||
{
|
||||
rdpClientConAddAllReg(dev, reg, pDrawable);
|
||||
}
|
||||
rdpRegionUninit(&clip_reg);
|
||||
rdpRegionDestroy(reg);
|
||||
}
|
@ -1,33 +0,0 @@
|
||||
/*
|
||||
Copyright 2005-2013 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef __RDPPOLYFILLRECT_H
|
||||
#define __RDPPOLYFILLRECT_H
|
||||
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
#include <xf86.h>
|
||||
|
||||
extern _X_EXPORT void
|
||||
rdpPolyFillRect(DrawablePtr pDrawable, GCPtr pGC, int nrectFill,
|
||||
xRectangle* prectInit);
|
||||
|
||||
#endif
|
@ -1,89 +0,0 @@
|
||||
/*
|
||||
Copyright 2005-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
/* this should be before all X11 .h files */
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
|
||||
/* all driver need this */
|
||||
#include <xf86.h>
|
||||
#include <xf86_OSproc.h>
|
||||
|
||||
#include "rdp.h"
|
||||
#include "rdpDraw.h"
|
||||
#include "rdpClientCon.h"
|
||||
#include "rdpReg.h"
|
||||
#include "rdpPolyGlyphBlt.h"
|
||||
|
||||
#define LOG_LEVEL 1
|
||||
#define LLOGLN(_level, _args) \
|
||||
do { if (_level < LOG_LEVEL) { ErrorF _args ; ErrorF("\n"); } } while (0)
|
||||
|
||||
/******************************************************************************/
|
||||
void
|
||||
rdpPolyGlyphBltOrg(DrawablePtr pDrawable, GCPtr pGC,
|
||||
int x, int y, unsigned int nglyph,
|
||||
CharInfoPtr *ppci, pointer pglyphBase)
|
||||
{
|
||||
GC_OP_VARS;
|
||||
|
||||
GC_OP_PROLOGUE(pGC);
|
||||
pGC->ops->PolyGlyphBlt(pDrawable, pGC, x, y, nglyph, ppci, pglyphBase);
|
||||
GC_OP_EPILOGUE(pGC);
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
void
|
||||
rdpPolyGlyphBlt(DrawablePtr pDrawable, GCPtr pGC,
|
||||
int x, int y, unsigned int nglyph,
|
||||
CharInfoPtr *ppci, pointer pglyphBase)
|
||||
{
|
||||
rdpPtr dev;
|
||||
RegionRec clip_reg;
|
||||
RegionRec reg;
|
||||
int cd;
|
||||
BoxRec box;
|
||||
|
||||
LLOGLN(0, ("rdpPolyGlyphBlt:"));
|
||||
dev = rdpGetDevFromScreen(pGC->pScreen);
|
||||
dev->counts.rdpPolyGlyphBltCallCount++;
|
||||
GetTextBoundingBox(pDrawable, pGC->font, x, y, nglyph, &box);
|
||||
rdpRegionInit(®, &box, 0);
|
||||
rdpRegionInit(&clip_reg, NullBox, 0);
|
||||
cd = rdpDrawGetClip(dev, &clip_reg, pDrawable, pGC);
|
||||
LLOGLN(10, ("rdpPolyGlyphBlt: cd %d", cd));
|
||||
if (cd == XRDP_CD_CLIP)
|
||||
{
|
||||
rdpRegionIntersect(®, &clip_reg, ®);
|
||||
}
|
||||
/* do original call */
|
||||
rdpPolyGlyphBltOrg(pDrawable, pGC, x, y, nglyph, ppci, pglyphBase);
|
||||
if (cd != XRDP_CD_NODRAW)
|
||||
{
|
||||
rdpClientConAddAllReg(dev, ®, pDrawable);
|
||||
}
|
||||
rdpRegionUninit(&clip_reg);
|
||||
rdpRegionUninit(®);
|
||||
}
|
@ -1,34 +0,0 @@
|
||||
/*
|
||||
Copyright 2005-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef __RDPPOLYGLYPHBLT_H
|
||||
#define __RDPPOLYGLYPHBLT_H
|
||||
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
#include <xf86.h>
|
||||
|
||||
extern _X_EXPORT void
|
||||
rdpPolyGlyphBlt(DrawablePtr pDrawable, GCPtr pGC,
|
||||
int x, int y, unsigned int nglyph,
|
||||
CharInfoPtr* ppci, pointer pglyphBase);
|
||||
|
||||
#endif
|
@ -1,95 +0,0 @@
|
||||
/*
|
||||
Copyright 2005-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
/* this should be before all X11 .h files */
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
|
||||
/* all driver need this */
|
||||
#include <xf86.h>
|
||||
#include <xf86_OSproc.h>
|
||||
|
||||
#include "rdp.h"
|
||||
#include "rdpDraw.h"
|
||||
#include "rdpClientCon.h"
|
||||
#include "rdpReg.h"
|
||||
#include "rdpPolyPoint.h"
|
||||
|
||||
#define LOG_LEVEL 1
|
||||
#define LLOGLN(_level, _args) \
|
||||
do { if (_level < LOG_LEVEL) { ErrorF _args ; ErrorF("\n"); } } while (0)
|
||||
|
||||
/******************************************************************************/
|
||||
static void
|
||||
rdpPolyPointOrg(DrawablePtr pDrawable, GCPtr pGC, int mode,
|
||||
int npt, DDXPointPtr in_pts)
|
||||
{
|
||||
GC_OP_VARS;
|
||||
|
||||
GC_OP_PROLOGUE(pGC);
|
||||
pGC->ops->PolyPoint(pDrawable, pGC, mode, npt, in_pts);
|
||||
GC_OP_EPILOGUE(pGC);
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
void
|
||||
rdpPolyPoint(DrawablePtr pDrawable, GCPtr pGC, int mode,
|
||||
int npt, DDXPointPtr in_pts)
|
||||
{
|
||||
rdpPtr dev;
|
||||
RegionRec clip_reg;
|
||||
RegionRec reg;
|
||||
int cd;
|
||||
int index;
|
||||
BoxRec box;
|
||||
|
||||
LLOGLN(10, ("rdpPolyPoint:"));
|
||||
dev = rdpGetDevFromScreen(pGC->pScreen);
|
||||
dev->counts.rdpPolyPointCallCount++;
|
||||
rdpRegionInit(®, NullBox, 0);
|
||||
for (index = 0; index < npt; index++)
|
||||
{
|
||||
box.x1 = in_pts[index].x + pDrawable->x;
|
||||
box.y1 = in_pts[index].y + pDrawable->y;
|
||||
box.x2 = box.x1 + 1;
|
||||
box.y2 = box.y1 + 1;
|
||||
rdpRegionUnionRect(®, &box);
|
||||
}
|
||||
rdpRegionInit(&clip_reg, NullBox, 0);
|
||||
cd = rdpDrawGetClip(dev, &clip_reg, pDrawable, pGC);
|
||||
LLOGLN(10, ("rdpPolyPoint: cd %d", cd));
|
||||
if (cd == XRDP_CD_CLIP)
|
||||
{
|
||||
rdpRegionIntersect(®, &clip_reg, ®);
|
||||
}
|
||||
/* do original call */
|
||||
rdpPolyPointOrg(pDrawable, pGC, mode, npt, in_pts);
|
||||
if (cd != XRDP_CD_NODRAW)
|
||||
{
|
||||
rdpClientConAddAllReg(dev, ®, pDrawable);
|
||||
}
|
||||
rdpRegionUninit(&clip_reg);
|
||||
rdpRegionUninit(®);
|
||||
}
|
@ -1,33 +0,0 @@
|
||||
/*
|
||||
Copyright 2005-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef __RDPPOLYPOINT_H
|
||||
#define __RDPPOLYPOINT_H
|
||||
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
#include <xf86.h>
|
||||
|
||||
extern _X_EXPORT void
|
||||
rdpPolyPoint(DrawablePtr pDrawable, GCPtr pGC, int mode,
|
||||
int npt, DDXPointPtr in_pts);
|
||||
|
||||
#endif
|
@ -1,134 +0,0 @@
|
||||
/*
|
||||
Copyright 2005-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
/* this should be before all X11 .h files */
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
|
||||
/* all driver need this */
|
||||
#include <xf86.h>
|
||||
#include <xf86_OSproc.h>
|
||||
|
||||
#include "rdp.h"
|
||||
#include "rdpDraw.h"
|
||||
#include "rdpClientCon.h"
|
||||
#include "rdpReg.h"
|
||||
#include "rdpPolyRectangle.h"
|
||||
|
||||
#define LOG_LEVEL 1
|
||||
#define LLOGLN(_level, _args) \
|
||||
do { if (_level < LOG_LEVEL) { ErrorF _args ; ErrorF("\n"); } } while (0)
|
||||
|
||||
/******************************************************************************/
|
||||
static void
|
||||
rdpPolyRectangleOrg(DrawablePtr pDrawable, GCPtr pGC, int nrects,
|
||||
xRectangle *rects)
|
||||
{
|
||||
GC_OP_VARS;
|
||||
|
||||
GC_OP_PROLOGUE(pGC);
|
||||
pGC->ops->PolyRectangle(pDrawable, pGC, nrects, rects);
|
||||
GC_OP_EPILOGUE(pGC);
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
void
|
||||
rdpPolyRectangle(DrawablePtr pDrawable, GCPtr pGC, int nrects,
|
||||
xRectangle *rects)
|
||||
{
|
||||
rdpPtr dev;
|
||||
BoxRec box;
|
||||
int index;
|
||||
int up;
|
||||
int down;
|
||||
int lw;
|
||||
int cd;
|
||||
int x1;
|
||||
int y1;
|
||||
int x2;
|
||||
int y2;
|
||||
RegionRec clip_reg;
|
||||
RegionRec reg;
|
||||
|
||||
LLOGLN(10, ("rdpPolyRectangle:"));
|
||||
dev = rdpGetDevFromScreen(pGC->pScreen);
|
||||
dev->counts.rdpPolyRectangleCallCount++;
|
||||
rdpRegionInit(®, NullBox, 0);
|
||||
lw = pGC->lineWidth;
|
||||
if (lw < 1)
|
||||
{
|
||||
lw = 1;
|
||||
}
|
||||
up = lw / 2;
|
||||
down = 1 + (lw - 1) / 2;
|
||||
index = 0;
|
||||
while (index < nrects)
|
||||
{
|
||||
x1 = rects[index].x + pDrawable->x;
|
||||
y1 = rects[index].y + pDrawable->y;
|
||||
x2 = x1 + rects[index].width;
|
||||
y2 = y1 + rects[index].height;
|
||||
/* top */
|
||||
box.x1 = x1 - up;
|
||||
box.y1 = y1 - up;
|
||||
box.x2 = x2 + down;
|
||||
box.y2 = y1 + down;
|
||||
rdpRegionUnionRect(®, &box);
|
||||
/* left */
|
||||
box.x1 = x1 - up;
|
||||
box.y1 = y1 - up;
|
||||
box.x2 = x1 + down;
|
||||
box.y2 = y2 + down;
|
||||
rdpRegionUnionRect(®, &box);
|
||||
/* right */
|
||||
box.x1 = x2 - up;
|
||||
box.y1 = y1 - up;
|
||||
box.x2 = x2 + down;
|
||||
box.y2 = y2 + down;
|
||||
rdpRegionUnionRect(®, &box);
|
||||
/* bottom */
|
||||
box.x1 = x1 - up;
|
||||
box.y1 = y2 - up;
|
||||
box.x2 = x2 + down;
|
||||
box.y2 = y2 + down;
|
||||
rdpRegionUnionRect(®, &box);
|
||||
index++;
|
||||
}
|
||||
rdpRegionInit(&clip_reg, NullBox, 0);
|
||||
cd = rdpDrawGetClip(dev, &clip_reg, pDrawable, pGC);
|
||||
LLOGLN(10, ("rdpPolyRectangle: cd %d", cd));
|
||||
if (cd == XRDP_CD_CLIP)
|
||||
{
|
||||
rdpRegionIntersect(®, &clip_reg, ®);
|
||||
}
|
||||
/* do original call */
|
||||
rdpPolyRectangleOrg(pDrawable, pGC, nrects, rects);
|
||||
if (cd != XRDP_CD_NODRAW)
|
||||
{
|
||||
rdpClientConAddAllReg(dev, ®, pDrawable);
|
||||
}
|
||||
rdpRegionUninit(&clip_reg);
|
||||
rdpRegionUninit(®);
|
||||
}
|
@ -1,33 +0,0 @@
|
||||
/*
|
||||
Copyright 2005-2013 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef __RDPPOLYRECTANGLE_H
|
||||
#define __RDPPOLYRECTANGLE_H
|
||||
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
#include <xf86.h>
|
||||
|
||||
extern _X_EXPORT void
|
||||
rdpPolyRectangle(DrawablePtr pDrawable, GCPtr pGC, int nrects,
|
||||
xRectangle* rects);
|
||||
|
||||
#endif
|
@ -1,101 +0,0 @@
|
||||
/*
|
||||
Copyright 2005-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
/* this should be before all X11 .h files */
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
|
||||
/* all driver need this */
|
||||
#include <xf86.h>
|
||||
#include <xf86_OSproc.h>
|
||||
|
||||
#include "rdp.h"
|
||||
#include "rdpDraw.h"
|
||||
#include "rdpClientCon.h"
|
||||
#include "rdpReg.h"
|
||||
#include "rdpPolySegment.h"
|
||||
|
||||
#define LOG_LEVEL 1
|
||||
#define LLOGLN(_level, _args) \
|
||||
do { if (_level < LOG_LEVEL) { ErrorF _args ; ErrorF("\n"); } } while (0)
|
||||
|
||||
/******************************************************************************/
|
||||
void
|
||||
rdpPolySegmentOrg(DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment *pSegs)
|
||||
{
|
||||
GC_OP_VARS;
|
||||
|
||||
GC_OP_PROLOGUE(pGC);
|
||||
pGC->ops->PolySegment(pDrawable, pGC, nseg, pSegs);
|
||||
GC_OP_EPILOGUE(pGC);
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
void
|
||||
rdpPolySegment(DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment *pSegs)
|
||||
{
|
||||
rdpPtr dev;
|
||||
RegionRec clip_reg;
|
||||
RegionRec reg;
|
||||
int cd;
|
||||
int index;
|
||||
int x1;
|
||||
int y1;
|
||||
int x2;
|
||||
int y2;
|
||||
BoxRec box;
|
||||
|
||||
LLOGLN(10, ("rdpPolySegment:"));
|
||||
dev = rdpGetDevFromScreen(pGC->pScreen);
|
||||
dev->counts.rdpPolySegmentCallCount++;
|
||||
rdpRegionInit(®, NullBox, 0);
|
||||
for (index = 0; index < nseg; index++)
|
||||
{
|
||||
x1 = pSegs[index].x1 + pDrawable->x;
|
||||
y1 = pSegs[index].y1 + pDrawable->y;
|
||||
x2 = pSegs[index].x2 + pDrawable->x;
|
||||
y2 = pSegs[index].y2 + pDrawable->y;
|
||||
box.x1 = RDPMIN(x1, x2);
|
||||
box.y1 = RDPMIN(y1, y2);
|
||||
box.x2 = RDPMAX(x1, x2) + 1;
|
||||
box.y2 = RDPMAX(y1, y2) + 1;
|
||||
rdpRegionUnionRect(®, &box);
|
||||
}
|
||||
rdpRegionInit(&clip_reg, NullBox, 0);
|
||||
cd = rdpDrawGetClip(dev, &clip_reg, pDrawable, pGC);
|
||||
LLOGLN(10, ("rdpPolySegment: cd %d", cd));
|
||||
if (cd == XRDP_CD_CLIP)
|
||||
{
|
||||
rdpRegionIntersect(®, &clip_reg, ®);
|
||||
}
|
||||
/* do original call */
|
||||
rdpPolySegmentOrg(pDrawable, pGC, nseg, pSegs);
|
||||
if (cd != XRDP_CD_NODRAW)
|
||||
{
|
||||
rdpClientConAddAllReg(dev, ®, pDrawable);
|
||||
}
|
||||
rdpRegionUninit(&clip_reg);
|
||||
rdpRegionUninit(®);
|
||||
}
|
@ -1,32 +0,0 @@
|
||||
/*
|
||||
Copyright 2005-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef __RDPPOLYSEGMENT_H
|
||||
#define __RDPPOLYSEGMENT_H
|
||||
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
#include <xf86.h>
|
||||
|
||||
extern _X_EXPORT void
|
||||
rdpPolySegment(DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment* pSegs);
|
||||
|
||||
#endif
|
@ -1,91 +0,0 @@
|
||||
/*
|
||||
Copyright 2005-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
/* this should be before all X11 .h files */
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
|
||||
/* all driver need this */
|
||||
#include <xf86.h>
|
||||
#include <xf86_OSproc.h>
|
||||
|
||||
#include "rdp.h"
|
||||
#include "rdpDraw.h"
|
||||
#include "rdpClientCon.h"
|
||||
#include "rdpReg.h"
|
||||
#include "rdpPolyText16.h"
|
||||
|
||||
#define LOG_LEVEL 1
|
||||
#define LLOGLN(_level, _args) \
|
||||
do { if (_level < LOG_LEVEL) { ErrorF _args ; ErrorF("\n"); } } while (0)
|
||||
|
||||
/******************************************************************************/
|
||||
static int
|
||||
rdpPolyText16Org(DrawablePtr pDrawable, GCPtr pGC,
|
||||
int x, int y, int count, unsigned short *chars)
|
||||
{
|
||||
GC_OP_VARS;
|
||||
int rv;
|
||||
|
||||
GC_OP_PROLOGUE(pGC);
|
||||
rv = pGC->ops->PolyText16(pDrawable, pGC, x, y, count, chars);
|
||||
GC_OP_EPILOGUE(pGC);
|
||||
return rv;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
int
|
||||
rdpPolyText16(DrawablePtr pDrawable, GCPtr pGC,
|
||||
int x, int y, int count, unsigned short *chars)
|
||||
{
|
||||
int rv;
|
||||
rdpPtr dev;
|
||||
RegionRec clip_reg;
|
||||
RegionRec reg;
|
||||
int cd;
|
||||
BoxRec box;
|
||||
|
||||
LLOGLN(10, ("rdpPolyText16:"));
|
||||
dev = rdpGetDevFromScreen(pGC->pScreen);
|
||||
dev->counts.rdpPolyText16CallCount++;
|
||||
GetTextBoundingBox(pDrawable, pGC->font, x, y, count, &box);
|
||||
rdpRegionInit(®, &box, 0);
|
||||
rdpRegionInit(&clip_reg, NullBox, 0);
|
||||
cd = rdpDrawGetClip(dev, &clip_reg, pDrawable, pGC);
|
||||
LLOGLN(10, ("rdpPolyText16: cd %d", cd));
|
||||
if (cd == XRDP_CD_CLIP)
|
||||
{
|
||||
rdpRegionIntersect(®, &clip_reg, ®);
|
||||
}
|
||||
/* do original call */
|
||||
rv = rdpPolyText16Org(pDrawable, pGC, x, y, count, chars);
|
||||
if (cd != XRDP_CD_NODRAW)
|
||||
{
|
||||
rdpClientConAddAllReg(dev, ®, pDrawable);
|
||||
}
|
||||
rdpRegionUninit(&clip_reg);
|
||||
rdpRegionUninit(®);
|
||||
return rv;
|
||||
}
|
@ -1,33 +0,0 @@
|
||||
/*
|
||||
Copyright 2005-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef __RDPPOLYTEXT16_H
|
||||
#define __RDPPOLYTEXT16_H
|
||||
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
#include <xf86.h>
|
||||
|
||||
extern _X_EXPORT int
|
||||
rdpPolyText16(DrawablePtr pDrawable, GCPtr pGC,
|
||||
int x, int y, int count, unsigned short* chars);
|
||||
|
||||
#endif
|
@ -1,91 +0,0 @@
|
||||
/*
|
||||
Copyright 2005-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
/* this should be before all X11 .h files */
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
|
||||
/* all driver need this */
|
||||
#include <xf86.h>
|
||||
#include <xf86_OSproc.h>
|
||||
|
||||
#include "rdp.h"
|
||||
#include "rdpDraw.h"
|
||||
#include "rdpClientCon.h"
|
||||
#include "rdpReg.h"
|
||||
#include "rdpPolyText8.h"
|
||||
|
||||
#define LOG_LEVEL 1
|
||||
#define LLOGLN(_level, _args) \
|
||||
do { if (_level < LOG_LEVEL) { ErrorF _args ; ErrorF("\n"); } } while (0)
|
||||
|
||||
/******************************************************************************/
|
||||
static int
|
||||
rdpPolyText8Org(DrawablePtr pDrawable, GCPtr pGC,
|
||||
int x, int y, int count, char *chars)
|
||||
{
|
||||
GC_OP_VARS;
|
||||
int rv;
|
||||
|
||||
GC_OP_PROLOGUE(pGC);
|
||||
rv = pGC->ops->PolyText8(pDrawable, pGC, x, y, count, chars);
|
||||
GC_OP_EPILOGUE(pGC);
|
||||
return rv;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
int
|
||||
rdpPolyText8(DrawablePtr pDrawable, GCPtr pGC,
|
||||
int x, int y, int count, char *chars)
|
||||
{
|
||||
int rv;
|
||||
rdpPtr dev;
|
||||
RegionRec clip_reg;
|
||||
RegionRec reg;
|
||||
int cd;
|
||||
BoxRec box;
|
||||
|
||||
LLOGLN(10, ("rdpPolyText8:"));
|
||||
dev = rdpGetDevFromScreen(pGC->pScreen);
|
||||
dev->counts.rdpPolyText8CallCount++;
|
||||
GetTextBoundingBox(pDrawable, pGC->font, x, y, count, &box);
|
||||
rdpRegionInit(®, &box, 0);
|
||||
rdpRegionInit(&clip_reg, NullBox, 0);
|
||||
cd = rdpDrawGetClip(dev, &clip_reg, pDrawable, pGC);
|
||||
LLOGLN(10, ("rdpPolyText8: cd %d", cd));
|
||||
if (cd == XRDP_CD_CLIP)
|
||||
{
|
||||
rdpRegionIntersect(®, &clip_reg, ®);
|
||||
}
|
||||
/* do original call */
|
||||
rv = rdpPolyText8Org(pDrawable, pGC, x, y, count, chars);
|
||||
if (cd != XRDP_CD_NODRAW)
|
||||
{
|
||||
rdpClientConAddAllReg(dev, ®, pDrawable);
|
||||
}
|
||||
rdpRegionUninit(&clip_reg);
|
||||
rdpRegionUninit(®);
|
||||
return rv;
|
||||
}
|
@ -1,33 +0,0 @@
|
||||
/*
|
||||
Copyright 2005-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef __RDPPOLYTEXT8_H
|
||||
#define __RDPPOLYTEXT8_H
|
||||
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
#include <xf86.h>
|
||||
|
||||
int
|
||||
rdpPolyText8(DrawablePtr pDrawable, GCPtr pGC,
|
||||
int x, int y, int count, char* chars);
|
||||
|
||||
#endif
|
@ -1,103 +0,0 @@
|
||||
/*
|
||||
Copyright 2005-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
/* this should be before all X11 .h files */
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
|
||||
/* all driver need this */
|
||||
#include <xf86.h>
|
||||
#include <xf86_OSproc.h>
|
||||
|
||||
#include "rdp.h"
|
||||
#include "rdpDraw.h"
|
||||
#include "rdpClientCon.h"
|
||||
#include "rdpReg.h"
|
||||
#include "rdpPolylines.h"
|
||||
|
||||
#define LOG_LEVEL 1
|
||||
#define LLOGLN(_level, _args) \
|
||||
do { if (_level < LOG_LEVEL) { ErrorF _args ; ErrorF("\n"); } } while (0)
|
||||
|
||||
/******************************************************************************/
|
||||
static void
|
||||
rdpPolylinesOrg(DrawablePtr pDrawable, GCPtr pGC, int mode,
|
||||
int npt, DDXPointPtr pptInit)
|
||||
{
|
||||
GC_OP_VARS;
|
||||
|
||||
GC_OP_PROLOGUE(pGC);
|
||||
pGC->ops->Polylines(pDrawable, pGC, mode, npt, pptInit);
|
||||
GC_OP_EPILOGUE(pGC);
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
void
|
||||
rdpPolylines(DrawablePtr pDrawable, GCPtr pGC, int mode,
|
||||
int npt, DDXPointPtr pptInit)
|
||||
{
|
||||
rdpPtr dev;
|
||||
RegionRec clip_reg;
|
||||
RegionRec reg;
|
||||
int cd;
|
||||
int index;
|
||||
int x1;
|
||||
int y1;
|
||||
int x2;
|
||||
int y2;
|
||||
BoxRec box;
|
||||
|
||||
LLOGLN(10, ("rdpPolylines:"));
|
||||
dev = rdpGetDevFromScreen(pGC->pScreen);
|
||||
dev->counts.rdpPolylinesCallCount++;
|
||||
rdpRegionInit(®, NullBox, 0);
|
||||
for (index = 1; index < npt; index++)
|
||||
{
|
||||
x1 = pptInit[index - 1].x + pDrawable->x;
|
||||
y1 = pptInit[index - 1].y + pDrawable->y;
|
||||
x2 = pptInit[index].x + pDrawable->x;
|
||||
y2 = pptInit[index].y + pDrawable->y;
|
||||
box.x1 = RDPMIN(x1, x2);
|
||||
box.y1 = RDPMIN(y1, y2);
|
||||
box.x2 = RDPMAX(x1, x2) + 1;
|
||||
box.y2 = RDPMAX(y1, y2) + 1;
|
||||
rdpRegionUnionRect(®, &box);
|
||||
}
|
||||
rdpRegionInit(&clip_reg, NullBox, 0);
|
||||
cd = rdpDrawGetClip(dev, &clip_reg, pDrawable, pGC);
|
||||
LLOGLN(10, ("rdpPolylines: cd %d", cd));
|
||||
if (cd == XRDP_CD_CLIP)
|
||||
{
|
||||
rdpRegionIntersect(®, &clip_reg, ®);
|
||||
}
|
||||
/* do original call */
|
||||
rdpPolylinesOrg(pDrawable, pGC, mode, npt, pptInit);
|
||||
if (cd != XRDP_CD_NODRAW)
|
||||
{
|
||||
rdpClientConAddAllReg(dev, ®, pDrawable);
|
||||
}
|
||||
rdpRegionUninit(&clip_reg);
|
||||
rdpRegionUninit(®);
|
||||
}
|
@ -1,33 +0,0 @@
|
||||
/*
|
||||
Copyright 2005-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef __RDPPOLYLINES_H
|
||||
#define __RDPPOLYLINES_H
|
||||
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
#include <xf86.h>
|
||||
|
||||
void
|
||||
rdpPolylines(DrawablePtr pDrawable, GCPtr pGC, int mode,
|
||||
int npt, DDXPointPtr pptInit);
|
||||
|
||||
#endif
|
@ -1,177 +0,0 @@
|
||||
/*
|
||||
Copyright 2013-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
to deal with privates changing in xorg versions
|
||||
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
/* this should be before all X11 .h files */
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
|
||||
/* all driver need this */
|
||||
#include <xf86.h>
|
||||
#include <xf86_OSproc.h>
|
||||
|
||||
#include <mipointer.h>
|
||||
#include <fb.h>
|
||||
#include <micmap.h>
|
||||
#include <mi.h>
|
||||
|
||||
#include "rdpPri.h"
|
||||
#include "rdpMisc.h"
|
||||
|
||||
#if XORG_VERSION_CURRENT < XORG_VERSION_NUMERIC(1, 5, 0, 0, 0)
|
||||
/* 1.1, 1.2, 1.3, 1.4 */
|
||||
#define XRDP_PRI 1
|
||||
#elif XORG_VERSION_CURRENT < XORG_VERSION_NUMERIC(1, 9, 0, 0, 0)
|
||||
/* 1.5, 1.6, 1.7, 1.8 */
|
||||
#define XRDP_PRI 2
|
||||
#else
|
||||
/* 1.9, 1.10, 1.11, 1.12 */
|
||||
#define XRDP_PRI 3
|
||||
#endif
|
||||
|
||||
#define PTR2INT(_ptr) ((int) ((long) ((void*) (_ptr))))
|
||||
#define INT2PTR(_int) ((void *) ((long) ((int) (_int))))
|
||||
|
||||
#if XRDP_PRI == 3
|
||||
static DevPrivateKeyRec g_privateKeyRecGC;
|
||||
static DevPrivateKeyRec g_privateKeyRecPixmap;
|
||||
static DevPrivateKeyRec g_privateKeyRecWindow;
|
||||
#elif XRDP_PRI == 2
|
||||
static int g_privateKeyRecGC = 0;
|
||||
static int g_privateKeyRecPixmap = 0;
|
||||
static int g_privateKeyRecWindow = 0;
|
||||
#endif
|
||||
|
||||
/*****************************************************************************/
|
||||
rdpDevPrivateKey
|
||||
rdpAllocateGCPrivate(ScreenPtr pScreen, int bytes)
|
||||
{
|
||||
rdpDevPrivateKey rv;
|
||||
|
||||
#if XRDP_PRI == 1
|
||||
rv = INT2PTR(AllocateGCPrivateIndex());
|
||||
AllocateGCPrivate(pScreen, PTR2INT(rv), bytes);
|
||||
#elif XRDP_PRI == 2
|
||||
dixRequestPrivate(&g_privateKeyRecGC, bytes);
|
||||
rv = &g_privateKeyRecGC;
|
||||
#else
|
||||
dixRegisterPrivateKey(&g_privateKeyRecGC, PRIVATE_GC, bytes);
|
||||
rv = &g_privateKeyRecGC;
|
||||
#endif
|
||||
return rv;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
rdpDevPrivateKey
|
||||
rdpAllocatePixmapPrivate(ScreenPtr pScreen, int bytes)
|
||||
{
|
||||
rdpDevPrivateKey rv;
|
||||
|
||||
#if XRDP_PRI == 1
|
||||
rv = INT2PTR(AllocatePixmapPrivateIndex());
|
||||
AllocatePixmapPrivate(pScreen, PTR2INT(rv), bytes);
|
||||
#elif XRDP_PRI == 2
|
||||
dixRequestPrivate(&g_privateKeyRecPixmap, bytes);
|
||||
rv = &g_privateKeyRecPixmap;
|
||||
#else
|
||||
dixRegisterPrivateKey(&g_privateKeyRecPixmap, PRIVATE_PIXMAP, bytes);
|
||||
rv = &g_privateKeyRecPixmap;
|
||||
#endif
|
||||
return rv;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
rdpDevPrivateKey
|
||||
rdpAllocateWindowPrivate(ScreenPtr pScreen, int bytes)
|
||||
{
|
||||
rdpDevPrivateKey rv;
|
||||
|
||||
#if XRDP_PRI == 1
|
||||
rv = INT2PTR(AllocateWindowPrivateIndex());
|
||||
AllocateWindowPrivate(pScreen, PTR2INT(rv), bytes);
|
||||
#elif XRDP_PRI == 2
|
||||
dixRequestPrivate(&g_privateKeyRecWindow, bytes);
|
||||
rv = &g_privateKeyRecWindow;
|
||||
#else
|
||||
dixRegisterPrivateKey(&g_privateKeyRecWindow, PRIVATE_WINDOW, bytes);
|
||||
rv = &g_privateKeyRecWindow;
|
||||
#endif
|
||||
return rv;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
void *
|
||||
rdpGetGCPrivate(GCPtr pGC, rdpDevPrivateKey key)
|
||||
{
|
||||
void *rv;
|
||||
|
||||
#if XRDP_PRI == 1
|
||||
rv = pGC->devPrivates[PTR2INT(key)].ptr;
|
||||
#else
|
||||
rv = dixLookupPrivate(&(pGC->devPrivates), key);
|
||||
#endif
|
||||
return rv;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
void *
|
||||
rdpGetPixmapPrivate(PixmapPtr pPixmap, rdpDevPrivateKey key)
|
||||
{
|
||||
void *rv;
|
||||
|
||||
#if XRDP_PRI == 1
|
||||
rv = pPixmap->devPrivates[PTR2INT(key)].ptr;
|
||||
#else
|
||||
rv = dixLookupPrivate(&(pPixmap->devPrivates), key);
|
||||
#endif
|
||||
return rv;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
void *
|
||||
rdpGetWindowPrivate(WindowPtr pWindow, rdpDevPrivateKey key)
|
||||
{
|
||||
void *rv;
|
||||
|
||||
#if XRDP_PRI == 1
|
||||
rv = pWindow->devPrivates[PTR2INT(key)].ptr;
|
||||
#else
|
||||
rv = dixLookupPrivate(&(pWindow->devPrivates), key);
|
||||
#endif
|
||||
return rv;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
int
|
||||
rdpPrivateInit(void)
|
||||
{
|
||||
#if XRDP_PRI == 3
|
||||
g_memset(&g_privateKeyRecGC, 0, sizeof(g_privateKeyRecGC));
|
||||
g_memset(&g_privateKeyRecWindow, 0, sizeof(g_privateKeyRecWindow));
|
||||
g_memset(&g_privateKeyRecPixmap, 0, sizeof(g_privateKeyRecPixmap));
|
||||
#endif
|
||||
return 0;
|
||||
}
|
@ -1,51 +0,0 @@
|
||||
/*
|
||||
Copyright 2013-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
to deal with privates changing in xorg versions
|
||||
|
||||
*/
|
||||
|
||||
#ifndef _XRDPPRI_H
|
||||
#define _XRDPPRI_H
|
||||
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
#include <xf86.h>
|
||||
|
||||
#include <screenint.h>
|
||||
#include <gc.h>
|
||||
|
||||
typedef void* rdpDevPrivateKey;
|
||||
|
||||
extern _X_EXPORT rdpDevPrivateKey
|
||||
rdpAllocateGCPrivate(ScreenPtr pScreen, int bytes);
|
||||
extern _X_EXPORT rdpDevPrivateKey
|
||||
rdpAllocatePixmapPrivate(ScreenPtr pScreen, int bytes);
|
||||
extern _X_EXPORT rdpDevPrivateKey
|
||||
rdpAllocateWindowPrivate(ScreenPtr pScreen, int bytes);
|
||||
extern _X_EXPORT void*
|
||||
rdpGetGCPrivate(GCPtr pGC, rdpDevPrivateKey key);
|
||||
extern _X_EXPORT void*
|
||||
rdpGetPixmapPrivate(PixmapPtr pPixmap, rdpDevPrivateKey key);
|
||||
extern _X_EXPORT void*
|
||||
rdpGetWindowPrivate(WindowPtr pWindow, rdpDevPrivateKey key);
|
||||
extern _X_EXPORT int
|
||||
rdpPrivateInit(void);
|
||||
|
||||
#endif
|
@ -1,62 +0,0 @@
|
||||
/*
|
||||
Copyright 2005-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
/* this should be before all X11 .h files */
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
|
||||
/* all driver need this */
|
||||
#include <xf86.h>
|
||||
#include <xf86_OSproc.h>
|
||||
|
||||
#include "rdp.h"
|
||||
#include "rdpDraw.h"
|
||||
#include "rdpPushPixels.h"
|
||||
|
||||
#define LOG_LEVEL 1
|
||||
#define LLOGLN(_level, _args) \
|
||||
do { if (_level < LOG_LEVEL) { ErrorF _args ; ErrorF("\n"); } } while (0)
|
||||
|
||||
/******************************************************************************/
|
||||
static void
|
||||
rdpPushPixelsOrg(GCPtr pGC, PixmapPtr pBitMap, DrawablePtr pDst,
|
||||
int w, int h, int x, int y)
|
||||
{
|
||||
GC_OP_VARS;
|
||||
|
||||
GC_OP_PROLOGUE(pGC);
|
||||
pGC->ops->PushPixels(pGC, pBitMap, pDst, w, h, x, y);
|
||||
GC_OP_EPILOGUE(pGC);
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
void
|
||||
rdpPushPixels(GCPtr pGC, PixmapPtr pBitMap, DrawablePtr pDst,
|
||||
int w, int h, int x, int y)
|
||||
{
|
||||
LLOGLN(0, ("rdpPushPixels:"));
|
||||
/* do original call */
|
||||
rdpPushPixelsOrg(pGC, pBitMap, pDst, w, h, x, y);
|
||||
}
|
@ -1,33 +0,0 @@
|
||||
/*
|
||||
Copyright 2005-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef __RDPPUSHPIXELS_H
|
||||
#define __RDPPUSHPIXELS_H
|
||||
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
#include <xf86.h>
|
||||
|
||||
extern _X_EXPORT void
|
||||
rdpPushPixels(GCPtr pGC, PixmapPtr pBitMap, DrawablePtr pDst,
|
||||
int w, int h, int x, int y);
|
||||
|
||||
#endif
|
@ -1,91 +0,0 @@
|
||||
/*
|
||||
Copyright 2005-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
/* this should be before all X11 .h files */
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
|
||||
/* all driver need this */
|
||||
#include <xf86.h>
|
||||
#include <xf86_OSproc.h>
|
||||
|
||||
#include "rdp.h"
|
||||
#include "rdpDraw.h"
|
||||
#include "rdpClientCon.h"
|
||||
#include "rdpReg.h"
|
||||
#include "rdpPutImage.h"
|
||||
|
||||
#define LOG_LEVEL 1
|
||||
#define LLOGLN(_level, _args) \
|
||||
do { if (_level < LOG_LEVEL) { ErrorF _args ; ErrorF("\n"); } } while (0)
|
||||
|
||||
/******************************************************************************/
|
||||
static void
|
||||
rdpPutImageOrg(DrawablePtr pDst, GCPtr pGC, int depth, int x, int y,
|
||||
int w, int h, int leftPad, int format, char *pBits)
|
||||
{
|
||||
GC_OP_VARS;
|
||||
|
||||
GC_OP_PROLOGUE(pGC);
|
||||
pGC->ops->PutImage(pDst, pGC, depth, x, y, w, h, leftPad,
|
||||
format, pBits);
|
||||
GC_OP_EPILOGUE(pGC);
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
void
|
||||
rdpPutImage(DrawablePtr pDst, GCPtr pGC, int depth, int x, int y,
|
||||
int w, int h, int leftPad, int format, char *pBits)
|
||||
{
|
||||
rdpPtr dev;
|
||||
RegionRec clip_reg;
|
||||
RegionRec reg;
|
||||
int cd;
|
||||
BoxRec box;
|
||||
|
||||
LLOGLN(10, ("rdpPutImage:"));
|
||||
dev = rdpGetDevFromScreen(pGC->pScreen);
|
||||
dev->counts.rdpPutImageCallCount++;
|
||||
box.x1 = x + pDst->x;
|
||||
box.y1 = y + pDst->y;
|
||||
box.x2 = box.x1 + w;
|
||||
box.y2 = box.y1 + h;
|
||||
rdpRegionInit(®, &box, 0);
|
||||
rdpRegionInit(&clip_reg, NullBox, 0);
|
||||
cd = rdpDrawGetClip(dev, &clip_reg, pDst, pGC);
|
||||
LLOGLN(10, ("rdpPutImage: cd %d", cd));
|
||||
if (cd == XRDP_CD_CLIP)
|
||||
{
|
||||
rdpRegionIntersect(®, &clip_reg, ®);
|
||||
}
|
||||
/* do original call */
|
||||
rdpPutImageOrg(pDst, pGC, depth, x, y, w, h, leftPad, format, pBits);
|
||||
if (cd != XRDP_CD_NODRAW)
|
||||
{
|
||||
rdpClientConAddAllReg(dev, ®, pDst);
|
||||
}
|
||||
rdpRegionUninit(&clip_reg);
|
||||
rdpRegionUninit(®);
|
||||
}
|
@ -1,33 +0,0 @@
|
||||
/*
|
||||
Copyright 2005-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef __RDPPUTIMAGE_H
|
||||
#define __RDPPUTIMAGE_H
|
||||
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
#include <xf86.h>
|
||||
|
||||
extern _X_EXPORT void
|
||||
rdpPutImage(DrawablePtr pDst, GCPtr pGC, int depth, int x, int y,
|
||||
int w, int h, int leftPad, int format, char* pBits);
|
||||
|
||||
#endif
|
@ -1,273 +0,0 @@
|
||||
/*
|
||||
Copyright 2011-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
RandR draw calls
|
||||
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
/* this should be before all X11 .h files */
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
|
||||
/* all driver need this */
|
||||
#include <xf86.h>
|
||||
#include <xf86_OSproc.h>
|
||||
|
||||
#include <mipointer.h>
|
||||
#include <fb.h>
|
||||
#include <micmap.h>
|
||||
#include <mi.h>
|
||||
|
||||
#include "rdp.h"
|
||||
#include "rdpDraw.h"
|
||||
#include "rdpReg.h"
|
||||
#include "rdpMisc.h"
|
||||
#include "rdpRandR.h"
|
||||
|
||||
/******************************************************************************/
|
||||
#define LOG_LEVEL 1
|
||||
#define LLOGLN(_level, _args) \
|
||||
do { if (_level < LOG_LEVEL) { ErrorF _args ; ErrorF("\n"); } } while (0)
|
||||
|
||||
/******************************************************************************/
|
||||
Bool
|
||||
rdpRRRegisterSize(ScreenPtr pScreen, int width, int height)
|
||||
{
|
||||
int mmwidth;
|
||||
int mmheight;
|
||||
RRScreenSizePtr pSize;
|
||||
|
||||
LLOGLN(0, ("rdpRRRegisterSize: width %d height %d", width, height));
|
||||
mmwidth = PixelToMM(width);
|
||||
mmheight = PixelToMM(height);
|
||||
pSize = RRRegisterSize(pScreen, width, height, mmwidth, mmheight);
|
||||
/* Tell RandR what the current config is */
|
||||
RRSetCurrentConfig(pScreen, RR_Rotate_0, 0, pSize);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
Bool
|
||||
rdpRRSetConfig(ScreenPtr pScreen, Rotation rotateKind, int rate,
|
||||
RRScreenSizePtr pSize)
|
||||
{
|
||||
LLOGLN(0, ("rdpRRSetConfig:"));
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
Bool
|
||||
rdpRRGetInfo(ScreenPtr pScreen, Rotation *pRotations)
|
||||
{
|
||||
int width;
|
||||
int height;
|
||||
rdpPtr dev;
|
||||
|
||||
LLOGLN(0, ("rdpRRGetInfo:"));
|
||||
dev = rdpGetDevFromScreen(pScreen);
|
||||
*pRotations = RR_Rotate_0;
|
||||
width = dev->width;
|
||||
height = dev->height;
|
||||
rdpRRRegisterSize(pScreen, width, height);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
Bool
|
||||
rdpRRScreenSetSize(ScreenPtr pScreen, CARD16 width, CARD16 height,
|
||||
CARD32 mmWidth, CARD32 mmHeight)
|
||||
{
|
||||
WindowPtr root;
|
||||
PixmapPtr screenPixmap;
|
||||
BoxRec box;
|
||||
rdpPtr dev;
|
||||
|
||||
LLOGLN(0, ("rdpRRScreenSetSize: width %d height %d mmWidth %d mmHeight %d",
|
||||
width, height, (int)mmWidth, (int)mmHeight));
|
||||
dev = rdpGetDevFromScreen(pScreen);
|
||||
root = rdpGetRootWindowPtr(pScreen);
|
||||
if ((width < 1) || (height < 1))
|
||||
{
|
||||
LLOGLN(10, (" error width %d height %d", width, height));
|
||||
return FALSE;
|
||||
}
|
||||
dev->width = width;
|
||||
dev->height = height;
|
||||
dev->paddedWidthInBytes = PixmapBytePad(dev->width, dev->depth);
|
||||
dev->sizeInBytes = dev->paddedWidthInBytes * dev->height;
|
||||
pScreen->width = width;
|
||||
pScreen->height = height;
|
||||
pScreen->mmWidth = mmWidth;
|
||||
pScreen->mmHeight = mmHeight;
|
||||
screenPixmap = pScreen->GetScreenPixmap(pScreen);
|
||||
g_free(dev->pfbMemory_alloc);
|
||||
dev->pfbMemory_alloc = (char *) g_malloc(dev->sizeInBytes + 16, 1);
|
||||
dev->pfbMemory = (char *) RDPALIGN(dev->pfbMemory_alloc, 16);
|
||||
if (screenPixmap != 0)
|
||||
{
|
||||
pScreen->ModifyPixmapHeader(screenPixmap, width, height,
|
||||
-1, -1,
|
||||
dev->paddedWidthInBytes,
|
||||
dev->pfbMemory);
|
||||
}
|
||||
box.x1 = 0;
|
||||
box.y1 = 0;
|
||||
box.x2 = width;
|
||||
box.y2 = height;
|
||||
rdpRegionInit(&root->winSize, &box, 1);
|
||||
rdpRegionInit(&root->borderSize, &box, 1);
|
||||
rdpRegionReset(&root->borderClip, &box);
|
||||
rdpRegionBreak(&root->clipList);
|
||||
root->drawable.width = width;
|
||||
root->drawable.height = height;
|
||||
ResizeChildrenWinSize(root, 0, 0, 0, 0);
|
||||
RRGetInfo(pScreen, 1);
|
||||
LLOGLN(0, (" screen resized to %dx%d", pScreen->width, pScreen->height));
|
||||
RRScreenSizeNotify(pScreen);
|
||||
#if XORG_VERSION_CURRENT < XORG_VERSION_NUMERIC(1, 13, 0, 0, 0)
|
||||
xf86EnableDisableFBAccess(pScreen->myNum, FALSE);
|
||||
xf86EnableDisableFBAccess(pScreen->myNum, TRUE);
|
||||
#else
|
||||
xf86EnableDisableFBAccess(xf86Screens[pScreen->myNum], FALSE);
|
||||
xf86EnableDisableFBAccess(xf86Screens[pScreen->myNum], TRUE);
|
||||
#endif
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
Bool
|
||||
rdpRRCrtcSet(ScreenPtr pScreen, RRCrtcPtr crtc, RRModePtr mode,
|
||||
int x, int y, Rotation rotation, int numOutputs,
|
||||
RROutputPtr *outputs)
|
||||
{
|
||||
LLOGLN(0, ("rdpRRCrtcSet:"));
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
Bool
|
||||
rdpRRCrtcSetGamma(ScreenPtr pScreen, RRCrtcPtr crtc)
|
||||
{
|
||||
LLOGLN(0, ("rdpRRCrtcSetGamma:"));
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
Bool
|
||||
rdpRRCrtcGetGamma(ScreenPtr pScreen, RRCrtcPtr crtc)
|
||||
{
|
||||
LLOGLN(0, ("rdpRRCrtcGetGamma: %p %p %p %p", crtc, crtc->gammaRed,
|
||||
crtc->gammaBlue, crtc->gammaGreen));
|
||||
crtc->gammaSize = 1;
|
||||
if (crtc->gammaRed == NULL)
|
||||
{
|
||||
crtc->gammaRed = g_malloc(32, 1);
|
||||
}
|
||||
if (crtc->gammaBlue == NULL)
|
||||
{
|
||||
crtc->gammaBlue = g_malloc(32, 1);
|
||||
}
|
||||
if (crtc->gammaGreen == NULL)
|
||||
{
|
||||
crtc->gammaGreen = g_malloc(32, 1);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
Bool
|
||||
rdpRROutputSetProperty(ScreenPtr pScreen, RROutputPtr output, Atom property,
|
||||
RRPropertyValuePtr value)
|
||||
{
|
||||
LLOGLN(0, ("rdpRROutputSetProperty:"));
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
Bool
|
||||
rdpRROutputValidateMode(ScreenPtr pScreen, RROutputPtr output,
|
||||
RRModePtr mode)
|
||||
{
|
||||
LLOGLN(0, ("rdpRROutputValidateMode:"));
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
void
|
||||
rdpRRModeDestroy(ScreenPtr pScreen, RRModePtr mode)
|
||||
{
|
||||
LLOGLN(0, ("rdpRRModeDestroy:"));
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
Bool
|
||||
rdpRROutputGetProperty(ScreenPtr pScreen, RROutputPtr output, Atom property)
|
||||
{
|
||||
LLOGLN(0, ("rdpRROutputGetProperty:"));
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
Bool
|
||||
rdpRRGetPanning(ScreenPtr pScreen, RRCrtcPtr crtc, BoxPtr totalArea,
|
||||
BoxPtr trackingArea, INT16 *border)
|
||||
{
|
||||
rdpPtr dev;
|
||||
|
||||
LLOGLN(0, ("rdpRRGetPanning: %p", crtc));
|
||||
dev = rdpGetDevFromScreen(pScreen);
|
||||
|
||||
if (totalArea != 0)
|
||||
{
|
||||
totalArea->x1 = 0;
|
||||
totalArea->y1 = 0;
|
||||
totalArea->x2 = dev->width;
|
||||
totalArea->y2 = dev->height;
|
||||
}
|
||||
|
||||
if (trackingArea != 0)
|
||||
{
|
||||
trackingArea->x1 = 0;
|
||||
trackingArea->y1 = 0;
|
||||
trackingArea->x2 = dev->width;
|
||||
trackingArea->y2 = dev->height;
|
||||
}
|
||||
|
||||
if (border != 0)
|
||||
{
|
||||
border[0] = 0;
|
||||
border[1] = 0;
|
||||
border[2] = 0;
|
||||
border[3] = 0;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
Bool
|
||||
rdpRRSetPanning(ScreenPtr pScreen, RRCrtcPtr crtc, BoxPtr totalArea,
|
||||
BoxPtr trackingArea, INT16 *border)
|
||||
{
|
||||
LLOGLN(0, ("rdpRRSetPanning:"));
|
||||
return TRUE;
|
||||
}
|
@ -1,64 +0,0 @@
|
||||
/*
|
||||
Copyright 2011-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef _RDPRANDR_H
|
||||
#define _RDPRANDR_H
|
||||
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
#include <xf86.h>
|
||||
|
||||
extern _X_EXPORT Bool
|
||||
rdpRRRegisterSize(ScreenPtr pScreen, int width, int height);
|
||||
extern _X_EXPORT Bool
|
||||
rdpRRGetInfo(ScreenPtr pScreen, Rotation* pRotations);
|
||||
extern _X_EXPORT Bool
|
||||
rdpRRSetConfig(ScreenPtr pScreen, Rotation rotateKind, int rate,
|
||||
RRScreenSizePtr pSize);
|
||||
extern _X_EXPORT Bool
|
||||
rdpRRScreenSetSize(ScreenPtr pScreen, CARD16 width, CARD16 height,
|
||||
CARD32 mmWidth, CARD32 mmHeight);
|
||||
extern _X_EXPORT Bool
|
||||
rdpRRCrtcSet(ScreenPtr pScreen, RRCrtcPtr crtc, RRModePtr mode,
|
||||
int x, int y, Rotation rotation, int numOutputs,
|
||||
RROutputPtr* outputs);
|
||||
extern _X_EXPORT Bool
|
||||
rdpRRCrtcSetGamma(ScreenPtr pScreen, RRCrtcPtr crtc);
|
||||
extern _X_EXPORT Bool
|
||||
rdpRRCrtcGetGamma(ScreenPtr pScreen, RRCrtcPtr crtc);
|
||||
extern _X_EXPORT Bool
|
||||
rdpRROutputSetProperty(ScreenPtr pScreen, RROutputPtr output, Atom property,
|
||||
RRPropertyValuePtr value);
|
||||
extern _X_EXPORT Bool
|
||||
rdpRROutputValidateMode(ScreenPtr pScreen, RROutputPtr output,
|
||||
RRModePtr mode);
|
||||
extern _X_EXPORT void
|
||||
rdpRRModeDestroy(ScreenPtr pScreen, RRModePtr mode);
|
||||
extern _X_EXPORT Bool
|
||||
rdpRROutputGetProperty(ScreenPtr pScreen, RROutputPtr output, Atom property);
|
||||
extern _X_EXPORT Bool
|
||||
rdpRRGetPanning(ScreenPtr pScrn, RRCrtcPtr crtc, BoxPtr totalArea,
|
||||
BoxPtr trackingArea, INT16* border);
|
||||
extern _X_EXPORT Bool
|
||||
rdpRRSetPanning(ScreenPtr pScrn, RRCrtcPtr crtc, BoxPtr totalArea,
|
||||
BoxPtr trackingArea, INT16* border);
|
||||
|
||||
#endif
|
@ -1,267 +0,0 @@
|
||||
/*
|
||||
Copyright 2013-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
to deal with regions changing in xorg versions
|
||||
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
/* this should be before all X11 .h files */
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
|
||||
/* all driver need this */
|
||||
#include <xf86.h>
|
||||
#include <xf86_OSproc.h>
|
||||
|
||||
#include "rdpReg.h"
|
||||
|
||||
/*
|
||||
miRegionCopy -> RegionCopy
|
||||
miTranslateRegion -> RegionTranslate
|
||||
miRegionNotEmpty -> RegionNotEmpty
|
||||
miIntersect -> RegionIntersect
|
||||
miRectIn -> RegionContainsRect
|
||||
miRegionInit -> RegionInit
|
||||
miRegionUninit -> RegionUninit
|
||||
miRectsToRegion -> RegionFromRects
|
||||
miRegionDestroy -> RegionDestroy
|
||||
miRegionCreate -> RegionCreate
|
||||
miUnion -> RegionUnion
|
||||
miRegionExtents -> RegionExtents
|
||||
miRegionReset -> RegionReset
|
||||
miRegionBreak -> RegionBreak
|
||||
*/
|
||||
|
||||
#if XORG_VERSION_CURRENT < XORG_VERSION_NUMERIC(1, 9, 0, 0, 0)
|
||||
/* 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8 */
|
||||
#define XRDP_REG 1
|
||||
#else
|
||||
/* 1.9, 1.10, 1.11, 1.12 */
|
||||
#define XRDP_REG 2
|
||||
#endif
|
||||
|
||||
/*****************************************************************************/
|
||||
Bool
|
||||
rdpRegionCopy(RegionPtr dst, RegionPtr src)
|
||||
{
|
||||
#if XRDP_REG == 1
|
||||
return miRegionCopy(dst, src);
|
||||
#else
|
||||
return RegionCopy(dst, src);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
void
|
||||
rdpRegionTranslate(RegionPtr pReg, int x, int y)
|
||||
{
|
||||
#if XRDP_REG == 1
|
||||
miTranslateRegion(pReg, x, y);
|
||||
#else
|
||||
RegionTranslate(pReg, x, y);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
Bool
|
||||
rdpRegionNotEmpty(RegionPtr pReg)
|
||||
{
|
||||
#if XRDP_REG == 1
|
||||
return miRegionNotEmpty(pReg);
|
||||
#else
|
||||
return RegionNotEmpty(pReg);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
Bool
|
||||
rdpRegionIntersect(RegionPtr newReg, RegionPtr reg1, RegionPtr reg2)
|
||||
{
|
||||
#if XRDP_REG == 1
|
||||
return miIntersect(newReg, reg1, reg2);
|
||||
#else
|
||||
return RegionIntersect(newReg, reg1, reg2);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
int
|
||||
rdpRegionContainsRect(RegionPtr region, BoxPtr prect)
|
||||
{
|
||||
#if XRDP_REG == 1
|
||||
return miRectIn(region, prect);
|
||||
#else
|
||||
return RegionContainsRect(region, prect);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
void
|
||||
rdpRegionInit(RegionPtr pReg, BoxPtr rect, int size)
|
||||
{
|
||||
#if XRDP_REG == 1
|
||||
miRegionInit(pReg, rect, size);
|
||||
#else
|
||||
RegionInit(pReg, rect, size);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
void
|
||||
rdpRegionUninit(RegionPtr pReg)
|
||||
{
|
||||
#if XRDP_REG == 1
|
||||
miRegionUninit(pReg);
|
||||
#else
|
||||
RegionUninit(pReg);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
RegionPtr
|
||||
rdpRegionFromRects(int nrects, xRectanglePtr prect, int ctype)
|
||||
{
|
||||
#if XRDP_REG == 1
|
||||
return miRectsToRegion(nrects, prect, ctype);
|
||||
#else
|
||||
return RegionFromRects(nrects, prect, ctype);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
void
|
||||
rdpRegionDestroy(RegionPtr pReg)
|
||||
{
|
||||
#if XRDP_REG == 1
|
||||
miRegionDestroy(pReg);
|
||||
#else
|
||||
RegionDestroy(pReg);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
RegionPtr
|
||||
rdpRegionCreate(BoxPtr rect, int size)
|
||||
{
|
||||
#if XRDP_REG == 1
|
||||
return miRegionCreate(rect, size);
|
||||
#else
|
||||
return RegionCreate(rect, size);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
Bool
|
||||
rdpRegionUnion(RegionPtr newReg, RegionPtr reg1, RegionPtr reg2)
|
||||
{
|
||||
#if XRDP_REG == 1
|
||||
return miUnion(newReg, reg1, reg2);
|
||||
#else
|
||||
return RegionUnion(newReg, reg1, reg2);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
Bool
|
||||
rdpRegionSubtract(RegionPtr newReg, RegionPtr reg1, RegionPtr reg2)
|
||||
{
|
||||
#if XRDP_REG == 1
|
||||
return miSubtract(newReg, reg1, reg2);
|
||||
#else
|
||||
return RegionSubtract(newReg, reg1, reg2);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
Bool
|
||||
rdpRegionInverse(RegionPtr newReg, RegionPtr reg1, BoxPtr invRect)
|
||||
{
|
||||
#if XRDP_REG == 1
|
||||
return miInverse(newReg, reg1, invRect);
|
||||
#else
|
||||
return RegionInverse(newReg, reg1, invRect);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
BoxPtr
|
||||
rdpRegionExtents(RegionPtr pReg)
|
||||
{
|
||||
#if XRDP_REG == 1
|
||||
return miRegionExtents(pReg);
|
||||
#else
|
||||
return RegionExtents(pReg);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
void
|
||||
rdpRegionReset(RegionPtr pReg, BoxPtr pBox)
|
||||
{
|
||||
#if XRDP_REG == 1
|
||||
miRegionReset(pReg, pBox);
|
||||
#else
|
||||
RegionReset(pReg, pBox);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
Bool
|
||||
rdpRegionBreak(RegionPtr pReg)
|
||||
{
|
||||
#if XRDP_REG == 1
|
||||
return miRegionBreak(pReg);
|
||||
#else
|
||||
return RegionBreak(pReg);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
void
|
||||
rdpRegionUnionRect(RegionPtr pReg, BoxPtr prect)
|
||||
{
|
||||
RegionRec reg;
|
||||
|
||||
rdpRegionInit(®, prect, 0);
|
||||
rdpRegionUnion(pReg, pReg, ®);
|
||||
rdpRegionUninit(®);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
int
|
||||
rdpRegionPixelCount(RegionPtr pReg)
|
||||
{
|
||||
int index;
|
||||
int count;
|
||||
int rv;
|
||||
BoxRec box;
|
||||
|
||||
rv = 0;
|
||||
count = REGION_NUM_RECTS(pReg);
|
||||
for (index = 0; index < count; index++)
|
||||
{
|
||||
box = REGION_RECTS(pReg)[index];
|
||||
rv += (box.x2 - box.x1) * (box.y2 - box.y1);
|
||||
}
|
||||
return rv;
|
||||
}
|
@ -1,68 +0,0 @@
|
||||
/*
|
||||
Copyright 2013-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
to deal with regions changing in xorg versions
|
||||
|
||||
*/
|
||||
|
||||
#ifndef __RDPREG_H
|
||||
#define __RDPREG_H
|
||||
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
#include <xf86.h>
|
||||
|
||||
extern _X_EXPORT Bool
|
||||
rdpRegionCopy(RegionPtr dst, RegionPtr src);
|
||||
extern _X_EXPORT void
|
||||
rdpRegionTranslate(RegionPtr pReg, int x, int y);
|
||||
extern _X_EXPORT Bool
|
||||
rdpRegionNotEmpty(RegionPtr pReg);
|
||||
extern _X_EXPORT Bool
|
||||
rdpRegionIntersect(RegionPtr newReg, RegionPtr reg1, RegionPtr reg2);
|
||||
extern _X_EXPORT int
|
||||
rdpRegionContainsRect(RegionPtr region, BoxPtr prect);
|
||||
extern _X_EXPORT void
|
||||
rdpRegionInit(RegionPtr pReg, BoxPtr rect, int size);
|
||||
extern _X_EXPORT void
|
||||
rdpRegionUninit(RegionPtr pReg);
|
||||
extern _X_EXPORT RegionPtr
|
||||
rdpRegionFromRects(int nrects, xRectanglePtr prect, int ctype);
|
||||
extern _X_EXPORT void
|
||||
rdpRegionDestroy(RegionPtr pReg);
|
||||
extern _X_EXPORT RegionPtr
|
||||
rdpRegionCreate(BoxPtr rect, int size);
|
||||
extern _X_EXPORT Bool
|
||||
rdpRegionUnion(RegionPtr newReg, RegionPtr reg1, RegionPtr reg2);
|
||||
extern _X_EXPORT Bool
|
||||
rdpRegionSubtract(RegionPtr newReg, RegionPtr reg1, RegionPtr reg2);
|
||||
extern _X_EXPORT Bool
|
||||
rdpRegionInverse(RegionPtr newReg, RegionPtr reg1, BoxPtr invRect);
|
||||
extern _X_EXPORT BoxPtr
|
||||
rdpRegionExtents(RegionPtr pReg);
|
||||
extern _X_EXPORT void
|
||||
rdpRegionReset(RegionPtr pReg, BoxPtr pBox);
|
||||
extern _X_EXPORT Bool
|
||||
rdpRegionBreak(RegionPtr pReg);
|
||||
extern _X_EXPORT void
|
||||
rdpRegionUnionRect(RegionPtr pReg, BoxPtr prect);
|
||||
extern _X_EXPORT int
|
||||
rdpRegionPixelCount(RegionPtr pReg);
|
||||
|
||||
#endif
|
@ -1,64 +0,0 @@
|
||||
/*
|
||||
Copyright 2005-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
/* this should be before all X11 .h files */
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
|
||||
/* all driver need this */
|
||||
#include <xf86.h>
|
||||
#include <xf86_OSproc.h>
|
||||
|
||||
#include "rdp.h"
|
||||
#include "rdpDraw.h"
|
||||
#include "rdpSetSpans.h"
|
||||
|
||||
#define LDEBUG 0
|
||||
|
||||
#define LOG_LEVEL 1
|
||||
#define LLOGLN(_level, _args) \
|
||||
do { if (_level < LOG_LEVEL) { ErrorF _args ; ErrorF("\n"); } } while (0)
|
||||
|
||||
/******************************************************************************/
|
||||
void
|
||||
rdpSetSpansOrg(DrawablePtr pDrawable, GCPtr pGC, char *psrc,
|
||||
DDXPointPtr ppt, int *pwidth, int nspans, int fSorted)
|
||||
{
|
||||
GC_OP_VARS;
|
||||
|
||||
GC_OP_PROLOGUE(pGC);
|
||||
pGC->ops->SetSpans(pDrawable, pGC, psrc, ppt, pwidth, nspans, fSorted);
|
||||
GC_OP_EPILOGUE(pGC);
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
void
|
||||
rdpSetSpans(DrawablePtr pDrawable, GCPtr pGC, char *psrc,
|
||||
DDXPointPtr ppt, int *pwidth, int nspans, int fSorted)
|
||||
{
|
||||
LLOGLN(0, ("rdpSetSpans:"));
|
||||
/* do original call */
|
||||
rdpSetSpansOrg(pDrawable, pGC, psrc, ppt, pwidth, nspans, fSorted);
|
||||
}
|
@ -1,33 +0,0 @@
|
||||
/*
|
||||
Copyright 2005-2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef __RDPSETSPANS_H
|
||||
#define __RDPSETSPANS_H
|
||||
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
#include <xf86.h>
|
||||
|
||||
extern _X_EXPORT void
|
||||
rdpSetSpans(DrawablePtr pDrawable, GCPtr pGC, char* psrc,
|
||||
DDXPointPtr ppt, int* pwidth, int nspans, int fSorted);
|
||||
|
||||
#endif
|
@ -1,110 +0,0 @@
|
||||
/*
|
||||
Copyright 2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
SIMD function asign
|
||||
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
/* this should be before all X11 .h files */
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
|
||||
/* all driver need this */
|
||||
#include <xf86.h>
|
||||
#include <xf86_OSproc.h>
|
||||
|
||||
#include "rdp.h"
|
||||
#include "rdpXv.h"
|
||||
#include "rdpCapture.h"
|
||||
#include "rdpSimd.h"
|
||||
|
||||
/* use simd, run time */
|
||||
int g_simd_use_accel = 1;
|
||||
|
||||
/* use simd, compile time, if zero, g_simd_use_accel does not matter */
|
||||
#if !defined(SIMD_USE_ACCEL)
|
||||
#define SIMD_USE_ACCEL 0
|
||||
#endif
|
||||
|
||||
#if SIMD_USE_ACCEL
|
||||
#if defined(__x86_64__) || defined(__AMD64__) || defined (_M_AMD64)
|
||||
#include "amd64/funcs_amd64.h"
|
||||
#elif defined(__x86__) || defined(_M_IX86) || defined(__i386__)
|
||||
#include "x86/funcs_x86.h"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define LOG_LEVEL 1
|
||||
#define LLOGLN(_level, _args) \
|
||||
do { if (_level < LOG_LEVEL) { ErrorF _args ; ErrorF("\n"); } } while (0)
|
||||
|
||||
/*****************************************************************************/
|
||||
Bool
|
||||
rdpSimdInit(ScreenPtr pScreen, ScrnInfoPtr pScrn)
|
||||
{
|
||||
rdpPtr dev;
|
||||
|
||||
dev = XRDPPTR(pScrn);
|
||||
/* assign functions */
|
||||
LLOGLN(0, ("rdpSimdInit: assigning yuv functions"));
|
||||
dev->yv12_to_rgb32 = YV12_to_RGB32;
|
||||
dev->i420_to_rgb32 = I420_to_RGB32;
|
||||
dev->yuy2_to_rgb32 = YUY2_to_RGB32;
|
||||
dev->uyvy_to_rgb32 = UYVY_to_RGB32;
|
||||
dev->a8r8g8b8_to_a8b8g8r8_box = a8r8g8b8_to_a8b8g8r8_box;
|
||||
#if SIMD_USE_ACCEL
|
||||
if (g_simd_use_accel)
|
||||
{
|
||||
#if defined(__x86_64__) || defined(__AMD64__) || defined (_M_AMD64)
|
||||
int ax, bx, cx, dx;
|
||||
cpuid_amd64(1, 0, &ax, &bx, &cx, &dx);
|
||||
LLOGLN(0, ("rdpSimdInit: cpuid ax 1 cx 0 return ax 0x%8.8x bx "
|
||||
"0x%8.8x cx 0x%8.8x dx 0x%8.8x", ax, bx, cx, dx));
|
||||
if (dx & (1 << 26)) /* SSE 2 */
|
||||
{
|
||||
dev->yv12_to_rgb32 = yv12_to_rgb32_amd64_sse2;
|
||||
dev->i420_to_rgb32 = i420_to_rgb32_amd64_sse2;
|
||||
dev->yuy2_to_rgb32 = yuy2_to_rgb32_amd64_sse2;
|
||||
dev->uyvy_to_rgb32 = uyvy_to_rgb32_amd64_sse2;
|
||||
LLOGLN(0, ("rdpSimdInit: sse2 amd64 yuv functions assigned"));
|
||||
}
|
||||
#elif defined(__x86__) || defined(_M_IX86) || defined(__i386__)
|
||||
int ax, bx, cx, dx;
|
||||
cpuid_x86(1, 0, &ax, &bx, &cx, &dx);
|
||||
LLOGLN(0, ("rdpSimdInit: cpuid ax 1 cx 0 return ax 0x%8.8x bx "
|
||||
"0x%8.8x cx 0x%8.8x dx 0x%8.8x", ax, bx, cx, dx));
|
||||
if (dx & (1 << 26)) /* SSE 2 */
|
||||
{
|
||||
dev->yv12_to_rgb32 = yv12_to_rgb32_x86_sse2;
|
||||
dev->i420_to_rgb32 = i420_to_rgb32_x86_sse2;
|
||||
dev->yuy2_to_rgb32 = yuy2_to_rgb32_x86_sse2;
|
||||
dev->uyvy_to_rgb32 = uyvy_to_rgb32_x86_sse2;
|
||||
dev->a8r8g8b8_to_a8b8g8r8_box = a8r8g8b8_to_a8b8g8r8_box_x86_sse2;
|
||||
LLOGLN(0, ("rdpSimdInit: sse2 x86 yuv functions assigned"));
|
||||
}
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
return 1;
|
||||
}
|
||||
|
@ -1,34 +0,0 @@
|
||||
/*
|
||||
Copyright 2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
SIMD function asign
|
||||
|
||||
*/
|
||||
|
||||
#ifndef __RDPSIMD_H
|
||||
#define __RDPSIMD_H
|
||||
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
#include <xf86.h>
|
||||
|
||||
extern _X_EXPORT Bool
|
||||
rdpSimdInit(ScreenPtr pScreen, ScrnInfoPtr pScrn);
|
||||
|
||||
#endif
|
@ -1,88 +0,0 @@
|
||||
/*
|
||||
Copyright 2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
/* this should be before all X11 .h files */
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
|
||||
/* all driver need this */
|
||||
#include <xf86.h>
|
||||
#include <xf86_OSproc.h>
|
||||
|
||||
#include <mipict.h>
|
||||
#include <picture.h>
|
||||
|
||||
#include "rdp.h"
|
||||
#include "rdpDraw.h"
|
||||
#include "rdpClientCon.h"
|
||||
#include "rdpReg.h"
|
||||
#include "rdpTrapezoids.h"
|
||||
|
||||
/******************************************************************************/
|
||||
#define LOG_LEVEL 1
|
||||
#define LLOGLN(_level, _args) \
|
||||
do { if (_level < LOG_LEVEL) { ErrorF _args ; ErrorF("\n"); } } while (0)
|
||||
|
||||
/******************************************************************************/
|
||||
static void
|
||||
rdpTrapezoidsOrg(PictureScreenPtr ps, rdpPtr dev,
|
||||
CARD8 op, PicturePtr pSrc, PicturePtr pDst,
|
||||
PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc,
|
||||
int ntrap, xTrapezoid *traps)
|
||||
{
|
||||
ps->Trapezoids = dev->Trapezoids;
|
||||
ps->Trapezoids(op, pSrc, pDst, maskFormat, xSrc, ySrc, ntrap, traps);
|
||||
ps->Trapezoids = rdpTrapezoids;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
void
|
||||
rdpTrapezoids(CARD8 op, PicturePtr pSrc, PicturePtr pDst,
|
||||
PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc,
|
||||
int ntrap, xTrapezoid *traps)
|
||||
{
|
||||
ScreenPtr pScreen;
|
||||
rdpPtr dev;
|
||||
PictureScreenPtr ps;
|
||||
BoxRec box;
|
||||
RegionRec reg;
|
||||
|
||||
LLOGLN(10, ("rdpTrapezoids:"));
|
||||
pScreen = pDst->pDrawable->pScreen;
|
||||
dev = rdpGetDevFromScreen(pScreen);
|
||||
dev->counts.rdpTrapezoidsCallCount++;
|
||||
miTrapezoidBounds(ntrap, traps, &box);
|
||||
box.x1 += pDst->pDrawable->x;
|
||||
box.y1 += pDst->pDrawable->y;
|
||||
box.x2 += pDst->pDrawable->x;
|
||||
box.y2 += pDst->pDrawable->y;
|
||||
rdpRegionInit(®, &box, 0);
|
||||
ps = GetPictureScreen(pScreen);
|
||||
/* do original call */
|
||||
rdpTrapezoidsOrg(ps, dev, op, pSrc, pDst, maskFormat, xSrc, ySrc,
|
||||
ntrap, traps);
|
||||
rdpClientConAddAllReg(dev, ®, pDst->pDrawable);
|
||||
rdpRegionUninit(®);
|
||||
}
|
@ -1,34 +0,0 @@
|
||||
/*
|
||||
Copyright 2014 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef _RDPTRAPEZOIDS_H
|
||||
#define _RDPTRAPEZOIDS_H
|
||||
|
||||
#include <xorg-server.h>
|
||||
#include <xorgVersion.h>
|
||||
#include <xf86.h>
|
||||
|
||||
extern _X_EXPORT void
|
||||
rdpTrapezoids(CARD8 op, PicturePtr pSrc, PicturePtr pDst,
|
||||
PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc,
|
||||
int ntrap, xTrapezoid *traps);
|
||||
|
||||
#endif
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user