Seite 4 von 6

Re: scrollen wie iPad ...?

Verfasst: 26.05.2010 12:52
von Shardik
NicTheQuick hat geschrieben:Ja, genau das ist das Problem. Diese Events werden unter Linux nicht durchgereicht.
Man kann zwar Klicks auf ein ImageGadget abfangen, aber keine MouseMove-Events.
Wenn man in Linux ein ImageGadget in ein ContainerGadget setzt, kann man auch MouseMove-Ereignisse
erkennen oder zumindest feststellen, ob sich der Cursor über dem Image (respektive ContainerGadget)
befindet:

Code: Alles auswählen

Enumeration
  #EnterGadgetEvent
  #LeaveGadgetEvent
EndEnumeration

ProcedureC GadgetEvent(*Widget.GtkWidget, *Event.GdkEventMotion, UserData)
  Select UserData
    Case #EnterGadgetEvent
      StatusBarText(0, 0, "Cursor über ImageGadget: JA")
    Case #LeaveGadgetEvent
      StatusBarText(0, 0, "Cursor über ImageGadget: NEIN")
  EndSelect
EndProcedure

OpenWindow(0, 0, 0, 227, 227, "ImageGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ContainerGadget(0, 50, 40, 127, 127, #PB_Container_BorderLess)   
ImageGadget(1, 0, 0, 127, 127, 0)
CloseGadgetList()

CreateStatusBar(0, WindowID(0))
AddStatusBarField(#PB_Ignore)

If LoadImage(0, #PB_Compiler_Home + "examples/sources/Data/Geebee2.bmp")
  SetGadgetState(1, ImageID(0))
EndIf

gtk_widget_add_events_(GadgetID(0), #GDK_ENTER_NOTIFY_MASK | #GDK_LEAVE_NOTIFY_MASK)
g_signal_connect_data_(GadgetID(0), "enter-notify-event", @GadgetEvent(), #EnterGadgetEvent, 0, 0)
g_signal_connect_data_(GadgetID(0), "leave-notify-event", @GadgetEvent(), #LeaveGadgetEvent, 0, 0) 

Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
In einem ähnlichen Beispiel für Linux im englischen Forum haben Straker und StanDan sogar demonstriert,
wie man das angezeigte Image immer dann austauscht, wenn sich der Cursor über dem Image befindet
(Änderung der Hintergrundfarbe) und wie dieses Image als Schaltfläche genutzt werden kann:
http://www.purebasic.fr/english/viewtop ... 2&start=19

Re: scrollen wie iPad ...?

Verfasst: 26.05.2010 22:11
von PureLust
Mauli hat geschrieben:@PureLust : Stellst Du uns Deine Include zur Verfügung ?? :o
Hierzu nochmal ein kleines Update:

Mit "Anfang der Woche" wird das leider nichts mehr. :D
Da mir die bisherigen Funktionen und auch die Usability nicht ausreichten bin ich gerade dabei das Touch-Control noch stark zu verfeinern.
Bin also noch dran ... Update sowie fertige Include werden also noch folgen. :mrgreen:

@Shardik: Sehr interessante Infos bzw. hilfreicher Link. Danke !!! :allright:

Greetz, PL.

Re: scrollen wie iPad ...?

Verfasst: 19.10.2010 16:56
von Kiffi
PureLust hat geschrieben:Bin also noch dran ... Update sowie fertige Include werden also noch folgen. :mrgreen:
Bild

Grüße ... Kiffi

Re: scrollen wie iPad ...?

Verfasst: 20.10.2010 01:05
von PureLust
Kiffi hat geschrieben: Bild
Uiuiuiiii .... datt hannisch doch glatt janz verjessen. :oops:

Hab das TouchControl aus zeitlichen Gründen bisher leider auch nur in soweit "perfektioniert" wie's für uns hier im Produktionseinsatz nötig war.
Hab noch so einige Verbesserungen und Dinge auf meiner ToDo-Liste und hätte diesbezüglich auch noch mal eine Frage an diejenigen von Euch, die bereits etwas Erfahrung mit Touchdevices haben (also z.B mit Smartphone,s iPad oder Ähnlichem):

Bei meinem TouchControl ist es ja (momentan) so, dass die Liste am Anfang und Ende einfach "hart" aufhört zu scrollen.
Bei Apple-Devices ist es z.B. am Ende eines scrollbaren Bereiches so, dass der Scrollbereich auch noch ein Stück über das Ende der List hinaus scrollt und dann ein "grauer Bereich" sichtbar wird. Anschliessend (bzw. nach dem "Loslassen" des Scrollbereichs) "schnallst" das Ende der Liste dann wie ein Gummiband zurück.
Nun meine Frage an diejenigen die's kennen: Findet Ihr dieses Verhalten intuitiv und meint, dass es die Mühe wert wäre das so auch zu implementieren?

Grüße, PL.

Re: scrollen wie iPad ...?

Verfasst: 20.10.2010 03:24
von NicTheQuick
PureLust hat geschrieben:Nun meine Frage an diejenigen die's kennen: Findet Ihr dieses Verhalten intuitiv und meint, dass es die Mühe wert wäre das so auch zu implementieren?
Ich finde das Verhalten gut, bei meinem Samsung Wave S8500 ist das genau so. Demnach würde ich es gut finden, wenn du das auch so implementieren würdest.

Re: scrollen wie iPad ...?

Verfasst: 20.10.2010 09:14
von dige
Kommt sicher gut!

Re: scrollen wie iPad ...?

Verfasst: 20.10.2010 09:34
von Kiffi
PureLust hat geschrieben:Nun meine Frage an diejenigen die's kennen: Findet Ihr dieses Verhalten intuitiv und meint, dass es die Mühe wert wäre das so auch zu implementieren?
Vollkommen...

... überbewertet
... systembelastend
... unverhältnismäßiger Programmieraufwand
...

Aber auch verdammt cool! 8)

büdde büdde einbauen! :allright:

Grüße ... Kiffi

Re: scrollen wie iPad ...?

Verfasst: 20.10.2010 15:49
von PureLust
Oki-doki, ...

hab mich also mal wieder an's Touch-Control gesetzt (und werde auch die angesprochene, "vollkommen überbewertete und systembelastende" Funktion mit dem Gummibandeffekt, trotz eines "unverhältnismäßig hohen Programmieraufwands" einbauen).
Hauptsache, es ist dann nachher verdammt coooooool !!! :mrgreen:

Nun aber noch mal 'ne kurze Frage bezüglich der Namensgebung der Funktionen:
Den Prozeduren (und auch den Variablen) in meinen Libs setze ich eigentlich immer allen einen Präfix voran (also z.B. WinFX_... , ezPrint_..., ezTAPI_..., ezDebug_..., usw.).
Bei diesem Touch-Control bin ich aber momentan noch mit mir am hadern welchen Präfix ich dafür nehmen soll.

Momentan schwanke ich zwischen folgenden:
TLC_... (TouchListControl - mein derzeitiger Präfix)
TCL_... (TouchControlList)
ITC_... (IntelliTouchControl - ITC klingt meiner Meinung nach am besten <) )

Welche würdet Ihr sagen wäre der sinnvollste Präfix? (Weitere Vorschläge sind natürlich sehr willkommen.)

Bislang habe ich noch keine Libs gemacht, die neue Gadgets zur Verfügung stellen.
Und da man in PB ja leider keine eigenen Gadgets sauber einbinden kann, werde ich wohl nicht umhin kommen für das Touch-Control eigene Funktionen zur Verfügung zu stellen.
Um jedoch möglichst konsistent zu den Gadget-Befehlen von PB zu sein, versuche ich mich bei den Prozedurnamen, deren Parameter und deren Funktion weitestgehend an den bereits für Gadgets bestehenden PB-Derivaten anzulehnen.
In meiner derzeitige Planung würden die Prozeduren wir folgt aussehen:

Code: Alles auswählen

TLC_CreateGadget(#Gadget, x, y, Breite, Hoehe [, Flags [, @TCL_DefaultValues]])
TLC_RemoveGadget(#Gadget)
TLC_AddGadgetItem(#Gadget, Position, Text$ [, ImageID [, Flags]])
TLC_RemoveGadgetItem(#Gadget, Position)
TLC_ResizeGadget(#Gadget, x, y, Breite, Hoehe)

TLC_SetGadgetAttribute(#Gadget, Attribut, Wert)
TLC_GetGadgetAttribute(#Gadget, Attribut)
TLC_SetGadgetColor(#Gadget, FarbTyp, Farbe)
TLC_GetGadgetColor(#Gadget, FarbTyp)
TLC_SetGadgetData(#Gadget, Wert)
TLC_GetGadgetData(#Gadget)
TLC_SetGadgetFont(#Gadget, FontID)
TLC_GetGadgetFont(#Gadget)
TLC_SetGadgetState(#Gadget, Status)
TLC_GetGadgetState(#Gadget)
TLC_SetGadgetText(#Gadget, Text$)
TLC_GetGadgetText(#Gadget)

TLC_SetGadgetItemAttribute(#Gadget, Eintrag, Attribut, Wert)
TLC_GetGadgetItemAttribute(#Gadget, Eintrag, Attribut)
TLC_SetGadgetItemColor(#Gadget, Eintrag, FarbTyp, Farbe)
TLC_GetGadgetItemColor(#Gadget, Eintrag, FarbTyp)
TLC_SetGadgetItemData(#Gadget, Eintrag, Wert)
TLC_GetGadgetItemData(#Gadget, Eintrag)
TLC_SetGadgetItemFont(#Gadget, Eintrag, FontID)
TLC_GetGadgetItemFont(#Gadget, Eintrag)
TLC_SetGadgetItemState(#Gadget, Eintrag, Status)
TLC_GetGadgetItemState(#Gadget, Eintrag)
TLC_SetGadgetItemText(#Gadget, Eintrag, Text$)
TLC_GetGadgetItemText(#Gadget, Eintrag)

TLC_SetDefaultValues(#Gadget, @TCL_DefaultValues)        ; könnte evtl. auch heißen:  TLC_SetDefaultAttributes(#Gadget, @TCL_DefaultAttributes)
TLC_GetDefaultValues(#Gadget, @TCL_DefaultValues)        ; könnte evtl. auch heißen:  TLC_GetDefaultAttributes(#Gadget, @TCL_DefaultAttributes)

TCL_DisableGadgetRedraw(#Gadget, Status)

TLC_WaitWindowEvent([Timeout])
TLC_ExecuteTLCEvent()
Eigentlich könnte man sich ja auch die diversen SetGadget/GetGadget-Funktionen sparen, weil man ja im Grunde durch Angabe der richtigen Attribute bei SetGadgetAttribute() und GetGadgetAttribute() alle anderen Dinge (wie Color, Data, Font & State) setzen bzw. auslesen könnte.
Was würdet Ihr sagen ... aus Kompatibilitätsgründen alle Sets/Gets implementieren, oder der Einfachheit halber alles per SetGadgetAttribute/GetGadgetAttribute und eben den entsprechenden Attributen machen? :roll:

Wenn jemand Lust hat kann er ja mal kurz über oben stehende Funktionen drüber fliegen, ob ggfl. noch irgendwelche Funktionen fehlen oder ob man was anders machen bzw. anders benennen könnte.
Ansonsten wäre ein kurzes Feedback willkommen, ob das so in der Art benutzerfreundlich genug umgesetzt wäre.

Grüße, PL.

Re: scrollen wie iPad ...?

Verfasst: 20.10.2010 21:12
von Syntacks_Error
Sieht wirklich sehr schick aus. Zu den Namen kann ich nichts sagen, aber wäre es vielleicht möglich, so ein Abfedern auch noch (alternativ) für das Scrollrad einzubauen? Eigentlich wäre das ja vielleicht sogar näherliegend als eine Fingergestik über den Mauszeiger zu simulieren. Für "Auf & Ab" gibt gibt es das Rad ja, und es ist intuitiver und einfacher zu bedienen als MaustasteDruecken - MausBewegen- MausTasteLoslassen? Wie auch immer, es ist im jedem Fall eine tolle Erweiterung.

Re: scrollen wie iPad ...?

Verfasst: 20.10.2010 21:25
von Kiffi
Syntacks_Error hat geschrieben:Für "Auf & Ab" gibt gibt es das Rad ja, und es ist intuitiver und einfacher zu bedienen als MaustasteDruecken - MausBewegen- MausTasteLoslassen?
primär soll das Teil ja auch für Touchscreens sein. Und da ist der Finger das intuitivste Eingabegerät ;-)

@PureLust:

Code: Alles auswählen

TLC_AddGadgetItem(#Gadget, Position, Text$ [, ImageID [, Flags]])
nur so als Gedankenanregung:

wie groß wäre der Programmieraufwand für Dich, wenn man Deinem
Touch-Control anstelle eines 'Text-Items' einen Container übergibt?

Dann wäre man in der Gestaltung der Scroll-Items ein wenig flexibler.

Grüße ... Kiffi