Proper Makefiles, MD integration, Cairo
Added Cairo extension methods/classes, organized the project a little more, and added Makefile build support that integrates with the MD projects.
This commit is contained in:
Родитель
2ba270e4c1
Коммит
800dc22a3a
|
@ -16,6 +16,6 @@ Global
|
|||
{3C4985A8-E1D7-4633-8D79-B2816289F777}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(MonoDevelopProperties) = preSolution
|
||||
StartupItem = Maigre\Maigre.csproj
|
||||
StartupItem = libmaigre\libmaigre.cproj
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
|
|
@ -0,0 +1,208 @@
|
|||
//
|
||||
// ColorExtensions.cs
|
||||
//
|
||||
// Author:
|
||||
// Aaron Bockover <abockover@novell.com>
|
||||
//
|
||||
// Copyright 2010 Novell, Inc.
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
using System;
|
||||
|
||||
namespace Cairo
|
||||
{
|
||||
public static class ColorExtensions
|
||||
{
|
||||
public static Cairo.Color ToCairoColor (this Gdk.Color color)
|
||||
{
|
||||
return ToCairoColor (color, 1.0);
|
||||
}
|
||||
|
||||
public static Cairo.Color ToCairoColor (this Gdk.Color color, double alpha)
|
||||
{
|
||||
return new Cairo.Color (
|
||||
(double)(color.Red >> 8) / 255.0,
|
||||
(double)(color.Green >> 8) / 255.0,
|
||||
(double)(color.Blue >> 8) / 255.0,
|
||||
alpha);
|
||||
}
|
||||
|
||||
public static Cairo.Color AlphaBlend (this Cairo.Color ca, Cairo.Color cb, double alpha)
|
||||
{
|
||||
return new Cairo.Color (
|
||||
(1.0 - alpha) * ca.R + alpha * cb.R,
|
||||
(1.0 - alpha) * ca.G + alpha * cb.G,
|
||||
(1.0 - alpha) * ca.B + alpha * cb.B);
|
||||
}
|
||||
|
||||
public static Cairo.Color FromRgb (uint rgbColor)
|
||||
{
|
||||
return FromRgba ((rgbColor << 8) | 0x000000ff);
|
||||
}
|
||||
|
||||
public static Cairo.Color FromRgba (uint rgbaColor)
|
||||
{
|
||||
return new Cairo.Color (
|
||||
(byte)(rgbaColor >> 24) / 255.0,
|
||||
(byte)(rgbaColor >> 16) / 255.0,
|
||||
(byte)(rgbaColor >> 8) / 255.0,
|
||||
(byte)(rgbaColor & 0x000000ff) / 255.0);
|
||||
}
|
||||
|
||||
public static bool ColorIsDark (this Cairo.Color color)
|
||||
{
|
||||
double h, s, b;
|
||||
ToHsb (color, out h, out s, out b);
|
||||
return b < 0.5;
|
||||
}
|
||||
|
||||
public static void ToHsb (this Cairo.Color color, out double hue,
|
||||
out double saturation, out double brightness)
|
||||
{
|
||||
double min, max, delta;
|
||||
double red = color.R;
|
||||
double green = color.G;
|
||||
double blue = color.B;
|
||||
|
||||
hue = 0;
|
||||
saturation = 0;
|
||||
brightness = 0;
|
||||
|
||||
if (red > green) {
|
||||
max = Math.Max (red, blue);
|
||||
min = Math.Min (green, blue);
|
||||
} else {
|
||||
max = Math.Max (green, blue);
|
||||
min = Math.Min (red, blue);
|
||||
}
|
||||
|
||||
brightness = (max + min) / 2;
|
||||
|
||||
if (Math.Abs (max - min) < 0.0001) {
|
||||
hue = 0;
|
||||
saturation = 0;
|
||||
} else {
|
||||
saturation = brightness <= 0.5
|
||||
? (max - min) / (max + min)
|
||||
: (max - min) / (2 - max - min);
|
||||
|
||||
delta = max - min;
|
||||
|
||||
if (red == max) {
|
||||
hue = (green - blue) / delta;
|
||||
} else if (green == max) {
|
||||
hue = 2 + (blue - red) / delta;
|
||||
} else if (blue == max) {
|
||||
hue = 4 + (red - green) / delta;
|
||||
}
|
||||
|
||||
hue *= 60;
|
||||
if (hue < 0) {
|
||||
hue += 360;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static double Modula (double number, double divisor)
|
||||
{
|
||||
return ((int)number % divisor) + (number - (int)number);
|
||||
}
|
||||
|
||||
public static Cairo.Color FromHsb (double hue, double saturation, double brightness)
|
||||
{
|
||||
int i;
|
||||
double [] hue_shift = { 0, 0, 0 };
|
||||
double [] color_shift = { 0, 0, 0 };
|
||||
double m1, m2, m3;
|
||||
|
||||
m2 = brightness <= 0.5
|
||||
? brightness * (1 + saturation)
|
||||
: brightness + saturation - brightness * saturation;
|
||||
|
||||
m1 = 2 * brightness - m2;
|
||||
|
||||
hue_shift[0] = hue + 120;
|
||||
hue_shift[1] = hue;
|
||||
hue_shift[2] = hue - 120;
|
||||
|
||||
color_shift[0] = color_shift[1] = color_shift[2] = brightness;
|
||||
|
||||
i = saturation == 0 ? 3 : 0;
|
||||
|
||||
for (; i < 3; i++) {
|
||||
m3 = hue_shift[i];
|
||||
|
||||
if (m3 > 360) {
|
||||
m3 = Modula (m3, 360);
|
||||
} else if(m3 < 0) {
|
||||
m3 = 360 - Modula (Math.Abs (m3), 360);
|
||||
}
|
||||
|
||||
if (m3 < 60) {
|
||||
color_shift[i] = m1 + (m2 - m1) * m3 / 60;
|
||||
} else if (m3 < 180) {
|
||||
color_shift[i] = m2;
|
||||
} else if (m3 < 240) {
|
||||
color_shift[i] = m1 + (m2 - m1) * (240 - m3) / 60;
|
||||
} else {
|
||||
color_shift[i] = m1;
|
||||
}
|
||||
}
|
||||
|
||||
return new Cairo.Color (color_shift[0], color_shift[1], color_shift[2]);
|
||||
}
|
||||
|
||||
public static Cairo.Color Shade (this Cairo.Color @base, double ratio)
|
||||
{
|
||||
double h, s, b;
|
||||
|
||||
ToHsb (@base, out h, out s, out b);
|
||||
|
||||
b = Math.Max (Math.Min (b * ratio, 1), 0);
|
||||
s = Math.Max (Math.Min (s * ratio, 1), 0);
|
||||
|
||||
var color = FromHsb (h, s, b);
|
||||
color.A = @base.A;
|
||||
return color;
|
||||
}
|
||||
|
||||
public static Cairo.Color AdjustBrightness (this Cairo.Color @base, double br)
|
||||
{
|
||||
double h, s, b;
|
||||
ToHsb (@base, out h, out s, out b);
|
||||
b = Math.Max (Math.Min (br, 1), 0);
|
||||
return FromHsb (h, s, b);
|
||||
}
|
||||
|
||||
public static string GetHexString (this Cairo.Color color, bool withAlpha)
|
||||
{
|
||||
return withAlpha
|
||||
? String.Format ("#{0:x2}{1:x2}{2:x2}{3:x2}",
|
||||
(byte)(color.R * 255),
|
||||
(byte)(color.G * 255),
|
||||
(byte)(color.B * 255),
|
||||
(byte)(color.A * 255))
|
||||
: String.Format ("#{0:x2}{1:x2}{2:x2}",
|
||||
(byte)(color.R * 255),
|
||||
(byte)(color.G * 255),
|
||||
(byte)(color.B * 255));
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,142 @@
|
|||
//
|
||||
// Style.cs
|
||||
//
|
||||
// Author:
|
||||
// Aaron Bockover <abockover@novell.com>
|
||||
//
|
||||
// Copyright 2007-2010 Novell, Inc.
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
using System;
|
||||
|
||||
namespace Cairo
|
||||
{
|
||||
public static class ContextExtensions
|
||||
{
|
||||
/*public static Pango.Layout CreateCairoLayout (Gtk.Widget widget, Cairo.Context cairo_context)
|
||||
{
|
||||
var layout = PangoCairoHelper.CreateLayout (cairo_context);
|
||||
layout.FontDescription = widget.PangoContext.FontDescription;
|
||||
|
||||
double resolution = widget.Screen.Resolution;
|
||||
if (resolution != -1) {
|
||||
using (var context = PangoCairoHelper.LayoutGetContext (layout)) {
|
||||
PangoCairoHelper.ContextSetResolution (context, resolution);
|
||||
}
|
||||
}
|
||||
|
||||
return layout;
|
||||
}*/
|
||||
|
||||
public static Surface CreateSurfaceForPixbuf (this Cairo.Context cr, Gdk.Pixbuf pixbuf)
|
||||
{
|
||||
var surface = cr.Target.CreateSimilar (cr.Target.Content, pixbuf.Width, pixbuf.Height);
|
||||
using (var surface_cr = new Context (surface)) {
|
||||
Gdk.CairoHelper.SetSourcePixbuf (surface_cr, pixbuf, 0, 0);
|
||||
surface_cr.Paint ();
|
||||
return surface;
|
||||
}
|
||||
}
|
||||
|
||||
public static void RoundedRectangle (this Cairo.Context cr,
|
||||
double x, double y, double w, double h, double r)
|
||||
{
|
||||
RoundedRectangle (cr, x, y, w, h, r, Corner.All, false);
|
||||
}
|
||||
|
||||
public static void RoundedRectangle (this Cairo.Context cr,
|
||||
double x, double y, double w, double h,
|
||||
double r, Corner corners)
|
||||
{
|
||||
RoundedRectangle (cr, x, y, w, h, r, corners, false);
|
||||
}
|
||||
|
||||
public static void RoundedRectangle (this Cairo.Context cr,
|
||||
double x, double y, double w, double h,
|
||||
double r, Corner corners, bool topBottomFallsThrough)
|
||||
{
|
||||
if (topBottomFallsThrough && corners == Corner.None) {
|
||||
cr.MoveTo (x, y - r);
|
||||
cr.LineTo (x, y + h + r);
|
||||
cr.MoveTo (x + w, y - r);
|
||||
cr.LineTo (x + w, y + h + r);
|
||||
return;
|
||||
} else if (r < 0.0001 || corners == Corner.None) {
|
||||
cr.Rectangle (x, y, w, h);
|
||||
return;
|
||||
}
|
||||
|
||||
if ((corners & (Corner.TopLeft | Corner.TopRight)) == 0 && topBottomFallsThrough) {
|
||||
y -= r;
|
||||
h += r;
|
||||
cr.MoveTo (x + w, y);
|
||||
} else {
|
||||
if ((corners & Corner.TopLeft) != 0) {
|
||||
cr.MoveTo (x + r, y);
|
||||
} else {
|
||||
cr.MoveTo (x, y);
|
||||
}
|
||||
|
||||
if ((corners & Corner.TopRight) != 0) {
|
||||
cr.Arc (x + w - r, y + r, r, Math.PI * 1.5, Math.PI * 2);
|
||||
} else {
|
||||
cr.LineTo (x + w, y);
|
||||
}
|
||||
}
|
||||
|
||||
if ((corners & (Corner.BottomLeft | Corner.BottomRight)) == 0 && topBottomFallsThrough) {
|
||||
h += r;
|
||||
cr.LineTo (x + w, y + h);
|
||||
cr.MoveTo (x, y + h);
|
||||
cr.LineTo (x, y + r);
|
||||
cr.Arc (x + r, y + r, r, Math.PI, Math.PI * 1.5);
|
||||
} else {
|
||||
if ((corners & Corner.BottomRight) != 0) {
|
||||
cr.Arc (x + w - r, y + h - r, r, 0, Math.PI * 0.5);
|
||||
} else {
|
||||
cr.LineTo (x + w, y + h);
|
||||
}
|
||||
|
||||
if ((corners & Corner.BottomLeft) != 0) {
|
||||
cr .Arc(x + r, y + h - r, r, Math.PI * 0.5, Math.PI);
|
||||
} else {
|
||||
cr.LineTo (x, y + h);
|
||||
}
|
||||
|
||||
if ((corners & Corner.TopLeft) != 0) {
|
||||
cr.Arc (x + r, y + r, r, Math.PI, Math.PI * 1.5);
|
||||
} else {
|
||||
cr.LineTo (x, y);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void DisposeSelfAndTarget (this Cairo.Context cr)
|
||||
{
|
||||
((IDisposable)cr.Target).Dispose ();
|
||||
((IDisposable)cr).Dispose ();
|
||||
}
|
||||
|
||||
public static void SetColor (this Cairo.Context cr, Gdk.Color color)
|
||||
{
|
||||
cr.Color = color.ToCairoColor ();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,41 @@
|
|||
//
|
||||
// Corner.cs
|
||||
//
|
||||
// Author:
|
||||
// Aaron Bockover <abockover@novell.com>
|
||||
//
|
||||
// Copyright 2010 Novell, Inc.
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
using System;
|
||||
|
||||
namespace Cairo
|
||||
{
|
||||
[Flags]
|
||||
public enum Corner
|
||||
{
|
||||
None = 0,
|
||||
TopLeft = 1,
|
||||
TopRight = 2,
|
||||
BottomLeft = 4,
|
||||
BottomRight = 8,
|
||||
All = 15
|
||||
}
|
||||
}
|
|
@ -15,7 +15,7 @@
|
|||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>..\engines</OutputPath>
|
||||
<OutputPath>.</OutputPath>
|
||||
<DefineConstants>DEBUG</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
|
@ -33,13 +33,37 @@
|
|||
</PropertyGroup>
|
||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||
<ItemGroup>
|
||||
<Compile Include="Theme.cs" />
|
||||
<Compile Include="Cairo\Corner.cs" />
|
||||
<Compile Include="Cairo\ColorExtensions.cs" />
|
||||
<Compile Include="Cairo\ContextExtensions.cs" />
|
||||
<Compile Include="Maigre\Theme.cs" />
|
||||
<Compile Include="Maigre\DrawContext.cs" />
|
||||
</ItemGroup>
|
||||
<ProjectExtensions>
|
||||
<MonoDevelop>
|
||||
<Properties>
|
||||
<MonoDevelop.Autotools.MakefileInfo IntegrationEnabled="true" RelativeMakefileName="Makefile" BuildTargetName="" CleanTargetName="" SyncReferences="true">
|
||||
<BuildFilesVar Sync="true" Name="MAIGRE_SOURCES" />
|
||||
<DeployFilesVar />
|
||||
<ResourcesVar />
|
||||
<OthersVar Sync="true" Name="MAIGRE_OTHER" />
|
||||
<GacRefVar Sync="true" Name="REFERENCES" />
|
||||
<AsmRefVar Sync="true" Name="REFERENCES" />
|
||||
<ProjectRefVar Sync="true" Name="REFERENCES" />
|
||||
</MonoDevelop.Autotools.MakefileInfo>
|
||||
</Properties>
|
||||
</MonoDevelop>
|
||||
</ProjectExtensions>
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="gtk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
|
||||
<Reference Include="gdk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
|
||||
<Reference Include="Mono.Cairo" />
|
||||
<Reference Include="glib-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
|
||||
<Reference Include="pango-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
|
||||
<Reference Include="atk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="gtkrc" />
|
||||
</ItemGroup>
|
||||
</Project>
|
|
@ -1,5 +1,5 @@
|
|||
//
|
||||
// Style.cs
|
||||
// DrawContext.cs
|
||||
//
|
||||
// Author:
|
||||
// Aaron Bockover <abockover@novell.com>
|
||||
|
@ -25,9 +25,6 @@
|
|||
// THE SOFTWARE.
|
||||
|
||||
using System;
|
||||
using Gtk;
|
||||
using Gdk;
|
||||
using Cairo;
|
||||
|
||||
namespace Maigre
|
||||
{
|
||||
|
@ -36,8 +33,8 @@ namespace Maigre
|
|||
public string Method { get; private set; }
|
||||
public Gtk.Style Style { get; private set; }
|
||||
public Gdk.Window Window { get; private set; }
|
||||
public Gtk.StateType StateType { get; private set; }
|
||||
public Gtk.ShadowType ShadowType { get; private set; }
|
||||
public Gtk.StateType State { get; private set; }
|
||||
public Gtk.ShadowType Shadow { get; private set; }
|
||||
public Gdk.Rectangle Area { get; private set; }
|
||||
public Gtk.Widget Widget { get; private set; }
|
||||
public string Detail { get; private set; }
|
||||
|
@ -56,19 +53,6 @@ namespace Maigre
|
|||
public int Y1 { get; private set; }
|
||||
public int Y2 { get; private set; }
|
||||
public bool Fill { get; private set; }
|
||||
public Gtk.ArrowType ArrowType { get; private set; }
|
||||
}
|
||||
|
||||
public static class Theme
|
||||
{
|
||||
public static void DrawBox (DrawContext context)
|
||||
{
|
||||
Console.WriteLine ("{0}:{1} ({2})", context.Method, context.Detail, context.Area);
|
||||
using (var cr = Gdk.CairoHelper.Create (context.Window)) {
|
||||
cr.Color = new Cairo.Color (0, 1, 1);
|
||||
cr.Rectangle (context.X, context.Y, context.Width, context.Height);
|
||||
cr.Fill ();
|
||||
}
|
||||
}
|
||||
public Gtk.ArrowType Arrow { get; private set; }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,47 @@
|
|||
//
|
||||
// Style.cs
|
||||
//
|
||||
// Author:
|
||||
// Aaron Bockover <abockover@novell.com>
|
||||
//
|
||||
// Copyright 2010 Novell, Inc.
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
using System;
|
||||
using Cairo;
|
||||
|
||||
namespace Maigre
|
||||
{
|
||||
public static class Theme
|
||||
{
|
||||
public static void DrawBox (DrawContext ctx)
|
||||
{
|
||||
using (var cr = Gdk.CairoHelper.Create (ctx.Window)) {
|
||||
switch (ctx.Detail) {
|
||||
case "button":
|
||||
cr.RoundedRectangle (ctx.X, ctx.Y, ctx.Width, ctx.Height, 3);
|
||||
cr.SetColor (ctx.Widget.Style.Background (ctx.State));
|
||||
cr.Fill ();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
MAIGRE_SOURCES = \
|
||||
Cairo/ColorExtensions.cs \
|
||||
Cairo/ContextExtensions.cs \
|
||||
Cairo/Corner.cs \
|
||||
Maigre/DrawContext.cs \
|
||||
Maigre/Theme.cs
|
||||
|
||||
MAIGRE_OTHER = gtkrc
|
||||
|
||||
REFERENCES = \
|
||||
Mono.Cairo \
|
||||
-pkg:gtk-sharp-2.0 \
|
||||
System \
|
||||
System.Core
|
||||
|
||||
REFERENCES_BUILD = \
|
||||
$(filter -pkg:%, $(REFERENCES)) \
|
||||
$(foreach r, $(filter-out -pkg:%, $(REFERENCES)), -r:$(r))
|
||||
|
||||
Maigre.dll: $(MAIGRE_SOURCES)
|
||||
gmcs -out:$@ -target:library -debug $(REFERENCES_BUILD) $(MAIGRE_SOURCES)
|
||||
|
||||
clean:
|
||||
rm -rf Maigre.dll* obj/
|
16
Makefile
16
Makefile
|
@ -1,7 +1,15 @@
|
|||
all:
|
||||
$(MAKE) -C libmaigre
|
||||
$(MAKE) -C Maigre
|
||||
|
||||
clean:
|
||||
rm -rf engines
|
||||
rm -rf Maigre.dll*
|
||||
$(MAKE) -C libmaigre clean
|
||||
$(MAKE) -C Maigre clean
|
||||
rm -rf lib
|
||||
|
||||
test:
|
||||
cp engines/Maigre.dll* .
|
||||
GTK_PATH=$$PWD GTK2_RC_FILES=maigre.gtkrc gtk-demo
|
||||
rm -rf lib
|
||||
mkdir -p lib/engines
|
||||
cp Maigre/gtkrc lib
|
||||
cp libmaigre/libmaigre.so Maigre/Maigre.dll lib/engines
|
||||
GTK_PATH=$$PWD/lib GTK2_RC_FILES=lib/gtkrc gtk-demo
|
||||
|
|
|
@ -0,0 +1,46 @@
|
|||
LIBMAIGRE_SOURCES = \
|
||||
maigre-mono-bridge.c \
|
||||
maigre-rc-style.c \
|
||||
maigre-style.c \
|
||||
maigre-theme-module.c
|
||||
|
||||
LIBMAIGRE_OTHER = \
|
||||
maigre-gtk-style-generator \
|
||||
maigre-mono-bridge.h \
|
||||
maigre-rc-style.h \
|
||||
maigre-style.h
|
||||
|
||||
PC_DEPS = \
|
||||
mono \
|
||||
gtk+-2.0
|
||||
|
||||
CC = gcc
|
||||
|
||||
LIBMAIGRE_CFLAGS = \
|
||||
-Wall -O2 -ggdb3 \
|
||||
$(shell pkg-config --cflags $(PC_DEPS)) \
|
||||
$(CFLAGS)
|
||||
|
||||
LIBMAIGRE_LDFLAGS = \
|
||||
-shared \
|
||||
$(shell pkg-config --libs $(PC_DEPS)) \
|
||||
$(LDFLAGS)
|
||||
|
||||
LIBMAIGRE_OBJECTS = $(LIBMAIGRE_SOURCES:.c=.o)
|
||||
|
||||
all: libmaigre.so
|
||||
|
||||
libmaigre.so: maigre-style-overrides.c $(LIBMAIGRE_OBJECTS)
|
||||
$(CC) $(LIBMAIGRE_LDFLAGS) $(LIBMAIGRE_OBJECTS) -o $@
|
||||
|
||||
.c.o:
|
||||
$(CC) -c $(LIBMAIGRE_CFLAGS) $< -o $@
|
||||
|
||||
maigre-style-overrides.c: maigre-gtk-style-generator
|
||||
./$<
|
||||
|
||||
clean:
|
||||
rm -rf $(LIBMAIGRE_OBJECTS) libmaigre.so maigre-style-overrides.c
|
||||
|
||||
test:
|
||||
$(MAKE) -C .. test
|
|
@ -11,12 +11,6 @@
|
|||
<Compiler>
|
||||
<Compiler ctype="GccCompiler" />
|
||||
</Compiler>
|
||||
<Packages>
|
||||
<Packages>
|
||||
<Package file="/usr/lib/pkgconfig/mono.pc" name="Mono" IsProject="false" />
|
||||
<Package file="/usr/lib/pkgconfig/gtk+-2.0.pc" name="GTK+" IsProject="false" />
|
||||
</Packages>
|
||||
</Packages>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
|
@ -55,4 +49,19 @@
|
|||
<None Include="maigre-mono-bridge.h" />
|
||||
<None Include="maigre-gtk-style-generator" />
|
||||
</ItemGroup>
|
||||
<ProjectExtensions>
|
||||
<MonoDevelop>
|
||||
<Properties>
|
||||
<MonoDevelop.Autotools.MakefileInfo IntegrationEnabled="true" RelativeMakefileName="Makefile" ExecuteTargetName="test" ParallelProcesses="2">
|
||||
<BuildFilesVar Sync="true" Name="LIBMAIGRE_SOURCES" />
|
||||
<DeployFilesVar />
|
||||
<ResourcesVar />
|
||||
<OthersVar Sync="true" Name="LIBMAIGRE_OTHER" />
|
||||
<GacRefVar />
|
||||
<AsmRefVar />
|
||||
<ProjectRefVar />
|
||||
</MonoDevelop.Autotools.MakefileInfo>
|
||||
</Properties>
|
||||
</MonoDevelop>
|
||||
</ProjectExtensions>
|
||||
</Project>
|
|
@ -80,8 +80,8 @@ maigre_mono_bridge_load_draw_context (MaigreMonoBridge *bridge)
|
|||
"<Method>k__BackingField",
|
||||
"<Style>k__BackingField",
|
||||
"<Window>k__BackingField",
|
||||
"<StateType>k__BackingField",
|
||||
"<ShadowType>k__BackingField",
|
||||
"<State>k__BackingField",
|
||||
"<Shadow>k__BackingField",
|
||||
"<Area>k__BackingField",
|
||||
"<Widget>k__BackingField",
|
||||
"<Detail>k__BackingField",
|
||||
|
@ -100,7 +100,7 @@ maigre_mono_bridge_load_draw_context (MaigreMonoBridge *bridge)
|
|||
"<Y1>k__BackingField",
|
||||
"<Y2>k__BackingField",
|
||||
"<Fill>k__BackingField",
|
||||
"<ArrowType>k__BackingField",
|
||||
"<Arrow>k__BackingField",
|
||||
NULL
|
||||
};
|
||||
|
||||
|
@ -131,6 +131,8 @@ maigre_mono_bridge ()
|
|||
{
|
||||
static MaigreMonoBridge *bridge;
|
||||
|
||||
gchar *path;
|
||||
|
||||
if (bridge != NULL) {
|
||||
return bridge;
|
||||
}
|
||||
|
@ -145,11 +147,11 @@ maigre_mono_bridge ()
|
|||
|
||||
if (bridge->domain == NULL) {
|
||||
mono_config_parse (NULL);
|
||||
bridge->domain = mono_jit_init ("Maigre.dll");
|
||||
bridge->domain = mono_jit_init ("lib/engines/Maigre.dll");
|
||||
}
|
||||
|
||||
if ((bridge->assembly = mono_domain_assembly_open (
|
||||
bridge->domain, "Maigre.dll")) == NULL ||
|
||||
bridge->domain, "lib/engines/Maigre.dll")) == NULL ||
|
||||
(bridge->image = mono_assembly_get_image (bridge->assembly)) == NULL) {
|
||||
g_warning ("Could not load Maigre.dll assembly");
|
||||
return bridge;
|
||||
|
|
Загрузка…
Ссылка в новой задаче