Home | History | Annotate | Download | only in gtk
      1 /*
      2  * Copyright (C) 2006 Michael Emmel mike.emmel (at) gmail.com
      3  * Copyright (C) 2007, 2009 Holger Hans Peter Freyther
      4  * All rights reserved.
      5  *
      6  * Redistribution and use in source and binary forms, with or without
      7  * modification, are permitted provided that the following conditions
      8  * are met:
      9  * 1. Redistributions of source code must retain the above copyright
     10  *    notice, this list of conditions and the following disclaimer.
     11  * 2. Redistributions in binary form must reproduce the above copyright
     12  *    notice, this list of conditions and the following disclaimer in the
     13  *    documentation and/or other materials provided with the distribution.
     14  *
     15  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
     16  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     17  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     18  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
     19  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     20  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     21  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
     22  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
     23  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     24  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     25  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     26  */
     27 
     28 #include "config.h"
     29 #include "Widget.h"
     30 
     31 #include "Cursor.h"
     32 #include "FrameView.h"
     33 #include "GraphicsContext.h"
     34 #include "GtkVersioning.h"
     35 #include "HostWindow.h"
     36 #include "IntRect.h"
     37 #include "RenderObject.h"
     38 
     39 #include <gdk/gdk.h>
     40 #include <gtk/gtk.h>
     41 
     42 namespace WebCore {
     43 
     44 Widget::Widget(PlatformWidget widget)
     45 {
     46     init(widget);
     47 }
     48 
     49 Widget::~Widget()
     50 {
     51     ASSERT(!parent());
     52     releasePlatformWidget();
     53 }
     54 
     55 void Widget::setFocus(bool focused)
     56 {
     57     if (focused)
     58         gtk_widget_grab_focus(platformWidget() ? platformWidget() : GTK_WIDGET(root()->hostWindow()->platformPageClient()));
     59 }
     60 
     61 void Widget::setCursor(const Cursor& cursor)
     62 {
     63     ScrollView* view = root();
     64     if (!view)
     65         return;
     66     view->hostWindow()->setCursor(cursor);
     67 }
     68 
     69 void Widget::show()
     70 {
     71     setSelfVisible(true);
     72 
     73     if (isParentVisible() && platformWidget())
     74         gtk_widget_show(platformWidget());
     75 }
     76 
     77 void Widget::hide()
     78 {
     79     setSelfVisible(false);
     80 
     81     if (isParentVisible() && platformWidget())
     82         gtk_widget_hide(platformWidget());
     83 }
     84 
     85 void Widget::paint(GraphicsContext* context, const IntRect& rect)
     86 {
     87 }
     88 
     89 void Widget::setIsSelected(bool isSelected)
     90 {
     91     if (!platformWidget())
     92         return;
     93 
     94     // See if the platformWidget has a webkit-widget-is-selected property
     95     // and set it afterwards.
     96     GParamSpec* spec = g_object_class_find_property(G_OBJECT_GET_CLASS(platformWidget()),
     97                                                     "webkit-widget-is-selected");
     98     if (!spec)
     99         return;
    100 
    101     g_object_set(platformWidget(), "webkit-widget-is-selected", isSelected, NULL);
    102 }
    103 
    104 IntRect Widget::frameRect() const
    105 {
    106     return m_frame;
    107 }
    108 
    109 void Widget::setFrameRect(const IntRect& rect)
    110 {
    111     m_frame = rect;
    112 }
    113 
    114 void Widget::releasePlatformWidget()
    115 {
    116     if (!platformWidget())
    117          return;
    118     g_object_unref(platformWidget());
    119 }
    120 
    121 void Widget::retainPlatformWidget()
    122 {
    123     if (!platformWidget())
    124          return;
    125     g_object_ref_sink(platformWidget());
    126 }
    127 
    128 }
    129