📄 gtk.c
字号:
// C functions to bypass zinc limitations
//
// * zinc does not implements floats and doubles yet
// these functions convert floats to ints
// * zinc does not support variable argument number
// * Access to gtk structure attributes
#include <X11/Xlib.h>
#include <X11/Xatom.h>
#include <gtk/gtk.h>
#include "gdk/gdkprivate.h"
#include "gdk/gdkx.h"
///////////////////////////////////////////////////////////////////////////////
// Stubs for glib
///////////////////////////////////////////////////////////////////////////////
gpointer g_object_new_0 (GType t)
{
return g_object_new(t, 0);
}
///////////////////////////////////////////////////////////////////////////////
//
// gdk events
//
///////////////////////////////////////////////////////////////////////////////
guint gdk_event_button_button (GdkEventButton* e)
{
return e->button;
}
int gdk_event_button_get_x (GdkEventButton* e)
{
return (int)e->x;
}
int gdk_event_button_get_y (GdkEventButton* e)
{
return (int)e->y;
}
int gdk_event_motion_get_x (GdkEventMotion* e)
{
return (int)e->x;
}
int gdk_event_motion_get_y (GdkEventMotion* e)
{
return (int)e->y;
}
int gdk_event_scroll_get_x (GdkEventScroll* e)
{
return (int)e->x;
}
int gdk_event_scroll_get_y (GdkEventScroll* e)
{
return (int)e->y;
}
///////////////////////////////////////////////////////////////////////////////
//
// alignment
//
///////////////////////////////////////////////////////////////////////////////
void gtk_misc_set_align (GtkMisc *misc, gint xalign, gint yalign)
{
gtk_misc_set_alignment (misc,
((gfloat)xalign)/100.0,
((gfloat)yalign)/100.0);
}
void gtk_misc_get_align (GtkMisc *misc, gint *xalign, gint *yalign)
{
gfloat xa;
gfloat ya;
gtk_misc_get_alignment (misc, &xa, &ya);
*xalign = (gint) (xa*100.0);
*yalign = (gint) (ya*100.0);
}
///////////////////////////////////////////////////////////////////////////////
//
// Adjustment
//
///////////////////////////////////////////////////////////////////////////////
GtkObject* gtk_adjustment_new_int(
gint value,
gint lower,
gint upper,
gint step_increment,
gint page_increment,
gint page_size)
{
return gtk_adjustment_new(
(gdouble)value,
(gdouble)lower,
(gdouble)upper,
(gdouble)step_increment,
(gdouble)page_increment,
(gdouble)page_size);
}
void gtk_adjustment_clamp_page_int(GtkAdjustment *adjustment,
gint lower,
gint upper)
{
gtk_adjustment_clamp_page(adjustment, (gdouble)lower, (gdouble)upper);
}
gint gtk_adjustment_get_value_int(GtkAdjustment *adjustment)
{
return (gint)gtk_adjustment_get_value(adjustment);
}
void gtk_adjustment_set_value_int(GtkAdjustment *adjustment, gint value)
{
gtk_adjustment_set_value(adjustment, (gdouble)value);
}
///////////////////////////////////////////////////////////////////////////////
//
// range
//
///////////////////////////////////////////////////////////////////////////////
void gtk_range_set_increments_int(GtkRange *range, gint step, gint page)
{
gtk_range_set_increments(range, (gdouble)step, (gdouble)page);
}
void gtk_range_set_range_int(GtkRange *range, gint min, gint max)
{
gtk_range_set_range (range, (gdouble)min, (gdouble)max);
}
void gtk_range_set_value_int(GtkRange *range, gint value)
{
gtk_range_set_value(range, (gdouble)value);
}
gint gtk_range_get_value_int (GtkRange *range)
{
return (gint)gtk_range_get_value(range);
}
///////////////////////////////////////////////////////////////////////////////
//
// access to widget attributes
//
///////////////////////////////////////////////////////////////////////////////
guint32 gtk_widget_get_flags (GtkWidget* w)
{
return GTK_WIDGET_FLAGS (w);
}
void gtk_widget_set_flags (GtkWidget* w, guint flags)
{
GTK_WIDGET_SET_FLAGS (w, flags);
}
void gtk_widget_unset_flags (GtkWidget* w, guint flags)
{
GTK_WIDGET_UNSET_FLAGS (w, flags);
}
GdkWindow* gtk_widget_get_window (GtkWidget *widget)
{
return widget->window;
}
GtkType* gtk_widget_type(GtkWidget* w)
{
return (GtkType*)GTK_WIDGET_TYPE(w);
}
///////////////////////////////////////////////////////////////////////////////
//
// access to style attributes
//
///////////////////////////////////////////////////////////////////////////////
GdkColor* gtk_style_get_fg (GtkStyle* s, int state) { return &(s->fg[state]); }
GdkColor* gtk_style_get_bg (GtkStyle* s, int state) { return &(s->bg[state]); }
GdkColor* gtk_style_get_light (GtkStyle* s, int state) { return &(s->light[state]); }
GdkColor* gtk_style_get_dark (GtkStyle* s, int state) { return &(s->dark[state]); }
GdkColor* gtk_style_get_mid (GtkStyle* s, int state) { return &(s->mid[state]); }
GdkColor* gtk_style_get_text (GtkStyle* s, int state) { return &(s->text[state]); }
GdkColor* gtk_style_get_base (GtkStyle* s, int state) { return &(s->base[state]); }
GdkPixmap* gtk_style_get_pixmap (GtkStyle* s, int state) { return s->bg_pixmap[state]; }
///////////////////////////////////////////////////////////////////////////////
//
// message box
//
///////////////////////////////////////////////////////////////////////////////
GtkWidget* gtk_message_dialog_new_nofmt(GtkWindow *parent,
GtkDialogFlags flags,
GtkMessageType type,
GtkButtonsType buttons,
const gchar *message)
{
return gtk_message_dialog_new (parent,
flags,
type,
buttons,
"%s",
message);
}
///////////////////////////////////////////////////////////////////////////////
//
// File selector attributes
//
///////////////////////////////////////////////////////////////////////////////
GtkButton* gtk_file_selection_get_ok_button (GtkFileSelection* fs)
{
return GTK_BUTTON (GTK_FILE_SELECTION (fs)->ok_button);
}
GtkButton* gtk_file_selection_get_cancel_button (GtkFileSelection* fs)
{
return GTK_BUTTON (GTK_FILE_SELECTION (fs)->cancel_button);
}
GtkWidget* gtk_file_chooser_dialog_new_1(const gchar *title,
GtkWindow *parent,
GtkFileChooserAction action,
const gchar *button_1,
const gchar *button_2,
const gchar *button_3,
const gchar *button_4)
{
return gtk_file_chooser_dialog_new(title,
parent,
action,
button_1,
button_2,
button_3,
button_4,
0);
}
void gtk_list_store_set_1(GtkListStore* store,GtkTreeIter* iter, int v1,gchar* v2,int v3)
{
gtk_list_store_set(store, iter, v1, v2, v3);
}
GtkWidget* gtk_widget_new_0 (GtkType t)
{
return gtk_widget_new(t, 0);
}
///////////////////////////////////////////////////////////////////////////////
//
// GDK
//
///////////////////////////////////////////////////////////////////////////////
// gdk_selection_owner_get cannot be used to check if a window from
// another process owns the selection (it fails with the xwindow -> gdkwindow
// conversion)
int check_selection_owner_get(GdkAtom atom)
{
GdkDisplay *display;
Atom xatom;
Window xwindow;
display = gdk_display_get_default();
xatom = gdk_x11_atom_to_xatom_for_display(display, atom);
xwindow = XGetSelectionOwner (gdk_display, xatom);
return xwindow != None;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -