summaryrefslogtreecommitdiffstats
path: root/views/widget/widget_gtk.h
diff options
context:
space:
mode:
Diffstat (limited to 'views/widget/widget_gtk.h')
-rw-r--r--views/widget/widget_gtk.h125
1 files changed, 125 insertions, 0 deletions
diff --git a/views/widget/widget_gtk.h b/views/widget/widget_gtk.h
new file mode 100644
index 0000000..4bbc0dd
--- /dev/null
+++ b/views/widget/widget_gtk.h
@@ -0,0 +1,125 @@
+// Copyright (c) 2009 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef VIEWS_WIDGET_WIDGET_GTK_H_
+#define VIEWS_WIDGET_WIDGET_GTK_H_
+
+#include <gtk/gtk.h>
+
+#include "base/message_loop.h"
+#include "views/widget/widget.h"
+
+namespace gfx {
+class Rect;
+}
+
+namespace views {
+
+class View;
+
+class WidgetGtk : public Widget {
+ public:
+ static WidgetGtk* Construct() {
+ // This isn't used, but exists to force WidgetGtk to be instantiable.
+ return new WidgetGtk;
+ }
+
+ WidgetGtk();
+ virtual ~WidgetGtk();
+
+ // Initializes this widget and returns the gtk drawing area for the caller to
+ // add to its hierarchy. (We can't pass in the parent to this method because
+ // there are no standard adding semantics in gtk...)
+ void Init(const gfx::Rect& bounds, bool has_own_focus_manager);
+
+ virtual void SetContentsView(View* view);
+
+ // Overridden from Widget:
+ virtual void GetBounds(gfx::Rect* out, bool including_frame) const;
+ virtual gfx::NativeView GetNativeView() const;
+ virtual void PaintNow(const gfx::Rect& update_rect);
+ virtual RootView* GetRootView();
+ virtual bool IsVisible() const;
+ virtual bool IsActive() const;
+ virtual TooltipManager* GetTooltipManager();
+ virtual bool GetAccelerator(int cmd_id, Accelerator* accelerator);
+
+ protected:
+ virtual void OnSizeAllocate(GtkWidget* widget, GtkAllocation* allocation) {}
+ virtual gboolean OnPaint(GtkWidget* widget, GdkEventExpose* event);
+ virtual gboolean OnEnterNotify(GtkWidget* widget, GdkEventCrossing* event);
+ virtual gboolean OnLeaveNotify(GtkWidget* widget, GdkEventCrossing* event);
+ virtual gboolean OnMotionNotify(GtkWidget* widget, GdkEventMotion* event);
+ virtual gboolean OnButtonPress(GtkWidget* widget, GdkEventButton* event);
+ virtual gboolean OnButtonRelease(GtkWidget* widget, GdkEventButton* event);
+ virtual gboolean OnFocusIn(GtkWidget* widget, GdkEventFocus* event) {
+ return false;
+ }
+ virtual gboolean OnFocusOut(GtkWidget* widget, GdkEventFocus* event) {
+ return false;
+ }
+ virtual gboolean OnKeyPress(GtkWidget* widget, GdkEventKey* event);
+ virtual gboolean OnKeyRelease(GtkWidget* widget, GdkEventKey* event);
+ virtual gboolean OnScroll(GtkWidget* widget, GdkEventScroll* event) {
+ return false;
+ }
+ virtual gboolean OnVisibilityNotify(GtkWidget* widget,
+ GdkEventVisibility* event) {
+ return false;
+ }
+
+ private:
+ virtual RootView* CreateRootView();
+
+ // Process a mouse click
+ bool ProcessMousePressed(GdkEventButton* event);
+ void ProcessMouseReleased(GdkEventButton* event);
+
+ // Sets and retrieves the WidgetGtk in the userdata section of the widget.
+ static WidgetGtk* GetViewForNative(GtkWidget* widget);
+ static void SetViewForNative(GtkWidget* widget, WidgetGtk* view);
+
+ static RootView* GetRootViewForWidget(GtkWidget* widget);
+ static void SetRootViewForWidget(GtkWidget* widget, RootView* root_view);
+
+ // A set of static signal handlers that bridge
+ static void CallSizeAllocate(GtkWidget* widget, GtkAllocation* allocation);
+ static gboolean CallPaint(GtkWidget* widget, GdkEventExpose* event);
+ static gboolean CallEnterNotify(GtkWidget* widget, GdkEventCrossing* event);
+ static gboolean CallLeaveNotify(GtkWidget* widget, GdkEventCrossing* event);
+ static gboolean CallMotionNotify(GtkWidget* widget, GdkEventMotion* event);
+ static gboolean CallButtonPress(GtkWidget* widget, GdkEventButton* event);
+ static gboolean CallButtonRelease(GtkWidget* widget, GdkEventButton* event);
+ static gboolean CallFocusIn(GtkWidget* widget, GdkEventFocus* event);
+ static gboolean CallFocusOut(GtkWidget* widget, GdkEventFocus* event);
+ static gboolean CallKeyPress(GtkWidget* widget, GdkEventKey* event);
+ static gboolean CallKeyRelease(GtkWidget* widget, GdkEventKey* event);
+ static gboolean CallScroll(GtkWidget* widget, GdkEventScroll* event);
+ static gboolean CallVisibilityNotify(GtkWidget* widget,
+ GdkEventVisibility* event);
+
+ // Our native view.
+ GtkWidget* widget_;
+
+ // The root of the View hierarchy attached to this window.
+ scoped_ptr<RootView> root_view_;
+
+ // If true, the mouse is currently down.
+ bool is_mouse_down_;
+
+ // The following are used to detect duplicate mouse move events and not
+ // deliver them. Displaying a window may result in the system generating
+ // duplicate move events even though the mouse hasn't moved.
+
+ // If true, the last event was a mouse move event.
+ bool last_mouse_event_was_move_;
+
+ // Coordinates of the last mouse move event, in screen coordinates.
+ int last_mouse_move_x_;
+ int last_mouse_move_y_;
+};
+
+} // namespace views
+
+#endif // VIEWS_WIDGET_WIDGET_GTK_H_