Entire Class Index | Main Class Index | Cross Index | Global Index

# Class CL_PCXProvider

Surface provider that can load PCX files.
Contained in: global
Derived from: CL_SurfaceProvider_Generic
Derived by: none
Group: Display (Surface Providers)

#include <ClanLib/display.h>

### public function member index:
### Construction:
``static` `CL_Surface`*` | `create` | `(`std::string` `handle`, `CL_InputSourceProvider`* `provider`, `bool` `transparent`=false, `unsigned` `char` `trans_col`=0)`;
`` | `CL_PCXProvider` | `(`std::string` `name`, `CL_InputSourceProvider`* `provider`, `bool` `transparent`=false, `unsigned` `char` `trans_col`=0)`;
``virtual`` | `~CL_PCXProvider` | `()`;
### Attributes:
``virtual` `unsigned` `int`` | `get_pitch` | `() `const``;
``virtual` `int`` | `get_translate_x` | `() `const``;
``virtual` `int`` | `get_translate_y` | `() `const``;
``virtual` `unsigned` `int`` | `get_width` | `() `const``;
``virtual` `unsigned` `int`` | `get_height` | `() `const``;
``virtual` `unsigned` `int`` | `get_num_frames` | `() `const``;
``virtual` `unsigned` `int`` | `get_red_mask` | `() `const``;
``virtual` `unsigned` `int`` | `get_green_mask` | `() `const``;
``virtual` `unsigned` `int`` | `get_blue_mask` | `() `const``;
``virtual` `unsigned` `int`` | `get_alpha_mask` | `() `const``;
``virtual` `unsigned` `int`` | `get_depth` | `() `const``;
``virtual` `CL_Palette`*` | `get_palette` | `() `const``;
``virtual` `bool`` | `is_indexed` | `() `const``;
``virtual` `bool`` | `uses_src_colorkey` | `() `const``;
``virtual` `unsigned` `int`` | `get_src_colorkey` | `() `const``;
``virtual` `void`*` | `get_data` | `() `const``;
### Operations:
``virtual` `void`` | `perform_lock` | `()`;
``virtual` `void`` | `perform_unlock` | `()`;
``virtual` `void`` | `read_header` | `(`CL_InputSource`* `_datafile`)`;
``virtual` `void`` | `read_data` | `()`;

## Description:

The PCX decoder has been modified to load most PCX files (instead of just the ones created by Deluxe Paint IIe). It now support 1,2,4,8, or 24 bit files... and has been tested in all but a few situations.
Technically, the implementation cheats in that it doesnt store images with less than 8 bits per pixel in their native format. It simply converts them to PAL8 pixelformat instead of creating other pixelformats.
Also note that the PCX decoder creates more bytes per line than the image is supposed to contain. We rely on the clipping capabilities of ClanLib to take care of that. Also note that some default palettes were defined in the read_header() method. These definitions might be better placed in palette.h. Since the scope of the PCX_Provider rewrite was limited to the provider itself, no files outside of pcx_provider.h and pcx_provider.cpp were modified.
The PCX decoding code was moved to read_data() and read_header() to make it easier to follow the code (called from perform_unlock()).

## Function Member Descriptions:

CL_PCXProvider::CL_PCXProvider - Constructs a surface provider that can read pcx files.
`` `CL_PCXProvider``(`std::string` `name`, `CL_InputSourceProvider`* `provider`, `bool` `transparent`=false, `unsigned` `char` `trans_col`=0)`;

> name - Name of the pcx file to load.
> provider - Input source provider that delivers the pcx file.
> transparent - True if a color in image should be transparent.
> trans_col - Transparency color used if 'transparent' is true. Defaults to color 0.

CL_PCXProvider::create - Loads the pcx file 'handle' from the inputsource provider 'provider.
Creates a CL_Surface using the pcx image and returns it.
If you just want to load a file, use 'handle' for filename, and set provider to NULL
``static` `CL_Surface`*` `create``(`std::string` `handle`, `CL_InputSourceProvider`* `provider`, `bool` `transparent`=false, `unsigned` `char` `trans_col`=0)`;

CL_PCXProvider::get_alpha_mask - Get alpha mask
``virtual` `unsigned` `int`` `get_alpha_mask``() `const``;

CL_PCXProvider::get_blue_mask - Get blue mask
``virtual` `unsigned` `int`` `get_blue_mask``() `const``;

CL_PCXProvider::get_data - Returns the image data. Provider must be locked before pointer is valid.
``virtual` `void`*` `get_data``() `const``;

CL_PCXProvider::get_depth - Get depth
``virtual` `unsigned` `int`` `get_depth``() `const``;

CL_PCXProvider::get_green_mask - Get green mask
``virtual` `unsigned` `int`` `get_green_mask``() `const``;

CL_PCXProvider::get_height - Returns the height of the image.
``virtual` `unsigned` `int`` `get_height``() `const``;

CL_PCXProvider::get_num_frames - Returns the number of subsprites in the image.
``virtual` `unsigned` `int`` `get_num_frames``() `const``;

CL_PCXProvider::get_palette - Returns the palette used by the image. NULL if system palette.
``virtual` `CL_Palette`*` `get_palette``() `const``;

CL_PCXProvider::get_pitch - Returns the pitch of the image (bytes per line).
``virtual` `unsigned` `int`` `get_pitch``() `const``;

CL_PCXProvider::get_red_mask - Get red mask
``virtual` `unsigned` `int`` `get_red_mask``() `const``;

CL_PCXProvider::get_src_colorkey - Returns the transparency color used, -1 if none.
``virtual` `unsigned` `int`` `get_src_colorkey``() `const``;

CL_PCXProvider::get_translate_x - Returns how many pixels to translate the image (X axis).
``virtual` `int`` `get_translate_x``() `const``;

CL_PCXProvider::get_translate_y - Returns how many pixels to translate the image (Y axis).
``virtual` `int`` `get_translate_y``() `const``;

CL_PCXProvider::get_width - Returns the width of the image.
``virtual` `unsigned` `int`` `get_width``() `const``;

CL_PCXProvider::is_indexed - Is indexed
``virtual` `bool`` `is_indexed``() `const``;

CL_PCXProvider::perform_lock - Locks the surface provider.
``virtual` `void`` `perform_lock``()`;

CL_PCXProvider::perform_unlock - Unlocks the surface provider.
``virtual` `void`` `perform_unlock``()`;

CL_PCXProvider::read_data - Decodes image data
``virtual` `void`` `read_data``()`;

CL_PCXProvider::read_header - Loads header data into class variables. Called by read_data().
``virtual` `void`` `read_header``(`CL_InputSource`* `_datafile`)`;

CL_PCXProvider::uses_src_colorkey - Uses src colour key
``virtual` `bool`` `uses_src_colorkey``() `const``;

CL_PCXProvider::~CL_PCXProvider - PCX Provider destructor
``virtual`` `~CL_PCXProvider``()`;

## Variable Member Descriptions: