From 87e29cef828548c397692473683eebd9613b661c Mon Sep 17 00:00:00 2001 From: Matthias Melcher Date: Tue, 26 Jan 2016 22:20:15 +0000 Subject: Moving image drawing code into the driver system git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3-porting@11060 ea41ed52-d2ee-0310-a9c1-e6b18d33e121 --- .../Quartz/Fl_Quartz_Graphics_Driver_image.cxx | 167 +++++++++++++++++++++ 1 file changed, 167 insertions(+) create mode 100644 src/drivers/Quartz/Fl_Quartz_Graphics_Driver_image.cxx (limited to 'src/drivers/Quartz') diff --git a/src/drivers/Quartz/Fl_Quartz_Graphics_Driver_image.cxx b/src/drivers/Quartz/Fl_Quartz_Graphics_Driver_image.cxx new file mode 100644 index 000000000..87fcbc068 --- /dev/null +++ b/src/drivers/Quartz/Fl_Quartz_Graphics_Driver_image.cxx @@ -0,0 +1,167 @@ +// +// "$Id$" +// +// MacOS image drawing code for the Fast Light Tool Kit (FLTK). +// +// Copyright 1998-2012 by Bill Spitzak and others. +// +// This library is free software. Distribution and use rights are outlined in +// the file "COPYING" which should have been included with this file. If this +// file is missing or damaged, see the license at: +// +// http://www.fltk.org/COPYING.php +// +// Please report all bugs and problems on the following page: +// +// http://www.fltk.org/str.php +// + +//////////////////////////////////////////////////////////////// + +#include +#include +#include +#include +#include + +#define MAXBUFFER 0x40000 // 256k + +static void dataReleaseCB(void *info, const void *data, size_t size) +{ + delete[] (uchar *)data; +} + +/* + * draw an image based on the input parameters + * + * buf: image source data + * X, Y: position (in buffer?!) + * W, H: size of picture (in pixel?) + * delta: distance from pixel to pixel in buf in bytes + * linedelta: distance from line to line in buf in bytes + * mono: if set, pixel is one byte - if zero, pixel is 3 byte + * cb: callback to copy image data into (RGB?) buffer + * buf: pointer to first byte in image source + * x, y: position in buffer + * w: width (in bytes?) + * dst: destination buffer + * userdata: ? + */ +static void innards(const uchar *buf, int X, int Y, int W, int H, + int delta, int linedelta, int mono, + Fl_Draw_Image_Cb cb, void* userdata) +{ + if (!linedelta) linedelta = W*delta; + + const void *array = buf; + uchar *tmpBuf = 0; + if (cb || Fl_Surface_Device::surface() != Fl_Display_Device::display_device()) { + tmpBuf = new uchar[ H*W*delta ]; + if (cb) { + for (int i=0; i-3),0,0); +} +void Fl_Quartz_Graphics_Driver::draw_image(Fl_Draw_Image_Cb cb, void* data, + int x, int y, int w, int h,int d) { + innards(0,x,y,w,h,d,0,(d<3&&d>-3),cb,data); +} +void Fl_Quartz_Graphics_Driver::draw_image_mono(const uchar* buf, int x, int y, int w, int h, int d, int l){ + innards(buf,x,y,w,h,d,l,1,0,0); +} +void Fl_Quartz_Graphics_Driver::draw_image_mono(Fl_Draw_Image_Cb cb, void* data, + int x, int y, int w, int h,int d) { + innards(0,x,y,w,h,d,0,1,cb,data); +} + +void fl_rectf(int x, int y, int w, int h, uchar r, uchar g, uchar b) { + fl_color(r,g,b); + fl_rectf(x,y,w,h); +} + +// +// End of "$Id$". +// -- cgit v1.2.3