/* * This program source code file is part of KiCad, a free EDA CAD application. * * Copyright (C) 2019 KiCad Developers, see CHANGELOG.TXT for contributors. * * 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, you may find one here: * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html * or you may search the http://www.gnu.org website for the version 2 license, * or you may write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include #include /** * Construct a cursor for the given definition. * * How to do this depends on the platform, see * http://docs.wxwidgets.org/trunk/classwx_cursor.html * * @param aDef the cursor definition * @return a newly constructed cursor if the platform is supported, * else wxNullCursor */ wxCursor constructCursor( const CURSOR_STORE::CURSOR_DEF& aDef ) { #if defined( __WXMSW__ ) || defined( __WXMAC__ ) wxBitmap img_bitmap( reinterpret_cast( aDef.m_image_data ), aDef.m_size.x, aDef.m_size.y ); wxBitmap msk_bitmap( reinterpret_cast( aDef.m_mask_data ), aDef.m_size.x, aDef.m_size.y ); img_bitmap.SetMask( new wxMask( msk_bitmap ) ); wxImage image( img_bitmap.ConvertToImage() ); #if defined( __WXMSW__ ) image.SetMaskColour( 255, 255, 255 ); #endif image.SetOption( wxIMAGE_OPTION_CUR_HOTSPOT_X, aDef.m_hotspot.x ); image.SetOption( wxIMAGE_OPTION_CUR_HOTSPOT_Y, aDef.m_hotspot.y ); return wxCursor{ image }; #elif defined( __WXGTK__ ) || defined( __WXMOTIF__ ) return wxCursor{ reinterpret_cast( aDef.m_image_data ), aDef.m_size.x, aDef.m_size.y, aDef.m_hotspot.x, aDef.m_hotspot.y, reinterpret_cast( aDef.m_mask_data ), }; #else wxASSERT_MSG( false, "Unknown platform for cursor construction." ); return wxNullCursor; #endif } CURSOR_STORE::CURSOR_STORE( const std::vector& aDefs ) { for( const auto& def : aDefs ) { m_store[def.m_id_key] = constructCursor( def ); } } const wxCursor& CURSOR_STORE::Get( int aIdKey ) const { const auto find_iter = m_store.find( aIdKey ); if( find_iter != m_store.end() ) { return find_iter->second; } wxASSERT_MSG( false, wxString::Format( "Could not find cursor with ID %d", static_cast( aIdKey ) ) ); return wxNullCursor; }