Re: prima behavior - blacking out areas...

From: Andy Harrison <aharrison+prima_at_gmail.com>
Date: Fri, 8 Feb 2008 15:49:00 -0500
To: prima <prima_at_prima.eu.org>

On Feb 7, 2008 11:17 AM, Dmitry Karasik <dmitry_at_karasik.eu.org> wrote:
>
> Oh no, then Xdefaults is not involved - cccccc is light gray,
> not black. I don't remember if you compiled Prima from scratch,
> but I'd suggest to recompile, and add debug information in
> apc_gp_clear() and apc_gp_bar(), that are apparently the culprits,
> defined in unix/apc_graphics.c , something like
>
> --- apc_graphics.c 26 Oct 2007 12:20:22 -0000 1.122
> +++ apc_graphics.c 7 Feb 2008 16:15:46 -0000
> @@ -603,6 +603,7 @@
> RANGE4( x1, y1, x2, y2);
> while ( prima_make_brush( XX, mix++))
> XFillRectangle( DISP, XX-> gdrawable, XX-> gc, x1, REVERT( y2), x2 -
> x1 + 1, y2 - y1 + 1);
> + printf("%s.bar: color=%x rop=%d\n", PDrawable(self)->name,
> XX->fore->primary, XX->paint_rop);
> XCHECKPOINT;
> return true;
> }
> @@ -644,6 +645,8 @@
> XSetFillStyle( DISP, XX-> gc, FillSolid);
> XX-> flags. brush_fore = 0;
> XFillRectangle( DISP, XX-> gdrawable, XX-> gc, x1, REVERT( y2), x2 -
> x1 + 1, y2 - y1 + 1);
> +
> + printf("%s.clear: color=%x rop=%d\n", PDrawable(self)->name,
> + XX->fore->secondary, XX->paint_rop);
>
> return true;
> }
>

Ok, I think I got that patch working. I had to change those printf's
a little bit because they didn't work and gave an error about a
problem with two of the '->' parts. (Hopefully I got it right, I'm
absolutely not a c/c++ programmer at all....)

The first one is:

   printf("%s.bar: color=%x rop=%d\n", PDrawable(self)->name,
XX->fore. primary, XX-> paint_rop);

And the second one is:

   printf("%s.clear: color=%x rop=%d\n", PDrawable(self)->name,
XX->fore. secondary, XX-> paint_rop);

I tore out the perl-Prima-1.21 opensuse binary package, fetched the
latest 1.24 from CPAN. I ran the Makefile.PL with:

    perl Makefile.PL WITH_GTK2=1 WANTNOGIFS=1 LIBPATH+=/opt/gnome/lib64

At some point I had to add the LIBPATH+= because I eventually noticed
that even though the correct include path was being picked up, for
some reason it didn't include the correct lib path.

Here is the printf output from my little script...
./firefox-size-form.pl
HintWidget.clear: color=0 rop=0
GaugeSize.bar: color=80 rop=0
GaugeSize.bar: color=0 rop=0
LabelRSS.bar: color=0 rop=0
GaugeRSS.bar: color=80 rop=0
GaugeRSS.bar: color=0 rop=0
Label1.bar: color=0 rop=0
FirefoxForm.clear: color=0 rop=0

Here is the output from running VB...

TabSet.bar: color=0 rop=0
HintWidget.clear: color=0 rop=0
MainPanel1.clear: color=0 rop=0
SpeedButton1.bar: color=cccccc rop=0
SpeedButton2.bar: color=cccccc rop=0
SpeedButton3.bar: color=cccccc rop=0
SpeedButton4.bar: color=cccccc rop=0
TabbedNotebook.bar: color=cccccc rop=0
LeftScroll.bar: color=cccccc rop=0
RightScroll.bar: color=cccccc rop=0
ClassSelector.bar: color=cccccc rop=0
ClassSelector.bar: color=0 rop=2
ClassSelector.bar: color=cccccc rop=3
ClassSelector.bar: color=cccccc rop=0
ClassSelector.bar: color=cccccc rop=0
ClassSelector.bar: color=cccccc rop=0
ClassSelector.bar: color=cccccc rop=0
ClassSelector.bar: color=cccccc rop=0
ClassSelector.bar: color=0 rop=2
ClassSelector.bar: color=cccccc rop=3
ClassSelector.bar: color=cccccc rop=0
ClassSelector.bar: color=cccccc rop=0
ClassSelector.bar: color=0 rop=2
ClassSelector.bar: color=cccccc rop=3
ClassSelector.bar: color=cccccc rop=0
ClassSelector.bar: color=0 rop=2
ClassSelector.bar: color=cccccc rop=3
ClassSelector.bar: color=cccccc rop=0
ClassSelector.bar: color=0 rop=2
ClassSelector.bar: color=cccccc rop=3
ClassSelector.bar: color=cccccc rop=0
ClassSelector.bar: color=0 rop=2
ClassSelector.bar: color=cccccc rop=3
ClassSelector.bar: color=cccccc rop=0
ClassSelector.bar: color=0 rop=2
ClassSelector.bar: color=cccccc rop=3
ClassSelector.bar: color=cccccc rop=0
ClassSelector.bar: color=cccccc rop=0
ClassSelector.bar: color=cccccc rop=0
ClassSelector.bar: color=0 rop=2
ClassSelector.bar: color=cccccc rop=3
ClassSelector.bar: color=cccccc rop=0
ClassSelector.bar: color=cccccc rop=0
ClassSelector.bar: color=cccccc rop=0
ClassSelector.bar: color=0 rop=2
ClassSelector.bar: color=cccccc rop=3
ClassSelector.bar: color=cccccc rop=0
ClassSelector.bar: color=cccccc rop=0
ClassSelector.bar: color=cccccc rop=0
ClassSelector.bar: color=cccccc rop=0
ClassSelector.bar: color=0 rop=2
ClassSelector.bar: color=cccccc rop=3
ClassSelector.bar: color=cccccc rop=0
ClassSelector.bar: color=0 rop=2
ClassSelector.bar: color=cccccc rop=3
ClassSelector.bar: color=cccccc rop=0
ClassSelector.bar: color=0 rop=2
ClassSelector.bar: color=cccccc rop=3
ClassSelector.bar: color=cccccc rop=0
ClassSelector.bar: color=0 rop=2
ClassSelector.bar: color=cccccc rop=3
ClassSelector.bar: color=cccccc rop=0
ClassSelector.bar: color=0 rop=2
ClassSelector.bar: color=cccccc rop=3
ClassSelector.bar: color=cccccc rop=0
ClassSelector.bar: color=0 rop=2
ClassSelector.bar: color=cccccc rop=3
ClassSelector.bar: color=cccccc rop=0
ClassSelector.bar: color=cccccc rop=0
ClassSelector.bar: color=cccccc rop=0
ClassSelector.bar: color=0 rop=2
ClassSelector.bar: color=cccccc rop=3
ClassSelector.bar: color=cccccc rop=0
ClassSelector.bar: color=0 rop=2
ClassSelector.bar: color=cccccc rop=3
ClassSelector.bar: color=cccccc rop=0
ClassSelector.bar: color=0 rop=2
ClassSelector.bar: color=cccccc rop=3
ClassSelector.bar: color=cccccc rop=0
ClassSelector.bar: color=0 rop=2
ClassSelector.bar: color=cccccc rop=3
ClassSelector.bar: color=cccccc rop=0
ClassSelector.bar: color=0 rop=2
ClassSelector.bar: color=cccccc rop=3
ClassSelector.bar: color=cccccc rop=0
ClassSelector.bar: color=0 rop=2
ClassSelector.bar: color=cccccc rop=3
Notebook1.clear: color=0 rop=0
PList.clear: color=0 rop=0
PList.clear: color=0 rop=0
PList.clear: color=0 rop=0
PList.clear: color=0 rop=0
PList.clear: color=0 rop=0
PList.clear: color=0 rop=0
PList.clear: color=0 rop=0
PList.clear: color=0 rop=0
PList.clear: color=0 rop=0
PList.clear: color=0 rop=0
PList.clear: color=0 rop=0
PList.clear: color=0 rop=0
PList.clear: color=0 rop=0
EList.clear: color=0 rop=0
EList.clear: color=0 rop=0
EList.clear: color=0 rop=0
EList.clear: color=0 rop=0
EList.clear: color=0 rop=0
EList.clear: color=0 rop=0
EList.clear: color=0 rop=0
EList.clear: color=0 rop=0
EList.clear: color=0 rop=0
EList.clear: color=0 rop=0
EList.clear: color=0 rop=0
EList.clear: color=0 rop=0
EList.clear: color=0 rop=0
List.clear: color=0 rop=0
List.clear: color=0 rop=0
InputLine.bar: color=cccccc rop=0
InputLine.bar: color=0 rop=0
VScroll.bar: color=cccccc rop=0
VScroll.bar: color=cccccc rop=0
VScroll.bar: color=cccccc rop=0
VScroll.bar: color=cccccc rop=0
VScroll.bar: color=ffffff rop=0
VScroll.bar: color=cccccc rop=0
VScroll.bar: color=cccccc rop=0
VScroll.bar: color=cccccc rop=0
VScroll.bar: color=cccccc rop=0
VScroll.bar: color=ffffff rop=0
NBPanel.bar: color=808080 rop=0
HScroll.bar: color=cccccc rop=0
HScroll.bar: color=cccccc rop=0
HScroll.bar: color=cccccc rop=0
HScroll.bar: color=cccccc rop=0
HScroll.bar: color=ffffff rop=0
HScroll.bar: color=cccccc rop=0
HScroll.bar: color=cccccc rop=0
HScroll.bar: color=cccccc rop=0
HScroll.bar: color=cccccc rop=0
HScroll.bar: color=ffffff rop=0
ObjectInspector1.clear: color=0 rop=0
Button.bar: color=0 rop=0
MTabs.bar: color=cccccc rop=0
Div.bar: color=cccccc rop=0
Panel.clear: color=0 rop=0
Form1.bar: color=80 rop=0
Bone.bar: color=cccccc rop=0
InputLine.bar: color=cccccc rop=0

Here is my little firefox-size-form.pl script.

#!/usr/bin/perl

use strict;
use warnings;

use Prima;
use Prima::Classes;
use Prima::Label;
use Prima::Sliders;

use Proc::ProcessTable;

our $size;
our $rss;

package ps;

sub ps_size_rss {

    #my $FORMAT = "%-6s %-10s %-8s %-27s %s\n";
     my $t = new Proc::ProcessTable;

    #printf( $FORMAT, 'pid', 'size', 'rss', 'start', 'cmndline' );

    for my $p ( @{ $t->table } ) {

        if ( $p->cmndline =~ m/firefox-bin/i ) {
            $size = convert( $p->size );
            $rss = convert( $p->rss );
        }
    }

    return ( $size, $rss );
}

sub get_size {

    my ( $s, $r ) = ps_size_rss();
    return $s;

}

sub get_rss {

    my ( $s, $r ) = ps_size_rss();
    return $r;

}

sub convert {

    my $bytes = shift;
    my $KB = $bytes / 1024;

    return sprintf( '%.1fKB', $KB ) if $KB < 1000;
    return sprintf( '%.1fMB', $KB / 1024 ) if $KB < 1000000;
    return sprintf( '%.1fGB', $KB / 1024 / 1024 ) if $KB < 100000000;

}

package FirefoxFormWindow;
use vars qw(@ISA);
@ISA = qw(Prima::MainWindow);

sub profile_default {
    my $def = $_[0]->SUPER::profile_default;
    my %prf = (
        sizeDontCare => 0,
        origin => [ 979, 657 ],
        name => 'FirefoxForm',
        originDontCare => 0,
        size => [ 182, 51 ],
        designScale => [ 11, 22 ],
    );
    @$def{ keys %prf } = values %prf;
    return $def;
}

sub init {
    my $self = shift;
    my %instances = map { $_ => {} } qw();
    my %profile = $self->SUPER::init(@_);
    my %names = ( q(FirefoxForm) => $self );
    $self->lock;
    $names{GaugeSize} = $names{FirefoxForm}->insert(
        qq(Prima::Gauge) => name => 'GaugeSize',
        origin => [ 76, 28 ],
        font => {
            name => 'Bitstream Vera Sans Mono',
            size => 8,
            style => 0,
            pitch => fp::Default
        },
        size => [ 100, 20 ],
    );
    $names{LabelRSS} = $names{FirefoxForm}->insert(
        qq(Prima::Label) => valignment => ta::Middle,
       #text => 'rss',
        text => ps->get_rss,
        name => 'LabelRSS',
        alignment => ta::Right,
        origin => [ 4, 4 ],
        font => {
            name => 'dejavu sans',
            tabStop => 1,
            size => 9,
            style => 0,
            pitch => fp::Default
        },
        size => [ 68, 20 ],
    );
    $names{GaugeRSS} = $names{FirefoxForm}->insert(
        qq(Prima::Gauge) => name => 'GaugeRSS',
        origin => [ 76, 4 ],
        font => {
            name => 'Bitstream Vera Sans Mono',
            size => 8,
            style => 0,
            pitch => fp::Default
        },
        size => [ 100, 20 ],
    );
    $names{Label1} = $names{FirefoxForm}->insert(
        qq(Prima::Label) => valignment => ta::Middle,
       #text => 'size',
        text => ps->get_size,
        name => 'Label1',
        origin => [ 4, 28 ],
        alignment => ta::Right,
        font => {
            name => 'dejavu sans',
            size => 9,
            style => 0,
            pitch => fp::Default
        },
        size => [ 68, 20 ],
        tabStop => 1,
    );
    $self->unlock;
    return %profile;
}

package FirefoxFormAuto;

use Prima::Application;
FirefoxFormWindow-> create;
run Prima;

And here is the .fm file from when the little form I built with VB.

# VBForm version file=1.2 builder=0.2
# [preload]
sub
{
        return (
        'GaugeSize' => {
                class => 'Prima::Gauge',
                module => 'Prima::Sliders',
                profile => {
                        owner => 'FirefoxForm',
                        name => 'GaugeSize',
                        origin => [ 76, 32],
                        font => {name => 'Bitstream Vera Sans Mono', size => 8, style => 0,
pitch => fp::Default},
                        size => [ 100, 18],
        }},
        'FirefoxForm' => {
                class => 'Prima::Window',
                module => 'Prima::Classes',
                parent => 1,
                code => Prima::VB::VBLoader::GO_SUB(''),
                profile => {
                        sizeDontCare => 0,
                        name => 'FirefoxForm',
                        origin => [ 983, 631],
                        originDontCare => 0,
                        size => [ 182, 51],
        }},
        'LabelRSS' => {
                class => 'Prima::Label',
                module => 'Prima::Label',
                siblings => [qw(focusLink)],
                profile => {
                        owner => 'FirefoxForm',
                        name => 'LabelRSS',
                        origin => [ 4, 4],
                        tabStop => 1,
                        font => {name => 'dejavu sans', size => 9, style => 0, pitch => fp::Default},
                        size => [ 68, 20],
                        valignment => ta::Middle,
                        text => 'rss',
                        alignment => ta::Right,
        }},
        'GaugeRSS' => {
                class => 'Prima::Gauge',
                module => 'Prima::Sliders',
                profile => {
                        owner => 'FirefoxForm',
                        origin => [ 76, 4],
                        name => 'GaugeRSS',
                        font => {name => 'Bitstream Vera Sans Mono', size => 8, style => 0,
pitch => fp::Default},
                        size => [ 100, 20],
        }},
        'Label1' => {
                class => 'Prima::Label',
                module => 'Prima::Label',
                siblings => [qw(focusLink)],
                profile => {
                        owner => 'FirefoxForm',
                        origin => [ 4, 30],
                        name => 'Label1',
                        tabStop => 1,
                        font => {name => 'dejavu sans', size => 9, style => 0, pitch => fp::Default},
                        size => [ 68, 20],
                        valignment => ta::Middle,
                        text => 'size',
                        alignment => ta::Right,
        }},
        );
}

Any other ideas or maybe other information I can provide that might help?

(580)[3:37pm] > rpm -qa 'gtk2*' --queryformat='%-30{NAME}\t%{VERSION}\n' | sort
gtk2 2.10.6
gtk2-32bit 2.10.6
gtk2-devel 2.10.6
gtk2-doc 2.10.6
gtk2-engines 2.8.1
gtk2-engines-32bit 2.8.1
gtk2-themes 0.1

-- 
Andy Harrison
public key: 0x67518262
Received on Fri 08 Feb 2008 - 21:49:07 CET

This archive was generated by hypermail 2.2.0 : Sat 19 Mar 2011 - 18:35:06 CET