|
Packit Service |
e3b512 |
/* Copyright (C) 2005 The cairomm Development Team
|
|
Packit Service |
e3b512 |
*
|
|
Packit Service |
e3b512 |
* This library is free software; you can redistribute it and/or
|
|
Packit Service |
e3b512 |
* modify it under the terms of the GNU Library General Public
|
|
Packit Service |
e3b512 |
* License as published by the Free Software Foundation; either
|
|
Packit Service |
e3b512 |
* version 2 of the License, or (at your option) any later version.
|
|
Packit Service |
e3b512 |
*
|
|
Packit Service |
e3b512 |
* This library is distributed in the hope that it will be useful,
|
|
Packit Service |
e3b512 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit Service |
e3b512 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit Service |
e3b512 |
* Library General Public License for more details.
|
|
Packit Service |
e3b512 |
*
|
|
Packit Service |
e3b512 |
* You should have received a copy of the GNU Library General Public
|
|
Packit Service |
e3b512 |
* License along with this library; if not, write to the Free Software
|
|
Packit Service |
e3b512 |
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
Packit Service |
e3b512 |
* 02110-1301, USA.
|
|
Packit Service |
e3b512 |
*/
|
|
Packit Service |
e3b512 |
|
|
Packit Service |
e3b512 |
#include <cairommconfig.h> //For CAIROMM_EXCEPTIONS_ENABLED
|
|
Packit Service |
e3b512 |
#include <cairomm/private.h>
|
|
Packit Service |
e3b512 |
#include <cairomm/exception.h>
|
|
Packit Service |
e3b512 |
#include <stdexcept>
|
|
Packit Service |
e3b512 |
#include <iostream>
|
|
Packit Service |
e3b512 |
|
|
Packit Service |
e3b512 |
namespace Cairo
|
|
Packit Service |
e3b512 |
{
|
|
Packit Service |
e3b512 |
|
|
Packit Service |
e3b512 |
#ifdef CAIROMM_EXCEPTIONS_ENABLED
|
|
Packit Service |
e3b512 |
void throw_exception(ErrorStatus status)
|
|
Packit Service |
e3b512 |
{
|
|
Packit Service |
e3b512 |
switch(status)
|
|
Packit Service |
e3b512 |
{
|
|
Packit Service |
e3b512 |
case CAIRO_STATUS_SUCCESS:
|
|
Packit Service |
e3b512 |
// we should never get here, but just in case
|
|
Packit Service |
e3b512 |
break;
|
|
Packit Service |
e3b512 |
|
|
Packit Service |
e3b512 |
case CAIRO_STATUS_NO_MEMORY:
|
|
Packit Service |
e3b512 |
throw std::bad_alloc();
|
|
Packit Service |
e3b512 |
break;
|
|
Packit Service |
e3b512 |
|
|
Packit Service |
e3b512 |
// Programmer error
|
|
Packit Service |
e3b512 |
case CAIRO_STATUS_INVALID_RESTORE:
|
|
Packit Service |
e3b512 |
case CAIRO_STATUS_INVALID_POP_GROUP:
|
|
Packit Service |
e3b512 |
case CAIRO_STATUS_NO_CURRENT_POINT:
|
|
Packit Service |
e3b512 |
case CAIRO_STATUS_INVALID_MATRIX:
|
|
Packit Service |
e3b512 |
//No longer in API?: case CAIRO_STATUS_NO_TARGET_SURFACE:
|
|
Packit Service |
e3b512 |
case CAIRO_STATUS_INVALID_STRING:
|
|
Packit Service |
e3b512 |
case CAIRO_STATUS_SURFACE_FINISHED:
|
|
Packit Service |
e3b512 |
//No longer in API?: case CAIRO_STATUS_BAD_NESTING:
|
|
Packit Service |
e3b512 |
throw Cairo::logic_error(status);
|
|
Packit Service |
e3b512 |
break;
|
|
Packit Service |
e3b512 |
|
|
Packit Service |
e3b512 |
// Language binding implementation:
|
|
Packit Service |
e3b512 |
case CAIRO_STATUS_NULL_POINTER:
|
|
Packit Service |
e3b512 |
case CAIRO_STATUS_INVALID_PATH_DATA:
|
|
Packit Service |
e3b512 |
case CAIRO_STATUS_SURFACE_TYPE_MISMATCH:
|
|
Packit Service |
e3b512 |
throw Cairo::logic_error(status);
|
|
Packit Service |
e3b512 |
break;
|
|
Packit Service |
e3b512 |
|
|
Packit Service |
e3b512 |
// Other
|
|
Packit Service |
e3b512 |
case CAIRO_STATUS_READ_ERROR:
|
|
Packit Service |
e3b512 |
case CAIRO_STATUS_WRITE_ERROR:
|
|
Packit Service |
e3b512 |
{
|
|
Packit Service |
e3b512 |
//The Cairo language binding advice suggests that these are stream errors
|
|
Packit Service |
e3b512 |
//that should be mapped to their C++ equivalents.
|
|
Packit Service |
e3b512 |
const char* error_message = cairo_status_to_string(status);
|
|
Packit Service |
e3b512 |
throw std::ios_base::failure( error_message ? error_message : std::string() );
|
|
Packit Service |
e3b512 |
}
|
|
Packit Service |
e3b512 |
break;
|
|
Packit Service |
e3b512 |
|
|
Packit Service |
e3b512 |
default:
|
|
Packit Service |
e3b512 |
throw Cairo::logic_error(status);
|
|
Packit Service |
e3b512 |
break;
|
|
Packit Service |
e3b512 |
}
|
|
Packit Service |
e3b512 |
}
|
|
Packit Service |
e3b512 |
#else
|
|
Packit Service |
e3b512 |
void throw_exception(ErrorStatus /* status */)
|
|
Packit Service |
e3b512 |
{
|
|
Packit Service |
e3b512 |
//Do nothing. The application should call get_status() instead.
|
|
Packit Service |
e3b512 |
}
|
|
Packit Service |
e3b512 |
#endif //CAIROMM_EXCEPTIONS_ENABLED
|
|
Packit Service |
e3b512 |
|
|
Packit Service |
e3b512 |
} //namespace Cairo
|
|
Packit Service |
e3b512 |
|
|
Packit Service |
e3b512 |
// vim: ts=2 sw=2 et
|