diff --git a/client/X11/CMakeLists.txt b/client/X11/CMakeLists.txt index 7cdddbead..4392349e3 100644 --- a/client/X11/CMakeLists.txt +++ b/client/X11/CMakeLists.txt @@ -101,12 +101,17 @@ set(XI_FEATURE_TYPE "RECOMMENDED") set(XI_FEATURE_PURPOSE "input") set(XI_FEATURE_DESCRIPTION "X11 input extension") +set(XRENDER_FEATURE_TYPE "RECOMMENDED") +set(XRENDER_FEATURE_PURPOSE "rendering") +set(XRENDER_FEATURE_DESCRIPTION "X11 render extension") + find_feature(XShm ${XSHM_FEATURE_TYPE} ${XSHM_FEATURE_PURPOSE} ${XSHM_FEATURE_DESCRIPTION}) find_feature(Xinerama ${XINERAMA_FEATURE_TYPE} ${XINERAMA_FEATURE_PURPOSE} ${XINERAMA_FEATURE_DESCRIPTION}) find_feature(Xext ${XEXT_FEATURE_TYPE} ${XEXT_FEATURE_PURPOSE} ${XEXT_FEATURE_DESCRIPTION}) find_feature(Xcursor ${XCURSOR_FEATURE_TYPE} ${XCURSOR_FEATURE_PURPOSE} ${XCURSOR_FEATURE_DESCRIPTION}) find_feature(Xv ${XV_FEATURE_TYPE} ${XV_FEATURE_PURPOSE} ${XV_FEATURE_DESCRIPTION}) find_feature(Xi ${XI_FEATURE_TYPE} ${XI_FEATURE_PURPOSE} ${XI_FEATURE_DESCRIPTION}) +find_feature(Xrender ${XRENDER_FEATURE_TYPE} ${XRENDER_FEATURE_PURPOSE} ${XRENDER_FEATURE_DESCRIPTION}) if(WITH_XINERAMA) add_definitions(-DWITH_XINERAMA) @@ -138,15 +143,21 @@ if(WITH_XI) set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} ${XI_LIBRARIES}) endif() +if(WITH_XRENDER) + add_definitions(-DWITH_XRENDER) + include_directories(${XRENDER_INCLUDE_DIRS}) + set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} ${XRENDER_LIBRARIES}) +endif() + #find_package(ImageMagick COMPONENTS MagickCore) #include_directories(${ImageMagick_MagickCore_INCLUDE_DIRS}) #set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} ${ImageMagick_MagickCore_LIBRARIES}) #SET(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} /usr/include/ImageMagick-6) #SET(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} -I/usr/include/ImageMagick-6) -message(Found MagickCore: ${ImageMagick_MagickCore_FOUND}) -message(INCLUDE: ${ImageMagick_MagickCore_INCLUDE_DIRS}) -message(LIBS: ${${MODULE_PREFIX}_LIBS}) +#message(Found MagickCore: ${ImageMagick_MagickCore_FOUND}) +#message(INCLUDE: ${ImageMagick_MagickCore_INCLUDE_DIRS}) +#message(LIBS: ${${MODULE_PREFIX}_LIBS}) #if(NOT ${ImageMagick_MagickCore_FOUND}) @@ -156,8 +167,8 @@ message(LIBS: ${${MODULE_PREFIX}_LIBS}) #endif() #ubuntu -include_directories(/usr/include/ImageMagick) -set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} /usr/lib/x86_64-linux-gnu/libMagickCore.so.5) +#include_directories(/usr/include/ImageMagick) +#set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} /usr/lib/x86_64-linux-gnu/libMagickCore.so.5) diff --git a/client/X11/xf_interface.c b/client/X11/xf_interface.c index 69073168f..6a7dc5dcc 100644 --- a/client/X11/xf_interface.c +++ b/client/X11/xf_interface.c @@ -25,6 +25,10 @@ #include #include +#ifdef WITH_XRENDER +#include +#endif + #ifdef WITH_XI #include #endif @@ -210,7 +214,75 @@ void xf_sw_end_paint(rdpContext* context) //combine xfi->primary with xfi->image XPutImage(xfi->display, xfi->primary, xfi->gc, xfi->image, x, y, x, y, w, h); - XCopyArea(xfi->display, xfi->primary, xfi->window->handle, xfi->gc, x, y, w, h, x, y); + //XCopyArea(xfi->display, xfi->primary, xfi->window->handle, xfi->gc, x, y, w, h, x, y); + + + if(1)//(rtest < 1) + { + Picture pic_prim; + Picture pic_win; + XRenderPictureAttributes pa; + XRenderPictFormat* picFormat; + + + picFormat = XRenderFindStandardFormat(xfi->display, PictStandardRGB24); + pa.subwindow_mode = IncludeInferiors;//wtf is this? + pic_prim = XRenderCreatePicture(xfi->display, xfi->primary, picFormat, CPSubwindowMode, &pa); + pic_win = XRenderCreatePicture(xfi->display, xfi->window->handle, picFormat, CPSubwindowMode, &pa); + + //normal + //XRenderComposite(xfi->display, PictOpSrc, pic_prim, pic_prim, pic_win, x, y, x, y, x, y, w, h); + + + //scale + { + int w2, h2; + int x2, y2; + XTransform transform; + double scale = 1.5; + + w2 = (int)(w / scale); + h2 = (int)(h / scale); + + x2 = (int)(x / scale); + y2 = (int)(y / scale); + + if(w2 == 0) + w2++; + if(h2 == 0) + h2++; + + transform.matrix[0][0] = XDoubleToFixed(scale); + transform.matrix[0][1] = XDoubleToFixed(0.0); + transform.matrix[0][2] = XDoubleToFixed(0.0); + + transform.matrix[1][0] = XDoubleToFixed(0.0); + transform.matrix[1][1] = XDoubleToFixed(scale); + transform.matrix[1][2] = XDoubleToFixed(0.0); + + transform.matrix[2][0] = XDoubleToFixed(0.0); + transform.matrix[2][1] = XDoubleToFixed(0.0); + transform.matrix[2][2] = XDoubleToFixed(1.0); + + XRenderSetPictureTransform(xfi->display, pic_prim, &transform); + + XRenderComposite(xfi->display, PictOpSrc, pic_prim, 0, pic_win, x, y, x, y, x, y, w, h); + + } + + + rtest++; + } + + + + + + + + + + /* if(1)//(rtest < 2) { diff --git a/cmake/FindXrender.cmake b/cmake/FindXrender.cmake new file mode 100644 index 000000000..3fe4a0172 --- /dev/null +++ b/cmake/FindXrender.cmake @@ -0,0 +1,44 @@ +# - Find Xrender +# Find the Xrender libraries +# +# This module defines the following variables: +# Xrender_FOUND - true if Xrender_INCLUDE_DIR & Xrender_LIBRARY are found +# Xrender_LIBRARIES - Set when Xrender_LIBRARY is found +# Xrender_INCLUDE_DIRS - Set when Xrender_INCLUDE_DIR is found +# +# Xrender_INCLUDE_DIR - where to find Xrendernput2.h, etc. +# Xrender_LIBRARY - the Xrender library +# + +#============================================================================= +# Copyright 2013 Corey Clayton +# +# 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. +#============================================================================= + +find_path(Xrender_INCLUDE_DIR NAMES X11/extensions/Xrender.h + DOC "The Xrender include directory") + +find_library(Xrender_LIBRARY NAMES Xrender + DOC "The Xrender library") + +include(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(Xrender DEFAULT_MSG Xrender_LIBRARY Xrender_INCLUDE_DIR) + +if(Xrender_FOUND) +set(XRENDER_LIBRARIES ${Xrender_LIBRARY}) +set(XRENDER_INCLUDE_DIRS ${Xrender_INCLUDE_DIR}) +endif() + +mark_as_advanced(Xrender_INCLUDE_DIR Xrender_LIBRARY) +