summaryrefslogtreecommitdiff
path: root/src/Gtk
diff options
context:
space:
mode:
Diffstat (limited to 'src/Gtk')
-rw-r--r--src/Gtk/Internal.dcl1
-rw-r--r--src/Gtk/Internal.icl16
-rw-r--r--src/Gtk/Widgets.dcl1
-rw-r--r--src/Gtk/Widgets.icl10
4 files changed, 28 insertions, 0 deletions
diff --git a/src/Gtk/Internal.dcl b/src/Gtk/Internal.dcl
index eda7f32..ba30123 100644
--- a/src/Gtk/Internal.dcl
+++ b/src/Gtk/Internal.dcl
@@ -20,6 +20,7 @@ gtk_box_pack_end :: !Pointer !Pointer !Bool !Bool !Int !.a -> .a
gtk_container_add :: !Pointer !Pointer !.a -> .a
gtk_frame_new :: !(Maybe String) !.a -> (!Pointer, !.a)
+gtk_frame_set_label_align :: !Pointer !Real !Real !.a -> .a
gtk_init :: !.a -> .a
diff --git a/src/Gtk/Internal.icl b/src/Gtk/Internal.icl
index 3321bf2..5b49160 100644
--- a/src/Gtk/Internal.icl
+++ b/src/Gtk/Internal.icl
@@ -69,6 +69,22 @@ where
ccall gtk_frame_new "s:p:A"
}
+// TODO: convert double to float properly
+gtk_frame_set_label_align :: !Pointer !Real !Real !.a -> .a
+gtk_frame_set_label_align frame xalign yalign env = code {
+ | cvtsd2ss %xmm0,%xmm0
+ instruction 242
+ instruction 15
+ instruction 90
+ instruction 192
+ | cvtsd2ss %xmm1,%xmm1
+ instruction 242
+ instruction 15
+ instruction 90
+ instruction 201
+ ccall gtk_frame_set_label_align "pRR:V:A"
+}
+
gtk_init :: !.a -> .a
gtk_init env = init 0 0 env
where
diff --git a/src/Gtk/Widgets.dcl b/src/Gtk/Widgets.dcl
index b4a9849..03b56b7 100644
--- a/src/Gtk/Widgets.dcl
+++ b/src/Gtk/Widgets.dcl
@@ -38,6 +38,7 @@ instance gtkWidget GtkFrame
instance gtkContainer GtkFrame
newFrame :: !GtkLabel !w -> State GtkState GtkFrame | gtkWidget w
+framed :: !GtkLabel !(State GtkState w) -> State GtkState (w, GtkFrame) | gtkWidget w
:: GtkPaned
instance gtkWidget GtkPaned
diff --git a/src/Gtk/Widgets.icl b/src/Gtk/Widgets.icl
index 5413dd5..d9f7a59 100644
--- a/src/Gtk/Widgets.icl
+++ b/src/Gtk/Widgets.icl
@@ -6,6 +6,8 @@ import StdMaybe
import Control.Monad
import Control.Monad.Identity
import Control.Monad.State
+import Data.Functor
+import Data.Tuple
import System._Pointer
import qualified Gtk.Internal as I
@@ -52,9 +54,17 @@ instance gtkContainer GtkFrame where gtkContainer f = f
newFrame :: !GtkLabel !w -> State GtkState GtkFrame | gtkWidget w
newFrame label widget =
toStateR ('I'.gtk_frame_new (case label of Label l -> Just l; _ -> Nothing)) >>= \frame ->
+ (case label of
+ Label _ -> toState ('I'.gtk_frame_set_label_align frame 0.02 0.5)
+ NoLabel -> pure ()) >>|
addToContainer widget frame >>|
show frame
+framed :: !GtkLabel !(State GtkState w) -> State GtkState (w, GtkFrame) | gtkWidget w
+framed label widgetf =
+ widgetf >>= \widget ->
+ tuple widget <$> newFrame label widget
+
:: GtkPaned :== Pointer
instance gtkWidget GtkPaned where gtkWidget p = p