diff options
Diffstat (limited to 'Tests/X11')
-rw-r--r-- | Tests/X11/CMakeLists.txt | 40 | ||||
-rw-r--r-- | Tests/X11/HelloWorldX11.cxx | 146 | ||||
-rw-r--r-- | Tests/X11/X11.c | 21 |
3 files changed, 207 insertions, 0 deletions
diff --git a/Tests/X11/CMakeLists.txt b/Tests/X11/CMakeLists.txt new file mode 100644 index 000000000..03aa09578 --- /dev/null +++ b/Tests/X11/CMakeLists.txt @@ -0,0 +1,40 @@ +# a simple C only test case +cmake_minimum_required (VERSION 2.6) +PROJECT (UseX11 CXX C) + +INCLUDE (${CMAKE_ROOT}/Modules/FindX11.cmake) +MESSAGE("X11_FOUND: ${X11_FOUND}") + +ADD_EXECUTABLE (UseX11 X11.c) +install(TARGETS UseX11 DESTINATION bin) + +# so for universal binaries this test will fail if +# +IF(APPLE) + LIST(LENGTH CMAKE_OSX_ARCHITECTURES NUMARCH) + IF(NUMARCH GREATER 1) + IF(NOT EXISTS /usr/X11R6/lib//libSM.6.dylib) + SET(X11_FOUND FALSE) + MESSAGE("disable X11, because of universal binary and sysroot") + ENDIF(NOT EXISTS /usr/X11R6/lib//libSM.6.dylib) + ENDIF(NUMARCH GREATER 1) +ENDIF(APPLE) + +IF(X11_FOUND) + ADD_DEFINITIONS(-DCMAKE_HAS_X) + INCLUDE_DIRECTORIES(${X11_INCLUDE_DIR}) + TARGET_LINK_LIBRARIES(UseX11 ${X11_LIBRARIES}) + IF(APPLE) + ADD_EXECUTABLE(HelloWorldX11 HelloWorldX11.cxx) + TARGET_LINK_LIBRARIES(HelloWorldX11 ${X11_LIBRARIES}) + install(TARGETS HelloWorldX11 DESTINATION bin) + + set(CPACK_BINARY_OSXX11 ON CACHE BOOL "" FORCE) + set(CPACK_BINARY_PACKAGEMAKER OFF CACHE BOOL "" FORCE ) + set(CPACK_PACKAGE_NAME HelloWorldX11Package) + set(CPACK_PACKAGE_EXECUTABLES HelloWorldX11 HelloWorldX11) + ENDIF(APPLE) +ENDIF(X11_FOUND) + +# build a CPack driven installer package +include(CPack) diff --git a/Tests/X11/HelloWorldX11.cxx b/Tests/X11/HelloWorldX11.cxx new file mode 100644 index 000000000..e3c9dd9cf --- /dev/null +++ b/Tests/X11/HelloWorldX11.cxx @@ -0,0 +1,146 @@ + +/*** START MAIN.H ***/ +/* http://www.geocities.com/jeff_louie/x11/helloworld.htm* */ +/* + * main.h + * TestX + * + * Created by Jeff Louie on Tue Feb 03 2004. + * Copyright (c) 2004 __MyCompanyName__. All rights reserved. + * + */ + + +#ifndef MAIN_H +#define MAIN_H 1 + +#include <iostream> +#include <stdlib.h> + +/* include the X library headers */ +#include <X11/Xlib.h> +#include <X11/Xutil.h> +#include <X11/Xos.h> + +class Main { + +public: + // constructor + Main(int argc, char * const argv[]); + //virtual ~Main(); + + +private: + + + /* here are our X variables */ + Display *dis; + int screen; + Window win; + GC gc; + + /* here are our X routines declared! */ + void init_x(); + void close_x(); + void redraw(); + int delay(int i); + +}; + +#endif + +/*** END MAIN.H ***/ + +/*** START MAIN.CPP ***/ + +// modified from Brian Hammond's Howdy program at +// http://www.insanityengine.com/doc/x11/xintro.html +// jeff louie 02.05.2004 + + + +int main (int argc, char * const argv[]) { + Main m(argc, argv); + return 0; +} + +//Main::~Main() {;}; +Main::Main (int argc, char * const argv[]) { + XEvent event; // XEvent declaration + KeySym key; // KeyPress Events + char text[255]; // char buffer for KeyPress Events + + init_x(); + + // event loop + while(1) { + // get the next event and stuff it into our event variable. + // Note: only events we set the mask for are detected! + XNextEvent(dis, &event); + + + switch (event.type) { + int x; + int y; + case Expose: + if (event.xexpose.count==0) { + redraw(); + } + break; + case KeyPress: + if (XLookupString(&event.xkey,text,255,&key,0)==1) { + // use the XLookupString routine to convert the invent + // KeyPress data into regular text. Weird but necessary... + if ((text[0]=='q') || (text[0]=='Q')) { + close_x(); + } + else { + // echo key press + printf("You pressed the %c key!\n",text[0]); + } + } + break; + case ButtonPress: + // get cursor position + x= event.xbutton.x; + y= event.xbutton.y; + strcpy(text,"X is FUN!"); + XSetForeground(dis,gc,rand()%event.xbutton.x%255); + // draw text at cursor + XDrawString(dis,win,gc,x,y, text, strlen(text)); + break; + default: + printf("Unhandled event.\n"); + } + } +} + +void Main::init_x() { + unsigned long black,white; + + dis=XOpenDisplay(NULL); + screen=DefaultScreen(dis); + black=BlackPixel(dis,screen), + white=WhitePixel(dis, screen); + win=XCreateSimpleWindow(dis,DefaultRootWindow(dis),0,0, + 300, 300, 5,black, white); + XSetStandardProperties(dis,win,"Hello World","Hi",None,NULL,0,NULL); + XSelectInput(dis, win, ExposureMask|ButtonPressMask|KeyPressMask); + // get Graphics Context + gc=XCreateGC(dis, win, 0,0); + XSetBackground(dis,gc,white); + XSetForeground(dis,gc,black); + XClearWindow(dis, win); + XMapRaised(dis, win); +}; + +void Main::close_x() { + XFreeGC(dis, gc); + XDestroyWindow(dis,win); + XCloseDisplay(dis); + exit(1); +}; + +void Main::redraw() { + XClearWindow(dis, win); +}; diff --git a/Tests/X11/X11.c b/Tests/X11/X11.c new file mode 100644 index 000000000..b802ed8b9 --- /dev/null +++ b/Tests/X11/X11.c @@ -0,0 +1,21 @@ +#include "stdio.h" +#ifdef CMAKE_HAS_X + +#include <X11/Xlib.h> +#include <X11/Xutil.h> + +int main() +{ + printf("There is X on this computer\n"); + return 0; +} + +#else + +int main() +{ + printf("No X on this computer\n"); + return 0; +} + +#endif |