abstractgtkcontrol.cpp
来自「这是VCF框架的代码」· C++ 代码 · 共 1,333 行 · 第 1/3 页
CPP
1,333 行
//AbstractGTKControl.cpp/*Copyright 2000-2004 The VCF Project.Please see License.txt in the top level directorywhere you installed the VCF.*/#include "vcf/ApplicationKit/ApplicationKit.h"#include "vcf/ApplicationKit/ApplicationKitPrivate.h"#include "vcf/ApplicationKit/AbstractGTKControl.h"#include "vcf/ApplicationKit/GTKControl.h"using namespace VCF;AbstractGTKControl::GTKControlMap AbstractGTKControl::gtkControlMap;static GtkContainerClass * internalVCFParentClass = NULL;AbstractGTKControl::AbstractGTKControl() : enabled_( false ), control_( NULL ), wndHandle_( NULL ), parent_( NULL ), repainted_( false ){}AbstractGTKControl::~AbstractGTKControl(){}void AbstractGTKControl::create( Control* owningControl ){}void AbstractGTKControl::destroyControl(){}String AbstractGTKControl::getText(){ String result; return result;}void AbstractGTKControl::setText( const String& text ){}void AbstractGTKControl::setBounds( Rect* rect ){ bounds_ = *rect; if ( !GTK_IS_VCF_CONTAINER( wndHandle_ ) ) { GtkWidget * gdkParent = gtk_widget_get_parent ( wndHandle_ ); if ( !GTK_IS_VCF_CONTAINER( gdkParent ) ) { //throw RuntimeException( MAKE_ERROR_MSG_2("Can't set bounds for gtk widget if it's not parented to a valid VCF widget!") ); return ; } AbstractGTKControl::Container::moveChild( GTK_VCF_CONTAINER( gdkParent ), wndHandle_, ( int ) rect->left_, ( int ) rect->top_, ( int ) rect->getWidth(), ( int ) rect->getHeight() ); } else { AbstractGTKControl::Container::move( wndHandle_, ( int ) rect->left_, ( int ) rect->top_, ( int ) rect->getWidth(), ( int ) rect->getHeight() ); }}bool AbstractGTKControl::beginSetBounds( const ulong32& numberOfChildren ){ return true;}void AbstractGTKControl::endSetBounds(){}Rect AbstractGTKControl::getBounds(){ return bounds_;}void AbstractGTKControl::setVisible( const bool& visible ){ if ( GTK_WIDGET_REALIZED( wndHandle_ ) ) { if ( visible ) { gtk_widget_show ( wndHandle_ ); } else { gtk_widget_hide( wndHandle_ ); } }}bool AbstractGTKControl::getVisible(){ //if ( GTK_WIDGET_REALIZED( wndHandle_ ) ) { //return gdk_window_is_visible( wndHandle_->window ) ? true : false; //} return GTK_WIDGET_VISIBLE( wndHandle_ ) ? true : false;}Control* AbstractGTKControl::getControl(){ return control_;}void AbstractGTKControl::setControl( Control* component ){ control_ = component;}void AbstractGTKControl::setCursor( Cursor* cursor ){ gdk_window_set_cursor( wndHandle_->window, ( GdkCursor* ) cursor->getPeer() ->getCursorHandleID() );}void AbstractGTKControl::setParent( Control* parent ){ GtkWidget * gdkParent = ( GtkWidget* ) parent->getPeer() ->getHandleID(); if ( NULL == gtk_widget_get_parent( wndHandle_ ) ) { gtk_container_add ( GTK_CONTAINER ( gdkParent ), wndHandle_ ); } else { gtk_widget_reparent( wndHandle_, gdkParent ); }}Control* AbstractGTKControl::getParent(){ Control * result = NULL; GtkWidget* gdkParent = gtk_widget_get_parent ( wndHandle_ ); AbstractGTKControl* parentCtrl = getGTKControlFromWidget( gdkParent ); if ( NULL != parentCtrl ) { result = parentCtrl->getControl(); } return result;}bool AbstractGTKControl::isFocused(){ return control_ == Control::getCurrentFocusedControl();}void AbstractGTKControl::setFocused(){ if ( GTK_WIDGET_CAN_FOCUS( wndHandle_ ) ) { gtk_widget_grab_focus( wndHandle_ ); //gdk_window_focus( wndHandle_->window, GDK_CURRENT_TIME ); }}bool AbstractGTKControl::isEnabled(){ return enabled_;}void AbstractGTKControl::setEnabled( const bool& enabled ){ enabled_ = enabled;}void AbstractGTKControl::setFont( Font* font ){ GTKFont * peer = ( GTKFont* ) font->getFontPeer(); gtk_widget_modify_font( wndHandle_, peer->getPangoFontDescription() ); //gtk_widget_modify_font //((GTKFont*)font->getPeer())->getPangoFontDescription()}void AbstractGTKControl::repaint( Rect* repaintRect ){ if ( repainted_ ) { return ; } repainted_ = true; if ( GTK_WIDGET_DRAWABLE( wndHandle_ ) ) { GdkRectangle rect; if ( NULL != repaintRect ) { rect.x = ( int ) repaintRect->left_; rect.y = ( int ) repaintRect->top_; rect.width = ( int ) repaintRect->getWidth(); rect.height = ( int ) repaintRect->getHeight(); } else { rect.x = 0; rect.y = 0; rect.width = ( int ) bounds_.getWidth(); rect.height = ( int ) bounds_.getHeight(); } gdk_window_invalidate_rect( wndHandle_->window, &rect, FALSE ); }}void AbstractGTKControl::keepMouseEvents(){ //return; //GdkEventMask eventMask = (GdkEventMask) // (GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_RELEASE_MASK); int eventMask = GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_BUTTON1_MOTION_MASK | GDK_BUTTON2_MOTION_MASK | GDK_BUTTON3_MOTION_MASK; int res = gdk_pointer_grab( wndHandle_->window, FALSE, ( GdkEventMask ) eventMask, NULL, NULL, GDK_CURRENT_TIME ); if ( res != GDK_GRAB_SUCCESS ) { //report error throw exception here ???? StringUtils::traceWithArgs( "gdk_pointer_grab failed!\n" ); return ; } gtk_grab_add ( wndHandle_ );}void AbstractGTKControl::releaseMouseEvents(){ //return; GdkDisplay * display = gtk_widget_get_display ( wndHandle_ ); gtk_grab_remove ( wndHandle_ ); if ( gdk_display_pointer_is_grabbed ( display ) ) { gdk_display_pointer_ungrab ( display, GDK_CURRENT_TIME ); } gdk_pointer_ungrab( GDK_CURRENT_TIME );}String GTK_EventToString( GdkEvent* gtkEvent ){ String result; static unsigned long count = 0; switch ( gtkEvent->type ) { case GDK_NOTHING : { result += "GDK_NOTHING"; } break; case GDK_KEY_RELEASE : { result += "GDK_KEY_RELEASE"; } break; case GDK_ENTER_NOTIFY : { result += "GDK_ENTER_NOTIFY"; } break; case GDK_KEY_PRESS : { result += "GDK_KEY_PRESS"; } break; case GDK_BUTTON_RELEASE : { result += "GDK_BUTTON_RELEASE"; } break; case GDK_3BUTTON_PRESS : { result += "GDK_3BUTTON_PRESS"; } break; case GDK_2BUTTON_PRESS : { result += "GDK_2BUTTON_PRESS"; } break; case GDK_BUTTON_PRESS : { result += "GDK_BUTTON_PRESS"; } break; case GDK_MOTION_NOTIFY : { result += "GDK_MOTION_NOTIFY"; } break; case GDK_EXPOSE : { result += "GDK_EXPOSE"; } break; case GDK_DESTROY : { result += "GDK_DESTROY"; } break; case GDK_DELETE : { result += "GDK_DELETE"; } break; case GDK_SELECTION_REQUEST : { result += "GDK_SELECTION_REQUEST"; } break; case GDK_SELECTION_CLEAR : { result += "GDK_SELECTION_CLEAR"; } break; case GDK_PROPERTY_NOTIFY : { result += "GDK_PROPERTY_NOTIFY"; } break; case GDK_UNMAP : { result += "GDK_UNMAP"; } break; case GDK_MAP : { result += "GDK_MAP"; } break; case GDK_CONFIGURE : { result += "GDK_CONFIGURE"; } break; case GDK_FOCUS_CHANGE : { result += "GDK_FOCUS_CHANGE"; } break; case GDK_LEAVE_NOTIFY : { result += "GDK_LEAVE_NOTIFY"; } break; case GDK_DRAG_MOTION : { result += "GDK_DRAG_MOTION"; } break; case GDK_DRAG_LEAVE : { result += "GDK_DRAG_LEAVE"; } break; case GDK_DRAG_ENTER : { result += "GDK_DRAG_ENTER"; } break; case GDK_PROXIMITY_OUT : { result += "GDK_PROXIMITY_OUT"; } break; case GDK_PROXIMITY_IN : { result += "GDK_PROXIMITY_IN"; } break; case GDK_SELECTION_NOTIFY : { result += "GDK_SELECTION_NOTIFY"; } break; case GDK_NO_EXPOSE : { result += "GDK_NO_EXPOSE"; } break; case GDK_VISIBILITY_NOTIFY : { result += "GDK_VISIBILITY_NOTIFY"; } break; case GDK_CLIENT_EVENT : { result += "GDK_CLIENT_EVENT"; } break; case GDK_DROP_FINISHED : { result += "GDK_DROP_FINISHED"; } break; case GDK_DROP_START : { result += "GDK_DROP_START"; } break; case GDK_DRAG_STATUS : { result += "GDK_DRAG_STATUS"; } break; case GDK_SETTING : { result += "GDK_SETTING"; } break; case GDK_WINDOW_STATE : { result += "GDK_WINDOW_STATE"; } break; case GDK_SCROLL : { result += "GDK_SCROLL"; } break; } result += " count: " + StringUtils::toString( count ); count ++; return result;}gboolean AbstractGTKControl::handleEvent( GdkEvent* gtkEvent ){ //StringUtils::traceWithArgs( "widget: %p, name: %s, event: %s\n", // wndHandle_, // wndHandle_->name, // GTK_EventToString(gtkEvent).c_str() );
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?