[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]
Re: compare GdkModifierType
- From: Gus Koppel <gtk spamkiller bytechase cx>
- To: gtk-app-devel-list gnome org
- Subject: Re: compare GdkModifierType
- Date: Wed, 3 Dec 2003 13:13:48 +0100
Robert Schulze wrote:
> I read the state from the device with gdk_device_get_state and safe it
> at state And now, I won't compare the state.
> I read at the Gdk Reference:
> GDK_Button1_MASK = 1 << 8;
> GDK_Button2_MASK = 1 << 9;
> ...
> If I print the state as a int the Button1 is 1040. Why not 8?
Note the "<<" operator which is not the "=" operator. It's a binary
shift to the left. "1 << 8" is the same as "2*2*2*2*2*2*2*2". This is
256 in decimal, 0x100 in hexadecimal or 1 0000 0000 in binary.
> If I won't compare it with state == GDK_BUTTON1_MASK it doesn't work.
> Why? ==== CODE ===
> GdkModifierType state;
> insigned int count = 0;
> ...
> gdk_device_get_state(dev, win, NULL, &state);
> if(state == GDK_BUTTON1_MASK) ++count;
You must not use a simple "==" comparison for multi-flag variables. In
those variables you are not interested in the value of the variable as a
whole but rather in the state of single (sometimes multiple) bits. You
need to address (or mask) the bits you want to query. In your case a
simple change of the operator would do:
if (state & GDK_BUTTON1_MASK) ++count;
Understanding this is essential, not only for GTK+ programming. Thus
it's actually not a GTK-specific issue. Thorough explanation of
statements / operators like those is a matter of your C tutorial.
And by the way, don't mistake the "&&" for the "&" operator. The first
one is a binary operator while the second one is a logical operator. To
test arbitrary bits you'll always want to use the binary operator. Print
out expressions like "255 & 8" and "255 && 8" and vary the numbers to
get a better understanding of the difference between logical and binary
operators. The same is true for "|" and "||".
[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]