From 15318cad33835e4e2dc620d033e43cd930676cdd Mon Sep 17 00:00:00 2001 From: kergoth Date: Fri, 25 Jan 2002 22:14:26 +0000 Subject: Initial revision --- (limited to 'core/multimedia/opieplayer/libflash/graphic.h') diff --git a/core/multimedia/opieplayer/libflash/graphic.h b/core/multimedia/opieplayer/libflash/graphic.h new file mode 100644 index 0000000..63ebd99 --- a/dev/null +++ b/core/multimedia/opieplayer/libflash/graphic.h @@ -0,0 +1,174 @@ +///////////////////////////////////////////////////////////// +// Flash Plugin and Player +// Copyright (C) 1998 Olivier Debon +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +/////////////////////////////////////////////////////////////// +#ifndef _GRAPHIC_H_ +#define _GRAPHIC_H_ + +#define ALPHA_OPAQUE 255 + +enum FillType { + f_Solid = 0x00, + f_LinearGradient = 0x10, + f_RadialGradient = 0x12, + f_TiledBitmap = 0x40, + f_clippedBitmap = 0x41, + f_None = 0x80 +}; + +struct Gradient { + int nbGradients; + unsigned char ratio[8]; + Color color[8]; + // For rendering + Color *ramp; + Matrix imat; + int has_alpha; +}; + + +struct FillStyleDef { + FillType type; // See enum FillType + + // Solid + Color color; + + // Gradient + Gradient gradient; + + // Bitmap + Bitmap *bitmap; + Matrix bitmap_matrix; + Color *cmap; + unsigned char *alpha_table; + + // Gradient or Bitmap + Matrix matrix; + + FillStyleDef() { + style_size += sizeof(FillStyleDef); + style_nb++; + } +}; + +struct Segment { + long x1,x2; + long ymax; + FillStyleDef *fs[2]; // 0 is left 1 is right + int aa; + long dX; + long X; + + struct Segment *next; + struct Segment *nextValid; +}; + +/* fractional bits (we don't use twips here... too expensive) */ +#define FRAC_BITS 5 +#define FRAC (1 << FRAC_BITS) +#define NB_SEGMENT_MAX (2048*4) +#define SEGFRAC 8 + +class GraphicDevice { + int targetWidth; + int targetHeight; + Rect viewPort; + int movieWidth; + int movieHeight; + int zoom; + unsigned long redMask; + unsigned long greenMask; + unsigned long blueMask; + int clipping; + +public: + FlashDisplay *flashDisplay; + int bgInitialized; + Color backgroundColor; + Color foregroundColor; + +public: + void *scan_line_func_id; + ScanLineFunc scan_line_func; + Rect clip_rect; + +private: + Segment **segs; + int ymin,ymax; + int height; + Segment *seg_pool; + Segment *seg_pool_cur; + + Segment * allocSeg(); + Segment * progressSegments(Segment * curSegs, long y); + Segment * newSegments(Segment *curSegs, Segment *newSegs); + void renderScanLine(long y, Segment *curSegs); + +protected: + long clip(long &y, long &start, long &end); + +public: + Matrix *adjust; // Matrix to fit window (shrink or expand) + + long showMore; // Used for debugging + + // For Direct Graphics + unsigned char *canvasBuffer; // A pointer to canvas'memory + long bpl; // Bytes per line + long bpp; // Bytes per pixel + long pad; // Scanline pad in byte + + GraphicDevice(FlashDisplay *fd); + virtual ~GraphicDevice(); + + int setBackgroundColor(Color); + void setForegroundColor(Color); + Color getBackgroundColor(); + Color getForegroundColor(); + void setMovieDimension(long width, long height); + void setMovieZoom(int zoom); + void setMovieOffset(long x, long y); + long getWidth(); + long getHeight(); + Color *getColormap(Color *old, long n, Cxform *cxform); + + void drawBox(long x1, long y1, long x2, long y2); + + void addSegment(long x1, long y1, long x2, long y2, + FillStyleDef *f0, + FillStyleDef *f1, + int aa); + + void drawPolygon(void); + + void updateClippingRegion(Rect *); + void setClipping(int); + + // Virtual functions + virtual void clearCanvas(); + virtual long allocColor(Color color); + virtual void fillLineBitmap(FillStyleDef *f, long y, long start, long end); + virtual void fillLineLG(Gradient *grad, long y, long start, long end); + virtual void fillLineRG(Gradient *grad, long y, long start, long end); + virtual void fillLine(FillStyleDef *f, long y, long start, long end); + virtual void fillLineAA(FillStyleDef *f, long y, long start, long end); + virtual void drawLine(long x1, long y1, long x2, long y2, long width); + +}; + +#endif /* _GRAPHIC_H_ */ -- cgit v0.9.0.2