⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bridgeimpl.cpp

📁 khtml在gtk上的移植版本
💻 CPP
📖 第 1 页 / 共 3 页
字号:
    GdkEventButton viewportEvent = *event;    gint x = (gint)event->x, y = (gint)event->y;    mapToParentWindow(widget->window, event->window, x, y);    viewportEvent.x = (gdouble)x;    viewportEvent.y = (gdouble)y;    mouseUp((GdkEvent*)&viewportEvent);    return TRUE;}gint BridgeImpl::motionNotify(GtkWidget *widget, GdkEventMotion* event){    GdkModifierType state = (GdkModifierType) event->state;    gint x = (gint) event->x, y = (gint)event->y;    if (event->is_hint) 	gdk_window_get_pointer(event->window, &x, &y, &state);    gint viewportx = x;    gint viewporty = y;    // hackish workaround because we want coordinates in viewport coordinates, not layout coordinates     GdkEventMotion viewportEvent = *event;    viewportEvent.state = state;    mapToParentWindow(widget->window, event->window, viewportx, viewporty);    viewportEvent.x = (gdouble)viewportx;    viewportEvent.y = (gdouble)viewporty;    mouseMoved(&viewportEvent);    WebCoreElementInfo info;    memset(&info, 0, sizeof(info));    elementAtPoint(x, y, &info);     emitMouseOverChanged(&info);    #define FREE_IF_VALID(x) if ((x)) g_free((x));    FREE_IF_VALID(info.linkTitle);    FREE_IF_VALID(info.linkLabel);    FREE_IF_VALID(info.linkURL);    FREE_IF_VALID(info.linkTarget);    FREE_IF_VALID(info.imageURL);    FREE_IF_VALID(info.imageAltText);#undef FREE_IF_VALID    return TRUE;}gint BridgeImpl::expose(GtkWidget *widget, GdkEventExpose *event){    if (_inexpose) 	return FALSE;        _inexpose = true;    GdkRectangle exposeRect = event->area;    if (hasStaticBackground()) {	GtkAdjustment* ha = gtk_layout_get_hadjustment(GTK_LAYOUT(frameCanvas));	GtkAdjustment* va = gtk_layout_get_vadjustment(GTK_LAYOUT(frameCanvas));	GtkAllocation* a = &frameCanvas->allocation;	fillGdkRectangle(&exposeRect, (int)ha->value, (int)va->value, (int)ha->value + a->width, (int)va->value + a->height);    }    if (_shouldReapplyStyles) {	_shouldReapplyStyles = false;	reapplyStylesForDeviceType(WebCoreDeviceScreen);    }    GdkRegion* paintRegion = gdk_region_rectangle(&exposeRect);        gdk_window_begin_paint_region(event->window, paintRegion);    GdkXftContext gc(this, GTK_LAYOUT(frameCanvas)->bin_window);    drawRect(&exposeRect, &gc);    gdk_window_end_paint(event->window);    gdk_region_destroy(paintRegion);        _inexpose = false;    return TRUE;    }extern "C" {static void _remove_child(GtkWidget* child, gpointer data){    GtkContainer* container = GTK_CONTAINER (data);    assert(container);    assert(child);     gtk_container_remove(container, child);#ifdef DEBUG    g_printerr("removed child %x\n", (int) child);#endif}}void BridgeImpl::clearFrameContents(bool createView){#ifdef DEBUG    g_printerr("clear frame contents \n");#endif    gtk_container_foreach(GTK_CONTAINER (frameCanvas), _remove_child, GTK_CONTAINER (frameCanvas));#ifdef DEBUG    g_printerr("clear frame contents end\n");#endif    if (createView)	createKHTMLViewWithGtkWidget(GTK_WIDGET(frameWidget), 0,0);}void BridgeImpl::disconnectFrameContents(){    frameCanvas = 0;}void BridgeImpl::connectFrameContents(){    frameCanvas.connect("expose_event",			::expose,			this);    frameCanvas.connect("motion_notify_event",			::motion_notify,			this);    frameCanvas.connect("button_press_event",			::button_press,			this);    frameCanvas.connect("button_release_event",			::button_release,			this);    frameCanvas.connect("focus",			::focus,			this);	    frameCanvas.connect("focus-in-event",			::focus_inout_event,			this);    frameCanvas.connect("focus-out-event",		       ::focus_inout_event,			this);    frameCanvas.connect("key-press-event",			::key_press,			this);    frameCanvas.connect("key-release-event",			::key_press,			this);    frameCanvas.connect("size_allocate",			::size_allocate,			this);    gtk_widget_hide(GTK_WIDGET (frameWidget));    gtk_widget_show_all(GTK_WIDGET (frameWidget));}void BridgeImpl::setHasBorder(bool hasBorder){    g_warning("NotYetImplemented: %s",__PRETTY_FUNCTION__);}WebCoreKeyboardUIMode BridgeImpl::keyboardUIMode(){    return WebCoreKeyboardUIMode (WebCoreKeyboardAccessFull | WebCoreKeyboardAccessTabsToLinks);};void BridgeImpl::didSetName(const gchar* name){    assignToString(&_frameName, name);    g_warning("%s %s %s", __PRETTY_FUNCTION__, name,_frameName);}void BridgeImpl::loadURLFinished(bool hasError){      delete _activeRequest;    _activeRequest = 0;    end();    _isReloading = false;    history().unlock();    // unlock the history    scrollToAnchor(_requestedURL);}GtkWidget* BridgeImpl::widgetForPluginWithURL(const gchar* URL,					      GList* attributesArray,					      const gchar* baseURLString,					      const gchar *MIMEType){    #if 0    OSB::ContentRepresentationFactory *reprf = closestMatchForMIME(mainFrame()->reprForMIME, MIMEType);    if (reprf) {	OSB::ContentRepresentation *repr = reprf->create(MIMEType.latin1());	return new PluginWidget(reprf, repr);    }#endif    gchar str[100];    g_snprintf(str, 100, "plugin for mimeType: %s", MIMEType);    GtkWidget *b = gtk_label_new(str);    return b;}#if 0const gchar* BridgeImpl::renderTreeString(){    return _renderTree_u8 = renderTreeAsExternalRepresentation();}#endifvoid BridgeImpl::print(){    g_warning("NotYetImplemented: %s",__PRETTY_FUNCTION__);}void BridgeImpl::issueCutCommand(){   g_warning("NotYetImplemented: %s",__PRETTY_FUNCTION__);   assert(0);}void BridgeImpl::issueCopyCommand(){   g_warning("NotYetImplemented: %s",__PRETTY_FUNCTION__);   assert(0);}void BridgeImpl::issuePasteCommand(){    g_warning("NotYetImplemented: %s",__PRETTY_FUNCTION__);   assert(0);}void BridgeImpl::respondToChangedSelection(){    emitSelectionChanged();}void BridgeImpl::respondToChangedContents(){   g_warning("NotYetImplemented: %s",__PRETTY_FUNCTION__);}/** other methods */GtkWidget* BridgeImpl::widget(){    return GTK_WIDGET(frameWidget);}void BridgeImpl::saveHistoryItem(){  if (!isReloading()) {    VisitedURLHistory::sharedProvider()->insertVisitedURL(requestedURLString());    history().pushNew(requestedURLString());  }}SimpleHistory& BridgeImpl::history(){    return _history;}void BridgeImpl::setFrameName(const gchar* frameName){    }const gchar* BridgeImpl::overrideMediaType(){    g_warning("NotYetImplemented: %s",__PRETTY_FUNCTION__);    return "";}void  BridgeImpl::windowObjectCleared(){    g_warning("NotYetImplemented: %s",__PRETTY_FUNCTION__);}bool BridgeImpl::canGoBack(){    return history().pos()>0;}bool BridgeImpl::canGoForward(){    return history().pos() < (history().length()-1);}void BridgeImpl::goForward(){    if (canGoForward()) history().next();    const gchar* url = history().current();    history().lock();    loadURL(url,	    "",			// referer:	    false,		// reload: 	    false,		// onLoadEvent: 	    "_self",		// target:	    0,		        // triggeringEvent: 	    0,			// form: 	    0);			// formValues:}void BridgeImpl::goBack(){    if (canGoBack()) history().prev();    const gchar* url = history().current();    history().lock();    loadURL(url,	    "",			// referer	    false,		// reload:	    false,		// onLoadEvent:	    "_self",		// target: 	    0,		        // triggeringEvent: 	    0,			// form: 	    0);			// formValues:}void BridgeImpl::addContentRepresentation(OSB::ContentRepresentationFactory* reprf, const char* mimeType){    }void BridgeImpl::regionExpiresAt(GTimeVal* moment, GdkRectangle* rect, CGContext* caller){    // use this for animations}void BridgeImpl::redirection(const gchar* url){    assignToString(&_currentURL, url);    emitServerRedirected(_currentURL);}void BridgeImpl::changeSettingsDescendingToChildren(WebCoreSettings* s){    assert(s);    initializeSettings(s);    GList* iter = g_list_first(_childFrames);    BridgeImpl* child;    while (iter) {	child = static_cast<BridgeImpl*>(iter->data);	assert(child);		child->initializeSettings(s);	iter= g_list_next(iter);    }}GList* BridgeImpl::childFrames(){    return _childFrames;}extern "C" {static voidsize_allocate( GtkWidget *widget, GtkAllocation *allocation, gpointer data){#if DEBUG    g_printerr("%s widget:%x, data:%x new_dim:(%d,%d;%d,%d)\n", 	       __PRETTY_FUNCTION__, 	       (int)widget,	       (int)data,	       allocation->x, allocation->y, allocation->width, allocation->height);#endif    BridgeImpl* self = static_cast<BridgeImpl*>(data);    assert(self);    self->sizeAllocate(widget, allocation);}static intexpose(GtkWidget *widget, GdkEventExpose *event, gpointer data){#if DEBUG    g_printerr("%s widget:%x event:%x, data:%x (window %x, x:%d,y:%d,w:%d,h:%d)\n",	   __PRETTY_FUNCTION__, 	       (int)widget,	       (int)event,	       (int)data,	       (int)event->window,	       event->area.x,	       event->area.y,	       event->area.width,	       event->area.height);    #endif    BridgeImpl *bridge = static_cast<BridgeImpl*>(data);    return bridge->expose(widget, event);}static gint motion_notify(GtkWidget *widget, GdkEventMotion *event, gpointer data){    BridgeImpl *self = static_cast<BridgeImpl*>(data);    return self->motionNotify(widget, event);}static gintbutton_press(GtkWidget *widget, GdkEventButton *event, gpointer data){    BridgeImpl *self = static_cast<BridgeImpl*>(data);    return self->buttonPress(widget, event);}static gintbutton_release(GtkWidget *widget, GdkEventButton *event, gpointer data){    BridgeImpl *self = static_cast<BridgeImpl*>(data);    return self->buttonRelease(widget, event);}static gbooleanfocus(GtkWidget *widget, GtkDirectionType dir, gpointer data){#if DEBUG    g_printerr("%s: widget:%x dir:%x data:%x \n",	       __PRETTY_FUNCTION__,	       (int)widget,	       (int)dir,	       (int)data);#endif    return FALSE;}static  gbooleanfocus_inout_event(GtkWidget *widget, GdkEventFocus *event, gpointer data){#if DEBUG    g_printerr("%s: widget:%x event:%x data:%x \n",	   __PRETTY_FUNCTION__,	       (int)widget,	       (int)event,	       (int)data);#endif        return FALSE;}static gbooleankey_press(GtkWidget *widget, GdkEventKey *event, gpointer data){#if DEBUG    g_printerr("%s: widget %x, data:%x, event->keyval %d",	       __PRETTY_FUNCTION__, 	       (int)widget, 	       (int)data, 	       (int)event->keyval);#endif    return FALSE;}}static void mapToParentWindow(GdkWindow* parent, GdkWindow* child, int&x, int&y){    int nx, ny;    while (child != parent) {	gdk_window_get_position (child, &nx, &ny);	x += nx;	y += ny;	child = gdk_window_get_parent (child);	assert(child);    }    }/**   Local Variables:      c-basic-offset: 4   End: */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -