freerdp* instance;
};
-void df_context_size(freerdp* instance, uint32* size)
+void df_context_new(freerdp* instance, rdpContext* context)
{
- *size = sizeof(dfContext);
+ context->channels = freerdp_channels_new();
}
-void df_context_new(freerdp* instance, dfContext* context)
-{
- rdpContext* _context = (rdpContext*) context;
- _context->channels = freerdp_channels_new();
-}
-
-void df_context_free(freerdp* instance, dfContext* context)
+void df_context_free(freerdp* instance, rdpContext* context)
{
}
instance->VerifyCertificate = df_verify_certificate;
instance->ReceiveChannelData = df_receive_channel_data;
- instance->ContextSize = (pcContextSize) df_context_size;
- instance->ContextNew = (pcContextNew) df_context_new;
- instance->ContextFree = (pcContextFree) df_context_free;
+ instance->context_size = sizeof(dfContext);
+ instance->ContextNew = df_context_new;
+ instance->ContextFree = df_context_free;
freerdp_context_new(instance);
context = (dfContext*) instance->context;
instance->VerifyCertificate = wf_verify_certificate;
instance->ReceiveChannelData = wf_receive_channel_data;
- instance->ContextSize = (pcContextSize) wf_context_size;
+ instance->ContextSize = (pContextSize) wf_context_size;
instance->ContextNew = (pcContextNew) wf_context_new;
instance->ContextFree = (pcContextFree) wf_context_free;
freerdp_context_new(instance);
return bitmap;
}
-Pixmap xf_offscreen_new(xfInfo* xfi, int width, int height, int bpp, uint8* data)
-{
- Pixmap bitmap;
- uint8* cdata;
- XImage* image;
-
- bitmap = XCreatePixmap(xfi->display, xfi->drawable, width, height, xfi->depth);
-
- if(data != NULL)
- {
- cdata = freerdp_image_convert(data, NULL, width, height, bpp, xfi->bpp, xfi->clrconv);
- image = XCreateImage(xfi->display, xfi->visual, xfi->depth,
- ZPixmap, 0, (char*) cdata, width, height, xfi->scanline_pad, 0);
-
- XPutImage(xfi->display, bitmap, xfi->gc, image, 0, 0, 0, 0, width, height);
- XFree(image);
- if (cdata != data)
- xfree(cdata);
- }
-
- return bitmap;
-}
-
Pixmap xf_mono_bitmap_new(xfInfo* xfi, int width, int height, uint8* data)
{
int scanline;
rdpBrush* brush;
uint32 foreColor;
uint32 backColor;
- rdpCache* cache = update->context->cache;
xfInfo* xfi = ((xfContext*) update->context)->xfi;
brush = &patblt->brush;
foreColor = freerdp_color_convert(patblt->foreColor, xfi->srcBpp, 32, xfi->clrconv);
backColor = freerdp_color_convert(patblt->backColor, xfi->srcBpp, 32, xfi->clrconv);
- if (brush->style & CACHED_BRUSH)
- {
- brush->data = brush_cache_get(cache->brush, brush->index, &brush->bpp);
- brush->style = GDI_BS_PATTERN;
- }
-
if (brush->style == GDI_BS_SOLID)
{
XSetFillStyle(xfi->display, xfi->gc, FillSolid);
gdi_InvalidateRegion(xfi->hdc, patblt->nLeftRect, patblt->nTopRect, patblt->nWidth, patblt->nHeight);
}
+
XSetFunction(xfi->display, xfi->gc, GXcopy);
}
gdi_InvalidateRegion(xfi->hdc, scrblt->nXSrc, scrblt->nYSrc, scrblt->nWidth, scrblt->nHeight);
}
+
XSetFunction(xfi->display, xfi->gc, GXcopy);
}
gdi_InvalidateRegion(xfi->hdc, line_to->nXStart, line_to->nYStart, width, height);
}
}
+
XSetFunction(xfi->display, xfi->gc, GXcopy);
}
gdi_InvalidateRegion(xfi->hdc, memblt->nLeftRect, memblt->nTopRect, memblt->nWidth, memblt->nHeight);
}
+
XSetFunction(xfi->display, xfi->gc, GXcopy);
}
}
-void xf_gdi_cache_brush(rdpUpdate* update, CACHE_BRUSH_ORDER* cache_brush)
-{
- rdpCache* cache = update->context->cache;
- brush_cache_put(cache->brush, cache_brush->index, cache_brush->data, cache_brush->bpp);
-}
-
void xf_gdi_surface_bits(rdpUpdate* update, SURFACE_BITS_COMMAND* surface_bits_command)
{
int i, tx, ty;
update->CacheColorTable = xf_gdi_cache_color_table;
update->CacheGlyph = xf_gdi_cache_glyph;
update->CacheGlyphV2 = xf_gdi_cache_glyph_v2;
- update->CacheBrush = xf_gdi_cache_brush;
update->SurfaceBits = xf_gdi_surface_bits;
}
int xf_process_client_args(rdpSettings* settings, const char* opt, const char* val, void* user_data);
int xf_process_plugin_args(rdpSettings* settings, const char* name, RDP_PLUGIN_DATA* plugin_data, void* user_data);
-void xf_context_size(freerdp* instance, uint32* size)
+void xf_context_new(freerdp* instance, rdpContext* context)
{
- *size = sizeof(xfContext);
+ context->channels = freerdp_channels_new();
}
-void xf_context_new(freerdp* instance, xfContext* context)
-{
- rdpContext* _context = &context->_p;
- _context->channels = freerdp_channels_new();
-}
-
-void xf_context_free(freerdp* instance, xfContext* context)
+void xf_context_free(freerdp* instance, rdpContext* context)
{
}
if (xfi->sw_gdi != True)
{
+ brush_cache_register_callbacks(instance->update);
bitmap_cache_register_callbacks(instance->update);
offscreen_cache_register_callbacks(instance->update);
}
instance->VerifyCertificate = xf_verify_certificate;
instance->ReceiveChannelData = xf_receive_channel_data;
- instance->ContextSize = (pcContextSize) xf_context_size;
- instance->ContextNew = (pcContextNew) xf_context_new;
- instance->ContextFree = (pcContextFree) xf_context_free;
+ instance->context_size = sizeof(xfContext);
+ instance->ContextNew = (pContextNew) xf_context_new;
+ instance->ContextFree = (pContextFree) xf_context_free;
freerdp_context_new(instance);
instance->context->argc = argc;
rdpContext _p;
tfInfo* tfi;
- rdpChannels* channels;
};
typedef struct tf_context tfContext;
#include <freerdp/freerdp.h>
#include <freerdp/utils/args.h>
-void tf_context_size(freerdp* instance, uint32* size)
-{
- *size = sizeof(tfContext);
-}
-
-void tf_context_new(freerdp* instance, tfContext* context)
+void tf_context_new(freerdp* instance, rdpContext* context)
{
context->channels = freerdp_channels_new();
}
-void tf_context_free(freerdp* instance, tfContext* context)
+void tf_context_free(freerdp* instance, rdpContext* context)
{
}
settings->order_support[NEG_ELLIPSE_SC_INDEX] = True;
settings->order_support[NEG_ELLIPSE_CB_INDEX] = True;
- freerdp_channels_pre_connect(context->channels, instance);
+ freerdp_channels_pre_connect(instance->context->channels, instance);
return True;
}
boolean tf_post_connect(freerdp* instance)
{
rdpGdi* gdi;
- tfContext* context;
-
- context = (tfContext*) instance->context;
gdi_init(instance, CLRCONV_ALPHA | CLRBUF_16BPP | CLRBUF_32BPP, NULL);
gdi = instance->context->gdi;
instance->update->BeginPaint = tf_begin_paint;
instance->update->EndPaint = tf_end_paint;
- freerdp_channels_post_connect(context->channels, instance);
+ freerdp_channels_post_connect(instance->context->channels, instance);
return True;
}
void* wfds[32];
fd_set rfds_set;
fd_set wfds_set;
- tfContext* context;
rdpChannels* channels;
memset(rfds, 0, sizeof(rfds));
memset(wfds, 0, sizeof(wfds));
- context = (tfContext*) instance->context;
- channels = context->channels;
+ channels = instance->context->channels;
freerdp_connect(instance);
{
pthread_t thread;
freerdp* instance;
- tfContext* context;
struct thread_data* data;
rdpChannels* channels;
instance->PostConnect = tf_post_connect;
instance->ReceiveChannelData = tf_receive_channel_data;
- instance->ContextSize = (pcContextSize) tf_context_size;
- instance->ContextNew = (pcContextNew) tf_context_new;
- instance->ContextFree = (pcContextFree) tf_context_free;
+ instance->context_size = sizeof(tfContext);
+ instance->ContextNew = tf_context_new;
+ instance->ContextFree = tf_context_free;
freerdp_context_new(instance);
- context = (tfContext*) instance->context;
- channels = context->channels;
-
+ channels = instance->context->channels;
freerdp_parse_args(instance->settings, argc, argv, tf_process_plugin_args, channels, NULL, NULL);
data = (struct thread_data*) xzalloc(sizeof(struct thread_data));
struct rdp_bitmap_cache
{
- pcMemBlt MemBlt;
- pcMem3Blt Mem3Blt;
+ pMemBlt MemBlt;
+ pMem3Blt Mem3Blt;
- pcCacheBitmap CacheBitmap;
- pcCacheBitmapV2 CacheBitmapV2;
- pcCacheBitmapV3 CacheBitmapV3;
+ pCacheBitmap CacheBitmap;
+ pCacheBitmapV2 CacheBitmapV2;
+ pCacheBitmapV3 CacheBitmapV3;
- pcBitmapUpdate BitmapUpdate;
+ pBitmapUpdate BitmapUpdate;
uint8 maxCells;
rdpBitmap* bitmap;
#include <freerdp/api.h>
#include <freerdp/types.h>
+#include <freerdp/freerdp.h>
+#include <freerdp/update.h>
#include <freerdp/utils/stream.h>
+typedef struct _BRUSH_ENTRY BRUSH_ENTRY;
+typedef struct rdp_brush_cache rdpBrushCache;
+
+#include <freerdp/cache/cache.h>
+
struct _BRUSH_ENTRY
{
uint8 bpp;
void* entry;
};
-typedef struct _BRUSH_ENTRY BRUSH_ENTRY;
struct rdp_brush_cache
{
+ pPatBlt PatBlt;
+
+ pCacheBrush CacheBrush;
+
rdpSettings* settings;
uint8 maxEntries;
uint8 maxMonoEntries;
BRUSH_ENTRY* entries;
BRUSH_ENTRY* monoEntries;
};
-typedef struct rdp_brush_cache rdpBrushCache;
FREERDP_API void* brush_cache_get(rdpBrushCache* brush, uint8 index, uint8* bpp);
FREERDP_API void brush_cache_put(rdpBrushCache* brush, uint8 index, void* entry, uint8 bpp);
+FREERDP_API void brush_cache_register_callbacks(rdpUpdate* update);
+
FREERDP_API rdpBrushCache* brush_cache_new(rdpSettings* settings);
FREERDP_API void brush_cache_free(rdpBrushCache* brush);
extern "C" {
#endif
-typedef void (*pcContextSize)(freerdp* instance, uint32* size);
-typedef void (*pcContextNew)(freerdp* instance, rdpContext* context);
-typedef void (*pcContextFree)(freerdp* instance, rdpContext* context);
+typedef void (*pContextSize)(freerdp* instance, uint32* size);
+typedef void (*pContextNew)(freerdp* instance, rdpContext* context);
+typedef void (*pContextFree)(freerdp* instance, rdpContext* context);
-typedef boolean (*pcPreConnect)(freerdp* instance);
-typedef boolean (*pcPostConnect)(freerdp* instance);
-typedef boolean (*pcAuthenticate)(freerdp* instance, char** username, char** password, char** domain);
-typedef boolean (*pcVerifyCertificate)(freerdp* instance, char* subject, char* issuer, char* fingerprint);
+typedef boolean (*pPreConnect)(freerdp* instance);
+typedef boolean (*pPostConnect)(freerdp* instance);
+typedef boolean (*pAuthenticate)(freerdp* instance, char** username, char** password, char** domain);
+typedef boolean (*pVerifyCertificate)(freerdp* instance, char* subject, char* issuer, char* fingerprint);
-typedef int (*pcSendChannelData)(freerdp* instance, int channelId, uint8* data, int size);
-typedef int (*pcReceiveChannelData)(freerdp* instance, int channelId, uint8* data, int size, int flags, int total_size);
+typedef int (*pSendChannelData)(freerdp* instance, int channelId, uint8* data, int size);
+typedef int (*pReceiveChannelData)(freerdp* instance, int channelId, uint8* data, int size, int flags, int total_size);
struct rdp_context
{
rdpUpdate* update;
rdpSettings* settings;
- pcContextSize ContextSize;
- pcContextNew ContextNew;
- pcContextFree ContextFree;
+ size_t context_size;
+ pContextNew ContextNew;
+ pContextFree ContextFree;
- pcPreConnect PreConnect;
- pcPostConnect PostConnect;
- pcAuthenticate Authenticate;
- pcVerifyCertificate VerifyCertificate;
+ pPreConnect PreConnect;
+ pPostConnect PostConnect;
+ pAuthenticate Authenticate;
+ pVerifyCertificate VerifyCertificate;
- pcSendChannelData SendChannelData;
- pcReceiveChannelData ReceiveChannelData;
+ pSendChannelData SendChannelData;
+ pReceiveChannelData ReceiveChannelData;
};
FREERDP_API void freerdp_context_new(freerdp* instance);
FREERDP_API HGDI_BITMAP gdi_CreateCompatibleBitmap(HGDI_DC hdc, int nWidth, int nHeight);
FREERDP_API int gdi_BitBlt(HGDI_DC hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, HGDI_DC hdcSrc, int nXSrc, int nYSrc, int rop);
-typedef int (*pBitBlt)(HGDI_DC hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, HGDI_DC hdcSrc, int nXSrc, int nYSrc, int rop);
+typedef int (*p_BitBlt)(HGDI_DC hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, HGDI_DC hdcSrc, int nXSrc, int nYSrc, int rop);
#endif /* __GDI_BITMAP_H */
FREERDP_API HGDI_BRUSH gdi_CreatePatternBrush(HGDI_BITMAP hbmp);
FREERDP_API int gdi_PatBlt(HGDI_DC hdc, int nXLeft, int nYLeft, int nWidth, int nHeight, int rop);
-typedef int (*pPatBlt)(HGDI_DC hdc, int nXLeft, int nYLeft, int nWidth, int nHeight, int rop);
+typedef int (*p_PatBlt)(HGDI_DC hdc, int nXLeft, int nYLeft, int nWidth, int nHeight, int rop);
#endif /* __GDI_BRUSH_H */
FREERDP_API int gdi_PolyPolyline(HGDI_DC hdc, GDI_POINT *lppt, int *lpdwPolyPoints, int cCount);
FREERDP_API int gdi_MoveToEx(HGDI_DC hdc, int X, int Y, HGDI_POINT lpPoint);
-typedef int (*pLineTo)(HGDI_DC hdc, int nXEnd, int nYEnd);
+typedef int (*p_LineTo)(HGDI_DC hdc, int nXEnd, int nYEnd);
#endif /* __GDI_LINE_H */
FREERDP_API int gdi_PolyPolygon(HGDI_DC hdc, GDI_POINT *lpPoints, int *lpPolyCounts, int nCount);
FREERDP_API int gdi_Rectangle(HGDI_DC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect);
-typedef int (*pFillRect)(HGDI_DC hdc, HGDI_RECT rect, HGDI_BRUSH hbr);
+typedef int (*p_FillRect)(HGDI_DC hdc, HGDI_RECT rect, HGDI_BRUSH hbr);
#endif /* __GDI_SHAPE_H */
#define RDP_CLIENT_INPUT_PDU_HEADER_LENGTH 4
-typedef void (*pcSynchronizeEvent)(rdpInput* input, uint32 flags);
-typedef void (*pcKeyboardEvent)(rdpInput* input, uint16 flags, uint16 code);
-typedef void (*pcUnicodeKeyboardEvent)(rdpInput* input, uint16 code);
-typedef void (*pcMouseEvent)(rdpInput* input, uint16 flags, uint16 x, uint16 y);
-typedef void (*pcExtendedMouseEvent)(rdpInput* input, uint16 flags, uint16 x, uint16 y);
+typedef void (*pSynchronizeEvent)(rdpInput* input, uint32 flags);
+typedef void (*pKeyboardEvent)(rdpInput* input, uint16 flags, uint16 code);
+typedef void (*pUnicodeKeyboardEvent)(rdpInput* input, uint16 code);
+typedef void (*pMouseEvent)(rdpInput* input, uint16 flags, uint16 x, uint16 y);
+typedef void (*pExtendedMouseEvent)(rdpInput* input, uint16 flags, uint16 x, uint16 y);
struct rdp_input
{
rdpContext* context;
- pcSynchronizeEvent SynchronizeEvent;
- pcKeyboardEvent KeyboardEvent;
- pcUnicodeKeyboardEvent UnicodeKeyboardEvent;
- pcMouseEvent MouseEvent;
- pcExtendedMouseEvent ExtendedMouseEvent;
+ pSynchronizeEvent SynchronizeEvent;
+ pKeyboardEvent KeyboardEvent;
+ pUnicodeKeyboardEvent UnicodeKeyboardEvent;
+ pMouseEvent MouseEvent;
+ pExtendedMouseEvent ExtendedMouseEvent;
void* param1;
};
/* Update Interface */
-typedef void (*pcBeginPaint)(rdpUpdate* update);
-typedef void (*pcEndPaint)(rdpUpdate* update);
-typedef void (*pcSetBounds)(rdpUpdate* update, BOUNDS* bounds);
-typedef void (*pcSynchronize)(rdpUpdate* update);
-typedef void (*pcDesktopResize)(rdpUpdate* update);
-typedef void (*pcBitmapUpdate)(rdpUpdate* update, BITMAP_UPDATE* bitmap);
-typedef void (*pcPalette)(rdpUpdate* update, PALETTE_UPDATE* palette);
-typedef void (*pcPlaySound)(rdpUpdate* update, PLAY_SOUND_UPDATE* play_sound);
-
-typedef void (*pcPointerPosition)(rdpUpdate* update, POINTER_POSITION_UPDATE* pointer_position);
-typedef void (*pcPointerSystem)(rdpUpdate* update, POINTER_SYSTEM_UPDATE* pointer_system);
-typedef void (*pcPointerColor)(rdpUpdate* update, POINTER_COLOR_UPDATE* pointer_color);
-typedef void (*pcPointerNew)(rdpUpdate* update, POINTER_NEW_UPDATE* pointer_new);
-typedef void (*pcPointerCached)(rdpUpdate* update, POINTER_CACHED_UPDATE* pointer_cached);
-
-typedef void (*pcDstBlt)(rdpUpdate* update, DSTBLT_ORDER* dstblt);
-typedef void (*pcPatBlt)(rdpUpdate* update, PATBLT_ORDER* patblt);
-typedef void (*pcScrBlt)(rdpUpdate* update, SCRBLT_ORDER* scrblt);
-typedef void (*pcOpaqueRect)(rdpUpdate* update, OPAQUE_RECT_ORDER* opaque_rect);
-typedef void (*pcDrawNineGrid)(rdpUpdate* update, DRAW_NINE_GRID_ORDER* draw_nine_grid);
-typedef void (*pcMultiDstBlt)(rdpUpdate* update, MULTI_DSTBLT_ORDER* multi_dstblt);
-typedef void (*pcMultiPatBlt)(rdpUpdate* update, MULTI_PATBLT_ORDER* multi_patblt);
-typedef void (*pcMultiScrBlt)(rdpUpdate* update, MULTI_SCRBLT_ORDER* multi_scrblt);
-typedef void (*pcMultiOpaqueRect)(rdpUpdate* update, MULTI_OPAQUE_RECT_ORDER* multi_opaque_rect);
-typedef void (*pcMultiDrawNineGrid)(rdpUpdate* update, MULTI_DRAW_NINE_GRID_ORDER* multi_draw_nine_grid);
-typedef void (*pcLineTo)(rdpUpdate* update, LINE_TO_ORDER* line_to);
-typedef void (*pcPolyline)(rdpUpdate* update, POLYLINE_ORDER* polyline);
-typedef void (*pcMemBlt)(rdpUpdate* update, MEMBLT_ORDER* memblt);
-typedef void (*pcMem3Blt)(rdpUpdate* update, MEM3BLT_ORDER* memblt);
-typedef void (*pcSaveBitmap)(rdpUpdate* update, SAVE_BITMAP_ORDER* save_bitmap);
-typedef void (*pcGlyphIndex)(rdpUpdate* update, GLYPH_INDEX_ORDER* glyph_index);
-typedef void (*pcFastIndex)(rdpUpdate* update, FAST_INDEX_ORDER* fast_index);
-typedef void (*pcFastGlyph)(rdpUpdate* update, FAST_GLYPH_ORDER* fast_glyph);
-typedef void (*pcPolygonSC)(rdpUpdate* update, POLYGON_SC_ORDER* polygon_sc);
-typedef void (*pcPolygonCB)(rdpUpdate* update, POLYGON_CB_ORDER* polygon_cb);
-typedef void (*pcEllipseSC)(rdpUpdate* update, ELLIPSE_SC_ORDER* ellipse_sc);
-typedef void (*pcEllipseCB)(rdpUpdate* update, ELLIPSE_CB_ORDER* ellipse_cb);
-
-typedef void (*pcCacheBitmap)(rdpUpdate* update, CACHE_BITMAP_ORDER* cache_bitmap_order);
-typedef void (*pcCacheBitmapV2)(rdpUpdate* update, CACHE_BITMAP_V2_ORDER* cache_bitmap_v2_order);
-typedef void (*pcCacheBitmapV3)(rdpUpdate* update, CACHE_BITMAP_V3_ORDER* cache_bitmap_v3_order);
-typedef void (*pcCacheColorTable)(rdpUpdate* update, CACHE_COLOR_TABLE_ORDER* cache_color_table_order);
-typedef void (*pcCacheGlyph)(rdpUpdate* update, CACHE_GLYPH_ORDER* cache_glyph_order);
-typedef void (*pcCacheGlyphV2)(rdpUpdate* update, CACHE_GLYPH_V2_ORDER* cache_glyph_v2_order);
-typedef void (*pcCacheBrush)(rdpUpdate* update, CACHE_BRUSH_ORDER* cache_brush_order);
-
-typedef void (*pcCreateOffscreenBitmap)(rdpUpdate* update, CREATE_OFFSCREEN_BITMAP_ORDER* create_offscreen_bitmap);
-typedef void (*pcSwitchSurface)(rdpUpdate* update, SWITCH_SURFACE_ORDER* switch_surface);
-typedef void (*pcCreateNineGridBitmap)(rdpUpdate* update, CREATE_NINE_GRID_BITMAP_ORDER* create_nine_grid_bitmap);
-typedef void (*pcFrameMarker)(rdpUpdate* update, FRAME_MARKER_ORDER* frame_marker);
-typedef void (*pcStreamBitmapFirst)(rdpUpdate* update, STREAM_BITMAP_FIRST_ORDER* stream_bitmap_first);
-typedef void (*pcStreamBitmapNext)(rdpUpdate* update, STREAM_BITMAP_FIRST_ORDER* stream_bitmap_next);
-typedef void (*pcDrawGdiPlusFirst)(rdpUpdate* update, DRAW_GDIPLUS_FIRST_ORDER* draw_gdiplus_first);
-typedef void (*pcDrawGdiPlusNext)(rdpUpdate* update, DRAW_GDIPLUS_NEXT_ORDER* draw_gdiplus_next);
-typedef void (*pcDrawGdiPlusEnd)(rdpUpdate* update, DRAW_GDIPLUS_END_ORDER* draw_gdiplus_end);
-typedef void (*pcDrawGdiPlusCacheFirst)(rdpUpdate* update, DRAW_GDIPLUS_CACHE_FIRST_ORDER* draw_gdiplus_cache_first);
-typedef void (*pcDrawGdiPlusCacheNext)(rdpUpdate* update, DRAW_GDIPLUS_CACHE_NEXT_ORDER* draw_gdiplus_cache_next);
-typedef void (*pcDrawGdiPlusCacheEnd)(rdpUpdate* update, DRAW_GDIPLUS_CACHE_END_ORDER* draw_gdiplus_cache_end);
-
-typedef void (*pcWindowCreate)(rdpUpdate* update, WINDOW_ORDER_INFO* orderInfo, WINDOW_STATE_ORDER* window_state);
-typedef void (*pcWindowUpdate)(rdpUpdate* update, WINDOW_ORDER_INFO* orderInfo, WINDOW_STATE_ORDER* window_state);
-typedef void (*pcWindowIcon)(rdpUpdate* update, WINDOW_ORDER_INFO* orderInfo, WINDOW_ICON_ORDER* window_icon);
-typedef void (*pcWindowCachedIcon)(rdpUpdate* update, WINDOW_ORDER_INFO* orderInfo, WINDOW_CACHED_ICON_ORDER* window_cached_icon);
-typedef void (*pcWindowDelete)(rdpUpdate* update, WINDOW_ORDER_INFO* orderInfo);
-typedef void (*pcNotifyIconCreate)(rdpUpdate* update, WINDOW_ORDER_INFO* orderInfo, NOTIFY_ICON_STATE_ORDER* notify_icon_state);
-typedef void (*pcNotifyIconUpdate)(rdpUpdate* update, WINDOW_ORDER_INFO* orderInfo, NOTIFY_ICON_STATE_ORDER* notify_icon_state);
-typedef void (*pcNotifyIconDelete)(rdpUpdate* update, WINDOW_ORDER_INFO* orderInfo);
-typedef void (*pcMonitoredDesktop)(rdpUpdate* update, WINDOW_ORDER_INFO* orderInfo, MONITORED_DESKTOP_ORDER* monitored_desktop);
-typedef void (*pcNonMonitoredDesktop)(rdpUpdate* update, WINDOW_ORDER_INFO* orderInfo);
-
-typedef void (*pcSurfaceBits)(rdpUpdate* update, SURFACE_BITS_COMMAND* surface_bits_command);
-typedef void (*pcSurfaceCommand)(rdpUpdate* update, STREAM* s);
+typedef void (*pBeginPaint)(rdpUpdate* update);
+typedef void (*pEndPaint)(rdpUpdate* update);
+typedef void (*pSetBounds)(rdpUpdate* update, BOUNDS* bounds);
+typedef void (*pSynchronize)(rdpUpdate* update);
+typedef void (*pDesktopResize)(rdpUpdate* update);
+typedef void (*pBitmapUpdate)(rdpUpdate* update, BITMAP_UPDATE* bitmap);
+typedef void (*pPalette)(rdpUpdate* update, PALETTE_UPDATE* palette);
+typedef void (*pPlaySound)(rdpUpdate* update, PLAY_SOUND_UPDATE* play_sound);
+
+typedef void (*pPointerPosition)(rdpUpdate* update, POINTER_POSITION_UPDATE* pointer_position);
+typedef void (*pPointerSystem)(rdpUpdate* update, POINTER_SYSTEM_UPDATE* pointer_system);
+typedef void (*pPointerColor)(rdpUpdate* update, POINTER_COLOR_UPDATE* pointer_color);
+typedef void (*pPointerNew)(rdpUpdate* update, POINTER_NEW_UPDATE* pointer_new);
+typedef void (*pPointerCached)(rdpUpdate* update, POINTER_CACHED_UPDATE* pointer_cached);
+
+typedef void (*pDstBlt)(rdpUpdate* update, DSTBLT_ORDER* dstblt);
+typedef void (*pPatBlt)(rdpUpdate* update, PATBLT_ORDER* patblt);
+typedef void (*pScrBlt)(rdpUpdate* update, SCRBLT_ORDER* scrblt);
+typedef void (*pOpaqueRect)(rdpUpdate* update, OPAQUE_RECT_ORDER* opaque_rect);
+typedef void (*pDrawNineGrid)(rdpUpdate* update, DRAW_NINE_GRID_ORDER* draw_nine_grid);
+typedef void (*pMultiDstBlt)(rdpUpdate* update, MULTI_DSTBLT_ORDER* multi_dstblt);
+typedef void (*pMultiPatBlt)(rdpUpdate* update, MULTI_PATBLT_ORDER* multi_patblt);
+typedef void (*pMultiScrBlt)(rdpUpdate* update, MULTI_SCRBLT_ORDER* multi_scrblt);
+typedef void (*pMultiOpaqueRect)(rdpUpdate* update, MULTI_OPAQUE_RECT_ORDER* multi_opaque_rect);
+typedef void (*pMultiDrawNineGrid)(rdpUpdate* update, MULTI_DRAW_NINE_GRID_ORDER* multi_draw_nine_grid);
+typedef void (*pLineTo)(rdpUpdate* update, LINE_TO_ORDER* line_to);
+typedef void (*pPolyline)(rdpUpdate* update, POLYLINE_ORDER* polyline);
+typedef void (*pMemBlt)(rdpUpdate* update, MEMBLT_ORDER* memblt);
+typedef void (*pMem3Blt)(rdpUpdate* update, MEM3BLT_ORDER* memblt);
+typedef void (*pSaveBitmap)(rdpUpdate* update, SAVE_BITMAP_ORDER* save_bitmap);
+typedef void (*pGlyphIndex)(rdpUpdate* update, GLYPH_INDEX_ORDER* glyph_index);
+typedef void (*pFastIndex)(rdpUpdate* update, FAST_INDEX_ORDER* fast_index);
+typedef void (*pFastGlyph)(rdpUpdate* update, FAST_GLYPH_ORDER* fast_glyph);
+typedef void (*pPolygonSC)(rdpUpdate* update, POLYGON_SC_ORDER* polygon_sc);
+typedef void (*pPolygonCB)(rdpUpdate* update, POLYGON_CB_ORDER* polygon_cb);
+typedef void (*pEllipseSC)(rdpUpdate* update, ELLIPSE_SC_ORDER* ellipse_sc);
+typedef void (*pEllipseCB)(rdpUpdate* update, ELLIPSE_CB_ORDER* ellipse_cb);
+
+typedef void (*pCacheBitmap)(rdpUpdate* update, CACHE_BITMAP_ORDER* cache_bitmap_order);
+typedef void (*pCacheBitmapV2)(rdpUpdate* update, CACHE_BITMAP_V2_ORDER* cache_bitmap_v2_order);
+typedef void (*pCacheBitmapV3)(rdpUpdate* update, CACHE_BITMAP_V3_ORDER* cache_bitmap_v3_order);
+typedef void (*pCacheColorTable)(rdpUpdate* update, CACHE_COLOR_TABLE_ORDER* cache_color_table_order);
+typedef void (*pCacheGlyph)(rdpUpdate* update, CACHE_GLYPH_ORDER* cache_glyph_order);
+typedef void (*pCacheGlyphV2)(rdpUpdate* update, CACHE_GLYPH_V2_ORDER* cache_glyph_v2_order);
+typedef void (*pCacheBrush)(rdpUpdate* update, CACHE_BRUSH_ORDER* cache_brush_order);
+
+typedef void (*pCreateOffscreenBitmap)(rdpUpdate* update, CREATE_OFFSCREEN_BITMAP_ORDER* create_offscreen_bitmap);
+typedef void (*pSwitchSurface)(rdpUpdate* update, SWITCH_SURFACE_ORDER* switch_surface);
+typedef void (*pCreateNineGridBitmap)(rdpUpdate* update, CREATE_NINE_GRID_BITMAP_ORDER* create_nine_grid_bitmap);
+typedef void (*pFrameMarker)(rdpUpdate* update, FRAME_MARKER_ORDER* frame_marker);
+typedef void (*pStreamBitmapFirst)(rdpUpdate* update, STREAM_BITMAP_FIRST_ORDER* stream_bitmap_first);
+typedef void (*pStreamBitmapNext)(rdpUpdate* update, STREAM_BITMAP_FIRST_ORDER* stream_bitmap_next);
+typedef void (*pDrawGdiPlusFirst)(rdpUpdate* update, DRAW_GDIPLUS_FIRST_ORDER* draw_gdiplus_first);
+typedef void (*pDrawGdiPlusNext)(rdpUpdate* update, DRAW_GDIPLUS_NEXT_ORDER* draw_gdiplus_next);
+typedef void (*pDrawGdiPlusEnd)(rdpUpdate* update, DRAW_GDIPLUS_END_ORDER* draw_gdiplus_end);
+typedef void (*pDrawGdiPlusCacheFirst)(rdpUpdate* update, DRAW_GDIPLUS_CACHE_FIRST_ORDER* draw_gdiplus_cache_first);
+typedef void (*pDrawGdiPlusCacheNext)(rdpUpdate* update, DRAW_GDIPLUS_CACHE_NEXT_ORDER* draw_gdiplus_cache_next);
+typedef void (*pDrawGdiPlusCacheEnd)(rdpUpdate* update, DRAW_GDIPLUS_CACHE_END_ORDER* draw_gdiplus_cache_end);
+
+typedef void (*pWindowCreate)(rdpUpdate* update, WINDOW_ORDER_INFO* orderInfo, WINDOW_STATE_ORDER* window_state);
+typedef void (*pWindowUpdate)(rdpUpdate* update, WINDOW_ORDER_INFO* orderInfo, WINDOW_STATE_ORDER* window_state);
+typedef void (*pWindowIcon)(rdpUpdate* update, WINDOW_ORDER_INFO* orderInfo, WINDOW_ICON_ORDER* window_icon);
+typedef void (*pWindowCachedIcon)(rdpUpdate* update, WINDOW_ORDER_INFO* orderInfo, WINDOW_CACHED_ICON_ORDER* window_cached_icon);
+typedef void (*pWindowDelete)(rdpUpdate* update, WINDOW_ORDER_INFO* orderInfo);
+typedef void (*pNotifyIconCreate)(rdpUpdate* update, WINDOW_ORDER_INFO* orderInfo, NOTIFY_ICON_STATE_ORDER* notify_icon_state);
+typedef void (*pNotifyIconUpdate)(rdpUpdate* update, WINDOW_ORDER_INFO* orderInfo, NOTIFY_ICON_STATE_ORDER* notify_icon_state);
+typedef void (*pNotifyIconDelete)(rdpUpdate* update, WINDOW_ORDER_INFO* orderInfo);
+typedef void (*pMonitoredDesktop)(rdpUpdate* update, WINDOW_ORDER_INFO* orderInfo, MONITORED_DESKTOP_ORDER* monitored_desktop);
+typedef void (*pNonMonitoredDesktop)(rdpUpdate* update, WINDOW_ORDER_INFO* orderInfo);
+
+typedef void (*pSurfaceBits)(rdpUpdate* update, SURFACE_BITS_COMMAND* surface_bits_command);
+typedef void (*pSurfaceCommand)(rdpUpdate* update, STREAM* s);
struct rdp_update
{
rdpContext* context;
- pcBeginPaint BeginPaint;
- pcEndPaint EndPaint;
- pcSetBounds SetBounds;
- pcSynchronize Synchronize;
- pcDesktopResize DesktopResize;
- pcBitmapUpdate BitmapUpdate;
- pcPalette Palette;
- pcPlaySound PlaySound;
- pcPointerPosition PointerPosition;
- pcPointerSystem PointerSystem;
- pcPointerColor PointerColor;
- pcPointerNew PointerNew;
- pcPointerCached PointerCached;
-
- pcDstBlt DstBlt;
- pcPatBlt PatBlt;
- pcScrBlt ScrBlt;
- pcOpaqueRect OpaqueRect;
- pcDrawNineGrid DrawNineGrid;
- pcMultiDstBlt MultiDstBlt;
- pcMultiPatBlt MultiPatBlt;
- pcMultiScrBlt MultiScrBlt;
- pcMultiOpaqueRect MultiOpaqueRect;
- pcMultiDrawNineGrid MultiDrawNineGrid;
- pcLineTo LineTo;
- pcPolyline Polyline;
- pcMemBlt MemBlt;
- pcMem3Blt Mem3Blt;
- pcSaveBitmap SaveBitmap;
- pcGlyphIndex GlyphIndex;
- pcFastIndex FastIndex;
- pcFastGlyph FastGlyph;
- pcPolygonSC PolygonSC;
- pcPolygonCB PolygonCB;
- pcEllipseSC EllipseSC;
- pcEllipseCB EllipseCB;
-
- pcCacheBitmap CacheBitmap;
- pcCacheBitmapV2 CacheBitmapV2;
- pcCacheBitmapV3 CacheBitmapV3;
- pcCacheColorTable CacheColorTable;
- pcCacheGlyph CacheGlyph;
- pcCacheGlyphV2 CacheGlyphV2;
- pcCacheBrush CacheBrush;
-
- pcCreateOffscreenBitmap CreateOffscreenBitmap;
- pcSwitchSurface SwitchSurface;
- pcCreateNineGridBitmap CreateNineGridBitmap;
- pcFrameMarker FrameMarker;
- pcStreamBitmapFirst StreamBitmapFirst;
- pcStreamBitmapNext StreamBitmapNext;
- pcDrawGdiPlusFirst DrawGdiPlusFirst;
- pcDrawGdiPlusNext DrawGdiPlusNext;
- pcDrawGdiPlusEnd DrawGdiPlusEnd;
- pcDrawGdiPlusCacheFirst DrawGdiPlusCacheFirst;
- pcDrawGdiPlusCacheNext DrawGdiPlusCacheNext;
- pcDrawGdiPlusCacheEnd DrawGdiPlusCacheEnd;
-
- pcWindowCreate WindowCreate;
- pcWindowUpdate WindowUpdate;
- pcWindowIcon WindowIcon;
- pcWindowCachedIcon WindowCachedIcon;
- pcWindowDelete WindowDelete;
- pcNotifyIconCreate NotifyIconCreate;
- pcNotifyIconUpdate NotifyIconUpdate;
- pcNotifyIconDelete NotifyIconDelete;
- pcMonitoredDesktop MonitoredDesktop;
- pcNonMonitoredDesktop NonMonitoredDesktop;
-
- pcSurfaceBits SurfaceBits;
- pcSurfaceCommand SurfaceCommand;
+ pBeginPaint BeginPaint;
+ pEndPaint EndPaint;
+ pSetBounds SetBounds;
+ pSynchronize Synchronize;
+ pDesktopResize DesktopResize;
+ pBitmapUpdate BitmapUpdate;
+ pPalette Palette;
+ pPlaySound PlaySound;
+ pPointerPosition PointerPosition;
+ pPointerSystem PointerSystem;
+ pPointerColor PointerColor;
+ pPointerNew PointerNew;
+ pPointerCached PointerCached;
+
+ pDstBlt DstBlt;
+ pPatBlt PatBlt;
+ pScrBlt ScrBlt;
+ pOpaqueRect OpaqueRect;
+ pDrawNineGrid DrawNineGrid;
+ pMultiDstBlt MultiDstBlt;
+ pMultiPatBlt MultiPatBlt;
+ pMultiScrBlt MultiScrBlt;
+ pMultiOpaqueRect MultiOpaqueRect;
+ pMultiDrawNineGrid MultiDrawNineGrid;
+ pLineTo LineTo;
+ pPolyline Polyline;
+ pMemBlt MemBlt;
+ pMem3Blt Mem3Blt;
+ pSaveBitmap SaveBitmap;
+ pGlyphIndex GlyphIndex;
+ pFastIndex FastIndex;
+ pFastGlyph FastGlyph;
+ pPolygonSC PolygonSC;
+ pPolygonCB PolygonCB;
+ pEllipseSC EllipseSC;
+ pEllipseCB EllipseCB;
+
+ pCacheBitmap CacheBitmap;
+ pCacheBitmapV2 CacheBitmapV2;
+ pCacheBitmapV3 CacheBitmapV3;
+ pCacheColorTable CacheColorTable;
+ pCacheGlyph CacheGlyph;
+ pCacheGlyphV2 CacheGlyphV2;
+ pCacheBrush CacheBrush;
+
+ pCreateOffscreenBitmap CreateOffscreenBitmap;
+ pSwitchSurface SwitchSurface;
+ pCreateNineGridBitmap CreateNineGridBitmap;
+ pFrameMarker FrameMarker;
+ pStreamBitmapFirst StreamBitmapFirst;
+ pStreamBitmapNext StreamBitmapNext;
+ pDrawGdiPlusFirst DrawGdiPlusFirst;
+ pDrawGdiPlusNext DrawGdiPlusNext;
+ pDrawGdiPlusEnd DrawGdiPlusEnd;
+ pDrawGdiPlusCacheFirst DrawGdiPlusCacheFirst;
+ pDrawGdiPlusCacheNext DrawGdiPlusCacheNext;
+ pDrawGdiPlusCacheEnd DrawGdiPlusCacheEnd;
+
+ pWindowCreate WindowCreate;
+ pWindowUpdate WindowUpdate;
+ pWindowIcon WindowIcon;
+ pWindowCachedIcon WindowCachedIcon;
+ pWindowDelete WindowDelete;
+ pNotifyIconCreate NotifyIconCreate;
+ pNotifyIconUpdate NotifyIconUpdate;
+ pNotifyIconDelete NotifyIconDelete;
+ pMonitoredDesktop MonitoredDesktop;
+ pNonMonitoredDesktop NonMonitoredDesktop;
+
+ pSurfaceBits SurfaceBits;
+ pSurfaceCommand SurfaceCommand;
boolean glyph_v2;
* limitations under the License.
*/
+#include <freerdp/update.h>
+#include <freerdp/freerdp.h>
#include <freerdp/utils/stream.h>
#include <freerdp/utils/memory.h>
#include <freerdp/cache/brush.h>
+void update_gdi_patblt(rdpUpdate* update, PATBLT_ORDER* patblt)
+{
+ rdpBrush* brush = &patblt->brush;
+ rdpCache* cache = update->context->cache;
+
+ if (brush->style & CACHED_BRUSH)
+ {
+ brush->data = brush_cache_get(cache->brush, brush->index, &brush->bpp);
+ brush->style = 0x03;
+ }
+
+ IFCALL(cache->brush->PatBlt, update, patblt);
+}
+
+void update_gdi_cache_brush(rdpUpdate* update, CACHE_BRUSH_ORDER* cache_brush)
+{
+ rdpCache* cache = update->context->cache;
+ brush_cache_put(cache->brush, cache_brush->index, cache_brush->data, cache_brush->bpp);
+}
+
void* brush_cache_get(rdpBrushCache* brush, uint8 index, uint8* bpp)
{
void* entry;
}
}
+void brush_cache_register_callbacks(rdpUpdate* update)
+{
+ rdpCache* cache = update->context->cache;
+
+ cache->brush->PatBlt = update->PatBlt;
+
+ update->PatBlt = update_gdi_patblt;
+ update->CacheBrush = update_gdi_cache_brush;
+}
+
rdpBrushCache* brush_cache_new(rdpSettings* settings)
{
rdpBrushCache* brush;
void freerdp_context_new(freerdp* instance)
{
rdpRdp* rdp;
- uint32 size = sizeof(rdpContext);
rdp = rdp_new(instance);
instance->input = rdp->input;
instance->update = rdp->update;
instance->settings = rdp->settings;
- IFCALL(instance->ContextSize, instance, &size);
-
- instance->context = (rdpContext*) xzalloc(size);
+ instance->context = (rdpContext*) xzalloc(instance->context_size);
instance->context->graphics = graphics_new(instance->context);
instance->context->instance = instance;
instance->context->rdp = rdp;
if (instance != NULL)
{
+ instance->context_size = sizeof(rdpContext);
instance->SendChannelData = freerdp_send_channel_data;
}
void update_read_draw_gdiplus_cache_next_order(STREAM* s, DRAW_GDIPLUS_CACHE_NEXT_ORDER* draw_gdiplus_cache_next);
void update_read_draw_gdiplus_cache_end_order(STREAM* s, DRAW_GDIPLUS_CACHE_END_ORDER* draw_gdiplus_cache_end);
-#define WITH_DEBUG_ORDERS 1
-
#endif /* __ORDERS_H */
#include <freerdp/gdi/bitmap.h>
-pBitBlt BitBlt_[5] =
+p_BitBlt BitBlt_[5] =
{
NULL,
BitBlt_8bpp,
int gdi_BitBlt(HGDI_DC hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, HGDI_DC hdcSrc, int nXSrc, int nYSrc, int rop)
{
- pBitBlt _BitBlt = BitBlt_[IBPP(hdcDest->bitsPerPixel)];
+ p_BitBlt _BitBlt = BitBlt_[IBPP(hdcDest->bitsPerPixel)];
if (_BitBlt != NULL)
return _BitBlt(hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, rop);
#include <freerdp/gdi/brush.h>
-pPatBlt PatBlt_[5] =
+p_PatBlt PatBlt_[5] =
{
NULL,
PatBlt_8bpp,
int gdi_PatBlt(HGDI_DC hdc, int nXLeft, int nYLeft, int nWidth, int nHeight, int rop)
{
- pPatBlt _PatBlt = PatBlt_[IBPP(hdc->bitsPerPixel)];
+ p_PatBlt _PatBlt = PatBlt_[IBPP(hdc->bitsPerPixel)];
if (_PatBlt != NULL)
return _PatBlt(hdc, nXLeft, nYLeft, nWidth, nHeight, rop);
rdpBrush* brush;
HGDI_BRUSH originalBrush;
rdpGdi* gdi = update->context->gdi;
- rdpCache* cache = update->context->cache;
brush = &patblt->brush;
- if (brush->style & CACHED_BRUSH)
- {
- brush->data = brush_cache_get(cache->brush, brush->index, &brush->bpp);
- brush->style = GDI_BS_PATTERN;
- }
-
if (brush->style == GDI_BS_SOLID)
{
uint32 color;
}
}
-void gdi_cache_brush(rdpUpdate* update, CACHE_BRUSH_ORDER* cache_brush)
-{
- rdpCache* cache = update->context->cache;
- brush_cache_put(cache->brush, cache_brush->index, cache_brush->data, cache_brush->bpp);
-}
-
int tilenum = 0;
void gdi_surface_bits(rdpUpdate* update, SURFACE_BITS_COMMAND* surface_bits_command)
update->CacheColorTable = gdi_cache_color_table;
update->CacheGlyph = gdi_cache_glyph;
update->CacheGlyphV2 = gdi_cache_glyph_v2;
- update->CacheBrush = gdi_cache_brush;
update->SurfaceBits = gdi_surface_bits;
}
gdi_register_update_callbacks(instance->update);
+ brush_cache_register_callbacks(instance->update);
bitmap_cache_register_callbacks(instance->update);
offscreen_cache_register_callbacks(instance->update);
#include <freerdp/gdi/line.h>
-pLineTo LineTo_[5] =
+p_LineTo LineTo_[5] =
{
NULL,
LineTo_8bpp,
int gdi_LineTo(HGDI_DC hdc, int nXEnd, int nYEnd)
{
- pLineTo _LineTo = LineTo_[IBPP(hdc->bitsPerPixel)];
+ p_LineTo _LineTo = LineTo_[IBPP(hdc->bitsPerPixel)];
if (_LineTo != NULL)
return _LineTo(hdc, nXEnd, nYEnd);
int gdi_PolylineTo(HGDI_DC hdc, GDI_POINT *lppt, int cCount)
{
int i;
+
for (i = 0; i < cCount; i++)
{
gdi_LineTo(hdc, lppt[i].x, lppt[i].y);
#include <freerdp/gdi/shape.h>
-pFillRect FillRect_[5] =
+p_FillRect FillRect_[5] =
{
NULL,
FillRect_8bpp,
int gdi_FillRect(HGDI_DC hdc, HGDI_RECT rect, HGDI_BRUSH hbr)
{
- pFillRect _FillRect = FillRect_[IBPP(hdc->bitsPerPixel)];
+ p_FillRect _FillRect = FillRect_[IBPP(hdc->bitsPerPixel)];
if (_FillRect != NULL)
return _FillRect(hdc, rect, hbr);