|
Packit |
1fb8d4 |
/**
|
|
Packit |
1fb8d4 |
* RdTk: Remote Desktop Toolkit
|
|
Packit |
1fb8d4 |
*
|
|
Packit |
1fb8d4 |
* Copyright 2014 Marc-Andre Moreau <marcandre.moreau@gmail.com>
|
|
Packit |
1fb8d4 |
*
|
|
Packit |
1fb8d4 |
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
Packit |
1fb8d4 |
* you may not use this file except in compliance with the License.
|
|
Packit |
1fb8d4 |
* You may obtain a copy of the License at
|
|
Packit |
1fb8d4 |
*
|
|
Packit |
1fb8d4 |
* http://www.apache.org/licenses/LICENSE-2.0
|
|
Packit |
1fb8d4 |
*
|
|
Packit |
1fb8d4 |
* Unless required by applicable law or agreed to in writing, software
|
|
Packit |
1fb8d4 |
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
Packit |
1fb8d4 |
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
Packit |
1fb8d4 |
* See the License for the specific language governing permissions and
|
|
Packit |
1fb8d4 |
* limitations under the License.
|
|
Packit |
1fb8d4 |
*/
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
#ifdef HAVE_CONFIG_H
|
|
Packit |
1fb8d4 |
#include "config.h"
|
|
Packit |
1fb8d4 |
#endif
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
#include <freerdp/log.h>
|
|
Packit |
1fb8d4 |
#include <rdtk/rdtk.h>
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
#include <X11/Xlib.h>
|
|
Packit |
1fb8d4 |
#include <X11/Xutil.h>
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
#define TAG "rdtk.sample"
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
int main(int argc, char** argv)
|
|
Packit |
1fb8d4 |
{
|
|
Packit |
1fb8d4 |
GC gc;
|
|
Packit |
1fb8d4 |
int index;
|
|
Packit |
1fb8d4 |
int depth;
|
|
Packit |
1fb8d4 |
int x, y;
|
|
Packit |
1fb8d4 |
int width;
|
|
Packit |
1fb8d4 |
int height;
|
|
Packit |
1fb8d4 |
BYTE* buffer;
|
|
Packit |
1fb8d4 |
int scanline;
|
|
Packit |
1fb8d4 |
int pf_count;
|
|
Packit |
1fb8d4 |
XEvent event;
|
|
Packit |
1fb8d4 |
XImage* image;
|
|
Packit |
1fb8d4 |
Pixmap pixmap;
|
|
Packit |
1fb8d4 |
Screen* screen;
|
|
Packit |
1fb8d4 |
Visual* visual;
|
|
Packit |
1fb8d4 |
int scanline_pad;
|
|
Packit |
1fb8d4 |
int screen_number;
|
|
Packit |
1fb8d4 |
Display* display;
|
|
Packit |
1fb8d4 |
Window window;
|
|
Packit |
1fb8d4 |
Window root_window;
|
|
Packit |
1fb8d4 |
rdtkEngine* engine;
|
|
Packit |
1fb8d4 |
rdtkSurface* surface;
|
|
Packit |
1fb8d4 |
unsigned long border;
|
|
Packit |
1fb8d4 |
unsigned long background;
|
|
Packit |
1fb8d4 |
XPixmapFormatValues* pf;
|
|
Packit |
1fb8d4 |
XPixmapFormatValues* pfs;
|
|
Packit Service |
5a9772 |
|
|
Packit |
1fb8d4 |
display = XOpenDisplay(NULL);
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (!display)
|
|
Packit |
1fb8d4 |
{
|
|
Packit |
1fb8d4 |
WLog_ERR(TAG, "Cannot open display");
|
|
Packit |
1fb8d4 |
return 1;
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
x = 10;
|
|
Packit |
1fb8d4 |
y = 10;
|
|
Packit |
1fb8d4 |
width = 640;
|
|
Packit |
1fb8d4 |
height = 480;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
screen_number = DefaultScreen(display);
|
|
Packit |
1fb8d4 |
screen = ScreenOfDisplay(display, screen_number);
|
|
Packit |
1fb8d4 |
visual = DefaultVisual(display, screen_number);
|
|
Packit |
1fb8d4 |
gc = DefaultGC(display, screen_number);
|
|
Packit |
1fb8d4 |
depth = DefaultDepthOfScreen(screen);
|
|
Packit |
1fb8d4 |
root_window = RootWindow(display, screen_number);
|
|
Packit |
1fb8d4 |
border = BlackPixel(display, screen_number);
|
|
Packit |
1fb8d4 |
background = WhitePixel(display, screen_number);
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
scanline_pad = 0;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
pfs = XListPixmapFormats(display, &pf_count);
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
for (index = 0; index < pf_count; index++)
|
|
Packit |
1fb8d4 |
{
|
|
Packit |
1fb8d4 |
pf = &pfs[index];
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (pf->depth == depth)
|
|
Packit |
1fb8d4 |
{
|
|
Packit |
1fb8d4 |
scanline_pad = pf->scanline_pad;
|
|
Packit |
1fb8d4 |
break;
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
XFree(pfs);
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
engine = rdtk_engine_new();
|
|
Packit |
1fb8d4 |
if (!engine)
|
|
Packit |
1fb8d4 |
return 1;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
scanline = width * 4;
|
|
Packit Service |
5a9772 |
buffer = (BYTE*)calloc(height, scanline);
|
|
Packit |
1fb8d4 |
if (!buffer)
|
|
Packit |
1fb8d4 |
return 1;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
surface = rdtk_surface_new(engine, buffer, width, height, scanline);
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
rdtk_surface_fill(surface, 0, 0, width, height, 0x3BB9FF);
|
|
Packit |
1fb8d4 |
rdtk_label_draw(surface, 16, 16, 128, 32, NULL, "label", 0, 0);
|
|
Packit |
1fb8d4 |
rdtk_button_draw(surface, 16, 64, 128, 32, NULL, "button");
|
|
Packit |
1fb8d4 |
rdtk_text_field_draw(surface, 16, 128, 128, 32, NULL, "text field");
|
|
Packit |
1fb8d4 |
|
|
Packit Service |
5a9772 |
window = XCreateSimpleWindow(display, root_window, x, y, width, height, 1, border, background);
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
XSelectInput(display, window, ExposureMask | KeyPressMask);
|
|
Packit |
1fb8d4 |
XMapWindow(display, window);
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
XSetFunction(display, gc, GXcopy);
|
|
Packit |
1fb8d4 |
XSetFillStyle(display, gc, FillSolid);
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
pixmap = XCreatePixmap(display, window, width, height, depth);
|
|
Packit |
1fb8d4 |
|
|
Packit Service |
5a9772 |
image = XCreateImage(display, visual, depth, ZPixmap, 0, (char*)buffer, width, height,
|
|
Packit Service |
5a9772 |
scanline_pad, 0);
|
|
Packit Service |
5a9772 |
|
|
Packit |
1fb8d4 |
while (1)
|
|
Packit |
1fb8d4 |
{
|
|
Packit |
1fb8d4 |
XNextEvent(display, &event);
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (event.type == Expose)
|
|
Packit |
1fb8d4 |
{
|
|
Packit |
1fb8d4 |
XPutImage(display, pixmap, gc, image, 0, 0, 0, 0, width, height);
|
|
Packit |
1fb8d4 |
XCopyArea(display, pixmap, window, gc, 0, 0, width, height, 0, 0);
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (event.type == KeyPress)
|
|
Packit |
1fb8d4 |
break;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (event.type == ClientMessage)
|
|
Packit |
1fb8d4 |
break;
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
XFlush(display);
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
XDestroyImage(image);
|
|
Packit |
1fb8d4 |
XCloseDisplay(display);
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
rdtk_surface_free(surface);
|
|
Packit |
1fb8d4 |
free(buffer);
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
rdtk_engine_free(engine);
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
return 0;
|
|
Packit |
1fb8d4 |
}
|